直接关闭非必要协议是提升服务器防御最基础也最有效的手段,应从默认拒绝出发,仅放行业务真正需要的协议通道,如禁用未监听的端口、限制ICMP类型、显式丢弃未启用的IPv6流量,并通过状态化规则精准管控SSH、HTTP等服务访问。

直接关闭非必要协议是提升服务器防御最基础也最有效的手段。关键不是“全开再筛”,而是从默认拒绝出发,只留业务真正需要的协议通道。
明确哪些协议属于“不必要”
判断依据不是技术存在感,而是业务实际依赖:
- TCP/UDP端口未被任何服务监听的,一律视为冗余——比如SSH只用22端口,那23(Telnet)、25(SMTP,若无邮件服务)、139/445(SMB,若非文件共享场景)就该禁用
- ICMP并非全要封:type 3(目的不可达)、type 11(超时)、type 12(参数问题)对网络排错和路径MTU发现至关重要;但type 8(echo request)可限制或仅允许可信IP发起
- IPv6若未启用,应在iptables中显式丢弃所有IPv6流量(或禁用内核IPv6模块),避免协议栈成为隐蔽攻击面
- 非业务必需的协议如ARP之外的L2广播、NetBIOS、SNMP(除非主动监控)、RPC、NFS等,应从网络层直接阻断
用状态化规则精准放行必要协议
避免写“-p tcp --dport 80 -j ACCEPT”这种裸规则,必须绑定连接状态和来源范围:
- HTTP/HTTPS只允许来自外网特定子网(如CDN或负载均衡器IP段),且仅限ESTABLISHED/RELATED回包自动通行
- SSH严格限制源IP,例如:
iptables -A INPUT -p tcp -s 203.0.113.0/24 --dport 22 -m conntrack --ctstate NEW -j ACCEPT - 数据库端口(如3306、5432)绝不对外网开放,只允许内网应用服务器IP访问,并启用连接数限制(
-m connlimit --connlimit-above 10)
主动阻断高风险协议行为
有些协议本身合法,但特定行为极具攻击性,需针对性拦截:
- SYN Flood防护:用
-m synproxy(若内核支持)或-m hashlimit控制新建连接速率,例如每秒最多3个新SYN - 禁止XMAS、NULL、FIN-only等异常TCP标志组合:
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP - 限制ICMP请求频率,防止ping flood:
iptables -A INPUT -p icmp -m icmp --icmp-type 8 -m hashlimit --hashlimit-above 1/sec --hashlimit-burst 3 -j DROP - 封禁常见扫描行为:对同一IP在短时间内尝试多个端口(如连续访问21、22、23、25、80、443),可用
ipset动态标记并阻断
验证与持续维护机制
规则上线后必须验证有效性,且不能一劳永逸:
- 用
iptables -L -v -n检查规则命中计数,确认非必要协议流量确已被drop,而非silent ignore - 定期执行
ss -tuln和netstat -tuln,比对监听端口与防火墙放行端口是否一致,发现意外开启的服务 - 将iptables规则保存为持久化配置(如
iptables-save > /etc/iptables/rules.v4),避免重启失效 - 每季度审计一次规则集,删除已下线服务对应的旧规则,合并重复条目,保持策略精简

















