在 CentOS 7 上安装 fail2ban

Cod*_*Med 15 ssh centos openssh sshd fail2ban

我正在使用 @GarethTheRed 对这个问题的回答在远程 CentOS 7 服务器上安装 fail2ban。我能够完成所有步骤,直到tail -f /var/log/fail2ban.log,此时我得到的结果与他在回答中得到的结果不同。

这是我在这一步得到的结果:

[root@remotecentosserver.com ~]# tail -f /var/log/fail2ban.log
2014-12-02 16:55:53,548 fail2ban.server.server[6667]: INFO    Changed logging target to /var/log/fail2ban.log for Fail2ban v0.9.0
2014-12-02 16:55:53,550 fail2ban.server.database[6667]: INFO    Connected to fail2ban persistent database '/var/lib/fail2ban/fail2ban.sqlite3'
2014-12-02 16:55:54,239 fail2ban.server.database[6667]: WARNING New database created. Version '2'  
Run Code Online (Sandbox Code Playgroud)

在最后一行之后,我只得到一个光标,但没有命令提示符,除非我输入Ctrl-C.

当我输入时systemctl status fail2ban,它告诉我它fail2ban处于活动状态。当我退出系统并稍后重新登录时,sshd告诉我自上次登录以来有很多登录尝试失败。所以应该有fail2ban日志。但我似乎无法找到它们。

有人可以告诉我如何设置此设置以便fail2ban生成我可以跟踪的日志吗?

gar*_*Red 33

尝试fail2banEPEL安装。它是为 CentOS 7 打包的,您将在它们发布时获得更新。安装rpm另一个 repo的表单可能会起作用(在这种情况下确实如此),但不是最好的做事方式。

首先,通过发出以下命令(以 root 用户身份)安装 EPEL 存储库:

yum install epel-release
Run Code Online (Sandbox Code Playgroud)

以上应该安装 EPEL 并让您访问许多新包。其中一个包是fail2ban,因此通过运行安装它:

yum install fail2ban
Run Code Online (Sandbox Code Playgroud)

默认情况下没有配置 jails,因此要配置一个基本的sshdjail:

创建/编辑文件/etc/fail2ban/jail.local并添加:

[sshd]
enabled = true
Run Code Online (Sandbox Code Playgroud)

从以下开始:

systemctl start fail2ban
Run Code Online (Sandbox Code Playgroud)

让它在启动时启动:

systemctl enable fail2ban
Run Code Online (Sandbox Code Playgroud)

曾经有一个已知的错误,即 SELinux 会阻止fail2ban访问它完成工作所需的日志文件。这似乎在最新版本的 CentOS 7 中得到修复;您不需要进行以下更改。

如果您确实遇到此问题,则日志中不会出现任何症状,fail2ban-client status sshd.

要检查 SELinux 错误,请阅读以下日志:

journalctl -lfu fail2ban
Run Code Online (Sandbox Code Playgroud)

观察他们的消息,例如:

SELinux is preventing /usr/bin/python2.7 from getattr access on the file .
       *****  Plugin catchall (100. confidence) suggests   **************************
       If you believe that python2.7 should be allowed getattr access on the  file by default.
       Then you should report this as a bug.
       You can generate a local policy module to allow this access.
       Do 
       allow this access for now by executing:
       # grep fail2ban-server /var/log/audit/audit.log | audit2allow -M mypol
       # semodule -i mypol.pp
Run Code Online (Sandbox Code Playgroud)

因此,按照建议执行并运行:

grep fail2ban-server /var/log/audit/audit.log | audit2allow -M mypol
semodule -i mypol.pp
Run Code Online (Sandbox Code Playgroud)

然后,为了安全起见,重新启动fail2ban

systemctl restart fail2ban
Run Code Online (Sandbox Code Playgroud)

您甚至可能必须重复上述过程,直到日志中不再出现错误消息。

如果您的服务器在 Internet 上,则监视 fail2ban-client status sshd. 如果您发现了所有 SELinux 问题,它很快就会开始显示失败和禁止计数。

请注意,您必须密切关注 SELinux 策略更新。如果出现selinux-policy包更新,它可能会覆盖上述内容,您可能需要再次运行上述命令。你会知道是否是这种情况,因为fail2ban它将再次停止工作!