1.简介
Fail2Ban 是一款入侵防御软件,可以保护服务器免受暴力攻击。 它是用 Python 编程语言编写的。 Fail2Ban 基于auth 日志文件工作,默认情况下它会扫描所有 auth 日志文件,如 /var/log/auth.log、/var/log/apache/access.log 等,并禁止带有恶意标志的IP,比如密码失败太多,寻找漏洞等等标志。
通常,Fail2Ban 用于更新防火墙规则,用于在指定的时间内拒绝 IP 地址。 它也会发送邮件通知。 Fail2Ban 为各种服务提供了许多过滤器,如 ssh、apache、nginx、squid、named、mysql、nagios 等。
Fail2Ban 能够降低错误认证尝试的速度,但是它不能消除弱认证带来的风险。 这只是服务器防止暴力攻击的安全手段之一。
2.安装
对于 CentOS/RHEL,启用 EPEL 库或 RPMForge 库,使用 YUM 命令安装。
yum install fail2ban
# 如果找不到fail2ban包,就执行下面的命令
yum install epel-release
3.配置
默认情况下,Fail2Ban 将所有配置文件保存在 /etc/fail2ban/ 目录中。 主配置文件是 jail.conf,它包含一组预定义的过滤器。 出于安全起见默认配置最好保留。
Fail2Ban 配置文件位于 /etc/fail2ban/jail.conf。
备份
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
# 修改jail.local
vi /etc/fail2ban/jail.local
[DEFAULT]
#此参数为加白的网段、IP,可以是域名、网段或单个IP,空格隔开。
ignoreip = 127.0.0.1/8 ::1
#设置被封锁的时间间隔,如下表示10分钟,可以是秒(s)、分钟(m)、小时(h)、天(d),不带单位则默认为s,-1表示永久封锁。
bantime = 10m
#检测的间隔时间,在间隔时间内,当>=maxtretry设置的失败次数,则触发限制,禁止访问。
findtime = 10m
#findtime时间内的最大失败次数
maxretry = 5
[sshd]
enabled = true #启用sshd模块
port = 22 #ssh端口
logpath = /var/log/auth.log #日志路径
backend = %(sshd_backend)s #后台管理程序,默认由systemd接管,无需修改
4.启动
systemctl start fail2ban
5.查看fail2ban已启动的模块
fail2ban-client status
fail2ban-client status sshd # 查看sshd模块状态
6.fail2ban-client常用命令
fail2ban-client start sshd # 启动sshd模块
fail2ban-client stop sshd # 停止sshd模块
fail2ban-client restart sshd # 重启sshd模块
fail2ban-client reload # 重新加载配置文件
黑名单操作 (注意,黑名单测试时,不要把自己的IP加到黑名单里做测试,否则就连不上机器了)
IP加入黑名单:fail2ban-client set sshd banip 192.168.1.8
IP解锁:fail2ban-client set sshd unbanip 192.168.1.8
白名单操作
IP加入白名单:fail2ban-client set sshd addignoreip 192.168.1.8
IP从白名单中移除:fail2ban-client set sshd delignoreip 192.168.1.8
在所有监狱中加入IP白名单:fail2ban-client unban 192.168.1.8
使用unban解除封锁的IP
fail2ban-client unban 192.168.1.16
fail2ban-client unban --all #解除所有