【Linux】iptables命令的基本使用
语法格式
iptables [-t 表名] 管理选项 [链名] [条件匹配] [-j 目标动作或跳转]
注意事项
- 不指定表名时,默认使用 filter表
- 不指定链名时,默认表示该表内所有链
- 除非设置规则链的缺省策略,否则需要指定匹配条件
设置规则内容
- -A:追加规则到指定链末尾
- -I:在指定位置插入规则(默认插入到第 1 条)
- -R:替换指定位置的规则
- -P:设置默认策略(如- ACCEPT或- DROP)
示例:
iptables -A INPUT -p tcp -j ACCEPT
iptables -nL
插入规则:
iptables -I INPUT -p icmp -j ACCEPT
iptables -I INPUT 2 -p udp -j ACCEPT
设置默认策略:
iptables -P INPUT DROP
注意事项:
如果设置了 INPUT 链为 DROP,但未写允许 SSH 的规则,可能会断开连接,建议使用 crontab 定时清空规则以防万一:
crontab -l
*/1 * * * * bash  /root/iptables/clear_iptables_rules.sh
# /root/iptables/clear_iptables_rules.sh
#!/bin/bash
/usr/sbin/iptables -t nat -F
/usr/sbin/iptables -t filter -F
/usr/sbin/iptables -P INPUT ACCEPT
列表查看规则
- -n:数字显示 IP 和端口,避免 DNS 解析
- -v:显示详细信息(流量统计)
- --line-numbers:显示规则的行号(方便删除、替换)
清除规则
- -F:清空链中的规则(保留链)
- -X:删除用户自定义的空链
- -Z:将计数器归零
自定义规则链
创建链:
iptables -N luobozi -t filter
添加规则:
iptables -A luobozi -p tcp --dport 2233 -j DROP
主链中调用自定义链:
iptables -A INPUT -p tcp -j luobozi
删除自定义链(需先解除引用并清空):
iptables -D INPUT -j luobozi
iptables -F luobozi
iptables -X luobozi
示例:控制 ping 通信
只允许自己 ping 出去,别人不能 ping 进来:
iptables -A INPUT -p icmp --icmp-type 8 -j DROP
iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT
允许多个端口通过(多端口匹配)
iptables -A INPUT -p tcp -m multiport --dport 21,23,25,80 -j ACCEPT
常见目标动作
- ACCEPT:允许
- REJECT:拒绝并发送响应
- DROP:丢弃数据包
- SNAT:源地址转换
- DNAT:目标地址转换
- LOG:记录日志
- MASQUERADE:伪装(多用于动态 IP)
规则持久化
保存规则:
iptables-save > rules.txt
恢复规则:
iptables-restore < rules.txt
启动脚本示例(iptables_rules.sh)
 
#!/bin/bash
#清空规则链
/usr/sbin/iptables -X
/usr/sbin/iptables -t nat -F
/usr/sbin/iptables -t filter -F
/usr/sbin/iptables -P INPUT ACCEPT
#定义可访问的端口
iptables -A INPUT -p tcp -m multiport --dport 80,443,22,3306,21,20 -j ACCEPT
iptables -A INPUT -p udp -m multiport --sport 53 -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT
#创建自定义表,记录日志规则
iptables -N luobozi_LOG
iptables -A luobozi_LOG -p tcp -j LOG --log-level 4 --log-prefix '##luobozi##'
iptables -A luobozi_LOG -p udp -j LOG --log-level 4 --log-prefix '##luobozi##'
iptables -A luobozi_LOG -p icmp -j LOG --log-level 4 --log-prefix '##luobozi##'
#绑定日志规则
iptables -I INPUT -p tcp --dport 80 -j luobozi_LOG
iptables -I INPUT -p udp -j luobozi_LOG
iptables -I INPUT -p icmp -j luobozi_LOG
#拒绝特定网段过来访问
iptables -I INPUT -s 139.9.44.0/24 -j DROP
iptables -I INPUT -p tcp -m multiport --dport 80,443,22 -s 189.65.2.36 -j DROP
iptables -P INPUT DROP
iptables -nL --line
模块支持检查与加载
查看模块:
lsmod
加载 FTP NAT 模块:
modprobe ip_nat_ftp
