emmm…先给大家分享一下暑假学习linux的时候画的一个思维导图
最近在AWS上花了8块钱买(送)了一年的服务器,布好自己的网站后尝试了一下简单的压力测试,结果瞬间GG。于是翻起了以前的学linux运维时候记得笔记加上自己对安全运维的一些理解,对自己的服务器进行了新一轮的加固,至于具体是怎么做的,还请各位看官听我细细道来。
这里我先说明一下我服务器的环境,用的是AWS的Liunx系统(仿centos)。
删除默认账户
linux默认会启动很多不必要的账户,下面是某次我的服务器上的一些默认用户
账号越多,系统就越容易受到攻击。
所以可以用1
userdel 用户名
限制su权限
默认情况下,以普通用户登录系统后,执行 su root 命令,然后键入 root 用户的密码,就可以切换成 root 用户。这样做并不安全,所以我们需要配置一下安全策略,使其只针对我们指定的用户才可以切换成root用户1
vim /etc/pam.d/su
把图中画线部分去掉#后改为1
auth required pam_wheel.so group=root
这样只有root组的用户才可以切换成root,如下命令更换用户的用户组1
usermod -a -G groupA user
Iptables
说起linux安全运维,首当其冲的肯定是Iptables的配置,对于常见的DOS攻击,一般是与服务器建立多条半开链接导致堵塞服务器对外通信,严重可导致服务器CPU爆炸而宕机。所以对此我们可以配置单一IP的最大连接数和在一定时间内的最大连接数进行设置,可以有效的防止DOS攻击以及一些扫描器的扫描,比如AWVS,sqlmap,御剑,balabala~
限制IP连接数和连接速率
我们可以限制IP的网络连接数和速度等,限制过快的连接频率,这样不仅可以在一定程度上限制对方的扫描器,还可以防御一些dos攻击。
单个IP的最大连接数为 20
1 | iptables -I INPUT -p tcp --dport 80 -m connlimit --connlimit-above 20 -j REJECT |
单个IP在60秒内只允许最多新建15个连接
1 | iptables -A INPUT -p tcp --dport 80 -m recent --name BAD_HTTP_ACCESS --update --seconds 60 --hitcount 15 -j REJECT |
防止端口复用类的后门或者shell
假设病毒木马程序通过22,80端口向服务器外传送数据,这种方式发向外发的数据不是我们通过访问网页请求而回应的数据包。我们可以禁止这些没有通过请求回应的数据包。1
2
3iptables -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEP
Apache配置
对于某些dos攻击方式如slowhttptest
利用超时时间对你进行攻击的,一般的iptables不能很好的进行防御。所以需要配置apache的超时时间
centos默认配置文件在1
/usr/share/doc/httpd24-2.4.27/httpd-default.conf
改完需要在etc/httpd/conf/httpd.conf
里面配置一下东西
流量check
centos的apache目录在1
2/etc/httpd/logs/access_log #访问日志
/etc/httpd/logs/error_log #出错日志
这里只分享几款check工具
LogForensics 腾讯实验室 https://security.tencent.com/index.php/opensource/detail/15
北风飘然@金乌网络安全实验室 http://www.freebuf.com/sectool/126698.html
网络ID为piaox的安全从业人员: http://www.freebuf.com/sectool/110644.html
网络ID:SecSky http://www.freebuf.com/sectool/8982.html
网络ID:鬼魅羊羔http://www.freebuf.com/articles/web/96675.html
定期查杀webshell
这里放个精简版的webshell查杀脚本
http://www.jincon.com/archives/147/
配置crontab,每2个小时查杀一次1
2crontab -e
* 2 * * * python scanwebshell.py /var/www/html
关键目录给属性
1 | chattr +i ~/.ssh |
配置全局waf
一个waf
http://hackblog.cn/post/75.html1
find /var/www/html -type f -path "*.php" | xargs sed -i "s/<?php/<?php\nrequire_once('\/tmp\/waf.php');\n/g"
一条命令配置
查找/var/www/html目录下的所有php文件然后添加一个require_once('waf.php')
关闭系统不使用的服务
1 | chkconfig cups off #打印机 |
#修改ssh服务的端口1
2
3
4
5
6
7
8vi /etc/ssh/sshd_config
#修改端口
#Port 22 #关闭22端口
Port 6022 #增加6022端口
#重启sshd服务
service sshd restart
检查一下sshd的监听端口对不对
netstat -lnp|grep ssh
记得最后把iptables的相应端口打开1
2iptables -A INPUT -p tcp --dport 6022 -j ACCEPT
iptables -A OUTPUT -p udp --sport 6022 -j ACCEPT
#不允许从不同的控制台进行root登陆
“/etc/securetty”文件允许你定义root用户可以从哪些TTY终端登陆
编辑”/etc/securetty”文件,在不需要登陆的TTY终端前添加“#”标志,来禁止从该TTY终端进行root登陆。一般情况下留2个tty终端就行了。1
2
3
4
5
6
7
8
9
10
11
12tty1
tty2
#tty3
#tty4
#tty5
#tty6
#tty7
#tty8
#tty9
#tty10
#tty11
#ttyS0
最后也是最要的一条,别懒,坚持每天看一下自己的服务器日志以及history历史命令记录,还有用last或者lastlog命令查看一下历史登录信息,w查看当前所有用户登录信息。一句老话,没有永远安全的系统,一切安全策略只是为了增加攻击者的攻击成本。
笔者能力有限,目前只能想到这些措施,如果各位大佬有好的想法欢迎留言
参考
http://bobao.360.cn/ctf/learning/210.html
http://blog.csdn.net/hanzheng260561728/article/details/51549037