CentOS 7安装fail2ban + Firewalld防止爆破与CC攻击

CentOS 7安装fail2ban + Firewalld防止爆破与CC攻击,第1张

CentOS7安装fail2ban+Firewalld防止爆破与CC攻击

Fail2ban可以监控你的系统日志,然后匹配日志中的错误信息进行相应的屏蔽动作。大多数在线教程都是关于fail2ban+iptables的组合。考虑到CentOS7已经自带了Firewalld,使用Firewalld作为网络防火墙更加简单方便,我想分享一下如何使用fail2ban+FirewalldD。

检查Firewalld是否启用 #如果您已经安装iptables建议先关闭 serviceiptablesstop #查看Firewalld状态 firewall-cmd--state #启动firewalld systemctlstartfirewalld #设置开机启动 systemctlenablefirewalld.service

Firewalld启用后,所有端口连接都会被禁止,所以一定要释放常用端口,以免被阻塞。下面是一个释放SSH端口(22)的例子,供参考:

#放行22端口 firewall-cmd--zone=public--add-port=80/tcp--permanent #重载配置 firewall-cmd--reload #查看已放行端口 firewall-cmd--zone=public--list-ports 安装fail2ban

Fail2ban可以监控系统日志,按照一定规则匹配异常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
  • ip:IP白名单。白名单中的IP不会被阻止。可以填写多个,用(,)隔开。
  • Bantime:屏蔽时间,单位为秒
  • 查找时间范围
  • Maxretry:最大次数
  • Banaction:用于屏蔽IP的方法,使用firewalld屏蔽端口。
  • 防止SSH爆破

    如果您仍在使用默认的SSH端口(22),可能会每天扫描一次。强烈建议先参考Linux服务器的登录安全来加强服务器防护,也可以使用fail2ban来拦截恶意IP。

    继续修改配置文件jail.local,在后面增加以下内容:

    [sshd] enabled=true filter=sshd port=22 action=%(action_mwl)s logpath=/var/log/secure
  • 【sshd】:姓名,可以随便填写。
  • 过滤器:规则的名称。您必须填写位于filter.d目录中的规则。sshd是fail2ban的内置规则。
  • 端口:对应的端口
  • 行动:采取的行动
  • Logpath:要监控的日志路径。
  • 此时,我们的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的有效方法,可以大大提高服务器安全性。

    欢迎分享,转载请注明来源:内存溢出

    原文地址: https://outofmemory.cn/zz/744491.html

    (0)
    打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
    上一篇 2022-04-29
    下一篇 2022-04-29

    发表评论

    登录后才能评论

    评论列表(0条)

    保存