[网络] [防火墙] iptables: Linux内置防火墙工具使用手册

本内容源自在公司折腾了一天的iptables做DNAT,试图过滤源端口未果,但是折腾的结果可以记录一下
Grok生成(2025年10月23日23:48:10)

🛡️ iptables 完整使用手册

📋 目录(按学习顺序)

  1. iptables 是什么?一分钟搞懂
  2. 数据包的"旅行路线"图
  3. 5分钟入门:4张表+5条链
  4. 实战案例:DNAT 端口转发
  5. filter表:防火墙过滤
  6. NAT表:地址转换
  7. mangle表:高级修改
  8. 一键清空+重置
  9. 保存与恢复
  10. 实用脚本合集

1. iptables 是什么?一分钟搞懂

形象比喻

iptables = 机场安检 + 行李转运站

  • 数据包 = 旅客行李
  • 4张表 = 4个工作台(每个工作台干不同活)
  • 5条链 = 5个检查点(旅客经过的顺序)

核心功能

功能 比喻 命令示例
过滤 安检员拦人 iptables -A INPUT -p tcp --dport 80 -j ACCEPT
地址转换 行李标签改地址 iptables -t nat -A PREROUTING -p udp --dport 10000 -j DNAT --to 192.168.1.100:10000
标记 行李贴标签 iptables -t mangle -A PREROUTING -j MARK --set-mark 1

2. 数据包的"旅行路线"图

数据包进来 → [PREROUTING] → 路由决策 → [INPUT/FORWARD] → [OUTPUT] → [POSTROUTING] → 出去
            ↓       ↓           ↓           ↓              ↓         ↓
        raw表   mangle表      nat表     filter表       mangle表    nat表

记忆口诀: "进前修,路由后滤,出去后修转"


3. 5分钟入门:4张表+5条链

3.1 4张表(工作台)

表名 作用 常用场景
filter 过滤(允许/拒绝) 防火墙
nat 地址转换 DNAT/SNAT
mangle 修改包头 标记、TTL
raw 不跟踪连接 少用

3.2 5条链(检查点)

链名 时机 比喻
PREROUTING 进来前 机场入口
INPUT 到本机 本机收件
FORWARD 转发 中转站
OUTPUT 本机发 本机寄件
POSTROUTING 出去后 机场出口

3.3 快速查看命令

iptables -L          # 查看filter表(默认)
iptables -t nat -L   # 查看NAT表
iptables -t mangle -L # 查看mangle表

4. 实战案例:DNAT 端口转发

场景: 公网10000端口 → 内网192.168.1.100:10000

# 1. 开启IP转发
echo 1 > /proc/sys/net/ipv4/ip_forward

# 2. DNAT规则(公网进来的流量)
iptables -t nat -A PREROUTING -p udp --dport 10000 -j DNAT --to-destination 192.168.1.100:10000

# 3. 允许转发
iptables -A FORWARD -j ACCEPT

# 4. 伪装源地址(让内网能回包)
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

测试:

# 外部机器测试
nc -u 你的公网IP 10000

5. filter表:防火墙过滤

5.1 常用规则模板

# 允许SSH(22端口)
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# 允许HTTP/HTTPS
iptables -A INPUT -p tcp --dport 80,443 -j ACCEPT

# 允许特定IP
iptables -A INPUT -s 192.168.1.100 -j ACCEPT

# 允许已建立连接
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

# 允许本地回环
iptables -A INPUT -i lo -j ACCEPT

# 默认拒绝
iptables -P INPUT DROP

5.2 完整防火墙脚本

#!/bin/bash
iptables -F          # 清空规则
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# 允许基本连接
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT

# 允许常用端口
iptables -A INPUT -p tcp --dport 22,80,443 -j ACCEPT

6. NAT表:地址转换

6.1 DNAT(目标转换)

# 公网端口 → 内网服务
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to 192.168.1.100:80

6.2 SNAT(源转换)

# 内网访问外网用公网IP
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE

6.3 完整NAT模板

# 内网访问外网 + 端口转发
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
iptables -t nat -A PREROUTING -p tcp --dport 10000 -j DNAT --to 192.168.1.100:10000
iptables -A FORWARD -j ACCEPT

7. mangle表:高级修改

7.1 给包打标记

# HTTP流量标记1
iptables -t mangle -A PREROUTING -p tcp --dport 80 -j MARK --set-mark 1

# DNS流量标记2
iptables -t mangle -A PREROUTING -p udp --dport 53 -j MARK --set-mark 2

7.2 策略路由

# 创建路由表
echo "1 eth1" >> /etc/iproute2/rt_tables
ip route add default via 192.168.2.1 dev eth1 table 1

# 绑定标记到路由表
ip rule add fwmark 1 table 1

8. 一键清空+重置

#!/bin/bash
# 超级清空脚本
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
echo "✅ 已清空所有规则"

9. 保存与恢复

9.1 保存规则

# Ubuntu/Debian
iptables-save > /etc/iptables/rules.v4

# CentOS/RHEL
service iptables save

9.2 恢复规则

iptables-restore < /etc/iptables/rules.v4

9.3 开机自启

# Ubuntu
apt install iptables-persistent
# 保存时会自动询问是否开机加载

10. 实用脚本合集

10.1 DNAT 快速部署

#!/bin/bash
INNER_IP=$1    # 内网IP
INNER_PORT=$2  # 内网端口
OUTER_PORT=$3  # 公网端口

iptables -t nat -A PREROUTING -p udp --dport $OUTER_PORT -j DNAT --to $INNER_IP:$INNER_PORT
iptables -A FORWARD -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

echo "✅ DNAT: $OUTER_PORT → $INNER_IP:$INNER_PORT"

使用: ./dnat.sh 192.168.1.100 10000 10000

10.2 流量监控

watch -n 1 "iptables -nvL | head -20"

📝 快速参考卡片

查看:iptables -L
清空:iptables -F
DNAT:-t nat -A PREROUTING --dport 10000 -j DNAT --to 192.168.1.100:10000
SNAT:-t nat -A POSTROUTING -o eth0 -j MASQUERADE
转发:iptables -A FORWARD -j ACCEPT
IP转发:echo 1 > /proc/sys/net/ipv4/ip_forward

🎯 学习路线(30分钟)

  1. 5分钟:读基础+流程图
  2. 10分钟:跑DNAT实战案例
  3. 10分钟:配置filter防火墙
  4. 5分钟:保存规则+测试

立即行动:复制DNAT脚本,替换IP/端口,2分钟 搞定端口转发!


文档结束 | 预计上手时间:30分钟 | 遇到问题直接@我!

posted on 2025-02-25 16:15  风惊庭前叶  阅读(68)  评论(0)    收藏  举报