如何用 CentOS 7的 Fail2Ban 保护 SSH
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 #解压 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目录
开始配置文件
下述的操作用web管理面板操作其实更简单,如宝塔面板等,直接用面板的文件管理器手动编辑文件就行了,就像是平常在Windows下用记事本软件编辑文档,我超喜欢用面板操作的,vi命令又不会,只能用面板操作度日这样子。
默认的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
上面配置规则的说明,按需修改
ignoreip:IP白名单,白名单中的IP不会屏蔽,可填写多个以(,)分隔
bantime:屏蔽时间,单位为秒(s)
findtime:时间范围
maxretry:最大次数
banaction:屏蔽IP所使用的方法,上面使用firewalld屏蔽端口
注意:使用Fail2Ban时,要把自己的IP加入白名单,动态IP的可以绑定一个白名单域名,防止自己由于某些测试操作达成成就“我Ban我自己”,而连不上服务器。
防止SSH爆破
继续修改
jail.local
这个配置文件,在后面继续加入如下内容:
[sshd] enabled = truefilter = sshd port = 22 action = %(action_mwl)s logpath = /var/log/secure
上面规则的说明,按需修改
[sshd]:名称,可以随便填写
filter:规则名称,必须填写位于filter.d目录里面的规则,sshd是fail2ban内置规则
port:对应的端口
action:采取的行动
logpath:需要监视的日志路径
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 = trueport = http,https filter = nginx-cc action = %(action_mwl)s maxretry = 20 findtime = 60 bantime = 3600 logpath = /usr/local/nginx/logs/access.log
上述规则说明,按需修改
上面的配置意思是如果在60s内,同一IP达到20次请求,则将这个IP Ban 1小时。
logpath
为nginx
日志路径。
防止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 = trueport = 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 restart fail2ban #开机启动systemctl enable fail2ban 1. 查看指定 Jail 规则下被封禁的ip情况: fail2ban-client status <JAIL> 2. 添加/解除指定 IP 的封禁: fail2ban-client set <JAIL> banip/unbanip <IP> 3. 添加/解除指定 IP 的忽略: fail2ban-client set <JAIL> addignoreip/delignoreip <IP> 4. 测试匹配规则是否正确: fail2ban-regex <日志文件> <过滤规则> 5. 查看所有命令: fail2ban-client -h 6. 查看日志: tail /var/log/fail2ban.log
Fail2ban: 防SSH暴力破解的一键shell脚本
https://github.com/FunctionClub/Fail2ban
wget https://raw.githubusercontent.com/FunctionClub/Fail2ban/master/fail2ban.sh && bash fail2ban.sh 2>&1 | tee fail2ban.log
第一步选择是否修改SSH端口。
第二部输入最多尝试输入SSH连接密码的次数
第三部输入每个恶意IP的封禁时间(单位:小时)
暂无评论
发表评论