真正阻断内网横向移动需构建“看不见、连不上、探不到”三道防线:锁定域控等关键节点并收缩通信面,全链路封禁111端口及nfs相关高危端口,启用syn日志+fail2ban实现可溯防御。

要真正阻断内网横向移动,不能只封几个端口,得从拓扑结构出发,把攻击者“看不见、连不上、探不到”三道防线都立住。核心是识别关键跳点(如域控、文件服务器、数据库)、收敛服务暴露面、切断RPC依赖链,并让所有异常行为可追溯。
锁定并隔离关键资产节点
横向移动往往围绕少数高价值主机展开,比如域控制器(DC)、主文件服务器、核心数据库。这些节点不应被动防御,而应主动收缩通信面:
- 对DC等关键服务器,INPUT链默认策略设为DROP,仅放行必需协议:如LDAP(389/636)、Kerberos(88)、DNS(53)、NTP(123),且必须限定源IP为运维网段或可信管理主机
- 禁用所有非必要服务端口,特别是SMB(445)、RDP(3389)、WinRM(5985/5986)对外网段或非管理子网的访问;若必须开放,叠加
-m connlimit --connlimit-above 2 --connlimit-mask 32防爆破 - 在FORWARD链中,禁止跨子网的同类服务互访(如10.20.0.0/16内的终端不能直连10.30.0.0/16内的数据库),除非明确配置了业务白名单规则
切断RPC服务探测与联动路径
绝大多数横向工具(如Mimikatz、BloodHound、rpcdump)依赖RPC发现机制,111端口是起点,后续联动mountd(892)、nlockmgr(32769–32803)、nfs(2049)完成渗透。必须全链路阻断:
- 严格封禁111端口(TCP/UDP):两条基础规则放在INPUT链最前
iptables -I INPUT -p tcp --dport 111 -j DROPiptables -I INPUT -p udp --dport 111 -j DROP - 仅对确需调用RPC的内部子网(如NFS客户端集群)例外放行,且必须用
-s 10.10.0.0/16精确指定,不可用0.0.0.0/0或any - 同步屏蔽辅助端口:
iptables -I INPUT -p tcp -m multiport --dports 2049,892,32769:32803 -j DROP,UDP同理 - 禁用ICMP timestamp(type 13/14)和time-exceeded(type 11),防止攻击者通过ICMP测绘内网时钟偏差与路由跳数
启用状态感知+日志联动实现主动溯源
单纯DROP无法识别扫描意图,必须让防火墙“看得见”异常行为:
- 在所有DROP规则前插入LOG规则,例如:
iptables -I INPUT -p tcp --syn --dport 111 -j LOG --log-prefix "RPC-SCAN-111: ",确保日志含源IP、时间、端口 - 将日志输出导向独立文件(如
/var/log/iptables-scan.log),避免混入系统日志干扰分析 - 配置fail2ban监听该日志,匹配到连续3次以上SYN尝试即自动封禁源IP 24小时,命令示例:
fail2ban-client set rpc-scan banip 192.168.5.22 - 定期用
iptables -L INPUT -n -v检查各规则命中计数,突增的DROP计数往往是扫描活动信号
固化策略并建立回滚保障
策略上线后必须防误操作、防重启失效、防规则漂移:
- 执行
iptables-save > /etc/iptables/rules.v4(Debian/Ubuntu)或service iptables save(CentOS),确保重启后自动加载 - 每次修改前先备份:
iptables-save > /root/iptables-$(date +%F-%H%M),并创建软链指向最新版:ln -sf /root/iptables-$(date +%F-%H%M) /root/iptables-latest - 关键服务器上,在INPUT链最顶部加一条自己的IP白名单规则:
iptables -I INPUT -s 203.0.113.45 -j ACCEPT,避免锁死运维通道 - 对双网卡跳板机等特殊节点,额外在FORWARD链设默认DROP,并仅放行已知业务流(如ESTABLISHED/RELATED + 明确DNAT后的NEW连接)










