云服务器初始化阶段须关闭rpcbind、avahi-daemon、cups等高危默认服务,通过systemctl停用并禁用,结合sysctl配置、内核模块黑名单及SELinux策略,实现最小暴露面,并通过端口检查与重启验证确保固化生效。

云服务器初始化阶段关闭不必要的系统危险服务,核心是“最小化暴露面”——只保留业务必需的服务,停用默认开启但实际不用、且存在已知漏洞或高风险行为的组件。这一步直接影响系统上线后的安全基线,不能仅靠事后加固补救。
识别高危默认服务
很多云镜像(尤其是CentOS、Ubuntu官方模板)默认启用以下服务,需优先评估:
- rpcbind:NFS相关,常被用于反射放大攻击,非存储场景建议禁用
- avahi-daemon:Zeroconf服务,易受本地提权和DoS攻击,纯服务器环境无局域网发现需求时应关闭
- cups:打印服务,服务器几乎不用,却长期存在远程代码执行漏洞
- telnet-server(若存在):明文传输,绝对禁止;改用SSH并限制登录方式
- postfix/sendmail:若不发邮件,可停用并卸载,避免被滥用来发送垃圾邮件或作为跳板
标准化关闭流程(以systemd系统为例)
推荐统一使用systemctl操作,兼顾临时停止与永久禁用:
- 查看当前启用的服务:
systemctl list-unit-files --type=service --state=enabled - 停止并禁用某服务(如rpcbind):
systemctl stop rpcbind && systemctl disable rpcbind - 确认已停用:
systemctl is-active rpcbind(返回inactive)和systemctl is-enabled rpcbind(返回disabled) - 批量处理时,可用
xargs简化:echo "rpcbind avahi-daemon cups" | xargs -n1 sudo systemctl stop && echo "rpcbind avahi-daemon cups" | xargs -n1 sudo systemctl disable
注意内核级与用户态风险点
有些“服务”不走systemd,但同样危险,需单独处理:
-
IPv6自动配置(SLAAC/RA):若未规划IPv6,可在
/etc/sysctl.conf中添加net.ipv6.conf.all.accept_ra=0和net.ipv6.conf.all.autoconf=0,防止恶意路由通告 -
内核模块加载:禁用非必要模块,如
modprobe -r floppy(软驱模块)、modprobe -r bluetooth(蓝牙),并在/etc/modprobe.d/blacklist.conf中加入blacklist floppy等行 -
SELinux状态:若业务无需强制访问控制,且兼容性存疑,可设为
permissive而非disabled——既保留日志审计能力,又避免策略冲突导致服务异常
验证与固化
关闭不是终点,需验证效果并防止回弹:
- 用
ss -tunlp检查监听端口,确认对应服务端口(如5353/UDP for avahi)已消失 - 重启后再次运行
systemctl list-units --state=active --type=service,确保目标服务未自启 - 将关键禁用命令写入初始化脚本(如cloud-init的
bootcmd或runcmd段),实现每次重装自动生效 - 配合云平台安全组策略,对非业务端口(如111、631、5353)默认拒绝,形成网络层+系统层双重收敛


















