iptables防火墙实战:5分钟搞定CentOS7基础防护规则(附常见漏洞封堵)

张开发
2026/5/10 2:21:51 15 分钟阅读

分享文章

iptables防火墙实战:5分钟搞定CentOS7基础防护规则(附常见漏洞封堵)
iptables防火墙实战CentOS7安全防护规则深度解析1. 理解iptables在CentOS7中的核心地位在Linux系统中防火墙是网络安全的第一道防线。CentOS7虽然默认采用firewalld作为防火墙解决方案但iptables作为传统且功能强大的防火墙工具仍然是许多系统管理员的首选。iptables之所以备受青睐主要基于以下几个关键特性精细控制能够对网络流量进行细粒度的控制精确到单个IP、端口和协议状态跟踪支持连接状态跟踪NEW, ESTABLISHED, RELATED等高性能直接在内核层面处理网络包效率极高灵活性支持自定义链和复杂的规则组合对于CentOS7用户来说使用iptables前需要明确它与firewalld的关系。firewalld实际上是iptables的前端管理工具底层仍然依赖iptables的规则。当我们需要更直接、更精细的控制时直接使用iptables往往是更好的选择。提示在CentOS7上使用iptables前建议先禁用firewalld以避免规则冲突systemctl stop firewalld systemctl disable firewalld yum install -y iptables-services systemctl enable iptables systemctl start iptables2. iptables基础架构与核心概念2.1 四表五链架构iptables的规则组织遵循表和链的层级结构四张表及其优先级顺序raw表用于连接跟踪前的数据包处理mangle表用于修改数据包头部信息nat表用于网络地址转换filter表用于过滤数据包最常用五条内置链PREROUTING路由前处理INPUT处理进入本机的数据包FORWARD处理转发的数据包OUTPUT处理本机发出的数据包POSTROUTING路由后处理2.2 规则匹配流程数据包在iptables中的处理流程遵循特定顺序PREROUTING - 路由决策 - INPUT - 本地进程 - OUTPUT - POSTROUTING ↘ FORWARD ↗理解这个流程对于编写有效的防火墙规则至关重要。一个典型的数据包会依次经过不同表的多个链规则匹配遵循首次匹配原则。3. CentOS7基础防护规则配置3.1 初始化安全策略在开始具体规则配置前建议先设置合理的默认策略# 设置默认策略为DROP白名单模式更安全 iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT # 允许本地回环接口 iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT # 允许已建立的连接和相关的连接 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT这种配置采用了白名单安全模型即默认拒绝所有流量只明确允许已知安全的连接。3.2 SSH防护规则SSH是服务器管理的主要入口也是最常受到攻击的服务。以下是强化SSH安全的iptables规则# 限制SSH连接频率防止暴力破解 iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 --rttl --name SSH -j DROP # 或者更简单的限制每分钟3个新连接 iptables -A INPUT -p tcp --dport 22 -m connlimit --connlimit-above 3 -j DROP # 只允许特定IP访问SSH如果可能 iptables -A INPUT -p tcp -s 192.168.1.100 --dport 22 -j ACCEPT3.3 Web服务防护对于运行Web服务的服务器需要开放HTTP/HTTPS端口同时防范常见攻击# 基本HTTP/HTTPS规则 iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 443 -j ACCEPT # 防护SYN洪水攻击 iptables -A INPUT -p tcp --syn -m limit --limit 1/s --limit-burst 3 -j ACCEPT # 限制连接速率每个IP每分钟最多60个新连接 iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m limit --limit 60/minute --limit-burst 100 -j ACCEPT3.4 ICMP协议处理ICMP协议ping等对网络诊断很有用但也可能被滥用# 允许出站ping iptables -A OUTPUT -p icmp --icmp-type 8 -j ACCEPT # 限制入站ping防止ICMP洪水 iptables -A INPUT -p icmp --icmp-type 8 -m limit --limit 1/second -j ACCEPT # 允许重要的ICMP类型目标不可达、超时等 iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT iptables -A INPUT -p icmp --icmp-type 11 -j ACCEPT4. 高级防护技术与实战技巧4.1 防范端口扫描Nmap等扫描工具是攻击者的常用手段以下规则可以增加扫描难度# 记录并丢弃XMAS扫描 iptables -A INPUT -p tcp --tcp-flags ALL ALL -j LOG --log-prefix XMAS Scan: iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP # 记录并丢弃NULL扫描 iptables -A INPUT -p tcp --tcp-flags ALL NONE -j LOG --log-prefix NULL Scan: iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP # 记录并丢弃FIN扫描 iptables -A INPUT -p tcp --tcp-flags FIN,ACK FIN -j LOG --log-prefix FIN Scan: iptables -A INPUT -p tcp --tcp-flags FIN,ACK FIN -j DROP # 限制新连接建立速率 iptables -A INPUT -p tcp -m state --state NEW -m limit --limit 30/minute --limit-burst 5 -j ACCEPT4.2 防御DDoS攻击针对分布式拒绝服务攻击可以结合以下策略# SYN洪水防护 iptables -N SYN_FLOOD iptables -A SYN_FLOOD -m limit --limit 10/second --limit-burst 20 -j RETURN iptables -A SYN_FLOOD -j LOG --log-prefix SYN Flood: iptables -A SYN_FLOOD -j DROP iptables -A INPUT -p tcp --syn -j SYN_FLOOD # 限制每个IP的连接数 iptables -A INPUT -p tcp --syn -m connlimit --connlimit-above 50 -j DROP # HTTP请求限制防CC攻击 iptables -A INPUT -p tcp --dport 80 -m recent --name http --set iptables -A INPUT -p tcp --dport 80 -m recent --name http --update --seconds 60 --hitcount 100 -j DROP4.3 应用层防护虽然iptables主要工作在传输层但也能实现一些应用层防护# 阻止常见的Web攻击尝试 iptables -A INPUT -p tcp --dport 80 -m string --string etc/passwd --algo bm -j DROP iptables -A INPUT -p tcp --dport 80 -m string --string SELECT FROM --algo bm -j DROP iptables -A INPUT -p tcp --dport 80 -m string --string UNION SELECT --algo bm -j DROP # 限制HTTP请求方法只允许GET,POST,HEAD iptables -A INPUT -p tcp --dport 80 -m string --string PUT --algo bm --to 65535 -j DROP iptables -A INPUT -p tcp --dport 80 -m string --string DELETE --algo bm --to 65535 -j DROP iptables -A INPUT -p tcp --dport 80 -m string --string TRACE --algo bm --to 65535 -j DROP5. 规则优化与管理实践5.1 规则组织最佳实践随着规则数量增加良好的组织结构变得至关重要# 创建自定义链 iptables -N IN_WEB iptables -N IN_SSH iptables -N IN_ICMP # 将相关规则归类到自定义链 iptables -A INPUT -p tcp --dport 80 -j IN_WEB iptables -A INPUT -p tcp --dport 22 -j IN_SSH iptables -A INPUT -p icmp -j IN_ICMP # 在自定义链中添加具体规则 iptables -A IN_WEB -m state --state NEW -m limit --limit 100/minute --limit-burst 200 -j ACCEPT iptables -A IN_SSH -s 192.168.1.0/24 -j ACCEPT5.2 规则持久化CentOS7中保存iptables规则的方法# 保存当前规则 service iptables save # 规则会保存到/etc/sysconfig/iptables # 或者手动保存 iptables-save /etc/sysconfig/iptables # 恢复规则 iptables-restore /etc/sysconfig/iptables # 设置开机自动加载规则 systemctl enable iptables5.3 监控与日志有效的监控可以帮助发现潜在攻击# 为被拒绝的连接添加日志 iptables -A INPUT -j LOG --log-prefix IPTABLES-DROPPED: --log-level 4 # 查看iptables日志通常位于/var/log/messages或/var/log/kern.log tail -f /var/log/messages | grep IPTABLES # 实时监控被阻止的连接 watch -n 1 iptables -nvL | grep -v 0 06. 常见漏洞封堵方案6.1 封堵高危端口# 封堵常见的脆弱端口 for port in 21 23 135 137 138 139 445 1433 3306 3389; do iptables -A INPUT -p tcp --dport $port -j DROP iptables -A INPUT -p udp --dport $port -j DROP done # 封堵UDP放大攻击常用端口 iptables -A INPUT -p udp --dport 53 -j DROP # DNS iptables -A INPUT -p udp --dport 123 -j DROP # NTP iptables -A INPUT -p udp --dport 161 -j DROP # SNMP iptables -A INPUT -p udp --dport 1900 -j DROP # UPnP6.2 防止IP欺骗# 阻止来自私有IP空间的入站流量这些地址不应出现在公网接口 iptables -A INPUT -i eth0 -s 10.0.0.0/8 -j DROP iptables -A INPUT -i eth0 -s 172.16.0.0/12 -j DROP iptables -A INPUT -i eth0 -s 192.168.0.0/16 -j DROP # 阻止回环地址出现在外部接口 iptables -A INPUT -i eth0 -s 127.0.0.0/8 -j DROP # 阻止组播地址出现在外部接口 iptables -A INPUT -i eth0 -s 224.0.0.0/4 -j DROP6.3 防护特定攻击向量# 阻止圣诞树包攻击 iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP # 阻止NULL包攻击 iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP # 阻止碎片包攻击可能导致内核崩溃 iptables -A INPUT -f -j DROP # 阻止异常的TCP标志组合 iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP iptables -A INPUT -p tcp --tcp-flags FIN,RST FIN,RST -j DROP iptables -A INPUT -p tcp --tcp-flags ACK,FIN FIN -j DROP iptables -A INPUT -p tcp --tcp-flags ACK,PSH PSH -j DROP iptables -A INPUT -p tcp --tcp-flags ACK,URG URG -j DROP7. 性能优化与疑难解答7.1 规则优化技巧规则顺序优化将最常匹配的规则放在前面合并相似规则使用多端口匹配减少规则数量使用ipset处理大量IP地址时更高效# 安装ipset yum install ipset -y # 创建ipset集合 ipset create blacklist hash:ip hashsize 4096 timeout 86400 # 添加IP到集合 ipset add blacklist 192.168.1.100 # 在iptables中引用ipset iptables -A INPUT -m set --match-set blacklist src -j DROP7.2 常见问题排查连接被意外阻止# 查看规则匹配计数 iptables -nvL # 启用详细日志 iptables -I INPUT -j LOG --log-prefix IPTABLES-INPUT: --log-level 7性能问题# 查看连接跟踪表状态 cat /proc/net/nf_conntrack # 调整连接跟踪表大小 echo 524288 /proc/sys/net/nf_conntrack_max规则不生效# 检查规则顺序首次匹配原则 iptables -L -n --line-numbers # 检查默认策略 iptables -S

更多文章