CentOS 7安装fail2ban+Firewalld防止SSH爆破与CC攻击
1 | https://www.moerats.com/archives/487/ |
fail2ban可以监视你的系统日志,然后匹配日志的错误信息执行相应的屏蔽动作。网上大部分教程都是关于fail2ban+iptables组合,考虑到CentOS 7已经自带Firewalld,所以这
里我们也可以利用fail2ban+Firewalld来防CC攻击和SSH爆破。
准备工作
1-1. 检查Firewalld是否启用
1 2 3 4 | service iptables stop //#如果您已经安装iptables建议先关闭 firewall-cmd --state //#查看Firewalld状态 systemctl start firewalld //#启动firewalld systemctl enable firewalld.service //#设置开机启动 |
1-2. 启用Firewalld后会禁止所有端口连接,因此请务必放行常用的端口,以免被阻挡在外,以下是放行SSH端口(22)示例,供参考
1 2 3 4 5 6 | firewall-cmd --zone=public --add-port=22/tcp --permanent //#放行22端口[ssh] firewall-cmd --zone=public --add-port=80/tcp --permanent //#放行80端口[http] firewall-cmd --zone=public --add-port=443/tcp --permanent //#放行443端口[https] firewall-cmd --zone=public --add-port=873/tcp --permanent //#放行873端口[rsyncd 同步] firewall-cmd --reload //#重载配置 firewall-cmd --zone=public --list-ports //#查看已放行端口 |
2. 安装fail2ban
已经集成到LNMP里面了
1 2 | cd /root/lnmp1.8/tools ./fail2ban.sh |
1 2 | systemctl start fail2ban.service systemctl enable fail2ban.service |
2-4. 上面这步完成后,重启会发现启动不起来,导致如下错误
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | - Unit fail2ban.service has begun starting up. Aug 01 19:53:30 localhost.localdomain fail2ban[1317]: Starting fail2ban: 2020-08-01 19:53:30,597 fail2ban [1 Aug 01 19:53:30 localhost.localdomain fail2ban[1317]: [FAILED] Aug 01 19:53:30 localhost.localdomain systemd[1]: fail2ban.service: control process exited, code=exited status=255 Aug 01 19:53:30 localhost.localdomain systemd[1]: Failed to start LSB: Start/Stop fail2ban. -- Subject: Unit fail2ban.service has failed -- Defined-By: systemd -- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel -- -- Unit fail2ban.service has failed. -- -- The result is failed. Aug 01 19:53:30 localhost.localdomain systemd[1]: Unit fail2ban.service entered failed state. Aug 01 19:53:30 localhost.localdomain systemd[1]: fail2ban.service failed. Aug 01 19:53:30 localhost.localdomain polkitd[627]: Unregistered Authentication Agent for unix-process:1311:5369 (system bu lines 2263-2285/2285 (END) |
原因:重启服务器导致内存中文件夹/var/run/fail2ban丢失
[https://oneinstack.com/question/5611/]
解决办法:
1 2 3 | sed -i 's@Starting fail2ban.*@&\n [ ! -e "/var/run/fail2ban" ] \&\& mkdir /var/run/fail2ban@' /etc/init.d/fail2ban systemctl daemon-reload service fail2ban start |
再重启就可以开机自启动了.所有启动正常.
安装成功后fail2ban配置文件位于/etc/fail2ban,其中jail.conf为主配置文件,相关的匹配规则位于filter.d目录,其它目录/文件一般很少用到,如果需要详细了解可自行搜索
3. 配置规则
新建jail.local来覆盖fail2ban的一些默认规则:
3-1. 新建配置
1 | vi /etc/fail2ban/jail.local |
3-2. 加入如下代码:
1 2 3 4 5 6 7 | [DEFAULT] ignoreip = 127.0.0.1/8 bantime = 86400 findtime = 600 maxretry = 5 banaction = firewallcmd-ipset action = %(action_mwl)s |
代码分析:
#默认配置
[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
ignoreip:IP白名单,白名单中的IP不会屏蔽,可填写多个以(,)分隔
bantime:屏蔽时间,单位为秒(s)
findtime:时间范围
maxretry:最大次数
banaction:屏蔽IP所使用的方法,上面使用firewalld屏蔽端口
3-3. 防止SSH爆破
如果您还在使用默认SSH端口(22),可能每天都会被扫描,可以使用fail2ban将恶意IP屏蔽
继续修改jail.local这个配置文件,在后面追加如下内容:
1 | vi /etc/fail2ban/jail.local |
1 2 3 4 5 6 | [sshd] enabled = true filter = sshd port = 22 action = %(action_mwl)s logpath = /var/log/secure |
1 | systemctl restart fail2ban.service |
参数说明
[sshd]:名称,可以随便填写
filter:规则名称,必须填写位于filter.d目录里面的规则,sshd是fail2ban内置规则
port:对应的端口
action:采取的行动
logpath:需要监视的日志路径
上面的配置意思是如果同一个IP,在10分钟内,如果连续超过5次错误,则使用Firewalld将他IP ban了。输入systemctl start fail2ban启动fail2ban来试试效果
3-4. 验证是否成功
用.159进入.234 测试
使用另一台服务器不断尝试连接SSH,并且不断的将密码输入错误,你会发现连续超过5次后直接连不上,说明IP被ban了
也可以使用firewall-cmd命令来验证防火墙是否成功加入了fail2ban的规则
1 | firewall-cmd --direct --get-all-rules |
有输出这一条,就说明已经成功
3-5. 查询被ban IP
1 | fail2ban-client status sshd |
常用命令
1 2 3 4 5 6 | systemctl start fail2ban //#启动 systemctl stop fail2ban //#停止 systemctl enable fail2ban //#开机启动 fail2ban-client status sshd //#查看被ban IP,其中sshd为名称,比如上面的[wordpress] fail2ban-client set sshd unbanip 192.168.111.111 //#删除被ban IP tail /var/log/fail2ban.log //#查看日志 |
1. 初级篇 只 应对SSH爆破,因为fail2ban是靠日志分析来锁定IP, CC攻击及wordpress攻击,如果日志路径不对,会导致fail2ban启动不了.
2. 不要用如下命令安装
1 2 | yum -y install epel-release //#CentOS内置源并未包含fail2ban,需要先安装epel源 yum -y install fail2ban //#安装fial2ban |
因为 yum -y install epel-release 会影响内核.内核变动会导致 /home 挂载不上,到时整个系统都崩.
总结
fail2ban已经内置很多匹配规则,位于filter.d目录下,包含了常见的SSH/FTP/Nginx/Apache等日志匹配,如果都还无法满足您的需求,您也可以自行新建规则来匹配异常IP。使
用fail2ban+Firewalld来阻止恶意IP是行之有效的办法,可极大提高服务器安全
1 | 解决方法: https://www.bndstone.com/1654.html |
=========================================================
2-1. 下载及解压:
1 2 3 | cd /tmp wget https://linuxsoft.bndstone.com/fail2ban/0.10.4.tar.gz //或 https://github.com/fail2ban/fail2ban/archive/0.10.4.tar.gz tar -xvzf 0.10.4.tar.gz |
2-2. 安装
1 2 | cd /tmp/fail2ban-0.10.4/ python setup.py install |
2-3. 生成服务启动脚本并开机自启
1 2 3 | cp /tmp/fail2ban-0.10.4/files/redhat-initd /etc/init.d/fail2ban systemctl enable fail2ban //#开机自启动服务 systemctl start fail2ban //#启动fail2ban服务 |