经常将服务器挂在公网上的小伙伴们都知道,服务器会经常被恶意扫描。这其中国外的IP众多,当然国内的IP也不少。
若是自己开启SSH的账户使用的是弱口令,或常用密码,总有被字典暴破撞对的风险。
是时候考虑将这种恶意行为的IP挡在门外了。
Fail2Ban
一款基于Python开发的开源网络安全防护软件,主要应用于UNIX/Linux系统,通过实时监控SSH、Apache、FTP等服务日志文件,自动识别并拦截恶意访问行为。
1.系统
飞牛FnOS:1.0.0
刚重装完的干净系统进行演示
配置:AMD E2-7110 4C/4T | DDR3 1600 12g
2.安装
总得先给一个用户SSH的权限,并开启SSH功能吧?这点还需要赘述吗?
安装Fail2Ban有两种方法,直接安装和下载安装包手动安装。
先说清楚,安装完以后,在fnOS上可是没法直接用的,还需要进行配置系统原有的应用
1.1 直接安装
懒人必备,并没什么不好。
sudo -i
[输入你的用户密码以进入root权限]
# 连上源获取仓库信息
apt update
# 安装fail2ban
apt install fail2ban
1.2 安装包安装
下载安装包:https://salsa.debian.org/python-team/packages/fail2ban
右上角的Code里面选tar、zip都行,直接解压将文件夹丢入网盘或者sftp上传到目录也都可以,这里选择丢入网盘
之后,SSH界面操作
# 进入网盘目录,其中vol1、vol2代表存储空间1、2,1000代表创建的超级管理员账户的ID,实在不清楚的可以在文件管理窗口上复制目录路径
cd /vol1/1000
# 解压文件(也可以在文件管理窗口内解压)
tar vxf fail2ban-master.tar
# 进入解压后的目录
cd fail2ban-master
# 安装
python3 setup.py install
# 将server文件浇给
cp ./build/fail2ban.service /etc/systemd/system
# 开机自启
systemctl enable fail2ban
# 或
cp ./files/debian-initd /etc/init.d/fail2ban
update-rc.d fail2ban defaults
至此,安装完成。
3.启动
想必apt安装的同学,已经迫不及待的去查看运行状态了吧?
# 启动Fail2Ban
systemctl start fail2ban
查看下运行状态?
# 查看运行状态
systemctl status fail2ban
如何?启动失败了吧?
宝强表情包.jpg
不要急,现在开始微调一下,系统软件的配置内容就好。
4.调整
需要调整配置文件的应用为:SSH、rsyslog
4.1 SSH
修改配置文件:
# 打开配置文件
nano /etc/ssh/sshd_config
# 找到内容并删除注释(就最前面的#号)
# Logging
SyslogFacility AUTH
LogLevel INFO
将 #SyslogFacility AUTH改成 SyslogFacility AUTH,将 #LogLevel INFO改成 LogLevel INFO
CTRL + S保存,CTRL + X退出
呐,它配置文件里面本来就有的内容,咱可没有给你往里面乱塞东西哦。
然后,重启下SSH,当然,在SSH的连接下重启,是没什么用的,关闭SSH窗口,在飞牛OS网页设置里,关闭SSH,再打开,让它加载到修改后的配置文件即可。
4.2 rsyslog
这个有那么一丝丝复杂,因为找遍整个存储空间,压根就没有 /etc/rsyslog.conf 文件,怎么办呢?
尝试操作:
# 进行rsyslog的配置文件验证
rsyslogd -n
插个嘴,在SSH中输入这条命令以后,很大概率半卡死,就是你还能继续往里面输入内容,但执行不得,解决办法,关闭SSH窗口,重新连接。
当然啦,顺便把剩下两个命令也过一遍吧。
# 配置文件验证
rsyslogd -N
rsyslogd -N1
操作完成以后,验证一下 /etc/rsyslog.conf 文件有没有出现:
# 进入目录
cd /etc
# 查询
ls | grep sys
>>> 输出内容
rsyslog.conf
rsyslog.d
sysctl.conf
sysctl.d
sysstat
systemd
理论上来说,rsyslog.conf 文件应该是会出现了。
修改配置:
# 打开配置文件
nano rsyslog.conf
# 找到内容并删除注释(就最前面的#号)
auth,authpriv.* /var/log/auth.log
将 #auth,authpriv.* /var/log/auth.log 改为 auth,authpriv.* /var/log/auth.log 即可。
呐,再次重申,它配置文件里面本来就有的内容,咱可没有给你往里面乱塞东西哦。
4.3 重启服务
# 重启服务
systemctl restart rsyslog sshd
验证修改成功
# 进入日志目录
cd /var/log
# 查看文件
ls | grep auth
>>> 输出
auth.log
/var/log 目录下有 auth.log ,即配置文件修改合适了。没有的话,可以尝试在飞牛OS网页上重启下系统再行确认。
5.运用
此时再启动Fail2Ban,理论上就可以正常运行了
# 启动Fail2Ban
systemctl start fail2ban
# 查看状态
systemctl status fail2ban
>>> 输出
● fail2ban.service - Fail2Ban Service
Loaded: loaded (/etc/systemd/system/fail2ban.service; enabled; preset: enabled)
Active: active (running) since Sat 2025-11-29 20:21:07 CST; 1h 27min ago
Docs: man:fail2ban(1)
Process: 7354 ExecStartPre=/bin/mkdir -p /run/fail2ban (code=exited, status=0/SUCCESS)
Main PID: 7356 (fail2ban-server)
Tasks: 5 (limit: 13332)
Memory: 27.4M
CPU: 4.706s
CGroup: /system.slice/fail2ban.service
**─7356 /usr/bin/python3 /usr/local/bin/fail2ban-server -xf start
Nov 29 20:21:07 FnOS systemd[1]: Starting fail2ban.service - Fail2Ban Service...
Nov 29 20:21:07 FnOS systemd[1]: Started fail2ban.service - Fail2Ban Service.
Nov 29 20:21:08 FnOS fail2ban-server[7356]: Server ready
看到 Active(running) ,大胜利!
5.1 设定规则
官方把它叫做**,不知道是什么回路。
# 创建配置文件
cd /etc/fail2ban
nano jail.local
# 录入内容
[DEFAULT]
# IP白名单
ifnoreip = 127.0.0.1/8
# 封禁时间(秒)-1为永久封禁
bantime = -1
# 时间范围(秒)
findtime = 600
# 尝试次数
maxretry = 3
# 防火墙(可选)
banaction = iptables-multiport
[sshd]
# 启用
enabled = true
# 端口号
port = 78
# 引用filter.d模板
filter = sshd
# 日志路径
logpath = /var/log/auth.log
CTRL + S保存,CTRL + X关闭
# 重启Fail2Ban加载配置文件
systemctl restart fail2ban
5.2 验证可用
查看规则(**)信息
# 查看规则信息
fail2ban-client status
>>> 输出
Status
|- Number of jail: 1
`- Jail list: sshd
# 查看SSH规则信息
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:
测试封禁IP功能!!!
谨慎操作!谨慎操作!谨慎操作!
重要的事情说三遍。
如果你只有一台可以操作SSH的电脑/终端,建议就跳过这个环节吧。
我是用手机Termux,通过 ssh 用户名@IP地址 -p 端口 进行封禁IP和解封IP连接测试的。假设飞牛OS的IP是192.168.1.11,PC终端是192.168.1.12,手机终端是192.168.1.13,现在封禁手机终端进行测试:
# 封禁IP
fail2ban-client set sshd banip 192.168.1.13
# 查看封禁名单
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: 1
`- Banned IP list: 192.168.1.13
此时手机若是正连着SSH,它会依旧连着,但若是断开后重连,会提示
ssh: connect to host 192.168.3.11 port 22: Connection timed out
尝试解封IP:
# 解封IP
fail2ban-client set sshd unbanip 192.168.1.13
# 查看封禁名单
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: 1
`- Banned IP list:
那个 Total banned 的数字不变回 0 很正常,它记录的是历史封禁的总数。
至此,Fail2Ban部署完成。
写在后面:我查了好久,一直没有找到飞牛fnOS前端登录的日志存储位置。网页【日志】应用和 /var/log/syslog 文件内,都只记录了登录成功的信息,我测试在登录页面多次输入错误的用户名和密码,在【日志】和 /var/log/syslog 文件中均没有相关记录。所以,如果为了安全考虑,访问fnOS的账户,账号密码尽量都设置成强口令,以防止字典暴破获取到正确的用户名和密码,造成存储数据损失。