fail2ban安装配置流程
网上指导的先安装epel-release,在安装fail2ban根本不管用,所以这里写下自己的安装方法:
- 安装
git clone https://github.com/fail2ban/fail2ban.git
cd fail2ban
sudo python setup.py install
- 配置fail2ban来保护ssh
Fail2ban服务将其配置文件保留在/etc/fail2ban目录中。在那里,您可以找到一个名为默认值jail.conf的文件。由于包升级可能会覆盖此文件,因此我们不应该就地编辑它。相反,我们将编写一个名为jail.local的新文件。定义的任何jail.local值都将覆盖其中的jail.conf值。
jail.conf包含一个[DEFAULT]部分,后面是各个服务的部分。
jail.local可以覆盖任何这些值。此外,/etc/fail2ban/jail.d/中的文件可用于覆盖这两个文件中的设置。文件按以下顺序应用:
/etc/fail2ban/jail.conf
/etc/fail2ban/jail.d/*.conf按字母顺序排列
/etc/fail2ban/jail.local
/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
- 启动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 协议 ,转载请注明出处!