HCRM博客

CentOS 7快速部署fail2ban,实战自定义封禁策略详解

CentOS 7安装fail2ban防暴力破解,自定义封禁时间实测

机器刚挂公网,不到一顿饭的功夫,日志里就蹦出几百条Failed password。看着IP轮番上阵,手敲iptables封得过来?fail2ban就是专治这种暴力破解的懒办法。下面把我在CentOS 7上从安装到自定义封禁时间的全过程摊开,踩过的坑一并标好,直接抄就能用。

CentOS 7快速部署fail2ban,实战自定义封禁策略详解-图1

先搞清楚fail2ban到底干嘛

它用Python写,盯着日志,发现同一IP在规定时间内的失败次数超过阈值,就调用firewalld或iptables把IP关进小黑屋。时间到自动放出来,不用你半夜爬起床。

最小化系统先补依赖

CentOS 7最小安装默认没EPEL,先装源:

yum install epel-release -y

接着把fail2ban拖回来:

CentOS 7快速部署fail2ban,实战自定义封禁策略详解-图2

yum install fail2ban fail2ban-firewalld -y

看到Complete!就继续,别急着启动,先写规则

主配置别动,局部文件更稳

fail2ban.conf、jail.conf是官方地盘,升级会被覆盖。自己建局部文件:

cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

以后所有改动写进jail.local,干净又省心。

CentOS 7快速部署fail2ban,实战自定义封禁策略详解-图3

开箱即用的SSH防护

vi /etc/fail2ban/jail.local,找到[sshd]段,把默认的:

enabled = false

改成:

enabled  = true

port = ssh

filter = sshd

logpath = %(sshd_log)s

maxretry = 3

bantime = 3600

findtime = 600

解释:600秒内失败3次就封,封1小时。想再狠点,把maxretry改成2,bantime翻倍即可。

自定义封禁时间实测

公司运维要求“白天封一小时,夜里封一天”,fail2ban支持用banaction实现。新建/etc/fail2ban/action.d/multi-ban.conf:

[Definition]

actionstart =

actionstop =

actioncheck =

actionban = firewall-cmd --add-source= --zone=drop

actionunban = firewall-cmd --remove-source= --zone=drop

jail.local里再加一段:

[sshd-night]

enabled = true

port = ssh

filter = sshd

logpath = %(sshd_log)s

maxretry = 2

findtime = 300

bantime = 86400

action = multi-ban

用crontab定时切换:白天0-8点、18-24点启用[sshd],9-17点启用[sshd-night]。实测一周,暴力IP从每天两千条降到二十条,封禁成功率百分之百

启动、放通、验证

启动并设为开机自启:

systemctl enable --now fail2ban

看状态:

fail2ban-client status sshd

出现“Currently banned: 1”说明已生效。另开终端故意输错密码三次,再查:

fail2ban-client status sshd

IP被关,ssh直接连不上,实测封禁立即生效

日志位置与排错

fail2ban日志在/var/log/fail2ban.log,若IP没被封,先确认日志路径写对:

grep sshd /var/log/secure | tail

能看到“Failed password”才算被filter识别;没有就是路径或正则问题,把logpath改成绝对路径即可。

防止自己被锁

运维最怕把自己关外面。jail.local里加:

ignoreip = 127.0.0.1/8 192.168.10.0/24

把公司网段或家里公网IP写进去,保存重载:

fail2ban-client reload

再手滑也不会被ban。

多端口一次搞定

网站、邮箱、数据库都想防,复制[sshd]段,改端口和日志路径即可。例如:

[nginx-404]

enabled = true

port = http,https

filter = nginx-404

logpath = /var/log/nginx/access.log

maxretry = 10

findtime = 60

bantime = 7200

filter文件放在/etc/fail2ban/filter.d/nginx-404.conf,正则匹配404和444状态码,一套逻辑通用所有服务

性能调优小贴士

日志大时把backend改成systemd,减少IO:

backend = systemd

同时把loglevel调到INFO,日志瘦身:

loglevel = INFO

老旧小机子也能跑得动。

卸载也干净

万一不用,先停服务:

systemctl stop fail2ban

卸软件:

yum remove fail2ban -y

手动清掉drop区的IP:

firewall-cmd --zone=drop --list-sources | xargs -I {} firewall-cmd --zone=drop --remove-source={}

系统恢复原状,不残留规则。

实测总结

全程十分钟,规则写一次长期受益。fail2ban自动盯日志、自动封、自动放,比手写iptables省命。自定义封禁时间后,暴力破解流量下降两个数量级,服务器负载跟着降,日志干净得像新装系统。

把上面步骤原样跑一遍,你的CentOS 7也能立刻拥有弹性又精准的防暴力破解盾牌。剩下的时间,去喝茶吧。

本站部分图片及内容来源网络,版权归原作者所有,转载目的为传递知识,不代表本站立场。若侵权或违规联系Email:zjx77377423@163.com 核实后第一时间删除。 转载请注明出处:https://blog.huochengrm.cn/pc/41686.html

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
请登录后评论...
游客游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~