使用Fail2ban保护你的Linux服务器
你是否在担心你的服务器被暴力破解?你是否还在担心恶意频繁请求导致你的服务不可用?今天带给大家一款开源防护工具 “Fail2ban” ,从此让你睡个安稳觉,起因是因为自己家里开了公网IP,对外映射了一个内网都Linux机器,方便自己从外面访问到家里,今天一看日志,好家伙,ssh登录失败上千次,作为注重安全的哦,必须想办法阻止这一切。
很多人第一时间想到最好的办法就是使用白名单,只允许指定的IP地址访问到家里,确实是一个不错的办法,但是人在外面网络环境随时都在变化,可能是流量访问又可能是家庭网络,所以不是一个好的办法,为了让自己能访问,又要能把一些“非法”用户阻断,那么就用到了这款 “Fail2ban” ,今天就带大家一起来试试,学会了之后举一反三,它内置了很多规则,简单修改启用就可以达到意想不到的效果。
介绍
《来自ChatGPT生成》Fail2ban 是一款开源的安全工具,可用于自动阻止恶意 IP 地址的攻击、暴力破解等行为。它可以监视各种日志文件,例如 SSH、HTTP、FTP 等服务的日志文件,并根据用户定义的规则对恶意行为进行检测和响应。
Fail2ban 的工作方式如下:
- 监视日志文件:Fail2ban 会监视指定的日志文件,例如 SSH、HTTP、FTP 等服务的日志文件。
- 匹配规则:Fail2ban 会根据用户定义的规则(也称为“过滤器”)对日志文件进行匹配。规则通常基于正则表达式,以识别恶意行为,例如登录失败尝试、恶意请求等。
- 触发响应:当匹配到规则时,Fail2ban 会触发定义的响应操作,例如将攻击者的 IP 地址添加到防火墙规则中以阻止其访问,或向管理员发送电子邮件报警。
- 自动解封:Fail2ban 还提供了自动解封功能,可以在一段时间后自动解封被阻止的 IP 地址,以避免误阻止合法用户。
Fail2ban 的优点包括:
- 自动化阻止恶意行为,减轻管理员的工作负担。
- 可以根据用户定义的规则进行灵活配置。
- 支持自动解封功能,避免误阻止合法用户。
- 可以与其他安全工具(例如防火墙)集成使用,提高安全性。
但 Fail2ban 也有一些缺点,例如:
- 对于一些高级的攻击行为可能无法有效防御。
- 在某些情况下可能会误阻止合法用户,例如当多个用户共享同一 IP 地址时。
- 需要一定的配置和管理工作,以保证其有效性和安全性。
总体来说,Fail2ban 是一款非常有用的安全工具,可以帮助管理员自动阻止恶意行为,提高系统的安全性和稳定性。
Fail2ban官网:http://www.fail2ban.org/
Github开源地址:https://github.com/fail2ban/fail2ban
实战
1、安装Fail2ban
# Ubuntu、 本次演示使用Ubuntu 22.04.1 LTS,Fail2Ban v0.11.2版本下演示整个过程
sudo apt install fail2ban
# CentOS
sudo yum install fail2ban
2、认识Fail2ban目录
Fail2ban安装完后就自带了很多缺省的配置,简单点说就是无需配置直接启用也能达到一定的效果,Fail2ban默认安装在/etc/fail2ban目录下,文件树形如下:
/etc/fail2ban/
├── action.d # 各种动作,默认自带很多常用的
│ ├── dummy.conf
│ ├── hostsdeny.conf
│ ├── iptables.conf
│ ├── mail-whois.conf
│ ├── mail.conf
│ ├── shorewall.conf
│ └── xxxxx.conf
│ .......
├── fail2ban.conf # 默认缺省配置
├── fail2ban.d # 启动目录
├── filter.d # 各种过滤器,默认自带很多常用的
│ ├── apache-auth.conf
│ ├── apache-noscript.conf
│ ├── couriersmtp.conf
│ ├── postfix.conf
│ ├── proftpd.conf
│ ├── qmail.conf
│ ├── sasl.conf
│ ├── sshd.conf
│ └── xxxxx.conf
│ .......
├── jail.conf # 默认监视配置
└─ jail.d
└── defaults-debian.conf ## SSH 相关配置
安装完成之后默认的缺省配置建议不要去动,我们直接拷贝默认的配置然后修改个性化的东西,这样是方便我们后续官方升级也不用担心不兼容,因为最终程序会将我们自定义的配置去覆盖缺省配置,没有修改的地方就会使用缺省配置。
3、配置Fail2ban启用SSH防护
- 拷贝默认配置
# 切换到fail2ban目录
cd /etc/fail2ban
# 拷贝默认缺省配置
sudo cp fail2ban.conf fail2ban.local
# 拷贝默认监视配置,如果不想要全量的配置,可以不拷贝直接新增一个空文件自己编辑
sudo cp jail.conf jail.local
自定义SSH防护规则,编辑jail.local文件,可参考如下:
#DEFAULT配置开始 类似于全局配置,单个服务不配就使用默认的配置 [DEFAULT] ignoreip = 127.0.0.1/8 ::1 bantime = 1h findtime = 1m maxretry = 3 banaction = firewallcmd-ipset action = %(action_mwl)s #DEFAULT配置结束 #sshd服务配置开始 [sshd] enabled = true filter = sshd port = 22 maxretry = 3 findtime = 60 bantime = -1 action = %(action_mwl)s #sshd服务配置结束
各参数介绍:
- ignoreip:永远不会被禁止的IP地址白名单。他们拥有永久的“摆脱监狱”卡。本地主机的IP地址(127.0.0.0.1/8)是在列表中默认情况下,其IPv6相当于(::1)。如果确认永远不应禁止的其它IP地址,请将它们添加到此列表中,并在每个IP地址之间留一个空格。
- bantime: 禁止IP地址的持续时间(“ m”代表分钟)。如果键入的值不带“ m”或“ h”(代表小时),不填则将其视为秒。值 -1将永久禁止IP地址。要非常小心,不要将自己的计算机给关了起来,这是非常有可能发生的低级错误。
- findtime: 尝试失败的连接次数过多会导致IP地址被禁止的时间。
- maxretry: “尝试失败次数过多”的数值。
上面的配置表示ssh服务在60s的周期内最大尝试3次失败,违反这个规则然后封禁IP永久。
4、启用并验证Fail2ban是否生效
# 启用fail2ban
sudo systemctl start fail2ban
# 查看状态 ,状态是running就对了,没对就检查配置
sudo fail2ban-client status
# 查看sshd服务具体状态
sudo fail2ban-client status sshd
默认输出一下内容:
Status for the jail: sshd
|- Filter
| |- Currently failed: 0
| |- Total failed: 0
| `- File list: /var/log/auth.log
`- Actions
|- Currently banned: 0
|- Total banned: 0
`- Banned IP list:
接下来我们通过自己的机器连续登录错误再看看状态:
Status for the jail: sshd
|- Filter
| |- Currently failed: 0
| |- Total failed: 6
| `- File list: /var/log/auth.log
`- Actions
|- Currently banned: 0
|- Total banned: 3
`- Banned IP list: 192.168.1.12
可以看到我连续ssh登录错误之后 Banned IP 出现了我的机器IP,然后从此再也连接不上ssh了,只有通过可视化工具接管服务器删除被Ban的IP,命令为:
fail2ban-client set sshd unbanip 192.168.1.12
我们继续查看fail2ban的日志,可以发现登录的IP都能看到,何时被Ban的也有。
root@ubuntu-dev:~# tail -f /var/log/fail2ban.log
2023-08-02 22:31:26,770 fail2ban.filter [2906926]: INFO [sshd] Found 192.168.1.12 - 2023-08-02 22:31:26
2023-08-02 22:31:29,616 fail2ban.filter [2906926]: INFO [sshd] Found 192.168.1.12 - 2023-08-02 22:31:29
2023-08-02 22:31:33,925 fail2ban.filter [2906926]: INFO [sshd] Found 192.168.1.12 - 2023-08-02 22:31:33
2023-08-02 22:31:34,271 fail2ban.actions [2906926]: NOTICE [sshd] Ban 192.168.1.12
2023-08-02 22:33:13,076 fail2ban.actions [2906926]: NOTICE [sshd] Unban 192.168.1.12
总结
以上就完整的演示了如果使用Fail2ban保护自己的SSH服务,你可以举一反三保护你的nginx、mysql、redis、以及自建的一些服务,一些开源项目很多文档里面也写了如何配置fail2ban,比如gitea、vaultwarden,在找到Fail2ban也发现有人通过python脚本去解析对应的日志文件,抓取并统计然后进行执行防火墙阻断操作,其实Fail2ban也是同样的原理,定义要监控的日志文件,然后通过filter过滤出需要监视的内容,最终去执行action操作添加防火墙规则。
网络安全不容小觑,数据无价,除了日常做到定时备份,也要做到尽量把威胁阻挡在门外,以上就是Fail2ban全部内容了,觉得不错赶快去动手尝试吧。
Fail2ban常用命令备忘
fail2ban-client ping
:测试fail2ban服务是否启动成功,成功会输出pongfail2ban-server -V
:查看fail2ban版本号fail2ban-client status sshd
: 查看某个服务(这里是sshd,对应jail.local配置文件中[sshd])规则下被封禁的IP情况fail2ban-client set sshd unbanip 192.168.1.12
:解除某个服务的IP封禁,这里是解除sshd服务192.168.1.12的封禁fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf
:测试filter规则是否正确tail /var/log/fail2ban.log
:查看Fail2ban日志信息fail2ban-client unban --all
:慎用,清理所有被ban的IP
参考文章
商业转载请联系作者获得授权,非商业转载请注明本文出处及文章链接