我可以在我的 apache 错误日志中看到一个 IP 尝试定期访问一个不存在的文件。Fail2ban 不会自动禁止这个 ip,因为请求的频率太慢了。
1)那么如何手动将此IP添加到fail2ban的非永久禁止列表中?也许还有其他工具/方法在 X 小时内禁止 IP(X 参数化)?
2) 我在哪里可以查看被fail2ban 实际禁止的IP 的完整列表?
谢谢。
我建议您使用apache-nohome
过滤器,我认为它应该filter.d
默认包含在您的目录中 - 如果没有,请apache-nohome.conf
在您的filter.d
子目录中创建包含以下内容的文件:
# Fail2Ban filter to web requests for home directories on Apache servers
#
# Regex to match failures to find a home directory on a server, which
# became popular last days. Most often attacker just uses IP instead of
# domain name -- so expect to see them in generic error.log if you have
# per-domain log files.
[INCLUDES]
# overwrite with apache-common.local if _apache_error_client is incorrect.
before = apache-common.conf
[Definition]
failregex = ^%(_apache_error_client)s (AH00128: )?File does not exist: .*/~.*
ignoreregex =
# Author: Yaroslav O. Halchenko <debian@onerussian.com>
apache-nohome.local
然后,如果您需要修改正则表达式,您可以通过在同一目录中创建一个来修改它,这将覆盖.conf
版本(根据fail2ban 文档)。
一旦你创建了这个文件,你需要在你的 jail 配置中包含一个适当的相应段 - 如果你还没有这样做,请将你的 jail.conf 文件复制到 jail.local 进行编辑,并插入一个类似于以下的段, 举个例子:
[apache-nohome]
enabled = true
filter = apache-nohome
action = iptables-allports[name=apache-nohome]
sendmail-whois[name=apache-nohome, dest=you@yourdomain.tld, sender=yourbox@yourdomain.tld]
logpath = /var/log/httpd/error.log*
maxretry = 5
findtime = 86400 ; 1 day (specified in seconds)
bantime = 2592000 ; 1 month (specified in seconds)
简单解释一下上述监狱 - 这将在 24 小时内 5 个实例后禁止与 apache-nohome 过滤器中的失败正则表达式匹配的主机的所有 IP 流量,并禁止该 IP 一个月。然后它会向您发送一封电子邮件,其中包含违规 IP 的 WHOIS 详细信息。您当然可以将maxretry
值或findtime
或值修改为您希望的任何值,如果您不希望收到有关每个禁令的电子邮件bantime
,甚至可以从操作中删除该行。sendmail-whois
您可能还希望修改 logpath 值以适合您希望扫描的任何日志 - 我只是提供了 CentOS 6.5 下 httpd 的默认错误日志路径作为示例。
希望这可以帮助!