服务器安全防护是非常重要的滴,mysql 3306 ,ftp 21 20 ,ssh 22端口等等都可以直接用iptables设置访问的权限,centos系统可以在etc/sysconfig/iptables中加入类似的语句。
-A INPUT -s 192.168.3.192/32 -p tcp -m tcp --dport 3306 -j ACCEPT
表示只有192.168.3.192这个ip可以访问服务器的3306端口等,这样就安全了许多。但是web服务由于要面向所有用户,所以这样就不合适。现在是时候祭出神器fail2ban的时候了。不过也只能防一般的小黑客。ddos估计一下就打死了。dos和ddos差别是一个是一台一个是多台。
安装
rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
yum install fail2ban
配置
安装完成后,服务配置目录为:/etc/fail2ban
/etc/fail2ban/action.d #动作文件夹,内含默认文件。iptables以及mail等动作配置
/etc/fail2ban/fail2ban.conf #定义了fai2ban日志级别、日志位置及sock文件位置
/etc/fail2ban/filter.d #条件文件夹,内含默认文件。过滤日志关键内容设置
/etc/fail2ban/jail.conf #主要配置文件,模块化。主要设置启用ban动作的服务及动作阀值
/etc/rc.d/init.d/fail2ban #启动脚本文件
3. vi /etc/fail2ban/fail2ban.conf
[Definition]
logtarget = /var/log/fail2ban.log #我们需要做的就是把这行改成/var/log/fail2ban.log,方便用来记录日志信息
vim /etc/fail2ban/jail.conf里加入
[nginx-dos]
enabled = true
port = http,https
filter = nginx-bansniffer
action = iptables[name=bbs-nginx-ddos, port=http, protocol=tcp]
sendmail-whois[name=bbs-nginx-ddos, [email protected] sender=root]
logpath = /data/nginx/logs/bbs.access.log#放日志的地方。
maxretry = 4000 #注意
findtime = 60
bantime = 3600
socket = /var/run/fail2ban/fail2ban.sock
然后创建文件/etc/fail2ban/filter.d/nginx-bansniffer.conf,内容如下:
[Definition]
failregex = <HOST> -.*- .*HTTP/1.* .* .*$
ignoreregex =
原理
fail2ban采集登陆日志调用iptables进行封ip,可以用国外一个大神hulk等工具进行测试。上面的配置maxretry = 4000,不单单是最大4000个ip才就封掉,而是要看清楚网页加载的时候fail2ban的日志中会产生多少了记录,sendemail和iptables要上下对齐。