关闭 Linux 不需要的端口,常用防火墙、nftables、ufw、systemd socket 四种方式。
一、TL;DR:先查后关
ss -tulpn | grep ':80 '
上述命令列出当前监听端口及进程。确认端口号后,按自己的防火墙工具选择对应方法即可。如果端口由 systemd socket 激活,关闭端口还应禁用对应 socket 单元 [1]。
二、iptables:最通用的内核级过滤
iptables -A INPUT -p tcp --dport 8080 -j DROP
iptables -D INPUT -p tcp --dport 8080 -j DROP
-A 追加规则,把目标端口的包丢弃;-D 删除同一条规则,端口监听本身不会改变 [2]。要确认规则已生效,可执行:
iptables -L INPUT -v -n | grep 8080
ss -tulpn | grep ':8080 '
端口仍会显示 LISTEN,但流量已被丢弃。回滚时只删规则即可,无需改动服务配置。
三、nftables:新一代内核框架
nft add rule inet filter input tcp dport 8080 drop
nft delete rule inet filter input handle 12
nft add rule 直接写入 inet filter 表的 input 链 [5]。插入后可用 nft list ruleset 查看。删除前先 nft -a list chain inet filter input 拿到句柄,再按 handle 精确删除。WSL 实测中 nft list ruleset 输出为空时表示当前没有自定义规则。
四、ufw:Debian/Ubuntu 默认的简易前端
ufw deny 8080/tcp
ufw delete deny 8080/tcp
ufw 在 Status: inactive 时只修改规则集,不激活防火墙 [4]。启用后才会把规则写入内核。查看当前规则:
ufw status numbered
五、systemd socket:关闭由 socket 激活的端口
systemctl disable --now nginx.socket
ss 中看到的监听进程有时属于 systemd socket 激活的服务。关闭 socket 单元后,对应的服务不再自动启动 [3]。如果端口仍被传统守护进程占用,此方法无效。
回滚方法:systemctl enable --now <socket> 恢复监听。
六、排错速查表
| 现象 | 原因 | 处理 |
|---|---|---|
ss 能看到端口,但连不上 |
防火墙已封禁 | iptables -D 或 nft delete rule 删掉规则 |
ufw status 显示 inactive |
防火墙未启用 | ufw enable 激活,或直接检查其他工具 |
systemctl disable 后端口还在 |
不是 socket 激活的服务 | 先 ss -tulpn 确认 PID 所属 |
nft 报 “No such file or directory” |
表/链未创建或不存在 | 先 nft list ruleset 确认已有表 |
局限性:
- iptables/nftables 规则重启后丢失;需要持久化请使用发行版提供的 save/restore 工具。
- ufw 在未启用状态下只改规则文件,不阻断流量。
- WSL2 网络是虚拟 NAT,部分
systemctl disable --now行为与物理机略有差异。 - 容器环境中默认没有 root 权限,且
iptables命名空间隔离,只能关闭当前容器内的监听。
实测记录:
- 环境:WSL2 Ubuntu 24.04,内核 5.15,test date 2026-11-02。
ss -tulpn正常列出 systemd-resolve 监听端口。iptables -A INPUT -p tcp --dport 9999 -j DROP添加后iptables -L可见规则;删除后规则消失。nft add rule inet test input tcp dport 9999 drop成功写入并列出;nft delete table inet test清理成功。ufw deny 9999/tcp规则添加并删除成功,状态始终 inactive。- iptables/nftables/ufw 实测后已 purge 清除,未残留规则文件。
参考资料
- [1] ss(8) – Linux manual page (man7.org)(man7-ss)
- [2] iptables(8) – Linux manual page (man7.org)(man7-iptables)
- [3] systemctl(1) – Linux manual page (man7.org)(man7-systemctl)
- [4] ufw(8) – Ubuntu manual page (manpages.ubuntu.com)(ubuntu-ufw)
- [5] nft(8) – Debian manual page (manpages.debian.org)(debian-nft)
文中主要命令已在 WSL Ubuntu(24.04)实测并核对其在 Debian 系与通用发行版的文档口径。