前言
很多新手在 Linux 服务器上开放端口,第一反应就是:
ufw allow 443
但如果你用了 A 方案(iptables 作为主要防火墙),这个命令可能只是“看起来管用”,实际上并没有真正生效。
本文记录我在韩国服务器上实际验证过的端口管理方案。
核心原则
需要开放的端口,必须排在 REJECT 前面。
在 iptables INPUT 链中,规则是从上往下匹配的。REJECT(拒绝)规则之前的端口才会被放行,之后的根本不会执行到。
端口管理三步走
第一步:查看当前规则
iptables -L INPUT -n --line-numbers
输出示例:
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
2 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
...
9 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:443
10 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
第二步:插入新规则
关键:插到 REJECT 前面!
假设 REJECT 在第 10 条:
iptables -I INPUT 10 -p tcp --dport 443 -j ACCEPT
如果 REJECT 在第 11 条,就用 -I INPUT 11,以此类推。
第三步:保存规则
netfilter-persistent save
删除端口(按编号)
1. 先看编号
iptables -L INPUT -n --line-numbers
2. 按编号删除
iptables -D INPUT 编号
例如删除第 9 条:
iptables -D INPUT 9
3. 保存
netfilter-persistent save
常见问题
Q1:ufw allow 还管用吗?
答案:不管用。
ufw 还在,但更像个“挂件”,不是“法官”。真正说了算的是 iptables INPUT 链。
Q2:为什么有时候 ufw allow 看起来有效?
因为 ufw 底层也是操作 iptables,但如果你的 REJECT 规则排在前面,ufw 添加的规则在 REJECT 后面,永远不会生效。
Q3:怎么确认端口确实开放了?
# 本机测试
telnet 你的IP 端口号
# 或者
nc -zv 你的IP 端口号
Q4:不小心把 SSH 端口(22)删了怎么办?
立即重连! 如果还能连上,立刻加回去:
iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPT
netfilter-persistent save
完整操作示例
开放 443 端口(HTTPS)
# 1. 查看当前规则
iptables -L INPUT -n --line-numbers
# 2. 假设 REJECT 在第 10 条,插入规则
iptables -I INPUT 10 -p tcp --dport 443 -j ACCEPT
# 3. 再次确认
iptables -L INPUT -n --line-numbers
# 4. 保存
netfilter-persistent save
删除 8080 端口
# 1. 查看编号
iptables -L INPUT -n --line-numbers
# 2. 假设 8080 在第 8 条
iptables -D INPUT 8
# 3. 保存
netfilter-persistent save
总结
| 方式 | 适用场景 |
|---|---|
ufw allow |
仅当 iptables 没有自定义 REJECT 规则时 |
iptables -I INPUT 编号 |
A 方案(推荐),精准控制 |
记住这句口诀:
REJECT 前面才算数,编号插队要牢记。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

评论(0)