使用 Fail2Ban 保护您的 Linux 服务器

什么是 Fail2Ban?

如果您已启用 SSH,请检查您的 Linux 服务器的登录历史记录。 您会惊讶地看到大量 IP 尝试通过 SSH 登录到您的服务器。

如果您没有适当的机制来阻止这些登录尝试,您的系统很容易受到 蛮力攻击. 基本上,脚本/机器人将通过尝试各种用户名和密码组合来继续尝试 SSH 连接您的系统。

这是一个像 禁止失败 进入画面。 Fail2Ban 是一款免费的开源软件,可帮助保护您的 Linux 服务器免受恶意登录。 如果有一定数量的失败登录尝试,Fail2Ban 将禁止 IP(一段时间)。

Fail2Ban 使用基本设置开箱即用,但它也非常可配置。 您可以根据自己的喜好对其进行调整,并根据需要创建过滤器和规则。

听起来不错? 为什么不测试Fail2Ban? 阅读并遵循本文的其余部分,然后自己尝试 Fail2Ban。

在 Linux 上安装 Fail2Ban

您可以从所有主要 Linux 发行版的官方存储库中都可以找到 Fail2Ban 的事实来猜测它的受欢迎程度。 这使得安装 Fail2Ban 成为一项简单的任务。

在 CentOS 和 Red Hat 上安装 Fail2Ban

你需要是 root 或 sudo 用户以便在您的系统上安装新软件。

您需要确保您的系统是最新的并且您有 EPEL 存储库 安装。

sudo yum update && sudo yum install epel-release

现在您可以使用以下命令安装 Fail2Ban:

sudo yum install fail2ban

在 Ubuntu 和 Debian 上安装 Fail2Ban

首先,确保您的系统已更新:

sudo apt update && sudo apt upgrade -y

现在,使用以下命令安装 Fail2Ban:

sudo apt install fail2ban

了解 Fail2Ban 配置文件

Fail2Ban 中有两个主要的配置文件:/etc/fail2ban/fail2ban.conf 和 /etc/fail2ban/jail.conf。 让我解释一下他们是做什么的。

/etc/fail2ban/fail2ban.conf:这是Fail2Ban 守护进程的操作设置的配置文件。 此处定义了日志级别、日志文件、套接字和 pid 文件等设置。

/etc/fail2ban/jail.conf: 这就是所有魔法发生的地方。 在此文件中,您可以配置默认禁止时间、禁止 IP 前的重试次数、将 IP 列入白名单、邮件发送信息等。基本上,您可以通过该文件控制 Fail2Ban 的行为。

现在,在您更改这些文件之前,Fail2Ban 建议为这些 conf 文件制作一个带有 .local 文件的副本。 这是因为默认的 conf 文件可以在更新中被覆盖,并且您将丢失所有设置。

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

现在让我们了解一下 jail.conf 文件。 如果使用 less 命令来读取这个大文件,可能看起来很混乱。 conf 文件试图用太多的注释来解释一切。 所以,让我为你简化一下。

jail.conf 文件分为服务。 有一个 [Default] 部分,它适用于所有服务。 然后您可以看到具有各自设置的各种服务(如果有)。 所有这些服务都在括号中。 你会看到像这样的部分 [sshd], [apache-auth], [squid] 等等。

如果我删除评测,默认部分如下所示:

[DEFAULT]
ignorecommand =
bantime = 10m
findtime = 10m
maxretry = 5
backend = auto
usedns = warn
logencoding = auto
enabled = false
mode = normal
filter = %(name)s[mode=%(mode)s]
destemail = [email protected]
sender = [email protected]
mta = sendmail
protocol = tcp
chain =
port = 0:65535
fail2ban_agent = Fail2Ban/%(fail2ban_version)s
banaction = iptables-multiport
banaction_allports = iptables-allports
action_abuseipdb = abuseipdb
action = %(action_)s

让我告诉你其中一些参数的含义。

  • bantime:设置禁令的长度。 默认为 10 分钟。
  • findtime:将对 IP 执行操作的窗口。 默认为 10 分钟。 假设某个 IP 在 10:30 尝试进行错误登录。 如果同一IP在10:40之前达到最大重试次数,将被禁止。 否则,10:40 之后的下一次失败尝试将被视为第一次失败尝试。
  • maxretry:执行操作之前失败的重试次数
  • usedns:“警告”设置尝试使用反向 DNS 查找主机名并使用主机名禁止它。 将其设置为 no 将禁止 IP,而不是主机名。
  • destemail:警报将发送到的电子邮件地址(需要配置)
  • 发件人:通知邮件中的发件人姓名
  • mta:用于通知电子邮件的邮件传输代理
  • banaction:此参数使用/etc/fail2ban/action.d/iptables-multiport.conf 文件设置最大失败重试次数后的动作
  • 协议:禁令后将被丢弃的流量类型

如果您想对任何监狱(或所有监狱)进行任何更改,例如最大重试次数、禁止时间、查找时间等,您应该编辑 jail.local 文件。

怎样使用 Fail2Ban 保护 Linux 服务器

让我向您展示一些可以使用 Fail2Ban 来强化 Linux 安全性的方法。

请注意,您需要是 root 用户或拥有 sudo 访问运行fail2ban命令。

在您的服务器上启用 Fail2Ban 并检查所有正在运行的 jail

您可以使用 systemd 命令在 Linux 服务器上启动和启用 Fail2Ban:

systemctl start fail2ban
systemctl enable fail2ban

启用 Fail2Ban 后,您可以使用 fail2ban-client 命令查看状态和活动监狱:

fail2ban-client status
Status
|- Number of jail: 1
`- Jail list: sshd

如果您想知道,默认情况下启用 sshd jail。

查看 Fail2Ban 日志

Fail2Ban 日志位于 /var/log/fail2ban.log。 日志文件采用以下格式:

2019-03-25 07:09:08,004 fail2ban.filter [25630]: INFO [sshd] Found 139.59.69.76 – 2019-03-25 07:09:07
2019-03-25 07:09:36,756 fail2ban.filter [25630]: INFO [sshd] Found 159.89.205.213 – 2019-03-25 07:09:36
2019-03-25 07:09:36,757 fail2ban.filter [25630]: INFO [sshd] Found 159.89.205.213 – 2019-03-25 07:09:36
2019-03-25 07:09:36,774 fail2ban.actions [25630]: NOTICE [sshd] Ban 159.89.205.213
2019-03-25 07:09:36,956 fail2ban.filter [25630]: INFO [sshd] Found 182.70.253.202 – 2019-03-25 07:09:36
2019-03-25 07:09:36,957 fail2ban.filter [25630]: INFO [sshd] Found 182.70.253.202 – 2019-03-25 07:09:36
2019-03-25 07:09:36,981 fail2ban.actions [25630]: NOTICE [sshd] Ban 182.70.253.202
2019-03-25 07:09:37,247 fail2ban.filter [25630]: INFO [sshd] Found 112.64.214.90 – 2019-03-25 07:09:37
2019-03-25 07:09:37,248 fail2ban.filter [25630]: INFO [sshd] Found 112.64.214.90 – 2019-03-25 07:09:37
2019-03-25 07:09:37,589 fail2ban.actions [25630]: NOTICE [sshd] Ban 112.64.214.90

您可以看到它识别 IP 并在它们超过最大重试阈值时禁止它们。

通过 Fail2Ban 查看被禁止的 IP

一种方法是检查某个监狱的状态。 为此,您可以使用 Fail2Ban 客户端。

fail2ban-client status <jail_name>

为了 example,如果你非要看到Fail2Ban禁止的所有ssh登录不良,你可以通过以下方式使用。 输出将显示失败的尝试总数和被禁止的 IP 总数。

[email protected]:~# fail2ban-client status sshd
Status for the jail: sshd
|- Filter
| |- Currently failed: 14
| |- Total failed: 715
| `- File list: /var/log/auth.log
`- Actions
|- Currently banned: 7
|- Total banned: 17
`- Banned IP list: 177.47.115.67 118.130.133.110 68.183.62.73 202.65.154.110 106.12.102.114 61.184.247.3 218.92.1.150

尝试从失败的登录通过 SSH 登录的系统应该得到这样的错误

ssh: connect to host 93.233.73.133 port 22: Connection refused

怎样使用 Fail2Ban 永久禁止 IP

现在您知道 Fail2Ban 对 IP 的禁令是暂时的。 默认为 10 分钟,攻击者可以在 10 分钟后再次尝试登录。

这会带来安全风险,因为攻击者可以使用脚本在 10 分钟间隔后尝试登录。

那么,您怎样使用 Fail2Ban 永久禁止? 对此没有明确的答案。

从 Fail2Ban 0.11 版开始, 禁言时间会自动计算 并且永久IP的禁用时间将呈指数增长。

但是如果您检查您的 Fail2Ban 版本,您可能正在运行 0.10 版本。

fail2ban-server --version 
Fail2Ban v0.10.2
Copyright (c) 2004-2008 Cyril Jaquier, 2008- Fail2Ban Contributors
Copyright of modifications held by their respective authors.
Licensed under the GNU General Public License v2 (GPL).

在早期版本中,您可以使用负禁止时间 (bantime = -1),这相当于永久禁止,但如果您尝试使用此方法,您可能会看到类似“Starting fail2ban: ERROR NOK: (”数据库磁盘映像格式错误’,)’。

一种不太干净的解决方法是将禁令时间增加到 1 天、1 周、1 个月或 1 年。 这可以避免问题,直到新版本在您的系统上可用。

怎样解除被 Fail2Ban 阻止的 IP

首先检查IP是否被阻止。 由于 Fail2Ban 在 iptables 上工作,您可以查看 iptable 以查看您的服务器禁止的 IP:

iptables -n -L

如果有太多 IP 被禁止,您可能必须使用 grep 命令。

如果在输出中找到指定的 IP 地址,则它被禁止:

因此,下一步是找出哪个“监狱”禁止了所述 IP。 您必须在此处使用带有 fail2ban 日志的 Grep 命令。

正如您在下面的输出中看到的,该 IP 被 sshd jail 禁止。

[email protected]:~# grep -E ‘Ban.*61.184.247.3’ /var/log/fail2ban.log
2019-03-14 13:09:25,029 fail2ban.actions [25630]: NOTICE [sshd] Ban 61.184.247.3
2019-03-14 13:52:56,745 fail2ban.actions [25630]: NOTICE [sshd] Ban 61.184.247.3

现在您知道阻止 IP 的监狱的名称,您可以使用 fail2ban-client 取消对 IP 的禁止:

fail2ban-client set <jail_name> unbanip <ip_address>

怎样在 Fail2Ban 中将 IP 列入白名单

自己禁言可不是什么好事吧? 要忽略被 Fail2Ban 的当前会话禁止的 IP 地址,您可以使用如下命令将该 IP 列入白名单:

fail2ban-client set <JAIL_NAME> addignoreip <IP_Address>

你可以很容易地在 Linux 中找到你的 IP 地址。 就我而言,它是

sudo fail2ban-client set sshd addignoreip 203.93.83.113
These IP addresses/networks are ignored:
`- 203.93.83.113

如果要永久将 IP 列入白名单,则应编辑 jail 配置文件。 转到上述 jail 部分并像这样添加 ignoreip 行:

ignoreip = 127.0.0.1/8 <IP_TO_BE_WHITELISTED>

如果您想将系统上所有监狱的 IP 列入白名单,最好编辑 /etc/fail2ban/jail.local 文件并在 DEFAULT 部分下添加一行,就像我们上面看到的那样。

您必须重新启动 Fail2Ban 才能使此更改生效。

监狱怎样查看IP白名单

您可以使用以下命令查看监狱列入白名单的所有 IP:

fail2ban-client get <JAIL_NAME> ignoreip

它应该显示该监狱的 Fail2Ban 忽略的所有 IP:

sudo fail2ban-client set sshd addignoreip 203.93.83.113
These IP addresses/networks are ignored:
|- 127.0.0.0/8
|- ::1
`- 203.93.83.113

怎样从 Fail2Ban 白名单中删除 IP

如果您要从某个监狱的白名单中删除 IP,您可以使用以下命令:

fail2ban-client set <JAIL_NAME> delignoreip <IP_Address>

如果要永久删除 IP,则应编辑 /etc/fail2ban/jail.local 文件。

还有什么?

您可以使用 Fail2Ban 做更多事情。 本指南为您提供了 Fail2Ban 入门的基础知识。 我还没有涉及操作、邮件通知、过滤器等主题。

一旦您了解了 Fail2Ban 的基础知识,您就可以开始对其进行更多探索。 目前,只需使用它并为 Linux 服务器上的 SSH 添加额外的安全层。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇