fail2ban安装配置流程

网上指导的先安装epel-release,在安装fail2ban根本不管用,所以这里写下自己的安装方法:

  1. 安装

git clone https://github.com/fail2ban/fail2ban.git

cd fail2ban

sudo python setup.py install

  1. 配置fail2ban来保护ssh

Fail2ban服务将其配置文件保留在/etc/fail2ban目录中。在那里,您可以找到一个名为默认值jail.conf的文件。由于包升级可能会覆盖此文件,因此我们不应该就地编辑它。相反,我们将编写一个名为jail.local的新文件。定义的任何jail.local值都将覆盖其中的jail.conf值。

jail.conf包含一个[DEFAULT]部分,后面是各个服务的部分。
jail.local可以覆盖任何这些值。此外,/etc/fail2ban/jail.d/中的文件可用于覆盖这两个文件中的设置。文件按以下顺序应用:

  1. /etc/fail2ban/jail.conf

  2. /etc/fail2ban/jail.d/*.conf按字母顺序排列

  3. /etc/fail2ban/jail.local

  4. /etc/fail2ban/jail.d/*.local按字母顺序排列

任何文件都可以包含一个[DEFAULT]部分,首先执行,也可以包含各个jails的部分。为给定参数设置的最后一个vavalue优先。

让我们从编写一个非常简单的版本jail.local开始。使用nano(或您选择的编辑器)打开一个新文件:

sudo nano /etc/fail2ban/jail.local

粘贴以下内容:

[DEFAULT]

Ban hosts for one hour:

bantime = 3600

Override /etc/fail2ban/jail.d/00-firewalld.conf:

banaction = iptables-multiport

[sshd]

enabled = true

这会覆盖三个设置:它为所有服务设置新的默认值bantime,确保我们iptables用于防火墙配置,并启用sshdjail。

探索可用设置

我们上面定义的版本jail.local是一个很好的开始,但您可能想要调整许多其他设置。打开jail.conf,我们将检查一些默认值。如果您决定更改这些值中的任何一个,请记住应将它们复制到相应的部分jail.local并在那里进行调整,而不是就地修改。

sudo nano /etc/fail2ban/jail.conf

所有Jails的默认设置

首先,滚动查看[DEFAULT]部分。

ignoreip = 127.0.0.1/8

您可以通过向ignoreip参数添加值来调整Fail2ban忽略的源地址。目前,它被配置为不禁止来自本地计算机的任何流量。您可以通过将其附加到参数的末尾来包含要忽略的其他地址,并以空格分隔。

bantime = 600

该bantime参数设置客户端无法正确验证时将被禁止的时间长度。这是以秒为单位测量的。默认情况下,此值设置为600秒或10分钟。

findtime = 600

maxretry = 3

您要注意的下两个参数是findtime和maxretry。这些共同努力确立了禁止客户的条件。

该maxretry变量设置客户端findtime在被禁止之前在定义的时间窗口内进行身份验证的尝试次数。使用默认设置,Fail2ban将禁止在10分钟窗口内尝试登录3次失败的客户端。

destemail = root@localhost

sendername = Fail2Ban

mta = sendmail

如果要配置电子邮件警报,您可能需要重写destemail,sendername和mta设置。该destemail参数设置应接收禁止消息的电子邮件地址。该sendername套在电子邮件中的”发件人”字段的值。该mta参数配置将用于发送邮件的邮件服务。

action = %(action_)s

此参数配置Fail2ban在要禁止时采取的操作。该值action_在此参数之前不久的文件中定义。默认操作是简单地将防火墙配置为拒绝来自违规主机的流量,直到禁用时间结束。

如果你想配置电子邮件警报,您可以覆盖从该值action_到action_mw。如果您希望电子邮件包含相关日志行,则可以将其更改为action_mwl。如果选择使用邮件警报,则需要确保已配置相应的邮件设置。

单个监狱的设置

之后[DEFAULT],我们将遇到为不同服务配置单个jails的部分。这些通常包括port禁止和logpath监视恶意访问尝试。例如,我们已启用的SSH
jail jail.local具有以下设置:

[sshd]

port = ssh

logpath = %(sshd_log)s

在这种情况下,ssh是标准SSH端口的预定义变量,并%(sshd_log)s使用Fail2ban标准配置中其他地方定义的值(这有助于jail.conf在不同的操作系统之间保持可移植性)。

注意:这里的%(sshd_log)s在一般的Linux系统中代表/var/log/auth.log,而CentOS的相关登录日志是在/var/log/secure中,所以需要直接指定为/var/log/secure

  1. 启动fail2ban

进入fail2ban的bin文件夹,使用命令fail2ban-client start启动。

或者将build下的fail2ban.service复制到/usr/lib/systemd/system下面,启动服务

(查看service内部会发现在install的时候,它已经在.pyenv/version中生成对应py版本的fail2ban-client等文件)

监控Fail2ban日志和防火墙配置

重要的是要知道像Fail2ban这样的服务正在按预期工作。首先用systemctl于检查服务的状态:

sudo systemctl status fail2ban

如果这里看起来不对劲,您可以通过检查fail2ban自上次启动后的设备日志来进行故障排除:

sudo journalctl -b -u fail2ban

接下来,用fail2ban-client于查询整个fail2ban-server或任何单个jail状态:

sudo fail2ban-client status

sudo fail2ban-client status jail_name

按照Fail2ban的日志记录最近的操作(按Ctrl-C退出):

sudo tail -F /var/log/fail2ban.log

列出为iptables配置的当前规则:

sudo iptables -L

以反映启用每个规则所需命令的格式显示iptables规则:

sudo iptables -S


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!