在使用最低服务器开销时阻止错误的服务器请求

时间:2017-11-20 19:59:38

标签: wordpress apache .htaccess exchange-server http-status-code-400

我们的网络服务器偶尔会受到大量的(交换服务器)文件请求的攻击,这些文件在我们的(apache)Web服务器上不存在:

自动发现/为Autodiscover.xml

如何以对服务器负载最小的方式响应这些请求?

(当这些请求发生时,我们的VPS内存使用量会激增并超过我们的RAM分配。)

我希望服务器以最低的开销做出响应,告诉他们基本上要离开;那个文件在这里不存在;停;糟糕的要求(你明白了。)

现在,服务器返回404错误页面,这意味着我们会引发我们的WordPress安装。它返回我们的自定义404 WordPress错误页面。这涉及到我想避免的大量开销。

我怀疑这些请求来自某种黑客攻击,但我只是在猜测。无论如何,我只想拦截它们并尽可能快速有效地阻止或阻止它们。

(我把IP块放在他们来自的IP地址上,但我认为这只是玩弄傻瓜。)

我把它放在我们的htaccess文件中,但它没有做我想要的:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^autodiscover/autodiscover.xml$ "-" [forbidden,last]
</IfModule>

此规则有问题吗?

我可以或者应该以其他方式使用我们的htaccess文件来做我想要的吗?有没有比使用htaccess更好的方法呢?我们能否回复404以外的回复?也许有400或403的回复?我们怎么做?我们所在的VPS服务器上没有直接访问权限。

2 个答案:

答案 0 :(得分:0)

“无法直接访问”意味着您无法安装软件?

我完全建议将nginx设置为反向代理,但如果因为没有本地管理员而无法解决问题:使用CloudFlare之类的服务并使用页面规则(为您运行反向代理等等)

如果你运行pre-fork mpm(你可能因为mod_php而做),你不需要任何不必要的东西来达到apache,因为它会产生很多进程来处理并行客户端,并且启动它们相对较慢。此外,一旦暴风雨结束,它们将再次被杀死(取决于您对MaxSpareServers的设置)。

关于MaxSpareServers,以及至少包含损害的方法:

IF(你可能不是)你运行apache的mpm_prefork(MPM =多处理模块,基本上是“引擎”apache使用的;大多数PHP设置使用mod_php运行mpm_prefork),apache需要一个子处理每个并行请求。

现在,当100个请求同时进入时,apache将产生100(或更少,如果MaxRequestWorkers设置为低于100),孩子们将处理它们。这是非常昂贵的,因为每个处理过的都需要启动并占用内存)并且当你的VPS开始交换并且一切都变慢时,可能导致所有意图和目的的拒绝服务器。

一旦这个请求风暴结束,apache将留下100个子进程,并将开始删除其中一些进程,直到它达到MaxSpareServers设置的任何内容。如果没有备用服务器,则新请求必须排队等待子进程处理它们。对于用户来说,这基本上是“服务器没有响应”。

如果你不能在apache面前放一些东西,你能改变(或者有人改变)apache配置吗?如果你限制MaxRequestWorkers,你将获得一些成功,也就是apache可以产生的最大子项数(因此可以处理的最大并行请求数)。如果这样做,服务器在高负载时仍会显示无响应,但它不会对系统造成太大影响,因为您的进程将不会开始使用SWAP而不是RAM并变得非常慢。

答案 1 :(得分:0)

任何拒绝访问该文件的尝试,无论是通过拒绝还是[F]禁止标记,都会导致WordPress进入并响应404错误页面。

为了避免这种情况,我创建了一个自定义的421错误页面(看起来最合适),将其放在WordPress目录之外,并使用从错误请求文件名的htaccess重定向到自定义错误页面。

Redirect /autodiscover/autodiscover.xml /path/to/error-421-autodiscover-xml.php

这将返回不调用WordPress的自定义错误页面(仅1KB)。使用错误代码文件名称中的错误请求文件创建特定于该文件的自定义错误页面应该有助于在我们的日志文件中识别这些调用。

如果您在其他地方运行Exchange服务器以获取电子邮件,则可能适合使用Web服务器上的htacess从Web服务器重定向到Exhange服务器。适当的htaccess规则可能是:

RedirectMatch 302 (?i)^/autodiscover/(.*)$ https://mail.example.com/autodiscover/$1

请参阅:https://glennmatthys.wordpress.com/2013/10/14/redirect-autodiscover-urls-using-htaccess/

@janh肯定是正确的,在它甚至到达我们的Apache服务器之前拦截请求的机制是理想的,但它超出了我们现在可以做的。

(/ autodiscover / autodiscover.xml似乎是Exchange服务器用于将流量路由到邮件服务器的文件。根据我们的网络托管公司的说法,Apache服务器被命中此文件的请求并不罕见其中一些请求可能来自恶意机器人搜索访问邮件服务器;有些可能来自配置错误的智能手机电子邮件客户端或其他针对Exchange服务器的错误请求。)