如何使用 fail2ban 来防范 SSH 暴力破解?

Linux

本入门指南涵盖了安装、配置 fail2ban 软件的基本步骤。 fail2ban 是通过持续扫描日志文件,甄别登录失败后继续频繁尝试登录的同一来源的非善意行为,进而暂时禁止其来源访问的加固服务器安全的软件。

必备条件

  • Linux 版本的操作系统 (CentOS, Ubuntu, Debian)

  • Python 语言运行环境,不低于 2.6 版本

安装 fail2ban

1) 安装:

  • 对于 Ubuntu/Debian 系统, fail2ban 可使用 apt-get 安装包管理指令:
sudo apt-get install fail2ban
  • CentOS 系统,由于其软件仓库里未收录 fail2ban ,故需先下载安装 EPEL 软件仓库:
rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

然后运行 yum:

yum install fail2ban

2) 复制配置文件:

对于所有支持的操作系统,fail2ban 安装在 /etc/fail2ban 路径下。其配置文件 jail.conf 在同一文件夹下。但是,如果想对配置做出改变,不应直接修改 jail.conf ,代之一份本地拷贝文件进行修改:

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

配置 fail2ban

复制配置文件后,就可以在 jail.local 文件中设置自己需要的配置。

默认段 [DEFAULT] 中包含着对所有保护服务适用的一般指令设置,包括触发时间,禁止访问时间等的设置。

[DEFAULT]

# "ignoreip" 字段设置不会被禁止访问的主机地址,它可以是单 IP 地址、
# CIDR (汇聚网段)地址,甚至可以是 DNS (主机域名)。
# 若有多个条目,各条目间用空格分隔。
ignoreip = 127.0.0.1

# "bantime" 字段设置禁止访问的时间间隔,以秒为单位。
bantime  = 3600

# "findtime" 字段设置含义,在这个指定时间间隔内,
# 达到或超过  "maxretry"  次失败连接尝试,即被命中,禁止访问。
# 以秒为单位。
findtime  = 600

# "maxretry" 字段设置含义,见上个字段设置说明。
Maxretry = 3

对于 Ubuntu/Debian 系统,[DEFAULT] 段中设置稍有不同:

[DEFAULT]

# 各字段说明见上说明,此处略。
ignoreip = 127.0.0.1/8
bantime  = 600
maxretry = 3

# "backend" 字段指定使用哪个系统后台服务及时获得路由表文件变动。
# 选项有  "gamin", "polling" 和 "auto"。
# 呀喔!未知原因造成 Debian 类系统下的 python-gamin 脚本不能正确执行。
#      这个问题留待以后解决,目前 polling 是默认值。
# (译注:现在这个问题已不存在,详细看相关文档,多了些设置值)
# (译注:不知道的话,一般设为 auto 即可)
backend = auto

#
# 目标邮件地址,仅仅在 jail.{conf,local}  配置文件中占位。
destemail = root@localhost

配置 fail2ban 保护 SSH

在配置文件中,[ssh-iptables] 段的设置负责监控、保护、拥塞 SSH 连接。其段中各字段默认值设置可保证安全防护正常运行,您也可根据自己需要修改。

下面是 CentOS 系统下的设置:

[ssh-iptables]

enabled  = true
filter   = sshd
action   = iptables[name=SSH, port=ssh, protocol=tcp]
           sendmail-whois[name=SSH, dest=root, sender=fail2ban@example.com]
logpath  = /var/log/secure
maxretry = 5

对于 Ubuntu/Debian 系统,ssh-iptables 段类似:

[ssh]
enabled  = true
port     = ssh
filter   = sshd
logpath  = /var/log/auth.log
maxretry = 6

enabled = true – 打开监控 SSH 登录。

filter = sshd – 指定 SSH 监控使用的规则过滤配置文件,默认在 /etc/fail2ban/filter.d 文件夹下,如设置 filter= sshd ,指定文件为:

/etc/fail2ban/filter.d/sshd.conf

action - 指定被命中 IP 主机地址禁止其访问的行为。行为规定文件默认都保存在 /etc/fail2ban/action.d 文件夹下。如设置 action = iptables 的禁止行为规定文件为:

/etc/fail2ban/action.d/iptables.conf

logpath – 这个字段值指定 fail2ban 监控日志文件路径。

maxretry - 这个字段在 [DEFAULT] 段说明过。在指定服务监控段中,若设置不同的值,对于这个监控服务,新值的设置会覆盖默认段中的设置。对其它的网路服务监控,照搬此法,相同效果。

(译注:这段的内容,新版 fail2ban 多有改变,具体请安装了 fail2ban 后查阅 man 手册。man jail.conf

启动 fail2ban

如果完成了安装并且按照需要进行了配置,启动 fail2ban 只需要执行如下命令:

1) 如果在 Ubuntu/Debian 系统下, 在命令行执行:

sudo service fail2ban start

1) 如果在 CentOS 系统下, 在命令行执行:

service fail2ban start
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://kyup.com/tutorials/protect-ssh-f...

译文地址:https://learnku.com/server/t/36233

本文为协同翻译文章,如您发现瑕疵请点击「改进」按钮提交优化建议
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!