当我运行以下命令fail2ban-client status sshd时,我得到了:
Status for the jail: sshd
|- Filter
|  |- Currently failed: 1
|  |- Total failed:     81
|  `- File list:        /var/log/auth.log
`- Actions
   |- Currently banned: 2
   |- Total banned:     8
   `- Banned IP list:   218.65.30.61 116.31.116.7

它只在禁止的IP列表中显示了两个IP,而不是像Total Banned所说的那样显示了8。 br />
Mar 29 11:08:40 DBSERVER sshd[29163]: error: maximum authentication attempts exceeded for root from 218.65.30.61 port 50935 ssh2 [preauth]
Mar 29 11:08:40 DBSERVER sshd[29163]: Disconnecting: Too many authentication failures [preauth]
Mar 29 11:08:40 DBSERVER sshd[29163]: PAM 5 more authentication failures; logname= uid=0 euid=0 tty=ssh ruser= rhost=218.65.30.61  user=root
Mar 29 11:08:40 DBSERVER sshd[29163]: PAM service(sshd) ignoring max retries; 6 > 3
Mar 29 11:08:44 DBSERVER sshd[29165]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=218.65.30.61  user=root
Mar 29 11:08:46 DBSERVER sshd[29165]: Failed password for root from 218.65.30.61 port 11857 ssh2
Mar 29 11:09:01 DBSERVER CRON[29172]: pam_unix(cron:session): session opened for user root by (uid=0)
Mar 29 11:09:01 DBSERVER CRON[29172]: pam_unix(cron:session): session closed for user root
Mar 29 11:10:01 DBSERVER CRON[29226]: pam_unix(cron:session): session opened for user root by (uid=0)
Mar 29 11:10:02 DBSERVER CRON[29226]: pam_unix(cron:session): session closed for user root
Mar 29 11:10:18 DBSERVER sshd[29238]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=113.122.43.185  user=root
Mar 29 11:10:20 DBSERVER sshd[29238]: Failed password for root from 113.122.43.185 port 46017 ssh2
Mar 29 11:10:33 DBSERVER sshd[29238]: message repeated 5 times: [ Failed password for root from 113.122.43.185 port 46017 ssh2]
Mar 29 11:10:33 DBSERVER sshd[29238]: error: maximum authentication attempts exceeded for root from 113.122.43.185 port 46017 ssh2 [preauth]
Mar 29 11:10:33 DBSERVER sshd[29238]: Disconnecting: Too many authentication failures [preauth]
Mar 29 11:10:33 DBSERVER sshd[29238]: PAM 5 more authentication failures; logname= uid=0 euid=0 tty=ssh ruser= rhost=113.122.43.185  user=root
Mar 29 11:10:33 DBSERVER sshd[29238]: PAM service(sshd) ignoring max retries; 6 > 3
Mar 29 11:11:36 DBSERVER sshd[29245]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=116.31.116.7  user=root
Mar 29 11:11:38 DBSERVER sshd[29245]: Failed password for root from 116.31.116.7 port 24892 ssh2
Mar 29 11:11:43 DBSERVER sshd[29245]: message repeated 2 times: [ Failed password for root from 116.31.116.7 port 24892 ssh2]
Mar 29 11:11:43 DBSERVER sshd[29245]: Received disconnect from 116.31.116.7 port 24892:11:  [preauth]
Mar 29 11:11:43 DBSERVER sshd[29245]: Disconnected from 116.31.116.7 port 24892 [preauth]
Mar 29 11:11:43 DBSERVER sshd[29245]: PAM 2 more authentication failures; logname= uid=0 euid=0 tty=ssh ruser= rhost=116.31.116.7  user=root
Mar 29 11:12:39 DBSERVER sshd[29247]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=116.31.116.7  user=root
Mar 29 11:12:41 DBSERVER sshd[29247]: Failed password for root from 116.31.116.7 port 26739 ssh2
Mar 29 11:12:45 DBSERVER sshd[29247]: message repeated 2 times: [ Failed password for root from 116.31.116.7 port 26739 ssh2]
Mar 29 11:12:45 DBSERVER sshd[29247]: Received disconnect from 116.31.116.7 port 26739:11:  [preauth]
Mar 29 11:12:45 DBSERVER sshd[29247]: Disconnected from 116.31.116.7 port 26739 [preauth]
Mar 29 11:12:45 DBSERVER sshd[29247]: PAM 2 more authentication failures; logname= uid=0 euid=0 tty=ssh ruser= rhost=116.31.116.7  user=root
Mar 29 11:13:41 DBSERVER sshd[29249]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=116.31.116.7  user=root
Mar 29 11:13:43 DBSERVER sshd[29249]: Failed password for root from 116.31.116.7 port 27040 ssh2

禁止的IP仍在尝试。
但是当我用tail -f /var/log/auth.log检查时,我得到了:
Chain INPUT (policy ACCEPT 228 packets, 18000 bytes)
 pkts bytes target     prot opt in     out     source               destination
 6050  435K f2b-sshd   tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            multiport dports 22

我在做什么错了?
我该怎么办?显示所有禁止的IP列表吗?

评论

“总数”是指曾经禁止的总数,而不是当前禁止的总数。您将在日志中找到以前禁止的地址的唯一位置(如果保留的话)。

在jail.local或jail.conf中,您似乎有很小的闲暇时间。使其达到200m或更高,然后执行sudo服务fail2ban重新启动,然后fail2ban-client状态sshd

#1 楼

请记住,IP的fail2ban禁止本质上是暂时的。
查看被阻止的IP的完整列表的最佳方法是检查日志文件:
sudo zgrep 'Ban' /var/log/fail2ban.log*

编辑:该答案以前曾搜索'Ban:',但即使在2013年,该源也没有冒号(ref)。 />

评论


我的日志文件中没有冒号(因此需要调整grep)。不过,请留为评论而不是编辑,因为我不知道这是否是最近的更改。

–kwah
18年4月15日在15:54

请记住,列出iptables规则仅在iptables是您的禁止操作的情况下才有效。有时情况并非如此。

– Gilad mayani
18年5月18日在10:09

@kwah对我来说也一样,日志文件中没有冒号。可能是最近的输出更改或错字。

– David Mordigal
19年6月10日在2:36

删除搜索词“禁令”之后的“:”,因为不再将“:”写入日志文件。因此,您可以使用上述命令再次查看被阻止的IP。

–马里奥·纽鲍尔(Mario Neubauer)
19年6月13日在7:13

#2 楼

类似于上面带有kwaa注释的NA AE,它列出了所有IP:

sudo zgrep 'Ban' /var/log/fail2ban.log*


,但是输出有很多行。这统计了所有已记录的禁止(也可能是未禁止)的ip的行数:状态输出:

sudo zgrep 'Ban' /var/log/fail2ban.log* | wc -l


在Ubuntu 18.04.1 LTS中进行了测试。

我的'wc -l'行输出:
fail2ban-client status sshd


并且从fail2ban的状态验证了相同的7244号:

7244


#3 楼

要查看完整的iptables行:

sudo iptables -L -n | awk '=="REJECT" && !="0.0.0.0/0"'


仅查看IP地址:

sudo iptables -L -n | awk '=="REJECT" && !="0.0.0.0/0" {print }'


您可以根据情况通过“ DROP”更改“ REJECT”。

#4 楼

仅供参考:


“被禁止的总数”是该监狱被禁止的IP总数(可能已被禁止)。
“当前被禁止”是该监狱目前被禁止的唯一IP(并且IP列表确认了这一点)。

希望有所帮助。

#5 楼

如果您想查看带有其超时的被禁用IP的列表(超时到期,它们将从被禁止的池中删除),您可以使用:

ipset list


评论


为什么这没有给出任何输出?我确定目前有IP被禁止。

– Sam Sirry
20 Mar 1 '20 at 17:40

我认为可能有很多原因。如果其完全空白而不显示“ Name:f2b-sshd”之类的标题,则可能未注册,并且fail2ban可能直接使用iptables规则而不是使用firewalld。在干净的centos7上,使用最近的内核fail2ban应该与firewalld对话。在执行tailf /var/log/fail2ban.log的同时重新启动fail2ban可能会向您显示正在刷新的规则。我知道ipset list也需要安装最新的内核。 Linus最近更新之前的那些

– gstlouis
20 Mar 2 '20 at 18:44

在我的安装中,fail2ban正在使用iptables。这可能是原因。感谢您的跟进。我学会了使用sudo iptables -L来查看单独链中的禁令。

– Sam Sirry
20 Mar 4 '20 at 14:58



是的,但是忘记了,您可以使用fail2ban-client status sshd来显示这些禁止,以灰色显示管道,并且可以标识被禁止的ips。玩得开心

– gstlouis
20 Mar 4 '15 at 15:10

#6 楼

这将显示iptables的Chain fail2ban-ssh部分中当前禁止的内容(REJECT)。

sudo iptables -L fail2ban-ssh -v -n


#7 楼

您可以使用sqlite3命令通过查询bips数据库的/var/lib/fail2ban/fail2ban.sqlite3表进行一些统计(如果您的fail2ban版本<v0.11.1,请将bips更改为bans)。
显示所有IP地址及其监狱: “ lang-sh prettyprint-override”> sqlite3 /var/lib/fail2ban/fail2ban.sqlite3 "select ip,jail from bips"
显示所有唯一的IP地址:
 sqlite3 /var/lib/fail2ban/fail2ban.sqlite3 "select distinct ip from bips"
 

sshd监狱中显示所有唯一IP地址:
 sqlite3 /var/lib/fail2ban/fail2ban.sqlite3 "select distinct ip from bips where jail='sshd'"
 

在所有监狱中显示前20个最被禁止的IP地址:
 sqlite3 /var/lib/fail2ban/fail2ban.sqlite3 "select jail,ip,count(*) as count from bips group by ip order by count desc limit 20"
 

如果要在GUI应用程序中查看此文件的结构和所有数据,建议使用DB Browser For Sqlite

从版本v0.11.1开始,fail2ban更改了其数据库结构。我在Linux机器上运行此命令,以查看有什么区别(Fail2Ban v0.11.1,Ubuntu 20.04)。是:
 sqlite3 /var/lib/fail2ban/fail2ban.sqlite3 '.schema'
 


评论


如果要跳过包含匹配的完整日志的数据字段,则为SELECT jail,ip,timeofban FROM禁令(2020年10月)。

–咧嘴
20-10-26在21:27

#8 楼

要添加更通用的答案:

请注意,iptables可能不是正确的答案,并且可能根本无法为您提供相关信息(对于原始张贴者而言)。
取决于哪个值banaction = [action]您正在DEFAULT或特定的监狱定义中使用。

我有许多运行Linux的小型ARM供电盒,但内核没有可用的所有相关iptables模块,因此iptables无法在

* BSD可能根本没有iptables,而是使用pf之类的东西。

在我的ARM机器上,我使用路由进行阻塞。它为禁止的IP添加了无效路由,因此返回数据包无法传递,并且IP本质上被阻止。效果很好。
在这种情况下,您可以使用以下方法检查被禁的IP:因此,有许多选项可以检查禁令列表。
使用哪种选项取决于您的平台和偏好。
/etc/fail2ban/action.d/中有许多预配置的配置文件可供选择。

#9 楼

请参见数据库


/var/lib/fail2ban/fail2ban.sqlite3


评论


您应该说明如何解决该问题。

– RalfFriedl
20年1月7日在7:04

#10 楼

按IP地址分组:
awk '($(NF-1) = /Ban/){print $NF}' /var/log/fail2ban.log | sort | uniq -c | sort -n

注意:变量NF等于日志文件每一行中的字段数。因此$ NF是最后一个字段的值。
示例输出:
...
  4 XXX.124.81.130
  5 XXX.248.175.246
  8 XXX.29.45.142

访问此链接以获取更多详细信息