我在 Web 服务器上托管了一堆 PHP 网站。虽然我已采取所有预防措施来保护所有端口,但针对端口 80 的特定攻击仍在继续。我想禁止任何在一小时内对任何网页感兴趣超过 200 个或一分钟超过 15 个的 IP 地址。我假设人类用户不可能在一分钟内浏览 15 个网页,除非他有确实值得怀疑的原因。
理想情况下,我希望将 IP 地址登录到被禁止的数据库中,并且为属于我的客户的 IP 地址列出白名单 IP 地址。
有没有现成的工具可以完成所有这些工作。我看到了 fail2ban,但它没有达到目的...
答案1
您需要做的是:1)查看 apache 日志的访问情况 2)阻止防火墙上符合条件的 IP 地址(通过脚本)。
失败2ban将要做你想做的事,只需比阅读 Google 搜索标语稍微多一点的工作即可。
答案2
如何使用现有的服务,例如蜜罐计划?
答案3
这在运行 Linux 和 PHP 版本的 Raspberry Pi 上有效:
要从 php 运行 iptables,请将以下内容添加到 /etc/sudoers www-data ALL=(ALL) NOPASSWD: /sbin/iptables
有些人不喜欢将 www-data 访问权限授予 iptables。他们说这会带来安全风险。但我认为这没问题,因为他们刚刚被禁止了。
<?php
// Get the ip address of the client.
$remote_addr = $_SERVER['REMOTE_ADDR'];
// Ban them.
if (is_ip($remote_addr)) {
ban_ip($remote_addr);
// Save the banned IP address.
$logfile = '/run/shm/banned.txt';
file_put_contents($logfile,$remote_addr."\n",FILE_APPEND);
}
// Returns true if $ip is a valid ip address.
function is_ip($ip)
{
$count = strlen($ip);
$valid = '0123456789.:';
for($loop=0;$loop<$count;$loop++) {
if (strpos($valid,substr($ip,$loop,1))===false) {
return false;
}
}
return true;
}
// Bans an ip address.
function ban_ip($ip)
{
$cmd = 'sudo /sbin/iptables -A INPUT -s ' . $ip . ' -j DROP';
exec($cmd);
return;
}
?>