开始服务器运营后,您将面对众多外部攻击。SSH暴力破解攻击、针对Web应用程序的任意登录尝试、端口扫描等都是日常威胁。如果忽视这些威胁,最终可能导致系统入侵。Fail2Ban是一个轻量级且强大的基于Linux的入侵防御解决方案,能够解决这些问题。

Fail2Ban会自动检测并阻止可疑的IP地址。通过这个,管理员可以轻松保护服务器,而无需额外的麻烦。

Fail2Ban安装方法

Fail2Ban几乎在所有Linux发行版中都有提供,安装非常简单。

Ubuntu/Debian系列

sudo apt update
sudo apt install fail2ban

安装完成后,启动服务并设置为开机自动启动。

sudo systemctl start fail2ban
sudo systemctl enable fail2ban

Fail2Ban概述

Fail2Ban基本设置方法

Fail2Ban以/etc/fail2ban/jail.conf文件作为基本配置文件,建议不要直接修改该文件,而是创建/etc/fail2ban/jail.local文件进行定制。

创建jail.local文件:

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

主要设置项: - bantime:阻止时间(以秒为单位) - findtime:被视为攻击尝试的时间范围(以秒为单位) - maxretry:允许的最大失败尝试次数

[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 5

[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log

实际应用案例示例

1. 阻止SSH暴力破解

如上所述,设置[sshd]监狱后,如果登录失败超过5次,该IP将被阻止1小时。

2. 阻止Apache登录攻击

[apache-auth]
enabled = true
filter = apache-auth
logpath = /var/log/apache2/error.log
maxretry = 3

对Web服务器的认证失败发生3次时,将被阻止。

Fail2Ban监控方法

监控Fail2Ban是否正常工作的方式有多种。

1. 通过fail2ban-client检查状态

您可以检查特定监狱(例如:sshd)的状态。

sudo fail2ban-client status sshd

输出示例:

状态对于监狱:sshd
|- 过滤器
|  |- 当前失败:2
|  |- 总失败:15
|  `- 文件列表: /var/log/auth.log
`- 行动
   |- 当前被禁止:1
   |- 总被禁止:3
   `- 被禁止的IP列表:192.168.1.100

2. 日志文件监控

Fail2Ban的操作日志记录在/var/log/fail2ban.log文件中。

tail -f /var/log/fail2ban.log

您可以通过此实时监控阻止和解除事件。

Fail2Ban工作原理

  1. 日志监控: Fail2Ban持续监控指定的日志文件。(例如:/var/log/auth.log/var/log/apache2/error.log

  2. 应用过滤器: 检测特定模式(登录失败、认证错误等)。

  3. 执行操作: 如果超过设定的maxretry,将通过iptables阻止该IP或执行如firewall-cmd、nftables等防火墙命令。

  4. 自动解除:bantime到期后,将自动解除阻止。

Fail2Ban采用模块化结构,可以针对不同服务(监狱)进行独立的监控和阻止设置,从而不仅保护SSH,还能增强对多种服务的安全性。

对SSH攻击的永久阻止设置方法

必须果断应对SSH攻击者。通过将Fail2Ban的bantime设置为-1,可以永久阻止。

[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
bantime = -1
findtime = 600
maxretry = 5

这样设置后,SSH认证失败超过5次的IP将永久阻止,无法访问服务器。

[高级提示] 理解Fail2Ban的基本阻止操作

Fail2Ban不需要单独定义action即可基本工作。这是因为基本设置中包含使用iptables的阻止命令。

  • 如果没有单独指定action,将应用[DEFAULT]部分的action = %(action_)s设置。
  • %(action_)s将在内部使用iptables命令阻止恶意IP。
  • 因此,即使不单独编写action,也会通过iptables进行IP阻止。

基本阻止命令示例(action_.conf参考)

iptables -I INPUT -s <ip> -j REJECT

也就是说,Fail2Ban将自动控制iptables来阻止攻击IP。

注意: - 如果想使用UFW、firewalld等其他防火墙工具,则需要明确设置action。 - 此外,阻止规则在服务器重启时可能会消失,因此建议设置为在启动时自动启动Fail2Ban服务。


另外,也可以直接创建并应用各种过滤器,或进行电子邮件警告设置等高级设置。


从服务器暴露于互联网的那一刻起,安全就不再是选择,而是必需。
一瞬间的疏忽可能会导致致命的后果。
Fail2Ban将成为有效拦截这些威胁的坚固屏障。
请记住,现在就有某人对您的服务器虎视眈眈。