收起左侧

还在为SSH爆破发愁吗?来一个Fail2Ban封禁恶意IP吧

0
回复
33
查看
[ 复制链接 ]

1

主题

2

回帖

0

牛值

江湖小虾

经常将服务器挂在公网上的小伙伴们都知道,服务器会经常被恶意扫描。这其中国外的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的账户,账号密码尽量都设置成强口令,以防止字典暴破获取到正确的用户名和密码,造成存储数据损失。

收藏
送赞
分享
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则