服务器安全基线加固,关闭不必要端口与服务
服务器安全基线加固的第一步,就是减少暴露面。
很多入侵事件源于不必要的端口和服务:数据库端口对外开放、测试用的Web服务忘记关闭、旧版SSH允许密码登录。
本文帮你用几条命令找出并关闭这些风险点,适合刚接触Linux运维的读者。
先看清服务器在监听什么
加固前需要知道当前哪些端口在监听。
使用 ss 命令替代老旧的 netstat:
ss -tulnp
-t显示TCP,-u显示UDP,-l只看监听状态,-n显示端口数字,-p显示进程。- 重点关注
0.0.0.0:*或:::*的监听项,这表示对所有网卡开放。
如果不认识某个进程,用 ps 查看:
ps -fp
把结果记下来,区分三类:必须保留(如SSH、业务Web)、可关闭(如测试服务)、不确定(先查资料再决定)。
用防火墙做第一层拦截
即使服务还在运行,也可以先用防火墙挡住外部访问。
以 firewalld 为例(CentOS/RHEL系):
# 查看当前放行端口
firewall-cmd --list-all
# 只放行SSH和HTTP/HTTPS,移除其他端口
firewall-cmd --permanent --remove-port=3306/tcp
firewall-cmd --permanent --add-service=ssh
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload
如果是Ubuntu/Debian,常用 ufw:
ufw status verbose
ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable
注意:启用防火墙前务必确认SSH端口已放行,否则可能把自己关在门外。
云服务器还要检查安全组规则,安全组和系统防火墙是两层独立过滤。
停用不需要的系统服务
防火墙是外部拦截,停用服务才是根治。
先列出正在运行的服务:
systemctl list-unit-files --type=service --state=enabled
常见可关闭的服务:
postfix:本机不发邮件可关。rpcbind:除非用NFS,否则关。avahi-daemon:内网发现用,公网服务器关。cups:打印服务,服务器不需要。
停用并禁止开机启动:
systemctl stop postfix
systemctl disable postfix
不要直接卸载,先停用观察几天,确认业务无影响再考虑移除。
修改SSH默认配置降低风险
SSH是管理入口,也是被暴力破解的重灾区。
编辑 /etc/ssh/sshd_config:
Port 2222 # 改为非标准端口,减少扫描
PermitRootLogin no # 禁止root直接登录
PasswordAuthentication no # 改用密钥登录
改完重启SSH:
systemctl restart sshd
避坑:改端口或禁用密码前,先用新配置开另一个终端测试登录,成功后再关闭当前会话。
否则配置写错会导致无法远程连接。
验证加固效果
重新扫描端口:
ss -tulnp
nmap -sT -p- 127.0.0.1
对比加固前列表,确认非必要端口已消失。
从外部机器扫描公网IP:
nmap -sS -p 1-10000 <你的公网IP>
只应看到你主动放行的端口。
如果还有意外开放端口,回到防火墙和服务两处排查。
容易踩的坑
- 直接
systemctl disable但没stop:服务本次仍运行,需同时执行。 - 忽略UDP端口:DNS、NTP等UDP服务也可能被利用,
ss -ulnp也要看。 - 只改防火墙没停服务:重启防火墙或规则失效后,服务再次暴露。
- 云服务器安全组未同步:系统防火墙关了,安全组还开着,等于没关。
服务器安全基线加固不是一次性的,建议每季度复查一次端口和服务列表。
关闭不必要端口与服务能显著缩小攻击面,但也要保留必要的管理通道,避免影响正常运维。