跳转到主内容
websoft网络软件专家 - 深耕网络技术,打造实用软件!

Linux如何关闭不必要的端口和服务_Linux关闭不必要端口与服务方案

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

相关文章