我有一台装有apache的服务器,最近安装了mod_security2,因为我受到了很多攻击:
我的apache版本是apache v2.2.3,我使用的是mod_security2.c
这是错误日志中的条目:
[Wed Mar 24 02:35:41 2010] [error]
[client 88.191.109.38] client sent HTTP/1.1 request without hostname
(see RFC2616 section 14.23): /w00tw00t.at.ISC.SANS.DFind:)
[Wed Mar 24 02:47:31 2010] [error]
[client 202.75.211.90] client sent HTTP/1.1 request without hostname
(see RFC2616 section 14.23): /w00tw00t.at.ISC.SANS.DFind:)
[Wed Mar 24 02:47:49 2010] [error]
[client 95.228.153.177] client sent HTTP/1.1 request without hostname
(see RFC2616 section 14.23): /w00tw00t.at.ISC.SANS.DFind:)
[Wed Mar 24 02:48:03 2010] [error]
[client 88.191.109.38] client sent HTTP/1.1 request without hostname
(see RFC2616 section 14.23): /w00tw00t.at.ISC.SANS.DFind:)
以下是access_log中的错误:
202.75.211.90 - -
[29/Mar/2010:10:43:15 +0200]
"GET /w00tw00t.at.ISC.SANS.DFind:) HTTP/1.1" 400 392 "-" "-"
211.155.228.169 - -
[29/Mar/2010:11:40:41 +0200]
"GET /w00tw00t.at.ISC.SANS.DFind:) HTTP/1.1" 400 392 "-" "-"
211.155.228.169 - -
[29/Mar/2010:12:37:19 +0200]
"GET /w00tw00t.at.ISC.SANS.DFind:) HTTP/1.1" 400 392 "-" "-"
我试过像这样配置mod_security2:
SecFilterSelective REQUEST_URI "w00tw00t\.at\.ISC\.SANS\.DFind"
SecFilterSelective REQUEST_URI "\w00tw00t\.at\.ISC\.SANS"
SecFilterSelective REQUEST_URI "w00tw00t\.at\.ISC\.SANS"
SecFilterSelective REQUEST_URI "w00tw00t\.at\.ISC\.SANS\.DFind:"
SecFilterSelective REQUEST_URI "w00tw00t\.at\.ISC\.SANS\.DFind:\)"
mod_security2中的问题是无法使用SecFilterSelective,它给了我错误。相反,我使用这样的规则:
SecRule REQUEST_URI "w00tw00t\.at\.ISC\.SANS\.DFind"
SecRule REQUEST_URI "\w00tw00t\.at\.ISC\.SANS"
SecRule REQUEST_URI "w00tw00t\.at\.ISC\.SANS"
SecRule REQUEST_URI "w00tw00t\.at\.ISC\.SANS\.DFind:"
SecRule REQUEST_URI "w00tw00t\.at\.ISC\.SANS\.DFind:\)"
即使这样也不起作用。我不知道该怎么办了。有人有什么建议吗?
更新1
我看到没有人可以使用mod_security解决此问题。到目前为止,使用ip-tables似乎是执行此操作的最佳选择,但我认为文件会变得非常大,因为ip每天会更改服务器次数。
我想出了另外两种解决方案,有人可以对它们的优劣发表评论。
我想到的第一个解决方案是将这些攻击从我的Apache错误日志中排除。这将使我更容易发现其他紧急错误,因为它们很容易发生,而不必吐槽。
我认为第二种方法更好,那就是阻止未以正确方式发送的主机。在此示例中,发送的w00tw00t攻击没有主机名,因此我认为我可以阻止格式不正确的主机。
更新2
经过深入的回答后,我得出以下结论。
为apache定制日志将消耗一些不必要的资源,如果确实存在问题,您可能希望查看完整的日志而不会丢失任何内容。
最好只忽略匹配,而专注于分析错误日志的更好方法。为日志使用过滤器是解决此问题的一种好方法。
关于这个问题的最终想法
如果您至少拥有最新的系统,则上述攻击将不会对您的计算机造成影响,因此基本上没有后顾之忧。
过一会儿很难过滤掉所有虚假的攻击,因为错误日志和访问日志都变得非常大。
防止这种情况以任何方式发生都会浪费您的资源,并且最好不要将资源浪费在不重要的东西上。
我现在使用的解决方案是Linux logwatch。它向我发送日志摘要,并对其进行过滤和分组。这样,您可以轻松地将重要事项与不重要事项区分开。
谢谢大家的帮助,我希望这篇文章对其他人也能有所帮助。