学习 Debian 下的 iptables 可以按由浅入深、理论 + 实战的方式来,下面给你一套比较系统的学习路线,适合初学者到进阶。
在学习 iptables 前,最好先掌握以下内容:
ip addr
ip route
ss -tunlp
iptables 是 Linux 内核 netfilter 框架的用户态工具,用于:
| 表名 | 作用 |
|---|---|
| filter | 默认表,用于过滤 |
| nat | 网络地址转换 |
| mangle | 修改数据包 |
| raw | 连接跟踪 |
| 链名 | 说明 |
|---|---|
| PREROUTING | 数据包进入前 |
| INPUT | 本机接收 |
| FORWARD | 转发 |
| OUTPUT | 本机发出 |
| POSTROUTING | 数据包发出前 |
关系图(推荐自己画一遍)
数据包 → PREROUTING → INPUT → 本地进程
数据包 → PREROUTING → FORWARD → POSTROUTING
本地进程 → OUTPUT → POSTROUTING
sudo apt update
sudo apt install iptables
Debian 10+ 默认可能使用
nftables,但iptables命令仍可兼容。
查看当前规则:
iptables -L -n -v
iptables -L
iptables -L -n
iptables -L -v
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
⚠️ 注意:远程服务器先放行 SSH,否则会断连!
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -P INPUT DROP
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
# 限制 ping
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
# 防止 SYN Flood
iptables -A INPUT -p tcp --syn -m limit --limit 100/s -j ACCEPT
iptables 规则默认是内存中的。
sudo apt install iptables-persistent
iptables-save > /etc/iptables/rules.v4
systemctl enable netfilter-persistent
✅ 解决:
⚠️ iptables 从上到下匹配,第一条命中即停止
man iptables如果你愿意,我可以:
你可以直接告诉我你的使用场景(家用 / 服务器 / 路由器 / 云主机)。