iptables
这份教程针对 Debian/Ubuntu 系 VPS(最常见的服务器系统)
一、 新机开荒:30秒一键初始化
在一台全新的 VPS 上,按顺序执行以下命令,即可完成“安装 + 基础配置 + 持久化”。
1. 安装持久化工具
plain
sudo apt update
# 安装过程中遇到问询弹窗,一路选 <Yes>
sudo apt install iptables-persistent -y2. 一键注入“安全模板”
警告:如果你修改了 SSH 端口(不是 22),请修改下方第 5 行的 22。
直接复制整段粘贴进终端:
plain
# 1. 清空现有规则(防止冲突)
iptables -F
iptables -X
# 2. 【核心】允许已建立的连接(防止断连)
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# 3. 【核心】允许 SSH (如果是 1228 端口请自行修改)
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# 4. 允许基础服务 (HTTP/HTTPS/Ping/Loopback)
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
# 5. 【核心】封锁大门 (默认拒绝)
iptables -P INPUT DROP
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
# 6. 保存规则
netfilter-persistent save二、 指令速查字典 (Cheat Sheet)
1. 查看规则 (Query)
最常用的两条,死记硬背:
Bash
plain
# 简洁版:看有什么端口开了
iptables -nvL
# 运维版:显示行号 (删除、插入规则时必须用)
iptables -nvL --line-numbers2. 放行端口 (Allow)
注意:-A 表示追加到最后。如果你的默认策略是 DROP,追加是没问题的。
Bash
plain
# 放行 TCP 端口 (如 8080)
iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
# 放行 UDP 端口 (如 EasyTier/WireGuard)
iptables -A INPUT -p udp --dport 10110 -j ACCEPT
# 放行特定 IP 访问特定端口 (只允许 IP 1.2.3.4 连 SSH)
iptables -A INPUT -p tcp -s 1.2.3.4 --dport 22 -j ACCEPT3. 删除规则 (Delete)
必须先用 iptables -nvL --line-numbers 查出行号。
Bash
plain
# 删除 INPUT 链的第 5 行
iptables -D INPUT 54. 插入规则 (Insert)
场景:当你需要把规则放到最前面(优先级最高),或者 Fail2ban 没有自动把链插到最前面时。
Bash
plain
# 插队到第 1 行
iptables -I INPUT 1 -p tcp --dport 9000 -j ACCEPT5. 保存与重载 (Persistence)
iptables 重启即失效,修改后必须保存。
Bash
plain
# 保存当前规则到硬盘
netfilter-persistent save
# 从硬盘重新加载规则 (撤销刚才未保存的修改)
netfilter-persistent reload三、 救命锦囊:被自己锁外面了怎么办?
如果你不小心执行了 iptables -P INPUT DROP 但没放行 SSH,连接断开。
解决方法:
- 去云服务商(阿里云/腾讯云/AWS)的网页控制台,找到 VNC 控制台 (Web 终端)。
- 登录进去(VNC 不走网络协议,不受 iptables 影响)。
- 执行急救命令,清空防火墙:
Bash
plain
# 把默认策略改回 ACCEPT
iptables -P INPUT ACCEPT
# 清空所有规则
iptables -F
# 保存
netfilter-persistent save四、 常用场景模板
- Docker 场景:Docker 会自己接管
iptables,不要轻易执行iptables -F(会把 Docker 的网断掉)。如果非要重置,建议重启 Docker 服务。 - 多端口放行:
Bash
plain
iptables -A INPUT -p tcp -m multiport --dports 21,22,80,443 -j ACCEPT- 屏蔽恶意 IP:
Bash
plain
iptables -I INPUT 1 -s 123.123.123.123 -j DROP