CentOS8 使用 fail2ban 防止 sshd 被暴力破解

一,简介

fail2ban是用python编写的开源软件,fail2ban 通过扫描日志文件,利用正则式匹配登录错误的IP地址,然后可以将IP地址列入防火墙中,同时还能给我发送 email 以提醒我有哪个IP地址被ban了。


二,安装 Fail2ban

Fail2ban软件包包含在默认的CentOS 8存储库中。要安装它,请以root或具有sudo特权的用户身份输入以下命令:

sudo dnf install fail2ban

安装完成后,启用并启动Fail2ban服务:

$ sudo systemctl enable --now fail2ban
Created symlink /etc/systemd/system/multi-user.target.wants/fail2ban.service → /usr/lib/systemd/system/fail2ban.service.

要检查Fail2ban服务器是否正在运行,请输入:

sudo systemctl status fail2ban


如果源中没有 fail2ban,可以参考官网更新源 https://fedoraproject.org/wiki/EPEL


三,Fail2ban 配置

默认的Fail2ban安装中带有两个配置文件,/etc/fail2ban/jail.conf 和 /etc/fail2ban/jail.d/00-firewalld.conf。这些文件不应该被修改,因为它们可能会在更新软件包时被覆盖。

Fail2ban会按照以下顺序读取配置文件:

/etc/fail2ban/jail.conf
/etc/fail2ban/jail.d/*.conf
/etc/fail2ban/jail.local
/etc/fail2ban/jail.d/*.local

每个.local文件都会覆盖文件中的设置.conf。


从默认的 jail.conf 文件中创建一个 .local 配置文件:

sudo cp /etc/fail2ban/jail.{conf,local}

在 /etc/fail2ban/jail.local 文件中找到 [sshd]:

[sshd]
enabled = true // 开启 sshd jail
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s


修改完配置文件记得重启 sudo systemctl restart fail2ban


四,设置

将IP地址列入白名单

ignoreip = 127.0.0.1/8 ::1 123.123.123.123 192.168.1.0/24


bantime禁止IP的持续时间

如果未指定后缀,则默认为秒。默认情况下,该bantime值设置为10分钟。通常,大多数用户会希望设置更长的禁止时间。根据您的喜好修改值:

/etc/fail2ban/jail.local文件中:

bantime = 1d

要永久禁止IP,请使用负数。


findtime 是设置禁令前的失败次数之间的持续时间。例如,如果将Fail2ban设置为在5次失败后禁止IP(maxretry请参见下文),则这些失败必须在findtime持续时间内发生。

/etc/fail2ban/jail.local文件中:

findtime = 10m


maxretry 是禁止IP之前的失败次数。默认值设置为5,这对于大多数用户来说应该没问题。

/etc/fail2ban/jail.local文件中:

maxretry = 5


邮件通知

当IP被禁止时,Fail2ban可以发送电子邮件警报。要接收电子邮件,您需要在服务器上安装SMTP并更改默认操作,该操作仅将IP禁止为%(action_mw)s,如下所示:

/etc/fail2ban/jail.local文件中:

action = %(action_mw)s

%(action_mw)s将禁止违规的IP,并发送包含Whois报告的电子邮件。如果要在电子邮件中包含相关日志,请将操作设置为%(action_mwl)s。

您还可以调整发送和接收电子邮件地址:

/etc/fail2ban/jail.local文件中:

destemail = admin@linuxize.com
sender = root@linuxize.com


五,Fail2ban客户端

Fail2ban附带了一个名为的命令行工具fail2ban-client,可用于与Fail2ban服务进行交互。此工具可用于禁止/取消禁止IP地址,更改设置,重新启动服务等等。这里有一些例子:

#检查Jails的状态:
sudo fail2ban-client status sshd
#取消IP:
sudo fail2ban-client set sshd unbanip 23.34.45.56
#禁止IP:
sudo fail2ban-client set sshd banip 23.34.45.56



备注:

Fail2ban使用Jails的概念。Jails描述了一项服务,其中包括过滤器和操作。对符合搜索模式的日志条目进行计数,并在满足预定义条件时执行相应的操作。

Fail2ban附带有许多用于不同服务的Jails。您还可以创建自己的Jails配置。

认情况下,在CentOS 8上,没有启用Jails。要启用Jails,您需要在Jails标题后添加 enabled = true。下面的例子显示了如何启用sshd jail。

主义当日志文件过大的时候,可能会消耗过多CPU资源。



参考

https://fedoraproject.org/wiki/EPEL

https://www.v2ex.com/t/588382

https://www.v2ex.com/t/204579

https://my.oschina.net/plutonji/blog/191683

https://www.cnblogs.com/a5idc/p/13650056.html

https://www.doc88.com/p-901293186611.html


声明:本站所有文章和图片,如无特殊说明,均为原创发布。商业转载请联系作者获得授权,非商业转载请注明出处。
随机推荐
JWT 存储在 Cookie 和 Web Storage 的区别
JavaScript getter和setter
Node.js fs 文件系统模块
MySQL 批量插入数据时如何解决重复问题
CSS 图片缩小出现锯齿
Express.js CSRF 安全防护
WordPress 侧边栏小工具
ReferenceError: __dirname is not defined in ES module scope