真正要做的,是先停服务、再封流量、最后盯异常连接——三者缺一不可;需组合用 ss、lsof、/etc/services、systemctl 查端口归属,并区分常驻服务与 xinetd/内核模块类服务,防火墙封端口仅为补漏,关后必须验证监听消失、本地连不通、远程扫描非 open 且无残留日志。
直接关端口不等于关风险。真正要做的,是先停服务、再封流量、最后盯异常连接——三者缺一不可。
怎么确认哪个端口在跑什么服务
别只看
或
的 LISTEN 行,有些服务(比如 xinetd 管理的)不会常驻进程,但端口仍可被触发。更可靠的方式是组合查:
查监听状态:
,重点关注
和
这类通配绑定
查对应进程:
(把 21 换成你要查的端口号),比
更准,尤其对 UDP 或非 root 进程
查服务归属:
,确认是不是 FTP 默认端口;再查 systemd 单元:
云服务器必须额外检查:安全组(阿里云/AWS 控制台)、主机防火墙(如 SELinux 的
)、以及是否被
或
重定向过
杀进程 vs 关服务:选哪个更稳妥
临时用
只能断连,服务下次开机或崩溃后自动拉起,端口又开了。正确顺序是:
先停服务:
(对应端口 111)、
(端口 21)等
再禁启动:
,防止 reboot 后复活
若服务由
托管(常见于 telnet、chargen),改配置文件
中
,再
对内核模块级服务(如 SMBv1),光关
不够,还得禁用协议:
,再
防火墙封端口只是补漏,不是主防线
ufw 或 firewalld 封端口,本质是丢包,但服务仍在监听,CPU 和内存照占,还可能暴露 banner 或引发扫描误判。只在以下情况用封而非关停:
无法停服务(如共享主机上租户共用 nginx,你只管自己
)
需保留服务但限制来源:
(PostgreSQL)
临时应急:发现异常连接正打 3389,而 RDP 服务不能立刻下线,先
挡住外网
注意:ufw 默认不处理出站,若要防反弹 shell,得加
,再显式放行
、
等必需端口
验证是否真关干净了
很多人执行完命令就以为结束了,但没验证。真实闭环是:
本机确认监听消失:
(Telnet 端口),输出为空才可信
本地连不通:
应返回
,不是 timeout
远程扫描验证:
,结果必须是
或
,绝不能是
日志里别留尾巴:关掉
后,
不应再有新日志;若有,说明其他服务还在拉它
最容易被忽略的是“服务关了,但依赖它的另一个服务又把它拉起来了”,比如
的
会隐式启动依赖项。每次关完,务必用
反查依赖链。
netstat -anpss -tulnsudo ss -tuln0.0.0.0:* [::]:*sudo lsof -i :21grepgrep -w 21 /etc/servicessystemctl list-unit-files --state=enabled | grep -i ftpsestatusiptablesnftableskill -9 PIDsudo systemctl stop rpcbindsudo systemctl stop vsftpdsudo systemctl disable rpcbindxinetd/etc/xinetd.d/telnetdisable = yessudo systemctl restart xinetdsmbdecho 'options cifs disable_legacy_dialects=1' | sudo tee /etc/modprobe.d/cifs.confsudo modprobe -r cifs && sudo modprobe cifslocationsudo ufw allow from 10.0.1.0/24 to any port 5432sudo ufw deny 3389sudo ufw default deny outgoing53443sudo ss -tuln | grep ':23'nc -zv 127.0.0.1 23Connection refusedsudo nmap -sT -p23 your-server-ipfilteredclosedopenrpcbindjournalctl -u rpcbind --since "1 hour ago"systemdWantedBy=multi-user.targetsystemctl list-dependencies --reverse servicename