iptables防火墙的详细使用示例,涵盖基础规则配置、NAT、端口转发、访问控制等核心操作:


一、iptables 防火墙 (传统工具)

1. 基础规则管理

查看规则

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

清除所有规则

iptables -F                 # 清空 filter 表规则
iptables -t nat -F # 清空 NAT 表规则
iptables -X # 删除用户自定义链
iptables -Z # 重置计数器

2. 链(Chain)操作

允许特定流量

# 允许 SSH(TCP 22)连接
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# 允许来自指定 IP 的 HTTP 访问
iptables -A INPUT -p tcp -s 192.168.1.100 --dport 80 -j ACCEPT

# 允许 ICMP(Ping)
iptables -A INPUT -p icmp -j ACCEPT

阻止流量

# 阻止来自特定 IP
iptables -A INPUT -s 10.0.0.5 -j DROP

# 阻止整个子网
iptables -A INPUT -s 172.16.0.0/24 -j REJECT

# 阻止暴力破解 SSH(限制连接速率)
iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -m recent --set
iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -m recent --update --seconds 60 --hitcount 5 -j DROP

默认策略

iptables -P INPUT DROP       # 默认拒绝所有入站流量(需先放行必要端口!)
iptables -P FORWARD DROP # 默认拒绝转发流量
iptables -P OUTPUT ACCEPT # 允许所有出站流量

3. NAT 与端口转发

共享网络(SNAT/MASQUERADE)

# 将内网 192.168.1.0/24 的流量通过 eth0 出口 NAT
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE

# 启用 IP 转发(需修改 /etc/sysctl.conf)
sysctl -w net.ipv4.ip_forward=1

端口转发(DNAT)

# 将公网 IP 的 8080 端口转发到内网 192.168.1.10:80
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.10:80
iptables -A FORWARD -p tcp -d 192.168.1.10 --dport 80 -j ACCEPT

4. 规则持久化

保存与恢复规则

# Debian/Ubuntu
apt install iptables-persistent
iptables-save > /etc/iptables/rules.v4
ip6tables-save > /etc/iptables/rules.v6

# CentOS/RHEL
service iptables save # 保存到 /etc/sysconfig/iptables
systemctl enable iptables