fail2ban 是一个更加强大和灵活的工具,它可以监控多种日志文件,并根据用户自定义的规则进行拉黑。例如,可以监控 SSH、FTP、Apache 等服务的日志文件,根据设定的规则来判断恶意访问行为,如登录失败、多次访问不存在的 URL、频繁访问等,然后自动拉黑恶意 IP 地址。
fail2ban 的优点是功能强大,可以对多种恶意行为进行处理;
缺点是配置比较繁琐,需要用户自定义规则,并且可能会误判合法访问。
Fail2ban目录结构如下:
/etc/fail2ban/action.d —– iptables 、mail 等动作文件目录
/etc/fail2ban/fail2ban.conf —– 定义日志级别、日志、sock文件位置等
/etc/fail2ban/filter.d —– 条件匹配(过滤器)文件目录,过滤日志关键内容
/etc/fail2ban/jail.conf —– 主配置文件,主要设置启用ban动作的服务及动作阀值,不建议修改
/etc/fail2ban/jail.d/ —– fail2ban模块化子配置文件
安装fail2ban
epel_release源安装fail2ban
# 安装epel_release源
yum install -y epel-release
# 建立缓存
yum makecache
# 安装fail2ban
yum install -y fail2ban fail2ban-firewalld fail2ban-systemd
# Centos7支持tcpd,需要安装fail2ban-hostsdeny
yum install -y fail2ban-hostsdeny
# 现在启动并开机自启
systemctl enable --now fail2ban
源码安装fail2ban
版本 1.0/0.11/0.10(和旧的 0.9)将仍然基于 python2.7
版本1.01及以后以后使用python3
# 安装sqlite3
yum install -y sqlite
# 安装依赖
yum install -y python2 python3
# 下载Fail2ban源码
wget -c https://github.com/fail2ban/fail2ban/archive/refs/tags/1.0.2.tar.gz
# 解压Fail2ban
tar xvf 1.0.2.tar.gz
# 进入解压后的Fail2ban目录
cd fail2ban-1.0.2
# 安装Fail2ban
python3 setup.py install --record fail2ban_install.log
# 如果是1.0以下低版本,请使用python2安装
python2 setup.py install --record fail2ban_install.log
#复制fail2ban服务脚本
cp /root/fail2ban-1.0.2/files/redhat-initd /etc/init.d/fail2ban
#设置fail2ban服务为自启动服务
systemctl enable fail2ban
#启动fail2ban服务
systemctl start fail2ban
# 卸载Fail2ban
cat fail2ban_install.log | xargs rm -rf
全局配置白名单IP(非必须)
vim /etc/fail2ban/filter.d/jail.local
# 全局配置
[DEFAULT]
# 要忽略的 IP 地址。 IP 地址列表可以使用 CIDR 表示法
ignoreip = 10.0.0.0/24
# 封禁IP时间(以秒为单位)。负数-1为“永久”禁止
## 86400秒=1天
bantime = 86400
findtime = 300
maxretry = 5
# banaction = iptables-multiport
backend = systemd
子配置启用sshd保护策略
vim /etc/fail2ban/jail.d/sshd_jail.local
[sshd]
# 启用防护
enabled = true
# 选择过滤器
filter = sshd
# 启用抗攻击防护模式--防护策略敏感度最高
# 正常(默认)、ddos、额外或 aggressive (攻击性 全部组合)。
## normal (default), ddos, extra or aggressive (combines all).
# 有关使用示例和详细信息,请参阅“tests/files/logs/sshd”或“filter.d/sshd.conf”。
mode = aggressive
# 禁止 IP 的持续时间(以秒为单位)。负数-1为“永久”禁止。
## 86400秒为1天
bantime = 86400
## 如果在“findtime”秒内未找到匹配,则计数器设置为零。默认 600s
findtime = 300
# ssh登录失败阈值默认为 3
maxretry = 5
# 指定封禁的端口,默认为0:65535,也就是所有端口,但可以在jail中设定
port = ssh
# 使用哪个工具方法阻止IP
## firewall防火墙: firewallcmd-ipset
## iptables防火墙: iptables 或 iptables-multiport
## 拉黑到/etc/hosts.deny: hostsdeny
banaction = iptables-multiport
hostsdeny
# 日志路径
logpath = %(sshd_log)s
# 指定用于修改日志文件的后端
#backend = %(sshd_backend)s
backend = systemd
常用命令
# 启动Fail2ban
systemctl start fail2ban
# Fail2ban设置为开机自启动
systemctl enable fail2ban
# 重新加载配置或重启服务
systemctl reload-or-restart fail2ban.service
# 查看服务是否正常运行
systemctl status fail2ban.service -l
# 查看哪些IP被ban
fail2ban-client status sshd
# 将IP从黑名单中移除
fail2ban-client set sshd unbanip 8.8.8.8
—————— 展开浏览全文 ——————