首页 > Sysadmin > 正文

Linux 关闭不需要的端口:4 种方法对比

huyuanwen 2026-11-02 Sysadmin

关闭 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 清除,未残留规则文件。

参考资料

文中主要命令已在 WSL Ubuntu(24.04)实测并核对其在 Debian 系与通用发行版的文档口径。