Alain's Blog

  1. 首页
  2. Linux
  3. 正文

使用Fail2ban自动拉黑暴力破解SSH的IP

2021年10月5日 2677点热度 2人点赞 0条评论

转载请注明出处,本文仅用于学习交流,不对之处,恳请指正

部分图片摘取网络,如有侵权请联系

脚本小子

官方Github仓库: https://github.com/fail2ban/fail2ban

1. 需求

脚本小子太可恶,加上我使用的是frp进行内网穿透的方式对家庭服务器进行整理,太多的攻击连接导致服务器不稳定的急剧增加,以前是通过手写脚本来手动拉黑,后面使用过程中,发现了不稳定性的bug,既然如此就不重复造轮子,直接使用Fail2ban来拉黑暴力破解SSH的IP

2. 环境

我列出了主流使用的Linux系统的安装配置方式,但是实际测试环境为Debian11

3. 安装iptables

如果你的系统中没有安装firewall,ufw,iptables,则需要手动安装iptables

3.1 Debian安装iptables

sudo apt-get update && apt-get install iptables -y

3.2 CentOS安装iptables

sudo yum install epel-release -y
sudo yum install iptables -y

3.3 OpenEuler安装iptables

sudo yum install iptables -y

3.4 查看iptables规则

iptables -L

默认安装后,iptables理论上是空的

查看iptables规则

我们可以根据需求自行配置,这里就不展开讨论了,值得注意的是,iptables直接运行命令是没有持久化保存的,Debian一般推荐使用ufw防火墙,CentOS/OpenEuler推荐使用firewalld。

4. 安装Fail2ban

4.1 Debian安装Fail2ban

sudo apt-get update && apt-get install fail2ban -y

4.2 CentOS安装Fail2ban

sudo yum install epel-release -y
sudo yum install fail2ban -y

4.3 OpenEuler安装Fail2ban

sudo yum install fail2ban -y

4.4 启用

  1. 启用
sudo systemctl enable --now fail2ban
  1. 查看状态
sudo systemctl status fail2ban

5. 配置Fail2ban

nano /etc/fail2ban/jail.local

5.1 修改配置

太多参数了,暂时没有时间一个个列出

[DEFAULT]
# 以空格分隔的列表,可以是 IP 地址、CIDR 前缀或者 DNS 主机名
# 用于指定哪些地址可以忽略 fail2ban 防御
# ignoreip = 127.0.0.1 10.0.0.0/8 192.168.0.0/24

### 防火墙
# 注意我并没有进行完整的测试,因为大多防火墙基于iptables,所以我的使用是默认的iptables的方式,仅仅查询相关资料并列出,如果有误请指出
#
# Debian一般使用ufw
# banaction ufw
# banaction_allports = ufw
#
# CentOS,OpenEluer一般使用firewalld
# banaction = firewallcmd-rich-rules[actiontype=<multiport>]
# banaction_allports = firewallcmd-rich-rules[actiontype=<allports>]
#
# 使用nftables
# banaction = nftables-multiport
# banaction_allports = nftables-allports
#
# 使用iptables
# banaction = iptables-multiport
# banaction_allports = iptables-allports

### 客户端主机被禁止的时长(秒)
bantime = 86400

### 客户端主机被禁止前允许失败的次数 
maxretry = 6

### 查找失败次数的时长(秒)
findtime = 600

### 发送邮件程序
# 使用sendmail方案
# mta = sendmail
# 使用Postfix方案
# mta = postfix

### 启用SSH监听,或者使用下方的[ssh-iptables]
[sshd]
enable=true

### 启用ssh-iptables监听
# [ssh-iptables]
# enabled = true
# filter = sshd
# action = iptables[name=SSH, port=ssh, protocol=tcp]
# sendmail-whois[name=SSH, dest=your@email.com, sender=fail2ban@email.com]
# Debian 系的发行版 
# logpath = /var/log/auth.log
# Red Hat 系的发行版
# logpath = /var/log/secure
# ssh 服务的最大尝试次数
# maxretry = 3

5.2 验证fail2ban是否正确运行

  1. 验证fail2ban是否成功运行
sudo fail2ban-client ping

需返回

Server replied: pong
  1. 验证fail2ban是否正常工作
sudo tail -f /var/log/fail2ban.log

使用SSH Client进行连接,并不断输入错误密码

验证fail2ban是否正常工作

正常情况下,每次错误都会被准确的捕获到

  1. 列出 iptables

因为我使用的是iptables,如果你使用的是ufw, firewalld等,请使用相关命令进行测试

sudo iptables --list -n

列出iptables

  1. 解锁IP
sudo fail2ban-client set sshd unbanip 192.168.1.204

参考

  1. How To Protect SSH with Fail2Ban on Debian 11

  2. 如何使用 fail2ban 防御 SSH 服务器的暴力破解攻击

标签: Linux SSH
最后更新:2023年1月9日

Alain

看了我的文,就是我的人,点个赞再走成不成

点赞
< 上一篇
下一篇 >

文章评论

取消回复

文章目录
  • 1. 需求
  • 2. 环境
  • 3. 安装iptables
    • 3.1 Debian安装iptables
    • 3.2 CentOS安装iptables
    • 3.3 OpenEuler安装iptables
    • 3.4 查看iptables规则
  • 4. 安装Fail2ban
    • 4.1 Debian安装Fail2ban
    • 4.2 CentOS安装Fail2ban
    • 4.3 OpenEuler安装Fail2ban
    • 4.4 启用
  • 5. 配置Fail2ban
    • 5.1 修改配置
    • 5.2 验证fail2ban是否正确运行
  • 参考

COPYRIGHT © 2022 Alain's Blog. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang