2011-09-16 38 views
2

我在IIS 7.5上运行WordPress的 - 我今天回顾我的日志,发现有大量的蛮力尝试在我的网站,寻找可能危害其安全性的文件。具体查找安装文件,phpMyAdmin,其他MySQL的东西等 - 所有这些都是404。IIS/PHP蛮力安全模块 - 建议?

基于这些信息,有什么方法可以创建一个安全模块,以A)阻止超过[n]连续数404个。 B)阻止匹配某些关键字的人,例如寻找phpMyAdmin。 C)这是可选的,但如果我想硬编码/添加一些,一个理想的解决方案也会阻塞IP地址。

我有一些想法,但我也在寻找其他建议。由于服务器是IIS,我宁愿使用C#ASP.NET的解决方案或以某种方式嵌入IIS中。

回答

1

实现一个HttpHandler拦截所有请求。如果他们正在寻找这些模块,请记录他们的IP并停止攻击,并将IP添加到阻止的主机列表中。

是的 - 有人可以伪造一个IP(在DoS攻击中更多关注并且在这里不可行),但是他们无法伪造整个会话(大致是一个数据包),因此他们无法继续使用该IP来获取一个回应,并知道该文件是否存在。

这种方法,如果您想进一步的所有接入立即处理以特殊的方式IPS如块将被使用。

如果你不需要这种类型的控制,只是想阻止考虑定制URLScan的规则,以立即阻止它,因为现在的UrlScan自带内置到IIS。 参见: http://www.hanselman.com/blog/HackedAndIDidntLikeItURLScanIsStepZero.aspx

+0

urlscan对于iis和apache的重写规则是一样的吗?这就是为什么我使用,我只是重写所有请求phpMy *管理*配置*等索引。这主要是为了清除错误日志(因为我没有任何这些文件夹),但也很安心 – thegaffney

+0

不,URLScan不会像apache重写一样是url重写器,而是试图阻止其中的攻击轨道。如果你想重定向(我不相信你可以使用UrlScan,但我错了),一种选择是实现处理程序。 –

0

A)屏蔽某人具有比一排[n]的数量404的更多。

有一个名为“更好的WP安全”的wordpress插件,它具有404检测功能,它完全允许此功能。我现在正在使用它,它工作得很好。

B)阻止匹配某些关键字的人,例如寻找phpMyAdmin。

你不想阻止任何试图访问phpMyAdmin的人,因为那也包括你自己。您想通过IP过滤请求 - 不允许任何不在白名单中的IP访问phpMyAdmin。您将在下面的第三个问题的答案中找到如何做到这一点。

C)这是可选的,但理想的解决方案也将阻止IP地址,如果我想

您可以按照以下步骤禁止访问IIS上的wp-login.php中和可湿性粉剂管理员对于不在白名单中的IP的7.5。您可以通过在步骤4的代码中(包括)复制代码之间的代码并更改“path”属性来模拟该示例,以将您想要的任何文件(例如phpMyAdmin)包含在wordpress文件夹中。

1,打开网页。在你的WordPress根文件夹的配置文件,如果你没有找到它,创建一个

2,启用“IP和域限制”按照[本条]的作用[1]

3,打开IIS Manager,点击根节点,在右侧面板中选择“Feature Delegation”,找到“IPv4 Address and Domain Restrictions”项,授予“Read/Write”权限

4,打开web.config文件,如果您自己创建了文件并且该文件为空,请添加以下代码(请参阅底部的注释以获得解释):

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
<location path="wp-login.php"> 
     <system.webServer> 
     <security> 
      <ipSecurity allowUnlisted="false">  
       <clear/> 
       <add ipAddress="100.100.100.29" allowed="true"/> 
       <add ipAddress="111.111.111.0" subnetMask="255.255.255.0" allowed="true"/> 
      </ipSecurity> 
     </security> 
     <modules runAllManagedModulesForAllRequests="true"/> 
     </system.webServer> 
    </location> 

    <location path="wp-admin"> 
     <system.webServer> 
     <security> 
      <ipSecurity allowUnlisted="false">  
       <clear/> 
       <add ipAddress="100.100.100.29" allowed="true"/> 
       <add ipAddress="111.111.111.0" subnetMask="255.255.255.0" allowed="true"/> 
      </ipSecurity> 
     </security> 
     <modules runAllManagedModulesForAllRequests="true"/> 
     </system.webServer> 
    </location> 
</configuration> 

如果您正在使用现有的web.config文件,那么您只需将标记之间的代码添加到web.config中的现有标记中即可。

说明:此代码阻止访问wp-login.php或wp-admin的所有IP,例外情况是IP 100.100.100.29和111.111.111.1-255。请用您自己的清单替换这些IP。

5,现在尝试访问不在列表中的IP的wp-login.php或wp-admin,应该给出403-访问被拒绝错误。