一、基本概念

iptables有四表五链:

  • 表:filter(默认)、nat、mangle、raw
  • 链:INPUT(入站)、OUTPUT(出站)、FORWARD(转发)、PREROUTING、POSTROUTING

动作:

  • ACCEPT:允许
  • DROP:丢弃(无回应)
  • REJECT:拒绝(返回通知)

二、查看规则

查看所有规则
iptables -L -n

查看指定链,带行号
iptables -L INPUT -n --line-numbers

查看NAT表规则
iptables -t nat -L -n

查看完整规则(可还原格式)
iptables-save

查看规则计数(包数和字节数)
iptables -L -n -v

三、添加规则

基本语法
iptables -A 链名 -p 协议 --dport 端口 -j 动作

常用示例
允许指定TCP端口
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

允许指定UDP端口
iptables -A INPUT -p udp --dport 53 -j ACCEPT

拒绝指定端口
iptables -A INPUT -p tcp --dport 8080 -j DROP

拒绝并返回通知
iptables -A INPUT -p tcp --dport 8080 -j REJECT

允许指定IP访问
iptables -A INPUT -s 192.168.1.100 -j ACCEPT

拒绝指定IP访问指定端口
iptables -A INPUT -s 192.168.1.100 -p tcp --dport 22 -j DROP

拒绝指定IP段
iptables -A INPUT -s 192.168.1.0/24 -j DROP

允许已建立的连接
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

允许本地回环
iptables -A INPUT -i lo -j ACCEPT

指定网卡
iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT

允许ping
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT

端口转发(NAT表)
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080

插入规则到指定位置
插入到第1条
iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPT

四、删除规则

按行号删除(先查行号)

iptables -L INPUT -n --line-numbers
iptables -D INPUT 3

按规则删除
iptables -D INPUT -p tcp --dport 8080 -j DROP

清空指定链
iptables -F INPUT

清空所有规则
iptables -F

清空NAT表
iptables -t nat -F

五、修改规则

替换指定行规则
iptables -R INPUT 3 -p tcp --dport 80 -j ACCEPT

六、默认策略

设置默认策略

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

查看默认策略
iptables -L | grep policy

七、保存和恢复

保存规则到文件
iptables-save > /etc/iptables/rules.v4

从文件恢复规则
iptables-restore < /etc/iptables/rules.v4

IPv6

ip6tables-save > /etc/iptables/rules.v6
ip6tables-restore < /etc/iptables/rules.v6

八、常用场景

1. 只开放SSH和Web

iptables -P INPUT DROP
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

2. 防SSH暴力破解
限制每分钟最多3次SSH连接

iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 3 -j DROP

3. 端口转发
开启转发
echo 1 > /proc/sys/net/ipv4/ip_forward

转发外部80端口到内网192.168.1.100:8080

iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100:8080
iptables -t nat -A POSTROUTING -j MASQUERADE

4. 防止SYN攻击
iptables -A INPUT -p tcp --syn -m limit --limit 1/s --limit-burst 3 -j ACCEPT

九、Docker环境注意事项

Docker会自动添加NAT规则,
操作时注意:

  • 不要直接 iptables-restore,会覆盖Docker规则
  • 用 iptables 命令单独添加规则
  • 添加完后 iptables-save 保存
  • 如需restore,restore后重启Docker:systemctl restart docker

十、故障排查

查看规则匹配计数
iptables -L -n -v

查看规则顺序是否正确
iptables -L INPUT -n --line-numbers

临时禁用防火墙(测试用)
iptables -F

标签: none