关端口必须先停服务、再断监听、最后堵流量——三步缺一不可;需组合用ss、lsof、/etc/services、systemctl查端口归属,区分常驻与xinetd/内核模块类服务,防火墙封端口仅为补漏,关后须验证监听消失、本地连不通、远程扫描非open且无残留日志。

关端口不是单纯封个数字,得先停服务、再断监听、最后堵流量——三步缺一不可。只封防火墙,服务还在后台占着端口和资源;只杀进程,重启就复活;不查依赖,可能连不上机器或日志全丢。
先找准谁在用这个端口
别只盯着 netstat 或 ss 的 LISTEN 行。有些服务(比如 xinetd 托管的 telnet)不常驻进程,但端口仍能被触发。可靠做法是组合查:
-
看监听地址:运行
sudo ss -tuln,重点关注0.0.0.0:*和[::]:*这类通配绑定,它们意味着端口对外暴露 -
查具体进程:用
sudo lsof -i :21(把 21 换成你要查的端口),比 grep 更准,尤其对 UDP 或非 root 进程 -
确认服务归属:
grep -w 111 /etc/services看是不是 rpcbind 默认端口;再查 systemd 单元:systemctl list-unit-files --state=enabled | grep -i rpcbind -
云服务器额外检查:安全组(阿里云/AWS 控制台)、SELinux 状态(
sestatus)、iptables/nftables 是否做过端口重定向
停服务比杀进程更稳妥
临时 kill -9 PID 只能断当前连接,服务下次开机或崩溃后自动拉起,端口又开了。正确顺序是:
-
先停服务:如
sudo systemctl stop rpcbind(对应端口 111)、sudo systemctl stop vsftpd(端口 21) -
再禁自启:用
sudo systemctl disable rpcbind,防止 reboot 后复活 -
特殊托管服务:xinetd 类(如 telnet、chargen),改
/etc/xinetd.d/telnet中disable = yes,再sudo systemctl restart xinetd -
内核模块级服务:如 SMBv1,光关 smbd 不够,还要禁协议:
echo 'options cifs disable_legacy_dialects=1' | sudo tee /etc/modprobe.d/cifs.conf,再sudo modprobe -r cifs && sudo modprobe cifs
禁用服务时注意依赖和彻底性
systemctl disable 只取消开机自启,手动 start 还能拉起;systemctl mask 是创建指向 /dev/null 的符号链接,彻底阻止启动(包括被其他服务依赖触发)。对明确不需要、又怕未来被间接激活的服务(如 telnet.socket、avahi-daemon.service),优先用 mask:
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
sudo systemctl mask avahi-daemon.servicesudo systemctl mask rpcbind.service
注意:mask 后若真需要启用,得先 unmask 再 enable,比 disable 多一步操作。
防火墙封端口只是补漏,不是主防线
ufw 或 firewalld 封端口本质是丢包,服务仍在监听,CPU 和内存照占,还可能暴露 banner 或引发扫描误判。只在以下情况用封而非关停:
- 无法停服务(如共享主机上共用 nginx,你只管自己 location)
- 需保留服务但限制来源:
sudo ufw allow from 10.0.1.0/24 to any port 5432 - 临时应急:发现异常连接正打 3389,而 RDP 服务不能立刻下线,先
sudo ufw deny 3389挡住外网
务必配合端口检查验证:关完再跑 ss -tlnp,确认监听消失;本地 telnet 127.0.0.1 端口 应超时;远程 nmap 扫描应显示 filtered 而非 open,且无残留日志。

















