语法格式
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 DROPiptables -P INPUT DROP
iptables -nL --line
模块支持检查与加载
查看模块:
lsmod
加载 FTP NAT 模块:
modprobe ip_nat_ftp