阻止试图利用常见 Web 应用漏洞的 IP

阻止试图利用常见 Web 应用漏洞的 IP

是否有一个应用程序可以检查 nginx 日志并阻止针对常见 web 应用程序漏洞发出请求的 IP?

我有一个 nginx Web 服务器,它只提供静态内容。我经常收到GET /db/websql/main.php或 的请求GET /db/phpMyAdmin2/main.php。这些是有人扫描漏洞的明显迹象。是否有一个应用程序可以浏览 nginx 日志,识别这些利用常见漏洞的尝试并阻止违规 IP?我的想法是,即使我不容易受到这些攻击,相同的 IP 也可能对我网络上的同一台机器或其他机器进行其他类型的攻击:SMTP、SSH、带有 Web 应用程序的其他 Web 服务器。在他们被发现偷窃 Cookie 时阻止他们对我来说似乎是一个好方法。

Fail2ban 对 SSH 和 HTTP 身份验证尝试执行类似操作。也许它可以与包含用于漏洞的知名地址列表的配置一起使用。有这样的配置可用吗?

答案1

摘自 gotroot.com论坛

您可以在 nginx 前面放置一个带有 mod_security 的反向代理 apache,从而将 nginx 与我们的规则结合使用。这实际上非常轻量,我们将在 3.0 版后添加此功能,作为运行 nginx 等替代 Web 服务器的站点的选项。正如 Scott 所说,nginx 没有任何 WAF 模块或功能,因此您无法在 nginx 内部执行任何类似 modsecurity 的操作。

人们要求 nginx 团队添加 WAF,我知道 lightspeed 正在努力提供全面的 modsec 支持,但到目前为止我还没有看到任何针对 nginx 的内容。因此,如果您使用 nginx,并且想要 WAF 来保护它,则需要在它前面放置一个 WAF。

正如我所说,这个功能非常有效,因此我强烈建议您这样做。我们有许多客户运行各种非 Apache Web 服务器,并在其前面使用 Apache 反向代理和 mod_security。正如我所提到的,我们将在 ASL 3.0 版本后将其作为非 Apache Web 服务器的一个选项添加到其中。

(Gotroot.com 因其提供的 mod_security 规则列表而闻名。)

您可以尝试的另一件事是纳克西它是 Nginx 的 Web 应用程序防火墙模块,尽管它仍处于 alpha 版本。更多的

答案2

是的,您可以使用 fail2ban 来阻止发送恶意请求和扫描您的服务器的 IP:

  • fail2ban 中有一个预置的过滤器,nginx-botsearch可能已经可以满足您的要求。只需注意 nginx 会记录不良请求,这样 fail2ban 就可以在 nginx 日志中找到它们。

  • 我喜欢新的 fail2ban v11(即使它尚未投入生产,正如开发人员所说。但对我来说已经运行得很好了。)。它有一项功能,称为 bantime.incrementfail2ban 将禁止的 IP 存储在其自己的数据库中,然后可以根据给定的公式自动增加禁止时间,以应对每个已知不良 IP 的禁止。这意味着您可以拥有非常低的初始禁止时间,fail2ban 会处理其余的事情。

  • 从 v10 开始,使用 fail2ban 终于可以禁止 IPv6 IP。(使用 iptables banaction,因为 UFW banaction 在禁止 IPv6 IP 方面仍然存在问题。)

此外,您还可以:

  • 安装 UFW,它有一些不错的默认设置,例如丢弃无效数据包。

  • 定期(可能每天一次)下载包含已知不良 IP 的阻止列表,并直接在 iptables 中阻止这些 IP。好的起点可能是这样的脚本脚本。(向下滚动该页面即可使用 获取改进版本ipset。)

答案3

您如何发现这些非法请求...如果您能看到它们,那么fail2ban 也能看到它们。只需在 jail.conf 中添加规则来发现这些请求,然后禁止这些用户即可。

在 fail2ban 中创建 apache-httpd 代码的副本并试用一下。基本上,您需要找出与收到的每个错误相匹配的正则表达式,然后告诉 fail2ban 如何处理它。

答案4

我为他们设置了陷阱。一种常见的攻击是附加 ?author=1 以查看 WordPress 管理员用户名。如果我的主页检测到了这一点,它会禁止该 IP 地址。另一个技巧是创建一个您的网站未使用的目录,例如 /admin。不要放任何指向它的链接。在您的 robots.txt 中设置一条规则,告诉 google.com 不要将其编入索引。在该文件夹中放置一个网页,运行一个程序,如果他们访问该页面,就会禁止他们的 IP 地址。对于您提到的页面,将真实的网页放在那些会将其 IP 地址添加到 iptables 禁止防火墙的位置。

这可以在运行 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;
}
?>

相关内容