我安装了 Fail2ban 并且它运行良好。
抱歉,我不是 Linux 专家。我只能找到自己的路。
我需要一个脚本来打印所有被禁止的 IP 地址,最重要的是打印禁令生效的日期和时间。我只对 IP 地址以及禁令的日期和时间感兴趣。其他的我都不在乎。
有人可以帮忙吗?
答案1
如果您想排除重复的 IP 地址,您问的问题有点复杂。
我自己在 Ubuntu 上使用 Fail2ban,因此我的示例来自我正在运行的服务器:
要查找所有活动的监狱,请运行命令:fail2ban-client status
。
在我的服务器上它将响应以下输出:
Status
|- Number of jail: 10
`- Jail list: dovecot, f2b-loop2, f2b-loop3, f2b-loop4, postfix, postfix-rbl, postfix-sasl, postfix-spam-ddos, pureftpd, sshd
从理论上讲,创建一个数组有点简单,其中数组中的每个元素都是一个监狱的名称。
在我自己的 BASH shell 脚本中,它是通过以下几行完成的:
#!/bin/bash
JAILS=`fail2ban-client status | grep "Jail list" | sed -E 's/^[^:]+:[ \t]+//' | sed 's/,//g'`
for JAIL in $JAILS
do
# Insert the commands you want to run for each jail.
# The variable '$JAIL' contains the name of the jail.
#
# Like:
fail2ban-client get $JAIL banip --with-time
done
因此,我的脚本首先会从监狱“dovecot”获取内容,然后是“f2b-loop2”,然后是“f2b-loop3”等等。
然而:
同一个 IP 地址可能出现在多个 jail 中。至少对于我的名为 f2b-loop(x) 的 jail 来说就是这种情况,其中 (x) 是 2 到 4 之间的数字。
我循环监禁是因为我禁止某个特定的 IP 的时间越来越长,比如 2 小时、1 天、7 天和 1 个月。
所以:
过去,我曾将我的信息输入到 IP 地址的二叉搜索树中,因此,如果同时阻止了大量可疑的类似 IP 地址,我就可以制作汇总的禁止列表。
原因是,创建 1 条涵盖 64 个 IP 地址的阻止规则,而不是 64 条单独的规则,对服务器更加友好。
... 这也是为什么我或多或少地封锁了来自 1 个伊朗 ISP、2 个俄罗斯 ISP 和 2 个中国 ISP 的 50% 可用 IP 地址的原因!
无论如何:
从我最初的代码片段中,可以使用 shell 脚本或管道输出到与数据库或其他程序交互的程序进行各种操作。
如果您对 Linux 没有任何经验,我强烈建议您阅读 shell 脚本教程,因为这是您在使用 Linux 时将要使用的最强大的工具之一。