631 与 CUPS 的关系
CUPS(Common Unix Printing System)是 Linux 与 macOS 上的标准打印系统,cupsd 默认监听 631/TCP,同时承载 IPP(Internet Printing Protocol)打印任务和 http://主机:631 上的 Web 管理界面。对不需要打印的服务器来说,这个端口纯粹是多余的攻击面:它长期是扫描器的常见探测目标,历史上多次出现过影响 cupsd 的远程漏洞,补丁不及时的机器风险尤其高。
处置的三档思路
打印服务器需要 631 对外服务,业务服务器不需要,处置按需求分档:完全没有打印需求就直接停用并禁止自启;只在本机用 lp 命令提交任务,就把监听改回环地址;真有共享打印服务,则限制到打印网段再做访问控制,而不是全网开放。要注意 CUPS 常被 cups.socket 套接字激活或 cups-browsed 自动发现间接拉起,只停 cups.service 有时并不足够。
基本信息
| 服务进程 | cupsd |
|---|---|
| 协议与端口 | TCP 631(IPP,管理界面同端口) |
| 管理界面 | http://127.0.0.1:631 |
| 主配置文件 | /etc/cups/cupsd.conf |
| 相关服务 | cups.service、cups.socket、cups-browsed |
| 适用平台 | Linux、macOS、部分 NAS 与打印服务器 |
常见启用场景
- 打印服务器与共享打印机:必须保留 631,但应限制来源网段并关闭公网访问
- 桌面发行版默认开启:本机打印需要,服务器上没有打印机则无此必要
- 容器镜像自带打印组件:多数是客户端库,本身不监听端口
- 被打印管理软件或 NAS 拉起:停用前先确认是否有业务依赖
- 日志与故障排查:打印队列卡住时通常仍需临时启用来定位问题
核查现状
核查现状
ss -tlnp | grep ':631 ' # 谁在监听 631、绑定在哪个地址
systemctl status cups cups.socket cups-browsed # 服务与套接字激活状态
grep -E '^(Listen|Port|Browsing)' /etc/cups/cupsd.conf # 监听地址与自动发现开关
lpstat -r # 打印调度器是否在运行收敛与限制
收敛与限制
systemctl disable --now cups.service cups-browsed.service # 无打印需求:停用并禁止自启
systemctl is-enabled cups.socket 2>/dev/null # 若启用,停服务后端口仍可能被拉起
# /etc/cups/cupsd.conf 中的关键两行
Listen localhost:631 # 只监听回环,不要用已废弃的 Port 631(等于监听所有网卡)
Browsing Off # 关闭自动发现,避免被动对外暴露打印队列只对打印网段放行
只对打印网段放行
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=10.20.0.0/24 port port=631 protocol=tcp accept'
firewall-cmd --reload
firewall-cmd --list-rich-rules # 确认规则已生效核查项与判定
| 核查项 | 正常表现 | 异常表现 |
|---|---|---|
| 监听地址 | 仅 127.0.0.1:631 | 0.0.0.0:631 或 *:631 对全网暴露 |
| 服务自启 | 无打印需求时 disabled | enabled 且无人知晓谁开启的 |
| 套接字激活 | cups.socket 未启用 | 已启用,停服务后端口仍被拉起 |
| 自动发现 | cups-browsed 未运行 | 运行中并对外发布打印队列 |
| 管理界面 | curl 访问 631 不可达 | 返回 200 或 401,说明 Web 管理面暴露 |
cups-browsed 会自动发现并发布网络打印队列,即使 cupsd 已限制为回环,它也可能带来意外的对外监听与信息暴露,两个服务要一起处理。
容器镜像里的 libcups 是客户端库,供程序调用打印接口,不监听任何端口,别把它当成 631 暴露来判定。
631 对外可达时,Web 管理界面会暴露队列名、任务与部分配置信息,历史上 CUPS 出现过可远程利用的漏洞。不要因为「它只是个打印机」就把它留在公网。