Linux开源入侵防御IPS(Fail2ban)安装与配置_nginx

在管理 linux 服务器时,提高服务器安全性应该是您的首要任务之一。

通常我们可以通过查看服务器日志,能发现针对暴力登录、网络泛滥、漏洞利用搜索等的不同尝试。

fail2ban是一款开源的入侵预防系统(IPS)您可以检查服务器日志并添加额外的 iptables 规则来阻止有问题的 IP 地址。


Fail2ban部署要求

Fail2ban 是用 python 编写的,唯一的要求是安装 python:

  • Fail2ban 分支 0.9.x 需要 Python >=2.6 或 Python >=3.2
  • Fail2ban 分支 0.8.x 需要 Python >=2.4
  • 对系统的 root 访问权限
  • (可选)iptables 或 showewall 和 sendmail

Fail2ban工作原理

Fail2ban的工作原理是监视系统日志文件,并根据预定义的规则识别登录失败的尝试。当检测到可疑活动时,Fail2ban会自动采取措施阻止攻击者,例如:

  • 临时或永久阻止攻击者的IP地址
  • 延迟攻击者的连接尝试
  • 向管理员发送警报

安装 Fail2Ban

fail2ban 的安装相对简单:

在 CentOS/RHEL 上安装 Fail2Ban

首先,更新您的软件包,启用 Epel 存储库并安装 fail2ban,如下所示。

# yum update
# yum install epel-release
# yum install fail2ban

在 Debian/Ubuntu 上安装 Fail2Ban

首先,更新您的软件包并安装 fail2ban,如下所示。

# apt-get update && apt-get upgrade -y
# apt-get install fail2ban

(可选)如果您希望启用邮件支持(用于邮件通知),则可以安装 sendmail。

# yum install sendmail                   [On CentOS/RHEL]
# apt-get install sendmail-bin sendmail  [On Debian/Ubuntu]

要启用 fail2ban 和 sendmail,请使用以下命令:

# systemctl start fail2ban
# systemctl enable fail2ban
# systemctl start sendmail
# systemctl enable sendmail

配置 Fail2ban

默认情况下,fail2ban 使用位于 /etc/fail2ban/ 中的.conf文件,这些文件首先被读取。但是,这些文件可以被位于同一目录中的.local文件覆盖。

  • loglevel – 这是要记录的详细级别。可能的选项包括:
  • CRITICAL - 危急
  • ERROR - 错误
  • WARNING - 警告
  • NOTICE - 通知
  • INFO - 信息
  • DEBUG - 调试
  • logtarget – 将操作记录在特定文件中。默认值为 /var/log/fail2ban.log。但是,您可以将其更改为:
  • STDOUT – 输出任何数据
  • STDERR – 输出任何错误
  • SYSLOG – 基于消息的日志记录
  • File – 输出到文件
  • socket – 放置套接字文件的目录。
  • pidfile – pidfile 的位置。

配置 jail.local

ail2ban 中最重要的文件之一是定义你的jail(小黑屋)。您可以在jail.conf定义应为其启用 fail2ban 的服务。

正如我们之前提到的,.conf文件可能会在升级过程中被更改,因此您应该创建一个 jail.local 文件,您可以在其中应用修改。

另一种方法是简单地复制 .conf 文件:

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

如果您使用的是 CentOS 或 Fedora,您需要将 jail.local 中的后端从 “auto” 更改为 “systemd”。

Linux开源入侵防御IPS(Fail2ban)安装与配置_Fail2Ban_02

如果您使用的是 Ubuntu/Debian,则无需进行此修改,即使他们也使用 systemd

默认情况下,jail 文件会为 Debian 和 Ubuntu 启用 SSH,但在 CentOS 上则不启用。如果您想启用它,只需更改 /etc/fail2ban/jail.local 中的以下行:

[sshd]
enabled = true
禁止和重试时间

您可以配置阻止 IP 地址的情况。为此,fail2ban 使用 bantimefindtime 和 maxretry

  • bantime – 这是 IP 地址将保持被禁止状态的秒数(默认为 10 分钟)。
  • findtime – 在主机被禁止之前,登录尝试之间的时间量。(默认 10 分钟)。换言之,如果 fail2ban 设置为在 3 次登录尝试失败后阻止 IP 地址,则这 3 次尝试必须在查找时间段(10 分钟)内完成。
  • maxretry – 在应用禁令之前进行的尝试次数。(默认值为 3)。
白名单IP地址

当然,您需要将某些 IP 地址列入白名单。要配置此类 IP 地址,请使用您喜欢的文本编辑器打开 /etc/fail2ban/jail.local,并取消注释以下行:

ignoreip = 127.0.0.1/8  ::1

然后,您可以放置要忽略的 IP 地址。IP 地址应与空格或逗号分隔。

电子邮件提醒

如果您希望在事件发生时收到邮件警报,则必须在 /etc/fail2ban/jail.local 中配置以下设置:

  • destemail – 邮件地址,您将在其中收到通知。
  • Sendername – 接收邮件时将看到的发件人。
  • sender – fail2ban 发送电子邮件的电子邮件地址。

默认 mta邮件传输代理)设置为 sendmail

为了接收邮件通知,您还需要将“操作”设置从以下位置更改为:

Action = %(action_)s

对其中之一:

action = %(action_mw)s
action = %(action_mwl)s
  • %(action_mw)s – 将禁止主机并发送带有 whois 报告的邮件。
  • %(action_mwl)s – 将禁止主机,提供 WHOIS 信息和日志文件中的所有相关信息。

其他 Jail 配置

到目前为止,我们已经了解了基本配置选项。如果要配置 jail,则需要在 jail.local 文件中启用它。语法非常简单:

[jail_to_enable]
. . .
enabled = true

您应该将 jail_to_enable 替换为实际的 jail,例如“sshd”。在 jail.local 文件中,将为 ssh 服务预定义以下值:

[sshd]

port = ssh
logpath = %(sshd_log)s

您可以启用筛选器,这将有助于识别日志中的某一行是否为失败的行。filter 值实际上是对服务名称后跟 .conf 的文件的引用。例如:/etc/fail2ban/filter.d/sshd.conf

语法为:

filter = service

例如:

filter = sshd

您可以在以下目录中查看现有筛选器:/etc/fail2ban/filter.d/

使用 fail2ban-client

Fail2ban 附带一个客户端,可用于查看和更改当前配置。由于它提供了许多选项,因此您可以通过以下方式阅读其手册:

# man fail2ban-client

在这里,您将看到一些可以使用的基本命令。要查看 fail2ban 或特定 jail 的当前状态,您可以使用:

# fail2ban-client status

结果将如下所示:

Linux开源入侵防御IPS(Fail2ban)安装与配置_linux开源IPS_03

检查 Fail2ban 状态

对于单个监狱,您可以运行:

# fail2ban-client status sshd

在下面的屏幕截图中,您将看到我故意使多次登录失败,因此 fail2ban 可以阻止我尝试连接的 IP 地址:

Linux开源入侵防御IPS(Fail2ban)安装与配置_nginx_04

检查 Fail2ban SSH 状态

配置SSH服务

默认情况下,Fail2ban会自动配置一些常见服务的规则,包括SSH。但是,你可以根据需要自定义这些规则。要配置SSH服务的Fail2ban规则,编辑/etc/fail2ban/jail.conf文件。找到如下部分:

$tail  /etc/fail2ban/jail.conf 
[sshd]

# To use more aggressive sshd modes set filter parameter "mode" in jail.local:
# normal (default), ddos, extra or aggressive (combines all).
# See "tests/files/logs/sshd" or "filter.d/sshd.conf" for usage example and details.
#mode   = normal
port    = 22
logpath = %(sshd_log)s
backend = %(sshd_backend)s
bantime  = 8h

配置Nginx服务

要配置Nginx服务的Fail2ban规则,在/etc/fail2ban/jail.conf文件中添加以下内容:

[Definition]
name     = nginx-http 
filter   = /var/log/nginx/access.log 
action   = iptables-multiport
bantime  = 8h

可以修改以下参数:

  • name: 规则名称,建议设置为nginx-http
  • filter: 指定要监视的日志文件,默认值为/var/log/nginx/access.log
  • action: 指定当检测到可疑活动时要采取的措施,默认值为iptables-multiport,表示将攻击者的IP地址添加到iptables防火墙的黑名单中

重启Fail2ban服务

在完成配置后,重启Fail2ban服务以使更改生效:

sudo systemctl restart fail2ban

测试Fail2ban

检查fail2ban的运行状态:

Linux开源入侵防御IPS(Fail2ban)安装与配置_nginx_05