Fail2Ban-Linux防SSH暴力破解工具

工具教程3个月前更新 huiye
144 0

一、简介

Fail2Ban是一款入侵防御工具,可以在一定程度上保护服务器免受ssh暴力破解、 ftp/http密码穷举等场景的攻击,它通过使用指定的正则表达式(也称为过滤规则)进行扫描日志文件(/var/log),并根据配置信息来封禁多次访问失败的IP。Fail2Ban封禁IP主要通过向Linux内的防火墙中更新规则来实现

github项目地址: https://github.com/fail2ban/fail2ban

 

二、安装

RHEL/Rocky/CentOS

# yum install -y fail2ban
# systemctl start fail2ban
# systemctl enable fail2ban

Ubuntu/Debian

# sudo apt install -y fail2ban

 

三、修改配置

1、Fail2Ban的配置文件默认都在 /etc/fail2ban/目录里:jail.conf与fail2ban.conf,升级Fail2Ban时,文件会被覆盖。如果需要修改配置文件,建议是复制出来一份local文件进行修改或者创建一个新的 jail.local 文件,并且Fail2Ban启动时会自动读取conf和local文件,local文件的优先级更高。

# cd /etc/fail2ban
# cp jail.conf jail.local
# cp fail2ban.conf fail2ban.local

 

2、jail.local配置详解

[DEFAULT]模块是Fail2Ban的全局模块, 对所有服务模块生效,当然也可以在具体的服务模块下添加参数,局部变量优先级大于全局变量

[DEFAULT]
#此参数为加白的网段、IP,可以是域名、网段或单个IP,空格隔开。
ignoreip = 127.0.0.1/8
#设置被封锁的时间间隔,如下表示10分钟,可以是秒(s)、分钟(m)、小时(h)、天(d),不带单位则默认为s,-1表示永久封锁。
bantime  = 10m
#检测的间隔时间,在间隔时间内,当>=maxtretry设置的失败次数,则触发限制,禁止访问。
findtime  = 10m
#findtime时间内的最大失败次数
maxretry = 5
#需要采取的行动,和当前系统使用的防火墙相关
banaction = firewallcmd-ipset

注:填写 banaction时 要确定当前的系统上安装了什么防火墙或安全软件,linux上通常是 iptables, firewalld, ufw这三个工具, 可以通过查看  /etc/fail2ban/action.d/ 目录下的文件来找到  fail2ban 支持的 banaction 列表。

  • iptables:ssh禁止来源IP访问场景通常设置 banaction 为 iptables-ipset 或者直接使用 iptables
  • firewalld:ssh禁止来源IP访问场景通常设置 banaction 为 firewallcmd-ipset
  • ufw:可以直接设置 banaction 为 ufw

 

[sshd]模块:启用sshd模块需要在  jail.local 文件中找到 [sshd] 模块,并将 enabled 参数改为true

[sshd]
enabled = true        #启用该模块
port = 22                 #ssh端口
logpath = /var/log/auth.log  #日志路径
backend = %(sshd_backend)s   #后台管理程序,默认由systemd接管,无需修改

注:

1、如果配置文件中无该模块,可以自行手动添加

2、logpath 参数和 linux 发行版本有关:

  • RHEL/Rocky/CentOS:logpath = /var/log/secure
  • Ubuntu/Debian:logpath = /var/log/auth.log

 

上面 [DEFAULT] 中使用到的部分参数,也可以用在 [sshd] 模块中, 局部变量优先级大于全局变量,如下

[sshd]
enabled = true
port = 22
logpath = /var/log/secure
backend = %(sshd_backend)s
ignoreip = 127.0.0.1/8 ::1 10.10.0.0/16 172.16.0.0/16
bantime = 1m
findtime = 1m
maxretry = 1
banaction = firewallcmd-ipset

该配置表示,一分钟内如果ssh登陆失败1次,则封锁访问的IP一分钟,同时排除本地回环地址和一些内网网段。(参数含义见 [DEFAULT] 模块处解析,实际请根据业务需求进行配置

 

修改完配置文件后重启服务生效

# systemctl restart fail2ban

 

测试下效果,第一次ssh连接故意输错密码,第二次ssh连接就已经连接不上了,等待一分钟后又能继续连接

Fail2Ban-Linux防SSH暴力破解工具

 

四、常用命令汇总

查看日志文件

# less /var/log/fail2ban.log

查看启用的模块列表

# fail2ban-client status
Fail2Ban-Linux防SSH暴力破解工具

 

查看 sshd 模块封堵的 IP 列表

# fail2ban-client status sshd
Fail2Ban-Linux防SSH暴力破解工具

 

取消 sshd 模块中被封堵的 IP

# fail2ban-client set sshd unbanip 85.209.11.27
© 版权声明

相关文章