在 Linux 服务器运维与安全加固中,关闭 445 端口是防御勒索病毒(如 WannaCry)、SMB 漏洞利用以及未授权文件访问的最关键手段,对于绝大多数非文件共享服务的业务场景,必须通过防火墙策略阻断或直接停止相关服务来彻底封禁该端口。

在 Linux 系统中,445 端口通常与 Server Message Block (SMB) 协议相关联,主要用于 Windows 环境下的文件和打印机共享,在 Linux 上,这一功能通常由 Samba 服务提供,虽然 Samba 为跨平台文件共享提供了便利,但开放的 445 端口也是黑客眼中的“黄金后门”,一旦该端口暴露在公网,攻击者可利用永恒之蓝等高危漏洞直接获取系统最高权限,或通过暴力破解窃取敏感数据。除非业务有极其严格的跨平台文件共享需求且已部署高级安全防护,否则必须无条件关闭 445 端口。
风险评估:为什么必须关闭 445 端口
在执行操作前,必须明确该端口开放带来的潜在风险,这有助于理解安全加固的必要性。
- 勒索病毒的首选攻击向量:历史上著名的 WannaCry 勒索病毒正是利用了 Windows SMB 协议的漏洞(MS17-010)通过 445 端口进行传播,虽然 Linux 对该漏洞的免疫机制与 Windows 不同,但运行 Samba 服务的 Linux 同样存在远程代码执行漏洞(如 2017 年的 Samba “SambaCry”)。
- 暴力破解与信息泄露:445 端口承载着文件共享服务,如果配置不当,攻击者无需复杂的漏洞利用,仅需通过简单的口令爆破或匿名访问,即可窃取服务器上的企业核心数据、源代码或客户信息。
- 内网横向移动的跳板:即使服务器位于内网,一旦边界防护被突破,开放的 445 端口极易成为攻击者进行横向渗透、控制更多内网主权的通道。
精准诊断:检测 445 端口状态
在关闭端口之前,首先需要确认当前系统中 445 端口是否处于监听状态,以及是哪个进程占用了该端口。
使用以下命令进行深度检测:
使用 netstat 或 ss 命令查看端口监听情况
netstat -antlp | grep :445 # 或者使用更现代的 ss 命令 ss -antlp | grep :445
如果输出结果中包含 LISTEN 状态,且对应的进程名称为 smbd 或 nmbd,则说明 Samba 服务正在运行且 445 端口已开放。
确认服务安装情况
rpm -qa | grep samba # 或者对于 Debian/Ubuntu 系统 dpkg -l | grep samba
这一步是为了确认系统是否安装了 Samba 软件包,以便后续彻底卸载或禁用。

专业解决方案:关闭 445 端口的两种层级
为了确保安全加固的有效性,建议采取“服务层停止”与“网络层阻断”双重防护的策略。
停止并禁用 Samba 服务(治本)
这是最彻底的方法,直接从系统服务层面终止 445 端口的监听程序。
临时停止服务
执行以下命令立即停止 Samba 相关服务:
systemctl stop smb systemctl stop nmb
注:smb 服务负责处理 445 端口的 SMB 请求,nmb 服务负责 NetBIOS 名称解析(通常使用 137/138/139 端口),建议一并停止。
永久禁用服务(防止开机自启)
为了防止服务器重启后服务自动恢复,必须执行:
systemctl disable smb systemctl disable nmb
彻底卸载 Samba(可选)
如果业务确认完全不需要文件共享功能,建议直接卸载软件包,以消除潜在的风险组件:
# CentOS/RHEL 系统 yum remove samba samba-common -y # Ubuntu/Debian 系统 apt-get remove samba samba-common -y
配置防火墙策略(治标+边界防护)
即使停止了服务,为了应对未来可能误安装或启动服务的情况,配置防火墙规则是必不可少的防线,这里分别介绍 firewalld(CentOS 7+ 默认)和 iptables 的配置方法。
使用 firewalld 封禁 445 端口

# 查询当前活跃的区域 firewall-cmd --get-active-zones # 永久移除 445 端口的放行规则(如果之前添加过) firewall-cmd --permanent --remove-port=445/tcp # 显式拒绝 445 端口流量(推荐,即使服务开启也无法被访问) firewall-cmd --permanent --add-rich-rule='rule family="ipv4" port port="445" protocol="tcp" reject' # 重载防火墙使规则生效 firewall-cmd --reload
使用 iptables 封禁 445 端口
对于使用传统 iptables 的服务器,添加拒绝规则:
# 拒绝入站 TCP 445 端口流量 iptables -A INPUT -p tcp --dport 445 -j DROP # 保存规则(根据系统不同,命令可能不同,如 service iptables save)
验证与运维建议
效果验证
操作完成后,再次使用 ss -antlp | grep :445 确认无输出,建议从服务器外部使用 nmap 或 telnet 进行扫描验证:
nmap -p 445 <服务器IP>
如果显示 State: filtered 或 closed,说明阻断成功。
独立见解:最小化原则与业务妥协
在网络安全领域,没有绝对的安全,只有权衡,如果业务必须使用 Samba 服务,请务必遵循以下专业建议,而不是直接开放 445 端口:
- IP 访问控制列表 (ACL):在
smb.conf配置文件中,利用hosts allow参数,仅允许特定的内网 IP 或管理主机访问,拒绝所有其他连接。 - VPN 隧道传输:绝对不要将 445 端口直接暴露在公网,应要求用户先通过 VPN 拨入内网,再访问 Samba 服务。
- 版本升级与补丁:保持 Samba 版本最新,及时修补 CVE 漏洞。
- 禁用 SMBv1:在
smb.conf中设置server min protocol = SMB2或更高,彻底抛弃存在严重缺陷的 SMBv1 协议。
相关问答
Q1:关闭 Linux 的 445 端口会影响正常的 Web 服务(如 Nginx/Apache)或数据库服务吗?
A:不会。 445 端口专门用于 SMB 文件共享协议,Web 服务通常使用 80/443 端口,数据库如 MySQL 使用 3306 端口,Redis 使用 6379 端口,它们在协议层面完全独立,关闭 445 端口仅影响文件共享功能,对网站访问和数据库读写无任何干扰。
Q2:如何确认服务器遭受了针对 445 端口的扫描或攻击?
A:可以通过分析系统日志进行确认。 检查 /var/log/secure(RedHat/CentOS 系)或 /var/log/auth.log(Debian/Ubuntu 系)中是否存在大量的 Samba 认证失败记录,使用 last 命令查看异常登录记录,或通过 tcpdump -i eth0 port 445 抓包分析,若发现大量来自陌生 IP 的 SYN 包请求,即表明正在被扫描或攻击。
互动话题:
您的服务器目前是否开启了不必要的端口?在进行安全加固时,您是否遇到过因关闭端口导致业务中断的“惊魂时刻”?欢迎在评论区分享您的运维经验与避坑指南。


















