必须通过Windows防火墙设置精准入站规则,只放行可信内网IP或运维地址,并将允许规则置于阻止规则之上,同时启用默认入站阻止策略,才能确保MySQL(3306)、SQL Server(1433)、Oracle(1521)等数据库不被公网随意连接。

要让Windows服务器上的数据库(如MySQL、SQL Server、Oracle)不被公网IP随意连接,必须通过Windows防火墙设置精准的入站规则,只放行可信内网IP或特定运维地址,同时阻断所有其他来源——这一步漏掉,数据库就等于裸奔在公网上。
确认数据库监听端口和绑定地址
先查清数据库实际监听的端口和网络接口。例如MySQL默认是3306,SQL Server是1433,Oracle是1521。打开命令提示符,执行:netstat -ano | findstr :3306,确认进程PID和本地地址。若显示127.0.0.1:3306或::1:3306,说明数据库只监听本机,外部根本连不上——此时无需防火墙封禁,但你也无法远程管理;【必须改为0.0.0.0或具体内网IP(如192.168.10.5)才能被防火墙规则生效拦截】。修改后需重启数据库服务。
用高级安全防火墙创建阻止规则
方法一:图形界面快速封禁单个IP
1. 按Win+R输入wf.msc,打开“高级安全Windows防火墙”;
2. 左侧点击“入站规则”,右侧点“新建规则…”→选择“自定义”→下一步;
3. 程序页选“所有程序”→协议和端口页选“TCP”,本地端口填数据库端口号(如3306)→下一步;
4. 作用域页,“远程IP地址”选“下列IP地址”,点击“添加”,输入要封禁的IP(如203.123.45.67)→下一步;
5. 操作页选“阻止连接”→下一步;
6. 配置文件保持默认(域、专用、公用全勾)→命名如“Block_MySQL_From_203.123.45.67”→完成。
方法二:PowerShell批量封禁多个IP(管理员权限运行)
New-NetFirewallRule -DisplayName "Block_DB_Scanners" -Direction Inbound -Protocol TCP -LocalPort 3306 -RemoteAddress 192.168.200.0/24,222.186.0.0/16 -Action Block。这条命令直接封禁整个C段和B段IP,比逐条添加快得多;【注意:RemoteAddress中不能混用单IP和CIDR,否则规则创建失败】。
Windows 命令行编码与兼容规范。涵盖 GBK/UTF-8 编码、PowerShell/pwsh 互操作、Python/Node.js、Git 配置及代码生成规则。适用于 Windows 10/11 + MSYS2/Git Bash 环境下的所有命令行操作。
设置白名单优先级,避免误封
第一步:先建一条允许规则,放行你的运维IP段
在“高级安全Windows防火墙”中,新建入站规则→自定义→协议端口填3306→作用域中“远程IP地址”选“下列IP地址”,添加如192.168.5.0/24,10.10.10.100(你自己的办公IP)→操作选“允许连接”→命名如“Allow_DB_Admin_Network”。
第二步:确保该允许规则排在所有阻止规则之前
回到入站规则列表,右键刚建的“Allow_DB_Admin_Network”→属性→“常规”页勾选“已启用”,再切到“高级”页,在“配置文件”下方点击“确定”;然后在规则列表中,**拖动该规则到最顶部**——因为Windows防火墙按列表顺序匹配,一旦数据包命中某条规则就停止检查,所以允许必须在阻止之上,否则运维IP也会被后续阻止规则截断。
第三步:启用默认入站策略为“阻止”
左侧点“入站规则”,右侧点“属性”,在“域配置文件”“专用配置文件”“公用配置文件”三处,把“入站连接”全部设为“阻止(默认)”。这相当于兜底策略:所有未被明确允许的连接一律拒绝,不用每条都写阻止规则。

















