一、基本概念
iptables 是 Linux 系统中基于内核态 Netfilter 框架的防火墙工具,用于管理网络数据包的过滤、地址转换(NAT)、端口转发等。它通过用户空间的命令行工具操作内核模块(如 xtables),实现对数据包的处理和转发控制。默认处理 IPv4 数据包,IPv6 需使用 ip6tables。
二、核心架构:四表五链
iptables 的核心结构由 表(Tables) 和 链(Chains) 组成,不同表处理不同类型的数据包操作,链则定义了数据包的流向规则。
四表:
filter 表(默认表):负责数据包过滤,控制流入流出主机的流量。内置链:
INPUT:处理目标为本机的数据包。OUTPUT:处理本机发出的数据包。FORWARD:处理需转发的数据包。
nat 表:实现网络地址转换(NAT),用于共享上网或端口映射。内置链:
PREROUTING:修改目的地址(DNAT)。POSTROUTING:修改源地址(SNAT)。OUTPUT:处理本机生成的 NAT 数据包。
mangle 表:修改数据包头部信息(如 TTL、优先级)。支持所有内置链(如
PREROUTING、INPUT等)。raw 表:用于异常处理或连接跟踪前的操作,支持
PREROUTING和OUTPUT链。
五链:
PREROUTING→INPUT→FORWARD→OUTPUT→POSTROUTING。数据包按此顺序流经各表对应的链。
三、常见命令与配置
基本操作:
查看规则:
iptables -L -n(列出 filter 表规则)iptables -L -n --line-number(查询详细规则序号)清空规则:
iptables -F(临时生效,重启后恢复)sudo iptables -D <chain_name> <rule_number>(将 <chain_name> 替换为规则所在的链(如 INPUT、OUTPUT、FORWARD 等),将 <rule_number> 替换为要删除的规则的编号。)
sudo iptables -D <chain_name> -m <match_criteria> -j <target>(将 <chain_name> 替换为规则所在的链,<match_criteria> 替换为匹配条件,<target> 替换为目标动作。)保存规则:
service iptables save(保存至/etc/sysconfig/iptables)
sudo iptables-save > /etc/iptables/rules.v4(这将 iptables 规则保存到 /etc/iptables/rules.v4 文件中,保存ipv6使用ip6tables-save。)恢复规则 :
sudo iptables-restore < /etc/iptables/rules.v4(这将加载之前保存的 IPv4 规则。)
规则管理
添加规则
iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT # 允许指定网段 SSH 访问
iptables -A INPUT -p tcp --dport 80 -j DROP # 拒绝 HTTP 访问插入/删除规则
iptables -I INPUT 1 -s 10.0.0.5 -j DROP # 在第一条插入规则
iptables -A INPUT 1 -s 10.0.0.5 -j DROP # 在最后一条插入规则
iptables -D INPUT 2 # 删除 INPUT 链第二条规则默认策略
iptables -P INPUT DROP # 默认拒绝所有入站流量(需谨慎配置)