阻止无效的HTTP请求到PHP应用程序

几年来,我第一次负责帮助PHP Web应用程序的服务器pipe理(使用Apache进行服务)。

我们看到了一些无效url的请求,我认为这些url是恶意软件/漏洞利用相关的探针。 像

r/www/cache/static/home/img/logos/nuomi_ade5465d.png cgi-bin/test.sh cgi-sys/entropysearch.cgi 

等等

我想阻止这些要求,既要坚持不良的演员,更重要的是要清理我的日志。 为此,我有几个问题

  1. 一般来说,阻止IP地址工作? 我知道“互联网上的IP地址==唯一设备”已经很长时间了,但是我想知道这些探测器是否通常来自于那些对我来说安全的networking,

  2. 如果我不能阻止IP地址,有没有人维护一个坏的演员通常探测的URL列表,所以我可以通过URL阻止?

  3. Re:#2 – 如果我要在服务器级别处理这个阻塞,哪个apache模块适合这种事情? ( MOD_REWRITEMOD_SECURITY

  4. 有没有更好的方法来阻止除IP或URL之外的这些请求?

  5. 此外,该系统托pipe在EC2 – 亚马逊提供这种事情的任何帮助?

  1. 阻止IP地址将是一场你不可能赢的比赛。 这些请求通常来自僵尸networking或黑客入侵的系统。 我build议阻止IP只是一个临时的解决scheme,一个具体的事件,请求在你身边引起问题。

  2. 我不知道这样的名单

  3. 两者都会工作。 但我认为(没有testing),忽略请求实际上会减lessCPU的激烈

  4. 使用反向代理(例如varnish或甚至mod_cache)来caching否定匹配(404)。 所以对相同(不存在的)URL的请求可以非常快地处理,不需要每次检查文件系统。

  5. 不知道

  1. 一般来说,阻止IP地址工作? 我知道“互联网上的IP地址==唯一设备”已经很长时间了,但是我想知道这些探测器是否通常来自于那些对我来说安全的networking,

你可以很容易地使用一个简单的.htaccess文件阻止许多请求。 在那里你可以阻止知识产权,url和大量的东西。 但是我不确定你的“坏请求”是什么来源。 我所知道的是,你应该从阻止我们所知道的不好的stream量开始。 如果你的目标更大一点,那么可以做到这一点,而是停止拒绝服务攻击,同时限制不好的请求! 你需要的一切是在这个非常有用的资源 。 但是他们并没有真正说出要安装哪个模块。 我build议: mod_antiloris , mod_evasive,但你可以在这里find更多的加载。

我会亲自考虑在build立其中一些之前,坚持封锁某些网站或ips。 但是,如果你想开始限制特定的模式,使用PHP scrict可能会更容易。 即将所有参数路由到index.php并在那里分析。 这仍然需要使用.htaccess文件重新路由。 Drupal做这样的事情:

 # Pass all requests not referring directly to files in the filesystem to # index.php. Clean URLs are handled in drupal_environment_initialize(). RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} !=/favicon.ico RewriteRule ^ index.php [L] 

通过这样做,你可以“陷阱”每一个incominngurl。 Drupal实际上已经有了这个内置的function,并且会告诉你这个人X正在寻找文件Y.而且Drupal也有一些模块可以阻止某些规则的访问。 如果可能的话,我确信连接到PHP会让你看到很多不同的选项,你可以使用它来阻止或不阻止从ips访问。

我想我提出了一个解决scheme,但我确实需要更多的信息来进一步build议。 如果你这样做,你将能够收集更多的信息,也许查明你的不良请求困境的确切来源。 使用这些工具,您将能够看到模式,并且至less可以学习更好的方法来configuration规则来阻止坏人。

  1. 如果我不能阻止IP地址,有没有人维护一个坏的演员通常探测的URL列表,所以我可以通过URL阻止?

有apache模块这样做,并利用自己的库。 也有PHP的图书馆,这样做和各种networking,跟踪“坏人”,无论是垃圾邮件发送者使用IP地址,或垃圾邮件使用电子邮件地址等。 这里是一个人跟踪的服务器列入黑名单的各种原因。 通过inputwww.google.com进行尝试。

  1. 重新#2。 如果我要在服务器级别处理这个阻塞,哪个apache模块适合这种事情? (MOD_REWRITE,MOD_SECURITY)

MOD_REWRITE会将请求发送到一个PHP文件,然后你可以用PHP处理这个问题。 但是这确实有一些开销。 你最好使用MOD_SECURITY,也许MOD_EVASIVE

  1. 有没有更好的方法来阻止除IP或URL之外的这些请求?

这真的取决于。 你必须研究出现的模式并确定原因。 我非常沮丧,我们不断收到对“transparent.png”(或其他)的要求,这是对许多手机的新标准要求。 我们认为这是不好的,这是好的。 不要结束这样做。

  1. 此外,该系统托pipe在EC2 – 亚马逊提供这种事情的任何帮助?

我不知道。 出于我个人的经验,更多的是使用它来发送信息,甚至在发送不到2500封电子邮件时,我们也很快被列入黑名单。 但是,如果你正在与他们一起托pipe,并希望他们阻止传入的“不良请求”,他们应该已经在一定程度上这样做了。 除非你每隔几天就有一个大规模机器人军队攻击你的服务器,你应该让他们介入吗? 也许要求他们帮助你确定来源,或者自己做调查并从那里决定。

根据我的理解,没有完善的logging方式来处理这些问题。 您只能将Web应用程序中的可疑尝试降至最低。

是的,可以在Apache上阻止IP。 在这里检查Apache文档 。 它使用mod_rewrite ,如果IP位于黑名单中,则向客户端提供403响应代码。 监视日志并保持hosts.deny是一件痛苦的工作

如果你知道这些无效URL的模式,那么比第一个选项less一点痛苦的工作就是使用mod_rewrite根据请求的模式来阻塞请求。 扩展第一个选项中使用的规则,为规则添加额外的条件。

 RewriteMap hosts-deny txt:/path/to/hosts.deny RewriteCond ${hosts-deny:%{REMOTE_ADDR}|NOT-FOUND} !=NOT-FOUND [OR] RewriteCond ${hosts-deny:%{REMOTE_HOST}|NOT-FOUND} !=NOT-FOUND [OR] RewriteCond %{QUERY_STRING} <any suspicious keyword/pattern> [NC,OR] RewriteCond %{REQUEST_URI} <any suspicious keyword/pattern> [NC] RewriteRule ^ - [F] 

根据您的网站做些什么添加不同的规则。 说如果你的网站只提供.php文件只是添加一个更多的条件,上面的代码。 RewriteCond %{REQUEST_URI} !.php$ [NC]

Fail2ban被devise来完成你所描述的。 例如见http://linuxaria.com/howto/how-to-protect-apache-with-fail2ban

您可以将其configuration为对(例如)404响应敏感。 或者你甚至可以在url上设置蜜jar来提出fail2ban的黑色标志来执行。

关于具体问题:

  1. 是的,它会工作,但要小心,不要通过不良链接DOS自己

  2. 这样的列表会很快过时 – 这就是为什么你应该使用stream量本身作为一个数据源。 但是/ ^ / cgi-bin /和/.asp(x+)$/是你可能想要黑旗的东西

  3. 除非要将黑色标记的URLredirect到更复杂的处理程序,否则不需要任何模块

  4. 你向亚马逊支付服务费,问我们你在付什么费用?