news 2026/9/22 19:06:37

3种关闭445端口的方法源码解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
3种关闭445端口的方法源码解析

3种关闭445端口的方法源码解析

复制来的防火墙规则跑不通,报错 Permission denied 或者端口依然被扫描出来?别急着怀疑环境,多半是你没搞懂底层拦截逻辑。很多教程只给命令,不讲源码解析层面的执行机制,导致你在不同 Linux 发行版上水土不服。今天我们就从底层原理出发,拆解三种主流关闭 445 端口的方法,确保你的配置真正生效,而不是仅仅“看起来”生效。

项目目标与合格标准

在动手之前,我们需要明确“关闭”的定义。在网络安全领域,关闭 445 端口通常指阻断 SMB 协议通信,防止 EternalBlue 等漏洞利用。

对于应届毕业生或初级运维工程师,一个合格的配置需要满足以下三个标准:

  1. 即时生效:配置完成后,本地 netstatss 命令中不再显示 445 监听,或者外部扫描无法连通。
  2. 持久化:服务器重启后,规则依然存在,无需人工干预。
  3. 无副作用:不影响系统内部依赖 SMB 的服务(如某些域控环境下的文件共享),或者明确知道哪些业务会被切断。

根据 OWASP 的安全基线,生产环境服务器若不对内网提供文件共享,必须默认关闭 445 端口。据某云厂商 2023 年安全报告统计,未关闭 445 端口的 Linux 服务器被勒索软件攻击的概率是已关闭服务器的 15 倍。因此,这不仅是技术动作,更是合规要求。

目录结构与工具准备

为了演示完整流程,我们假设目标机器是一台 Ubuntu 22.04 的云服务器(这也是目前开发环境最常见的版本)。我们需要准备以下工具:

  • SSH 客户端:用于远程连接。
  • nmap:用于端口扫描测试,验证关闭效果。
  • firewalldufw:Ubuntu 默认使用 ufw,CentOS/RHEL 系列使用 firewalld。本文以 ufw 为主,兼顾 iptables 底层原理。

项目文件结构(模拟生产环境配置管理):

/etc/ufw/
├── ufw.conf          # UFW 主配置文件
├── user.rules        # 用户自定义规则(持久化存储)
└── applications/     # 应用规则文件(如 Nginx, MySQL)/tmp/
└── port_test.sh      # 测试脚本,用于自动化验证

在开始修改系统配置前,建议先备份当前规则。虽然 ufw 会自动备份,但手动备份一份 user.rules 到本地,能让你在出问题时快速回滚,这是工程化思维的基本体现。

核心代码实现与源码解析

这里我们对比三种方法:UFW 用户态工具、iptables 内核态规则、以及 systemd 服务控制。

方法一:使用 UFW (推荐)

UFW 是 Uncomplicated Firewall 的缩写,它是 iptables 的前端,旨在简化配置。

操作步骤:

# 1. 确保 UFW 已启用
sudo ufw enable# 2. 查看当前状态
sudo ufw status verbose# 3. 关闭 445 端口 (拒绝所有入站连接)
sudo ufw deny 445/tcp# 4. 保存并重新加载 (UFW 通常即时生效,但重载可确保规则排序正确)
sudo ufw reload

源码解析视角: 当你执行 sudo ufw deny 445/tcp 时,UFW 实际上做了几件事:

  1. 解析参数,识别协议为 TCP,端口为 445。
  2. /etc/ufw/user.rules 文件中插入一条规则。
  3. 调用 iptables 命令,将规则注入到内核的 filterINPUT 链中。

生成的 iptables 规则大致如下:

-A ufw-user-input -p tcp --dport 445 -j DROP

注意这里是 DROP 而非 REJECTDROP 会静默丢弃数据包,攻击者会感觉网络超时;而 REJECT 会返回 ICMP port unreachable 包,可能会触发某些恶意软件的快速重试机制。在安全场景下,DROP 通常是更优选择。

方法二:直接操作 iptables (底层)

如果你需要更精细的控制,或者 UFW 出现故障,可以直接操作 iptables。

操作步骤:

# 1. 插入规则到 INPUT 链顶部,确保优先级最高
sudo iptables -I INPUT -p tcp --dport 445 -j DROP# 2. 持久化规则 (Ubuntu 需安装 iptables-persistent)
sudo apt-get install iptables-persistent
sudo netfilter-persistent save

避坑指南: 直接操作 iptables 最大的坑是规则顺序。iptables 是顺序匹配的,一旦匹配即停止。如果你之前有 ACCEPT 所有端口的规则放在前面,那么这条 DROP 规则永远不会被执行。务必使用 -I (Insert) 而不是 -A (Append),或者检查现有规则链。

验证命令:

sudo iptables -L INPUT -n -v

查看 pkts (包计数) 列。如果配置正确,且有人尝试连接,该规则下的计数会增长,但连接依然失败。

方法三:禁用 SMB 服务 (根源切断)

端口开放是因为服务在监听。如果业务不需要 SMB,直接停止服务是最彻底的方法。

操作步骤:

# 1. 查找监听 445 端口的进程
sudo lsof -i :445
# 或
sudo ss -tulnp | grep 445# 假设输出显示 smbd 进程
# 2. 停止 Samba 服务
sudo systemctl stop smbd nmbd# 3. 禁用开机自启
sudo systemctl disable smbd nmbd# 4. 防止服务被意外启动 (可选,安全加固)
sudo systemctl mask smbd nmbd

源码解析视角: systemctl 通过 D-Bus 与 systemd 守护进程通信。disable 命令会移除 /etc/systemd/system/multi-user.target.wants/smbd.service 下的符号链接,而 mask 会将该服务链接到 /dev/null,使得任何启动该服务的尝试都会立即失败。这是比防火墙更上游的防线。

运行与测试验证

配置完成后,必须进行双向测试:本地测试和远程测试。

1. 本地监听状态检查

# 检查端口是否仍在监听
sudo ss -tuln | grep 445# 如果方法三生效,此处应无输出。
# 如果使用方法一/二,此处可能仍有监听(因为服务还在跑),但连接会被防火墙拦截。

关键点: 防火墙拦截发生在网络包进入内核协议栈之前,而服务监听是内核层面的。所以,即使端口显示为 LISTEN,防火墙也能阻断连接。不要混淆“端口未监听”和“端口被防火墙拦截”这两个概念。

2. 远程扫描测试

在另一台机器上执行 nmap 扫描:

# 安装 nmap (如果在测试机上)
sudo apt-get install nmap# 扫描目标服务器的 445 端口
nmap -p 445 -sS <目标IP>

预期结果:

  • 如果防火墙配置为 DROP:状态显示 filtered
  • 如果防火墙配置为 REJECT:状态显示 closedfiltered (取决于具体实现)。
  • 如果服务已停止且无防火墙:状态显示 closed

自动化测试脚本:

为了工程化,我们可以写一个简单的脚本 /tmp/port_test.sh

#!/bin/bash
TARGET_IP="192.168.1.100"
PORT=445echo "Testing port $PORT on $TARGET_IP..."
if nmap -p $PORT -sS $TARGET_IP | grep -q "filtered"; thenecho "[PASS] Port is filtered by firewall."
elif nmap -p $PORT -sS $TARGET_IP | grep -q "closed"; thenecho "[PASS] Port is closed (service stopped or rejected)."
elseecho "[FAIL] Port might be open! Check configuration."exit 1
fi

运行 bash /tmp/port_test.sh,如果输出 [PASS],则配置成功。

优化扩展与避坑指南

在实际生产中,你可能会遇到以下复杂场景:

1. 云安全组与主机防火墙的双重防护

很多初学者只配置了云厂商的安全组(VPC 层面的 ACL),却忽略了主机内部的防火墙。或者反过来,只配置了主机防火墙,却忘了云安全组默认可能放行了所有端口。

最佳实践:

  • 云安全组:作为第一道防线,最小化开放端口,仅开放 22 (SSH)、80 (HTTP)、443 (HTTPS)。
  • 主机防火墙 (UFW/iptables):作为第二道防线,应对内部横向移动或安全组配置失误。

两者规则应保持一致。如果云安全组禁止了 445,主机防火墙再禁一次是冗余但安全的;如果云安全组放行了 445,而主机防火墙禁止了,流量会在主机内核处被丢弃,增加 CPU 开销但保障安全。

2. 性能影响评估

防火墙规则越多,内核处理每个网络包的开销越大。对于高并发服务器(如每秒数万请求),过多的 iptables 规则可能成为瓶颈。

优化建议:

  • 使用 xtables 的多层表结构,将高频规则放在前面。
  • 对于特定 IP 段的访问控制,尽量使用 CIDR 表示法,而不是单个 IP 列表。
  • 定期清理无用规则:sudo ufw show added 查看所有规则,移除不再需要的条目。

3. 跨平台差异

  • CentOS/RHEL:默认使用 firewalld。命令类似:sudo firewall-cmd --permanent --zone=public --add-port=445:tcp (注意:这是添加端口,若要禁止需使用 --remove-port 或设置默认拒绝策略)。
  • Windows Server:使用 Windows Defender Firewall。图形界面或 PowerShell 命令 New-NetFirewallRule -DisplayName "Block SMB" -Direction Inbound -Protocol TCP -LocalPort 445 -Action Block

理解不同系统底层都是基于内核的包过滤机制(Linux 的 Netfilter 框架),只是用户态接口不同,这样你在切换环境时就不会迷失。

4. 常见错误排查

现象 可能原因 解决方案
配置后端口仍开放 规则顺序错误,前置规则已 ACCEPT 检查 iptables -L 顺序,将 DROP 规则移到顶部
SSH 无法连接 误杀了 SSH 端口,或未保存规则 通过控制台 VNC 登录,检查 22 端口规则,执行 save
业务文件共享中断 禁用了 SMB 服务或端口 确认业务是否依赖 SMB,若依赖则仅对内网 IP 段开放,外网禁止

小结

关闭 445 端口看似简单,但涉及内核网络栈、系统服务管理、持久化存储等多个层面。

  1. UFW 适合日常运维,配置简单,易于审计。
  2. iptables 适合底层调试和高性能场景,但规则管理复杂。
  3. 禁用服务 是最根本的解决方案,适用于不需要 SMB 功能的服务器。

在实际工作中,建议采用**“服务禁用 + 防火墙拦截”**的双重策略。既从源头减少攻击面,又在网络层设置最后防线。同时,务必结合云安全组进行多层防御。

技术细节决定安全下限。不要满足于“命令执行成功”,要通过 nmap 等工具验证实际效果。对于应届毕业生来说,掌握这种“配置-验证-排查”的闭环思维,比记住几条命令更重要。

你更常用哪种写法?是倾向于使用高层抽象工具如 UFW,还是喜欢直接操作 iptables 以获得完全控制权?评论区交流你的实战经验,特别是你在生产环境中遇到的“坑”。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/22 19:06:29

3个坑点教你搞定推广二维码最佳实践

3个坑点教你搞定推广二维码最佳实践 看了一堆教程还是不会写项目,是不是觉得代码跑通了就万事大吉?直到上线那天,用户扫码提示“二维码已过期”或者“链接失效”,你才意识到之前的学习全是纸上谈兵。真正的 最佳实践 ,不是把功能堆上去,而是把那些藏在细节里的稳定性、兼容性和可维护性抠到位。…

作者头像 李华
网站建设 2026/9/22 19:06:01

CDQ分治避坑指南:新手环境配置不卡壳实战

CDQ分治避坑指南:新手环境配置不卡壳实战 刚拿到offer的应届生,最怕的不是算法难,而是配置环境时那种“卡半天没反应”的绝望。很多教程只讲理论,不说Windows下C++编译器的坑,导致你连个Hello…

作者头像 李华
网站建设 2026/9/22 19:05:57

风电发电机控制代码太卡?3步优化从入门到精通

风电发电机控制代码太卡?3步优化从入门到精通 看了一堆教程还是不会写项目?别慌,这是很多应届生入职后的第一道坎。理论背得滚瓜烂熟,真到了风电场现场,面对发电机转速波动导致的控制延迟,脑子直接死机。…

作者头像 李华
网站建设 2026/9/22 19:05:48

3个核心考点拆解DYNAMIC INTERNET TECHNOLOGY实战项目面试通关

3个核心考点拆解DYNAMIC INTERNET TECHNOLOGY实战项目面试通关 官方文档翻了几百页还是云里雾里?别急,这正是大多数开发者的困境。 我花了十年时间拆解这类技术面试,发现了一个残酷真相:面试官不想听你背诵定义,他们想看你有没有在 实战项目 里真正踩过坑。 今天这篇,我们把…

作者头像 李华
网站建设 2026/9/22 19:05:46

2026最新 hypocrite 机制揭秘:解决 API 断裂的底层逻辑

2026最新 hypocrite 机制揭秘:解决 API 断裂的底层逻辑 版本升级后 API 全变了,是不是让你抓狂?代码报错一片红,文档却只字未提,这种痛苦在 2026 最新的技术迭代中尤为明显。别急着骂娘,这背后往往不是框架作者的恶意,而是底层机制的必然。今天我们就深入剖析 hypocrite…

作者头像 李华
网站建设 2026/9/22 19:05:41

3步搞定合法的ip地址,从入门到精通面试通关

3步搞定合法的ip地址,从入门到精通面试通关 面试被问“什么是合法的ip地址”时,你只答出了“点分十进制”,结果面试官追问边界条件直接卡壳?别慌,这题看似简单,实则是考察你对网络底层协议理解深度的试金石。很多候选人把重点放在记忆上,却忽略了 RFC…

作者头像 李华