CentOS 7安装fail2ban+Firewalld防止SSH爆破与CC攻击[初级篇]

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.png

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                         //#查看已放行端口

1.png

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

再重启就可以开机自启动了.所有启动正常.

1.png

安装成功后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

1.png

代码分析:

#默认配置
[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

1.png

参数说明
[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了

1.png

也可以使用firewall-cmd命令来验证防火墙是否成功加入了fail2ban的规则

1
firewall-cmd --direct --get-all-rules

有输出这一条,就说明已经成功
1.png

3-5. 查询被ban IP

1
fail2ban-client status sshd

1.png

常用命令

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是行之有效的办法,可极大提高服务器安全

fail2ban 自启动后会导致 firewalld 无法自启动.
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

1.png
1.png

2-2. 安装

1
2
cd /tmp/fail2ban-0.10.4/
python setup.py install

1.png
1.png

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服务

1.png

Leave a Reply

Your email address will not be published. Required fields are marked *