站点图标 咕嘟博客

【vps安全防护】CentOS 7+宝塔面板_安装Fail2Ban+Firewalld,用来防止SSH爆破和CC攻击

0.初始准备,检查Firewalld

宝塔面板默认的防火墙是Firewalld,而且宝塔面板自带的安全设置也是基于Firewalld,如果没有另行安装iptables的话,直接跳到第一步【1.安装Fail2Ban】即可。如果有安装使用iptables请参考以下命令。

#如果您已经安装iptables建议先关闭
service iptables stop
#查看Firewalld状态
firewall-cmd --state
#启动firewalld
systemctl start firewalld
#设置开机启动
systemctl enable firewalld.service

启用Firewalld后会禁止所有端口连接,因此请务必放行常用的端口,以免被阻挡在外,以下是放行SSH端口(22)示例,供参考:

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

1.安装Fail2Ban

1.1 从源安装

由于CentOS没有内置Fail2Ban的源,因此我们要先安装EPEL存储库。
注意要root身份下运行

yum install epel-release

备注:宝塔面板默认安装好了EPEL源,可以不用安装这个。直接按下述命令安装Fail2Ban即可。

随后安装Fail2Ban,【centos源的fail2ban版本会偏低一点,vo.9.7】

yum install fail2ban fail2ban-systemd

1.2 从github安装/更新

项目下载地址:

https://github.com/fail2ban/fail2ban/releases

安装命令

#从github下载相应版本
wget https://github.com/fail2ban/fail2ban/archive/0.10.4.tar.gz
#解压
tar -xf 0.10.4.tar.gz
#进入解压目录
cd fail2ban-0.10.4
#安装
python setup.py install

2.运行Fail2Ban服务并设置开机自启

systemctl enable fail2ban
systemctl start fail2ban

3.配置Fail2Ban

安装成功后Fail2ban配置文件位于

/etc/fail2ban

其中jail.conf为主配置文件,相关的匹配规则位于filter.d目录

开始配置文件

默认的Fail2Ban配置文件位于

/etc/fail2ban/jail.conf

里面有一些默认的配规则,但是Fail2Ban升级之后会将其覆盖掉,所以我们要新建一个配置文件来保证配置不会被因为Fail2Ban升级而丢失【该文件可覆盖主配置文件的设置】。

我们需要新建一个名为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爆破

继续修改

jail.local

这个配置文件,在后面继续加入如下内容:

[sshd]
enabled = true
filter  = sshd
port    = 22
action = %(action_mwl)s
logpath = /var/log/secure

上面规则的说明,按需修改

Nginx防止CC攻击

下述操作换成用面板进行还是照样新建文件>>复制粘贴即可。

#需要先新建一个nginx日志匹配规则,面板操作直接在文件夹下,新建指定文件
vi /etc/fail2ban/filter.d/nginx-cc.conf
#填写如下内容,面板操作则直接复制粘贴
[Definition]
failregex = <HOST> -.*- .*HTTP/1.* .* .*$
ignoreregex =

然后再打开jail.local文件
换成命令行操作就是

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

上述规则说明,按需修改

防止WordPress爆破

如果分析日志发现有大量机器人在扫描wordpress登录页面wp-login.php,虽然对方可能没成功,但是为了避免万一还是将他IP干掉为好。

下述操作换成用面板进行还是照样新建文件>>复制粘贴即可

#需要先新建一个nginx日志匹配规则,面板操作直接在文件夹下,新建指定文件
vi /etc/fail2ban/filter.d/wordpress.conf
#填写如下内容,面板操作则直接复制粘贴
[Definition]
failregex = ^<HOST> -.* /wp-login.php.* HTTP/1\.."
ignoreregex =

然后再打开jail.local文件
换成命令行操作就是

vi /etc/fail2ban/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

4.输入命令使配置生效

#重启Fail2Ban使其生效
systemctl restart fail2ban

Fail2Ban的常用命令

#查看当前版本
fail2ban-server -V
#启动fail2ban服务
systemctl start fail2ban
#停止
systemctl stop fail2ban
#开机启动
systemctl enable fail2ban
#查看被ban IP,其中sshd为名称
fail2ban-client status sshd
#删除被ban IP
fail2ban-client set sshd delignoreip 192.168.111.111
#查看日志
tail /var/log/fail2ban.log
#启动后验证fail2ban是否正常运行正常响应内容为Server replied: pong
fail2ban-client ping

文章参考来源:

退出移动版