iptables命令详解与高级应用
iptables是Linux系统中管理网络包过滤规则的核心工具,基于netfilter框架实现防火墙功能。以下详解常用命令和配置技巧。
链管理操作
# 创建自定义链
iptables -t filter -N custom_chain
# 删除自定义链
iptables -t filter -X custom_chain
# 重命名自定义链
iptables -t filter -E old_chain new_chain
# 设置链默认策略
iptables -t filter -P INPUT DROP
自定义链需被引用后才生效。
# 查看规则(带行号和详细数据)
iptables -t filter -L -v --line-numbers
# 清空规则
iptables -t filter -F
# 重置计数器
iptables -t filter -Z
输出字段含义:pkts(匹配报文数)、bytes(总字节数)、target(处理动作)、prot(协议)、in/out(流入/流出接口)。
规则添加与编辑
# 附加规则
iptables -t filter -A INPUT -s 10.0.0.0/24 -j ACCEPT
# 删除规则
iptables -t filter -D INPUT 1
# 插入规则
iptables -t filter -I INPUT 2 -p tcp --dport 80 -j ACCEPT
通用匹配条件:
- -s:源地址(如 -s 10.0.0.1)
- -d:目标地址
- -p:协议(TCP/UDP/ICMP)
- -i/-o:流入/流出接口
# 保存规则到文件
iptables-save > /etc/iptables.rules
# 从文件恢复规则
iptables-restore < /etc/iptables.rules
扩展模块应用
协议扩展:
# 允许ICMP请求
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
# 开放SSH服务
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
多端口匹配:
iptables -A INPUT -p tcp -m multiport --dports 22,80,443 -j ACCEPT
IP范围控制:
iptables -A INPUT -m iprange --src-range 10.0.0.1-10.0.0.50 -j DROP
时间限制:
iptables -A INPUT -m time --weekdays Mon-Fri --timestart 09:00 --timestop 18:00 -j ACCEPT
字符串过滤:
iptables -A OUTPUT -m string --algo bm --string "blocked" -j DROP
连接数限制:
iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 10 -j REJECT
速率控制:
iptables -A INPUT -p icmp -m limit --limit 5/sec --limit-burst 10 -j ACCEPT
状态跟踪:
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED -j ACCEPT
需加载nf_conntrack模块,调整/proc/sys/net/nf_conntrack_max优化性能。
网络防火墙配置
启用路由转发:
echo 1 > /proc/sys/net/ipv4/ip_forward
FORWARD链示例:
iptables -A FORWARD -s 192.168.1.0/24 -d 172.16.0.0/16 -j ACCEPT
iptables -P FORWARD DROP
NAT地址转换
SNAT(源地址转换):
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT --to-source 203.0.113.1
DNAT(目标地址转换):
iptables -t nat -A PREROUTING -d 203.0.113.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100