首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >使用fail2ban限制暴力破解sshd

使用fail2ban限制暴力破解sshd

原创
作者头像
保持热爱奔赴山海
发布2025-09-21 17:29:36
发布2025-09-21 17:29:36
2590
举报
文章被收录于专栏:DevOpsDevOps

通过frp将家里的机器暴透传到公网上,如果使用密码登录的话则通常每天会遇到大量的ssh暴力破解的情况。

为此,我们可以使用fail2ban来做个限制。

安装

代码语言:txt
复制
yum install fail2ban-server

配置

代码语言:txt
复制
cd /etc/fail2ban
cd  jail.d

创建配置文件如下:
vim sshd.conf
[sshd]
port = ssh
enabled  = true
filter   = sshd
action   = iptables[name=SSH, port=ssh, protocol=tcp]
logpath  = /var/log/secure
bantime  = 3600
findtime  = 300
maxretry = 3
ignoreip = 127.0.0.1/32




参数含义详解:
port = ssh  # 监控SSH端口(默认22,若修改了SSH端口需同步调整)
enabled  = true  # 启用SSH监狱
filter   = sshd   # 使用sshd过滤器(匹配日志中的失败尝试)
action   = iptables[name=SSH, port=ssh, protocol=tcp]  # 执行动作:封禁IP
logpath  = /var/log/secure    # CentOS/RHEL的SSH认证日志路径
bantime  = 3600   # 封禁时长(秒),3600秒=1小时
findtime  = 300    #  时间窗口(秒),300秒内超过maxretry次则触发封禁
maxretry = 3   # 允许的最大失败尝试次数(如3次)
ignoreip = 127.0.0.1/8  # 忽略的IP列表(避免误封本地或信任IP)

启动

代码语言:txt
复制
systemctl start fail2ban        # 启动Fail2Ban
systemctl enable fail2ban     # 设置开机自启


systemctl status fail2ban     # 应显示“active (running)”
● fail2ban.service - Fail2Ban Service
   Loaded: loaded (/usr/lib/systemd/system/fail2ban.service; enabled; vendor preset: disabled)
   Active: active (running) since Sun 2025-09-21 17:24:53 CST; 46s ago
     Docs: man:fail2ban(1)
  Process: 27183 ExecStop=/usr/bin/fail2ban-client stop (code=exited, status=0/SUCCESS)
  Process: 27186 ExecStartPre=/bin/mkdir -p /run/fail2ban (code=exited, status=0/SUCCESS)
 Main PID: 27195 (fail2ban-server)
    Tasks: 5
   Memory: 10.1M
   CGroup: /system.slice/fail2ban.service
           └─27195 /usr/bin/python2 -s /usr/bin/fail2ban-server -xf start

Sep 21 17:24:53 centos7-3 systemd[1]: Starting Fail2Ban Service...
Sep 21 17:24:53 centos7-3 snoopy[27186]: [uid:0 sid:27186 tty:(none) cwd:/ filename:/bin/mkdir]: /bin/mkdir -p /run/fail2ban
Sep 21 17:24:53 centos7-3 systemd[1]: Started Fail2Ban Service.
Sep 21 17:24:53 centos7-3 snoopy[27195]: [uid:0 sid:27195 tty:(none) cwd:/ filename:/usr/bin/fail2ban-server]: /usr/bin/f... start
Sep 21 17:24:53 centos7-3 fail2ban-server[27195]: Server ready
Hint: Some lines were ellipsized, use -l to show in full.

查看SSH监狱的状态,确认规则已加载:

代码语言:txt
复制
> fail2ban-client status sshd   # 应显示“Status: active”及当前封禁的IP列表
Status for the jail: sshd
|- Filter
|  |- Currently failed: 0
|  |- Total failed:     0
|  `- File list:        /var/log/secure
`- Actions
   |- Currently banned: 0
   |- Total banned:     0
   `- Banned IP list:

查看Fail2Ban日志,跟踪实时活动:

代码语言:txt
复制
> tail -f /var/log/fail2ban.log # 实时输出Fail2Ban的操作日志(如封禁IP)
2025-09-21 17:24:53,632 fail2ban.jail           [27195]: INFO    Jail 'sshd' uses poller {}
2025-09-21 17:24:53,633 fail2ban.jail           [27195]: INFO    Initiated 'polling' backend
2025-09-21 17:24:53,638 fail2ban.filter         [27195]: INFO      maxLines: 1
2025-09-21 17:24:53,677 fail2ban.filter         [27195]: INFO      maxRetry: 3
2025-09-21 17:24:53,677 fail2ban.filter         [27195]: INFO      encoding: UTF-8
2025-09-21 17:24:53,678 fail2ban.filter         [27195]: INFO      findtime: 300
2025-09-21 17:24:53,678 fail2ban.actions        [27195]: INFO      banTime: 3600
2025-09-21 17:24:53,678 fail2ban.filter         [27195]: INFO    Added logfile: '/var/log/secure' (pos = 4881678, hash = d60400918f2bf72927a94dbeb839afb2)
2025-09-21 17:24:53,682 fail2ban.jail           [27195]: INFO    Jail 'sshd' started
2025-09-21 17:25:01,482 fail2ban.transmitter    [27195]: WARNING Command ['status', 'ssh'] has failed. Received UnknownJailException('ssh',)

手动封禁和解封

代码语言:txt
复制
封禁
fail2ban-client set sshd banip 192.168.1.100

解封
fail2ban-client set sshd unbanip 192.168.1.100

如下图,是测试多次输入错误密码后,被fail2ban拦截后的iptables -L -n的截图:

注意:若调整了jail.local或过滤器文件,需重启Fail2Ban使更改生效:

代码语言:txt
复制
sudo systemctl restart fail2ban

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档