iptables无法识别中间件扫描的HTTP应用层行为,真正可行的是通过TCP标志异常、连接密度特征及与应用层日志联动三类策略实现前置阻断与动态防护。

iptables 本身不能识别中间件扫描行为(比如针对 Tomcat 的 /manager/html、Nginx 的 nginx-status、Apache 的 server-status 或 Jenkins 的 /api/json 等路径探测),因为它工作在网络层和传输层(L3/L4),无法解析 HTTP 请求行、URI、Header 或 Cookie 等应用层内容。所谓“拦截中间件扫描”,真正可行的不是靠 iptables 匹配 URL 或 User-Agent,而是通过其对异常 TCP 行为、连接模式和 IP 频率特征的识别,实现前置阻断与辅助防护。
以下是从实战角度出发、可落地的三类有效策略:
利用 TCP 标志异常识别隐蔽探测
很多中间件指纹扫描(如 nmap -sV、whatweb 后端探测)会复用非法 TCP 组合试探服务响应,暴露系统或中间件类型。iptables 可高效拦截:
- 全零标志(Null 扫描):
<font color="red">iptables -I INPUT -p tcp --tcp-flags ALL NONE -j DROP</font> - FIN+URG+PSH(Xmas Tree):
<font color="red">iptables -I INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP</font> - SYN+FIN 同时置位(违反 RFC):
<font color="red">iptables -I INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP</font> - 仅含 ACK 且无对应连接(伪造会话探测):
<font color="red">iptables -I INPUT -p tcp --tcp-flags ALL ACK -m state --state INVALID -j DROP</font>
这些规则应置于 INPUT 链最前端,优先于服务放行规则,避免漏检。
基于连接密度识别扫描器行为
中间件扫描常伴随高频、短连接、多路径试探(例如 1 分钟内请求 /, /admin, /phpmyadmin, /wp-login.php 等数十个不同路径)。iptables 虽看不到 URI,但可通过以下方式捕捉行为指纹:
限制单 IP 新建连接速率(防端口级轮询):
<font color="red">iptables -A INPUT -p tcp --syn -m limit --limit 5/minute --limit-burst 10 -j ACCEPT</font><font color="red">iptables -A INPUT -p tcp --syn -j DROP</font>限制并发半开连接数(干扰 ISN 分析、窗口探测等中间件识别技术):
<font color="red">iptables -A INPUT -p tcp -m connlimit --connlimit-above 3 --connlimit-mask 32 -j REJECT --reject-with tcp-reset</font>标记高频跨端口试探(常见于全端口扫描后定向中间件端口):
<font color="red">iptables -A INPUT -p tcp --syn -m recent --name port-scan --rcheck --seconds 60 --hitcount 8 -j DROP</font><font color="red">iptables -A INPUT -p tcp --syn -m recent --name port-scan --set -j ACCEPT</font>
注意:这些规则对 SSH、数据库等需多连接的服务不友好,建议配合 --dport 指定 Web 端口(如 --dport 80,443,8080)做精细化控制。
与应用层联动构建动态黑名单
这是防护中间件非授权扫描最实用的一环:让 Nginx/Apache 日志成为“传感器”,iptables 成为“执行器”。
典型流程:
- 在 Nginx access.log 中配置日志格式,记录
status、request_uri、http_user_agent; - 编写轻量脚本(如 Python 或 Bash),每分钟扫描日志,识别出符合以下任一条件的 IP:
- 5 分钟内触发 ≥15 次 404 且含敏感路径(如
/manager,/console,/jmx-console,/actuator); - 出现已知扫描器 UA(如
sqlmap,nuclei,gobuster);
- 5 分钟内触发 ≥15 次 404 且含敏感路径(如
- 将该 IP 加入 ipset 黑名单:
<font color="red">ipset add blacklist-attack 192.168.1.100 timeout 3600</font> - iptables 引用该 set 实施 DROP:
<font color="red">iptables -I INPUT -m set --match-set blacklist-attack src -j DROP</font>
该方案无需修改 iptables 规则本身,扩展性强,且能精准响应真实中间件探测行为。
不复杂但容易忽略。










