Fail2Ban恶意ip封禁
Fail2Ban 是一个广泛使用的工具,用于检测恶意登录尝试和其他异常活动,并自动封锁攻击者的IP地址。您可以配置它来检测过多的连接请求,然后暂时封锁来自恶意IP地址的访问。
安装
apt update apt install fail2ban
|
启动
开机自启
systemctl enable fail2ban
|
查看状态
systemctl status fail2ban
|
配置
主配置文件创建本地副本
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
|
编辑本地副本
vim /etc/fail2ban/jail.local
|
这就是总的配置文件了。
一般分开来写
先执行下面这个代码,删除不必要的东西
rm -rf /etc/fail2ban/jail.d/*
|
然后写一个,按自己需要写
vim /etc/fail2ban/jail.d/sshd.local
|
例如
[sshd] enabled = true #启用对ssh服务的防护 port = ssh #指定要防护的ssh端口 maxretry = 3 #允许的最大密码重试失败次数 bantime = 600 #封时长,单位:秒;600秒 = 10分钟,封禁时间内该IP无法连接你的ssh findtime = 600 #测窗口期,单位:秒;600秒 = 10分钟,含义:在【10分钟】内如果失败次数达到maxretry,立即触发封禁
|
[mysqld] enabled = true # 启用 mysqld 服务的监控 port = mysql # 监控 MySQL 服务的默认端口,通常为 3306 maxretry = 5 # 最大失败次数,超过后封禁 bantime = 600 # 封禁时间为 10 分钟 findtime = 600 # 在 10 分钟内,如果失败次数超过 5 次则封禁
|
这个都是根据端口来的。还可以自定义行为,不过多阐述了,自行研究
查看封锁列表
查看SSH封锁情况
fail2ban-client status sshd
|
查看总日志的
tail -f /var/log/fail2ban.log
|
自定义封ip
逻辑是Fail2Ban = 日志 → 正则匹配 → 失败次数 → 封 IP
创建一个vim /etc/fail2ban/jail.d/jail.local(文件名可以自定义)文件,写入对应的配置
1、日志存在(你的服务能写日志)
日志必须包含「客户端 IP」,这一行就是 Fail2Ban 与你服务之间唯一的“连接点”。
[myservice] logpath = /var/log/server.log #日志文件的位置
|
确保有权限读取该文件
ls -l /etc/fail2ban/jail.d/jail.local
|
2、filter(正则):告诉 Fail2Ban 哪一行算“攻击/失败”
3、jail(策略):失败几次、封多久、封到哪里
这是一个完整的示例
[server-log] enabled = true backend = auto logpath = /var/log/server.log filter = server-log
maxretry = 3 findtime = 60 bantime = 3600
banaction = nftables-multiport
|
[server-log]、定义一个 **jail 名字**,后面所有配置都属于这个规则名字可以随便,但要和 filter 对应
enabled = true、是否启用这个 jail,`false` = 完全不生效
backend = auto、Fail2Ban **用什么方式读日志**,auto = 自动判断(普通文件就用轮询)一般不要改
logpath = /var/log/server.log、**最关键的一行**指定 Fail2Ban 要读取的日志文件fail2Ban 会像 `tail -F` 一样读它
filter = server-log、指定使用哪个 **filter(正则规则)**,对应文件位置/etc/fail2ban/filter.d/server-log.conf
maxretry = 3、**同一个 IP**在 `findtime` 时间内失败达到 3 次→ 触发封禁
findtime = 60、统计失败次数的时间窗口。单位:秒60 秒内的失败才算数
bantime = 3600、封 IP 多久。单位:秒3600 = 1 小时
banaction = nftables-multiport、**真正执行“封 IP”的方式**,使用 nftablesFail2Ban 只是调用这个动作
|
在详细说以下filter,这就是匹配的正则规则
完整内容
[Definition] failregex = .*LOGIN FAIL ip=<HOST>.* ignoreregex =
|
[Definition]、固定写法
failregex = .*LOGIN FAIL ip=<HOST>.*、匹配任何一行只要包含 `LOGIN FAIL ip=`并且后面跟着一个 IP
ignoreregex =、用来排除某些行这里留空表示不排除
|
例如
日志为
改为
failregex = .*登录失败,ip为<HOST>.*
|