入门用户的网站服务器安全技巧

news/2024/4/27 19:00:11/文章来源:https://blog.csdn.net/weixin_34262482/article/details/89438394

网站服务器不被攻击是不可能的事,世界上的黑客无时无刻不在惦记着你的服务器,用它来转发攻击、作为肉鸡、甚至用来挖比特币。你或许觉得服务器的安全并没有想的那么严重,谁会在乎你的小站呢?话虽如此,对于黑客而言,只需要用自己的程序自动去扫描完成所有入侵即可,黑客自己或许都不清楚自己到底入侵了多少台服务器。

作为网站的创办者,如何连起码的服务器安全意识都没有,那么当大难来临时,或许只有捶胸顿足。本文简单的讲一些我所遇到的想到的安全策略,以供参考。

登陆安全策略

黑客的90%对服务器的攻击,都是通过尝试破解服务器的登陆账号而实现的。由于我们很多人缺乏经验,所以在购买云服务器之后,往往按照网上的一些教程,搭建起web环境,然后就开始把重点放在web的开发和管理上,而直接无视服务器本身的安全问题。如何换位思考,你作为黑客,如果想搞一个网站,最狠的方法是什么?就是获取该网站所在服务器的登陆账号及密码,登陆之后,把该服务器上的网站代码删掉,数据删掉。所以,保护你的登陆信息至关重要。

创建非root管理员用户

一个系统中只有一个root,但是其他用户却可以随意创建。如果你创建了一个其他用户用来作为管理,而禁用了root,你的系统就会瞬间增加10倍以上的安全系数。因为你所创建的管理员用户名,黑客就很难猜到。你可以用你的名字或昵称作为管理员账号,黑客如何不知道这个账号,就无法登陆到你的服务器干坏事了。

首先,创建非管理员用户及用户组。

groupadd webmaster
user add -g webmaster administrator

这样,创建了一个webmaster用户组,在这个组中,增加了一个administrator用户。

其次,在sshd的配置文件中修改ssh登陆权限。

vi /etc/ssh/sshd_config

找到PermitRootLogin,将它的值修改为no。这样就禁止了root通过ssh登陆。但是,我们还要再做一个限制,就是找到(如果没有,增加一行)AllowUsers,修改为如下:

AllowUsers administrator

AllowUsers配置项表示,仅运行后面配置的这些用户通过ssh登陆。一旦设置了这个项,其他所有用户都无法通过ssh登陆了,这是我们想要的。

重启sshd服务。

service sshd restart

这样,你的服务器仅允许administrator登陆了。等一下,是不是漏了什么?我CAO,administrator的密码没有设置啊!不要慌,sshd重启之后,当前你还是root用户,你还是可以给这个用户设置密码的。不过接着往下读,你会发现好玩的事。

使用SSH密钥登陆

在《使用SSH证书远程登陆你的服务器》一文中,我大致讲到了使用ssh密钥登陆的过程。不过,本文讲的更简洁好用。前面不是已经提到了,你没有给administrator设置密码吗?如果你使用ssh密钥登陆,就不需要密码了。注意,你当前在服务器上操作的,还是root用户,千万不要退出来,否则你就悲剧了!读罢上面我提到这篇文章,我想你应该懂了了ssh登陆的原理。我们这篇文章就不讲了,直接上操作方法。

首先,生成ssh密钥对。使用ssh-keygen命令即可。如果你本地不是linux系统,那么直接在服务器上面操作也行,我们需要的,是这个密钥对,系统无所谓。

cd ~
ssh-keygen

接下来会让你输入密码。这一点我在上面那篇文章没有讲到。这个密码是用来认证当前密钥是不是你的,是客户端系统干的事情。在详细解释一下:当你准备使用ssh密钥登陆服务器的时候,如果这个密码没有设置,会直接登陆到服务器上,这样很方便。但是如果一旦你的私钥(本地电脑上的)被盗,那么黑客只需要使用这个私钥,直接就可以连到你的服务器上面。那么怎么办呢?ssh在使用你的私钥之前,再对你的身份进行验证,也就是对私钥再进行加密。一旦加密后,你下次再使用ssh登陆服务器时,会让你输入你对私钥进行加密时的密码,而这个密码验证是在你本地电脑上完成的,速度更快,密码也不用在网络上传播,当然也就更安全。说了这么多,我的目的就是让你设置这个私钥。

设置好私钥之后,系统会自动创建一个.ssh目录。

cd .ssh
ls

可以看到有id_rsa和 id_rsa.pub两个文件,第一个是私钥,第二个是公钥,公钥可以公开给任何人看。如果你是在服务器上生成的这两个文件,把它们下载下来。如果不知道怎么下载,直接用vi打开它的内容,在你自己的电脑上建立两个文件名相同的文件,把里面的内容拷贝过来就可以了。一旦得到这两个文件,就在服务器上把它们删掉。

如果你本地是linux系统,把这两个文件放到你当前家目录的.ssh文件夹下面。在服务器上继续操作。

因为你是希望administrator这个用户登陆上去,所以要把id_rsa.pub这个文件上传到administrator用户的家目录下的认证文件夹中,或者直接用vi来创建也可以。

vi /home/administrator/.ssh/authorized_keys

把id_rsa.pub文件的内容拷贝进去,保存退出。

完成上面的操作之后,你就可以实现:1.禁止root通过ssh登陆服务器;2.通过ssh密钥以administrator的身份登陆服务器。在本地测试一下吧:

ssh administrator@192.168.1.111

输入刚才给密钥加密时用的密码。看看是否已经登陆服务器了呢?登陆到服务器上,要善于使用sudo命令哦。你所要保管好的,就是你的私钥,如果你想装逼,用一个只有可读权限的U盘把私钥和公钥装起来,再装一个putty,走到哪儿都不用怕了,U盘一插,很快就能连上服务器。如果你把你的私钥弄丢了,那你就完全悲剧了。所以,私钥还是使用多种比较安全的方式进行备份吧。

访问安全策略

除了让黑客猜不到你的管理员登陆信息之外,修改你的服务器对外提供访问的端口,也是一个安全策略。而这个安全,需要用到防火墙,通过防火墙来控制哪些端口是对外可以访问的,哪些端口是仅对局域网可以访问的,哪些端口是只有本机可以访问的。linux中最常用的防火墙软件就是iptables,我们这里就通过iptables作为防火墙案例进行实操。

iptables的配置规则

关于iptables,这里有一篇参考文献,可以去了解。我们这里简单的对iptables的配置进行介绍,以完成我们本文要实现的访问安全控制。

首先,我们打开iptables的配置文件:vi /etc/sysconfig/iptables,可以先大概了解一些规则的格式。

我们必须要理解iptables中的一个些概念。一个请求指令(术语称为“数据包”),从客户端发出,进入服务器,在服务器中流动,再从服务器流出,服务器在接受到这个指令那一刻开始,就会对它进行监测,并设置了几个重要的关卡,在这些关卡(术语称为“链”)上,就可以对该指令进行拦截、放行或修改。这些关卡包括(按时间顺序):PREROUTING(路由器)、INPUT(进入)、FORWARD(转发)、OUTPUT(流出、服务器去访问外网时)、POSTROUTING(路由后、服务器去访问外网时)。实际上,一个指令流动不一定非得经过这些关卡,大部分情况下不需要经过两个路由关卡,当我们的服务器作为代理服务器的时候,就会要经过路由关卡来处理数据。

我们举一个例子来说明一个指令的情况:在自己的电脑上ping服务器和在服务器上ping自己的电脑。

当我们ping服务器的时候,指令由我们客户端发出,达到服务器的时候,就开始受防火墙监控,我们为了禁止外部用户ping通我们的服务器,我们在INPUT这个关卡上增加一个规则:

-A INPUT -p icmp --icmp-type 0 -j ACCEPT
-A OUTPUT -p icmp --icmp-type 8 -j ACCEPT

防火墙规则被保存在几张(四张)表中,其中我们最常用到的是nat、filter这两张表,在指令到达每一个关卡的时候,防火墙就去从表里面找出该关卡对应的规则序列,从上往下执行(也就是说前面的规则优先级更高,在满足前面的规则之后,后面的规则才能生效),选择用那张表,用-t tablename来确定,例如:

-t filter -A INPUT -p tcp --dport 80 -j ACCEPT

意思就是在filter表中增加一条规则,这条规则作用在INPUT这个关卡上。后面蓝色字就是规则的内容。由于防火墙默认使用的是filter表,所以当写防火墙规则的时候,如果不存在-t,则默认表示往filter这个表增加或删除规则。理解iptables,就必须理解这“四表五链”的概念,理解之后,再深入去研究规则即可。

关于规则的部分,就不予多阐述,在参考文献中有了比较多的解释。要强调的就是,必须认真思考规则的先后顺序,保证这些先后顺序最终实现的防火墙规则是你想要的结果。

参考文献

今晚我花了点时间,对iptables再进行了一下梳理,如果你感兴趣,可以阅读《iptables入门:规则及路由基础》。

控制外网公开访问规则

我们本文的重点是服务器安全,因此,重点还是来讨论防火墙中各个关卡的一些安全性规则。

首先,一个基本的策略:通。意思就是,首先,把所有的关卡堵起来,然后再一个一个的打开、开通。

就像我上面展示出来的iptables中一样,我们仅允许22端口和80端口可以被外部访问。22端口是提供ssh登陆的,80端口是提供web访问的。如果你的服务器不需要其他的服务,比如代理、转发,或者对外提供mysql服务或某些图片服务等等,就可以只提供这两个端口可以对外访问。

为了禁止别人ping通我们的服务器?上面好像已经给出了规则。把那两条规则加到DROP前面。

修改默认端口

通过前文,我们已经欺骗黑客,让他无法得知我们的服务器的登陆信息。另外,我们还可以直接隐藏ssh的连接端口,让黑客根本找不到我们的服务器如何去连接。

vi /etc/ssh/sshd_config

找到Port 22,去掉前面的#,把22改为其他端口,比如1452。再重启sshd服务。下次你在连接到服务器的时候,记住使用1452端口去连接,而不是原来的22。

最后是我的/etc/sysconfig/iptables

# Generated by iptables-save v1.4.7 on Sun Dec 20 16:02:52 2015
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [55:5672]
-A INPUT -i lo -j ACCEPT
# 允许内部通信,本机访问本机,比如访问localhost
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# 接收到的数据包是本机回应后的,或者由于客户端接收到本机回应产生的新包,也就是说该数据包是服务器认证过的包
-A INPUT -p tcp -m tcp --dport 1452 -j ACCEPT
# 允许1452端口被外网访问,也就是ssh连接,如果你调整了ssh端口,那么这里必须修改,否则你就悲剧了
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
# 允许80端口被外网访问
-A INPUT -s 127.0.0.1/32 -p tcp -m tcp --dport 3306 -j ACCEPT
# 允许3306端口被外网中的某个网段访问,这个外网也包括局域网,凡是非本机的,在这里都称为外网,只有在你希望通过外网使用本服务器的mysql时,才使用该规则,否则,如果在本机使用mysql其实可以不需要,只需要使用localhost作为连接地址即可
-A INPUT -p icmp --icmp-type 0 -j ACCEPT
-A OUTPUT -p icmp --icmp-type 8 -j ACCEPT
# 上面两条ping不通
-A INPUT -j DROP
# 不允许其他访问,由于执行顺序是从上往下的,当上面的规则都不满足时,这一条才会执行
-A FORWARD -j DROP
# 不允许转发
COMMIT
# Completed on Sun Dec 20 16:02:52 2015

权限安全策略

我们在服务器上面运行web环境,主要有nginx、apache、mysql、php、redis、php-fpm等几种常用的环境。但是,如果我们安装这些环境的时候,没有注意安全性问题,可能直接就用root去运行这些环境软件了,这个后果比较严重,我曾经就因为redis漏洞,导致服务器被黑,有一个木马进程无限制的重生,害得我只能重装系统。所以,我们尽可能的在权限问题上事先处理好。

用户和用户组

首先,我们可以大概看下自己服务器上面运行的一些软件哪些是提供给外部使用的,或者通过外部调用可以在环境内使用的。其次,我们要为这些软件创建独立的,或者共用权限有限的用户。比如nginx、apache、mysql都用一个www用户去运行,由于前面我们已经只允许administrator用户通过ssh登陆了,所以这个用户是无法登陆的。而且,由于这个用户不是root用户,它无法对自己权限范围内的文件(夹)进行读写操作,比如它无法去修改bin下的软件,它也无法在系统核心文件夹中运行一些程序。

在nginx、apache、mysql的配置文件中可以对此进行配置。在apache的配置文件中还可以配置php能够有权限进行读写的目录,除了这些目录,php无法在其他目录中进行读写。这样,即使黑客黑入了你的网站系统,也仅仅只能对你的网站程序和数据库做手脚,无法对服务器做坏事。

文件及文件夹的权限

网站程序仅可以对规定目录中的文件进行读写。这涉及到两个操作,一个是chown,一个是chmod。chown让用户对某些文件及文件夹有所有权,可以进行读写。chmod修改文件文件夹的读写和可执行权限,所以一般情况下,网站文件和目录都最好保持755的权限。

数据库用户权限

mysql的root用户拥有最高权限,可以对数据库随意修改和删除,因此,在网站运行上线时,最好创建一个只能对某些数据库有部分权限的数据库用户,这个用户能执行增删改查,满足网站数据操作的需要,但是不能对数据库进行管理。这样也可以降低数据库如果被入侵可能带来的风险。

结语

写了这么多,归结起来其实就一句话,请诸君重视自己的服务器安全。当然,本文仅仅提供了比较简单的安全策略,像服务器安全监测这些知识,我也未曾接触,还需要在后期学习中不断积累。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_820711.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

浅谈SEO翻倍提升网站流量

本文是在简单了解并且熟悉SEO技术的基础上加上自己的总结归纳,对于SEO还是一个长期的工程不是一天就能一下优化排名第一。下面就是我对SEO的一些见解: 一、关键字选择 内容相关搜索次数多,竞争小主关键词不可太宽泛主关键词也不可太特殊商业价…

网站开发div在Jquery中的鼠标事件失去焦点

网站div在Jquery中的鼠标事件失去焦点,今天在做网站开发的时候遇到了个问题,就是我在用Jquery做导航的时候,用到了Jquery的鼠标事件mouseout,但问题出来了,我有两个div,A的div包含了B的div,本来…

使用C#实现网站用户登录

我们在写灌水机器人、抓资源机器人和Web网游辅助工具的时候第一步要实现的就是用户登录。那么怎么用C#来模拟一个用户的登录拉?要实现用户的登录,那么首先就必须要了解一般网站中是怎么判断用户是否登录的。 HTTP协议是一个无连接的协议,也就…

小网站架构优化:从100并发抗到4000并发

前言: 很久前,在512M内存Access的VPS里,写过了一个经典的秋色园技术原理解析系列。后来的某一天,换上了1G内存MSSQL2000,秋色园又跑过了一个多年头。之后,秋色园和 CYQ.Data,也在一直默默的优化…

【系统架构】大型网站架构系列:缓存在分布式系统中的应用(二)

原文地址 缓存是分布式系统中的重要组件,主要解决高并发,大数据场景下,热点数据访问的性能问题。提供高性能的数据快速访问。 本文是缓存在分布式应用第二篇文章,介绍分布式缓存,Memcache,Redis&#xff0c…

python 抓取小说网站,制作电子书。

分析目的(或者说要达到的效果) 实现一个小说下载器,输入小说的名字然后抓取小说的全部章节,制作成文档。 需要的知识:使用BeautifulSoup或正则解析网页,使用requests下载网页。 搜索小说 直接用小说的站内搜…

【转】最实用的IT类网站及工具大集合

转自:http://www.cnblogs.com/annie00/p/5753507.html 1.聚合数据 大家在开发过程中,可能会用到各种各样的数据,想找一些接口来提供一些数据。比如天气预报查询,火车时刻表查询,彩票查询,身份证查询等等。有…

大型网站架构演变和知识体系

from http://www.blogjava.net/BlueDavy/archive/2008/09/03/226749.html 之前也有一些介绍大型网站架构演变的文章,例如LiveJournal的、ebay的,都是非常值得参考的,不过感觉他们讲的更多的是每次演变的结果,而没有很详细的讲为什…

关于动画培养灵感的网站

直接点解图片就能进入对应的国外的网站: 下面这个网站是视频播放的哦,挺好看的。 当然这个英文网站在国内也有翻译的blog:http://www.jianshu.com/p/1858a8733ba3

大型网站技术架构 大纲

本文内容大部分来自《大型网站技术架构》,这本书很值得一看,强烈推荐。网站系统架构层次如下图所示:1.前端架构前端指用户请求到达网站应用服务器之前经历的环节,通常不包含网站业务逻辑,不处理动态内容。浏览器优化技术并不是优化…

knewone最新分享购物网站模板

演示效果:http://www.erdangjiade.com/templates/390 效果图片:

DTCMS 网站管理系统

dtcms适合开发一些简单小型网站 开发的过程中遇见了各种问题,下面总结下我遇见的问题 1.遇见提示未开启生成静态功能 在系统设置里面将“伪URL重写”为“生成静态”可以解决 2.在生成静态页面的时候提示生成页面完成,但是右下角却显示失败 这个可能是在新…

oracle em 此网站,Oracle 11g em启动报此网站的安全证书有问题的解决方案

今天配置完Oracle 11gR2 em后,在IE中输入https://kermart:1158/em直接报错,打不开提示:“证书错误,此网站安全证书有问题”,在网上找了好久没有找到解决的方案,其中有人说要卸载win7的windows补丁3KKB26612…

商城模板网站html5手机端_网站建设商城模板设计排版不同,但不可缺少的重要板块都会有 - 企业建站...

有的企业建网站,是为了宣传产品、树立企业形象,此类多为建设企业官方网站;有的企业建网站,销售产品是根本,此类都建设商城网站。建设网站又有两种方法,一类模板建站,一类定制建站。对于网站建设…

list的contains方法为什么不好使_为什么你的网站优化效果不好?

当新手网站管理员优化他们的网站,他们不能总是产生良好的结果。是他们的优化方法使用不好,还是网站本身有问题,比如苏州网站优化,哪里有困难,为什么经常做不好,长期没有排名的网站,优化效果不好…

做网站用什么语言_外贸独立站卖家如何做多语言网站SEO?

在各国经济文化交流的频繁和跨境业务数量增长的背景下,想要实现海外营销,获得更多的关注和收益,外贸卖家们就必须针对目标市场进行网站的多语言优化,针对新的国家或地区进行策略的制定网站内容本地化,仅翻译网站内的文…

如何集成varnish到已有的网站架构

如何集成varnish到已有的网站架构 在我们现有的架构中通常是已经成熟稳定的架构,如何将高性能的缓存服务器部署在已有的环境上呢,同时部署容易,如何始终让用户看到的是最新的内容,即便是缓存命中的状态? 因此&#xff…

activemq 各种版本区别_响应式网站和PC+手机端网站有什么区别?

企业建站普遍会遇到这样一个选择难题:网站选择什么类型?常见的类型分为3种:PC端,PC手机端,响应式。PC端大家都知道,主要的选择难点是后两种有什区别。今天小编就帮大家来分析一下响应式网站和PC手机端网站的…

阿根廷最大社交网站Taringa遭遇大规模数据泄漏,超过2800万用户数据暴露

本文讲的是阿根廷最大社交网站Taringa遭遇大规模数据泄漏,超过2800万用户数据暴露,如果你有Taringa(也被称为“拉丁美洲的Reddit”)网站账号,那么请注意,你的账户详细信息可能已经在大规模数据泄漏事件中泄…

实现网站验证码切换功能

实现网站验证码切换功能 一、样例 样例1、 样例2、 二、实现原理 三、实现代码 com.fry.servlet.VerifyCodeServlet 1 package com.fry.servlet;2 3 import javax.imageio.ImageIO;4 import javax.servlet.ServletException;5 import javax.servlet.annotation.WebServlet;6 im…