Fail2ban可以监控你的系统日志,然后匹配日志中的错误信息进行相应的屏蔽动作。大多数在线教程都是关于fail2ban+iptables的组合。考虑到CentOS7已经自带了Firewalld,使用Firewalld作为网络防火墙更加简单方便,我想分享一下如何使用fail2ban+FirewalldD。
检查Firewalld是否启用 #如果您已经安装iptables建议先关闭 serviceiptablesstop #查看Firewalld状态 firewall-cmd--state #启动firewalld systemctlstartfirewalld #设置开机启动 systemctlenablefirewalld.serviceFirewalld启用后,所有端口连接都会被禁止,所以一定要释放常用端口,以免被阻塞。下面是一个释放SSH端口(22)的例子,供参考:
#放行22端口 firewall-cmd--zone=public--add-port=80/tcp--permanent #重载配置 firewall-cmd--reload #查看已放行端口 firewall-cmd--zone=public--list-ports 安装fail2banFail2ban可以监控系统日志,按照一定规则匹配异常IP后,使用Firewalld进行屏蔽,特别是对于一些爆破/扫描,非常有效。
#CentOS内置源并未包含fail2ban,需要先安装epel源 yum-yinstallepel-release #安装fial2ban yum-yinstallfail2ban安装成功后,fail2ban配置文件位于/etc/fail2ban,其中jail.conf为主配置文件,相关匹配规则位于filter.d目录,其他目录/文件很少使用。如果需要了解更多,可以自己搜索。
配置规则创建一个新的jail.local来覆盖fail2ban的一些默认规则:
#新建配置 vi/etc/fail2ban/jail.local #默认配置 [DEFAULT] ignoreip=127.0.0.1/8 bantime=86400 findtime=600 maxretry=5 #这里banaction必须用firewallcmd-ipset,这是fiewalll支持的关键,如果是用Iptables请不要这样填写 banaction=firewallcmd-ipset action=%(action_mwl)s如果您仍在使用默认的SSH端口(22),可能会每天扫描一次。强烈建议先参考Linux服务器的登录安全来加强服务器防护,也可以使用fail2ban来拦截恶意IP。
继续修改配置文件jail.local,在后面增加以下内容:
[sshd] enabled=true filter=sshd port=22 action=%(action_mwl)s logpath=/var/log/secure此时,我们的jail.local规则可能如下所示:
[DEFAULT] ignoreip=127.0.0.1/8 bantime=86400 findtime=600 maxretry=5 banaction=firewallcmd-ipset action=%(action_mwl)s [sshd] enabled=true filter=sshd port=22 action=%(action_mwl)s logpath=/var/log/secure上面的配置就是说,如果同一个IP,在10分钟内,如果连续出现5个以上的错误,那么就用Firewalld对其进行IP封禁。输入systemctlstartfail2ban启动fail2ban尝试效果。
使用另一台服务器不断尝试连接SSH,并且输入错误的密码。你会发现连续5次以上都无法直接连接,说明该IP已经被封禁。可以输入:fail2ban-客户端状态sshd查看被禁IP,如下图截图所示。
防止CC攻击这里以nginx为例,利用fail2ban监控Nginx日志,匹配短时间内频繁请求的IP,利用firewalld屏蔽其IP实现CC保护。
#需要先新建一个nginx日志匹配规则 vi/etc/fail2ban/filter.d/nginx-cc.conf #填写如下内容 [Definition] failregex=<HOST>-.*-.*HTTP/1.*.*.*$ ignoreregex=继续修改vi/etc/fail2ban/jail.local,增加以下内容:
[nginx-cc] enabled=true port=http,https filter=nginx-cc action=%(action_mwl)s maxretry=20 findtime=60 bantime=3600 logpath=/usr/local/nginx/logs/access.log上述配置意味着,如果同一个IP在60s内达到20个请求,其IP将被封禁1小时。以上仅为测试,请根据您的实际情况进行修改。logpath是nginx日志路径。
防止Wordpress爆破如果你经常分析日志,你会发现大量的机器人正在扫描wp-login.php的wordpress登录页面。虽然对方不一定能成功,但还是杀了他的IP比较好,以防万一。
#需要先新建一个nginx日志匹配规则 vi/etc/fail2ban/filter.d/wordpress.conf #填写如下内容 [Definition] failregex=^<HOST>-.*/wp-login.php.*HTTP/1\.." ignoreregex=继续修改jail.local,增加以下内容:
[wordpress] enabled=true port=http,https filter=wordpress action=%(action_mwl)s maxretry=20 findtime=60 bantime=3600 logpath=/usr/local/nginx/logs/access.log当然,别忘了进入systemctl重启fail2ban来重启fail2ban并使其生效。
常用命令 #启动 systemctlstartfail2ban #停止 systemctlstopfail2ban #开机启动 systemctlenablefail2ban #查看被banIP,其中sshd为名称,比如上面的[wordpress] fail2ban-clientstatussshd #删除被banIP fail2ban-clientsetsshddelignoreip192.168.111.111 #查看日志 tail/var/log/fail2ban.log 总结Fail2ban内置了很多匹配规则,位于filter.d目录下,包括SSH/FTP/Nginx/Apache等常见的日志匹配。如果都不能满足你的需求,还可以创建新的规则来匹配异常IP。Fail2ban+Firewalld是防止恶意IP的有效方法,可以大大提高服务器安全性。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)