防火墙iptables配置详解
iptables是Linux内核级的防火墙,功能强大但配置复杂。虽然现在很多系统转向了firewalld或nftables,但iptables仍然是最基础、最通用的防火墙工具。理解iptables的工作原理和配置方法,是每个运维人员的基本功。
四表五链
iptables由4个表(table)和5个链(chain)组成:
表:filter(过滤,默认表)、nat(网络地址转换)、mangle(数据包修改)、raw(绕过连接跟踪)。
链:PREROUTING(路由前)、INPUT(进入本机)、FORWARD(转发)、OUTPUT(从本机发出)、POSTROUTING(路由后)。
数据包经过哪些链取决于它的方向:入站包 → PREROUTING → INPUT → 应用程序;出站包 → 应用程序 → OUTPUT → POSTROUTING;转发包 → PREROUTING → FORWARD → POSTROUTING。
常用规则
允许已建立的连接:iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT。这条规则必须放在最前面,否则每次请求的新数据包都会被检查。
允许SSH:iptables -A INPUT -p tcp --dport 22 -j ACCEPT。建议限制来源IP:-s 1.2.3.0/24。
允许HTTP/HTTPS:iptables -A INPUT -p tcp --dport 80,443 -j ACCEPT。
默认拒绝:iptables -P INPUT DROP。将默认策略设为DROP,所有未明确允许的流量都会被丢弃。
防DDoS规则
限制SYN连接速率:iptables -A INPUT -p tcp --syn -m limit --limit 50/s --limit-burst 100 -j ACCEPT。丢弃异常包:iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP(null包)、--tcp-flags ALL ALL -j DROP(XMAS包)。
持久化
iptables规则在重启后丢失。使用 iptables-save > /etc/iptables.rules 保存规则,在启动脚本中 iptables-restore < /etc/iptables.rules 恢复。CentOS使用 service iptables save,Ubuntu使用 netfilter-persistent save。
