安装

ubutun

sudo apt update
sudo apt install fail2ban

centOS:

# CentOS 7:
sudo yum install epel-release

# CentOS 8:
sudo dnf install epel-release

# CentOS 7:
sudo yum install fail2ban

# CentOS 8:
sudo dnf install fail2ban

配置

Fail2ban 的主要配置文件是 /etc/fail2ban/jail.conf。​​不建议直接修改这个文件​​,因为未来软件包更新可能会覆盖你的更改。

正确的做法是创建一个名为 jail.local的本地配置文件,它会自动覆盖 jail.conf中的相同设置。

sudo nano /etc/fail2ban/jail.local

写入一下基本配置

[DEFAULT]
# 禁止一个IP地址的持续时间(秒)
bantime = 3600

# 时间窗口(在此时间内达到最大尝试次数则触发禁止)
findtime = 600

# 在时间窗口内允许的最大失败次数
maxretry = 5

# 忽略的IP地址范围(例如本地网络或你信任的IP)
ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24

[sshd]
# 启用SSH保护
enabled = true
# 使用系统的UFW防火墙进行封禁(如果你用的是UFW)
banaction = ufw
# 日志路径(Ubuntu默认SSH日志路径)
port = ssh
logpath = %(sshd_log)s
maxretry = 3

参数解释​​:

bantime = 3600: IP 被禁止 1 小时(3600 秒)。可以设置为 -1来永久封禁,但需谨慎。

findtime = 600: 在 10 分钟(600 秒)内。

maxretry = 5: 如果失败 5 次,则触发封禁。在上面 [sshd]章节里,我覆盖为了更严格的 3次。

ignoreip: 非常重要!确保将你的本地局域网IP段(如 192.168.1.0/24)和你自己的公网IP地址加进去,以防自己不小心把自己锁在外面。

启动并启用 Fail2ban

配置完成后,启动服务并设置它开机自启:

sudo systemctl enable fail2ban --now

检查状态

使用以下命令检查 Fail2ban 的运行状态和当前被封禁的IP列表:

 #查看服务状态
sudo systemctl status fail2ban
# 查看sshd监狱的详细状态,包括当前被禁止的IP数量
sudo fail2ban-client status sshd

输出会类似于:

Status for the jail: sshd
|- Filter
|  |- Currently failed: 0
|  |- Total failed:     15
|  `- Journal matches:  _SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
   |- Currently banned: 1
   |- Total banned:     5
   `- Banned IP list:   123.456.789.123

进阶用法和提示

​​邮件通知​​:你可以在 jail.local的 [DEFAULT]部分配置 mta = sendmail和 destemail = your-email@example.com以及 sender = fail2ban@yourserver.com,这样当有IP被封禁时,你会收到邮件通知。

​​更严格的保护​​:对于 SSH,Fail2ban 还有一个 [sshd-ddos]监狱,用于防御更密集的攻击,你可以同样启用它 enabled = true。

​​查看日志​​:Fail2ban 自己的日志在 /var/log/fail2ban.log,你可以用 sudo tail -f /var/log/fail2ban.log来实时查看动态。

​​解封IP​​:如果你误封了一个IP,可以使用以下命令解封:

sudo fail2ban-client set sshd unbanip IP_ADDRESS

重要提醒:Fail2ban 是“最后一道防线”

虽然 Fail2ban 非常有效,但它是一种​​反应式​​的防御措施。​​最佳实践是首先配置好SSH本身,使其更难被破解​​:

​​使用密钥认证,彻底禁用密码认证​​:这是最根本、最有效的方法。

​​更改默认的22端口​​:虽然这属于“安全通过隐蔽性”,但能有效减少被自动化脚本扫描到的概率。

​​禁止root用户直接登录​​。

​​总结:Fail2ban + 密钥认证 + 非标准端口​​ 是一个极其强大且轻量级的SSH安全组合拳,被全球无数系统管理员所采用。请立即安装并配置它,你的服务器安全级别会立刻得到大幅提升。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐