Windows Server部署IIS时,防webshell攻击的关键在于配置请求筛选(Request Filtering)。这个功能内置在IIS 7及以上版本,能主动拦截恶意请求,比如阻止上传特定后缀文件、限制可执行目录的访问,从源头堵住webshell上传与执行。下面直接讲具体操作和策略。

一、理解请求筛选在防webshell中的作用

请求筛选是IIS的安全模块,相当于Web服务器的第一道防火墙。它通过规则过滤传入的HTTP请求,针对webshell防护主要做三件事:一是阻止上传.asp、.aspx、.php、.jsp等可执行脚本文件;二是禁止访问敏感目录如/bin、/upload;三是限制异常请求特征,比如过长的URL或包含恶意字符串的参数。开启后,即使攻击者利用应用漏洞尝试上传文件,也会在IIS层面被直接拦截,大幅降低服务器被植入webshell的风险。

二、启用和配置请求筛选的基本步骤

在Windows Server的IIS管理器中,选中目标网站,双击“请求筛选”图标进入配置界面。默认已启用,但需自定义规则。重点配置“文件扩展名”、“规则”和“URL”三个选项卡:

1. 在“文件扩展名”选项卡,添加要阻止的扩展名。例如,禁止上传.asp、.aspx、.php、.jsp、.cer等,设置“允许”为false。同时,如果网站只需静态文件,可以只允许.jpg、.png、.html等,拒绝其他所有类型。

2. 在“规则”选项卡,创建隐藏规则来拦截恶意字符串。例如,添加规则匹配URL中的“cmd.exe”或“eval(”,设置动作为“拒绝请求”。

3. 在“URL”选项卡,设置URL最大长度(建议2048字节以下)和查询字符串长度限制(如200字节),防止缓冲区溢出攻击。

配置完成后无需重启IIS,即时生效。可以通过web.config文件查看或直接编辑规则,例如:

<configuration>
    <system.webServer>
        <security>
            <requestFiltering>
                <fileExtensions allowUnlisted="false">
                    <add fileExtension=".asp" allowed="false" />
                    <add fileExtension=".php" allowed="false" />
                </fileExtensions>
                <requestLimits maxUrl="2048" maxQueryString="200" />
            </requestFiltering>
        </security>
    </system.webServer>
</configuration>

三、高级防护策略:结合MIME类型和HTTP动词限制

除了基础扩展名过滤,MIME类型过滤能更彻底防webshell。攻击者可能修改文件后缀伪装上传,但IIS可以根据HTTP头中的Content-Type拦截。在请求筛选的“MIME类型”选项卡,添加拒绝的MIME类型,例如application/x-php、text/php。同时,限制HTTP动词:通常网站只允许GET、POST,禁用PUT、DELETE等危险方法,在“HTTP动词”选项卡中设置。

另一个关键点是目录防护。如果网站有上传目录(如/upload),应在此目录单独配置请求筛选,禁止执行任何脚本。通过IIS管理器选中该目录,设置“处理程序映射”,移除所有脚本处理程序。或者用web.config实现:

<configuration>
    <system.webServer>
        <handlers>
            <remove name="PHP" />
            <remove name="ASP" />
        </handlers>
        <security>
            <requestFiltering>
                <fileExtensions allowUnlisted="false" />
            </requestFiltering>
        </security>
    </system.webServer>
</configuration>

四、监控与日志分析:及时发现攻击尝试

配置请求筛选后,需监控其效果。IIS日志默认存储在%SystemDrive%\inetpub\logs\LogFiles,查看字段“sc-status”和“cs-uri-query”。如果状态码为404(被请求筛选拦截),结合URL分析攻击模式。例如,频繁出现“.php”上传请求可能表示扫描行为。建议启用“失败请求跟踪”功能,记录拦截详情,定期审计规则是否需要更新。

同时,服务器层面应配合Windows Defender或第三方杀毒软件,实时扫描上传文件。对于高安全需求环境,可以启用IIS的动态IP限制模块,自动屏蔽频繁触发请求筛选的IP地址。

五、常见陷阱与优化建议

请求筛选虽强,但配置不当可能误拦正常流量。例如,如果网站使用非标准扩展名(如.aspx for API),需在“允许”列表中添加。另外,注意规则顺序:IIS按顺序匹配,应将通用拒绝规则放在前面。优化方面:

1. 定期更新规则库,参考OWASP等安全组织发布的恶意字符串列表。

2. 结合应用程序池身份隔离,使用低权限账户运行站点,即使webshell突破也难以执行系统命令。

3. 对于云服务器或负载均衡环境,用PowerScript自动化部署请求筛选配置,确保一致性。

总之,Windows Server的IIS请求筛选是防webshell的基石,但需多层防御。建议搭配SSL加密、定期漏洞扫描和备份策略,构建完整安全体系。