iptables常用命令速查
一、基本概念
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
允许pingiptables -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 ACCEPT2. 防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 DROP3. 端口转发
开启转发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 MASQUERADE4. 防止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