
作为网站或服务器管理员,一些看似不起眼的设置,可能会带来严重的安全风险,而管理员本人往往并未察觉。
很多人会想:“网站不是正常运行吗?”、“有密码就安全了吧?”
事实上,这种想法往往会埋下隐患。
目录
这等同于把MySQL / MariaDB数据库直接暴露在互联网上,任何人都可以尝试访问。
而数据库中往往保存着最敏感的企业信息和客户数据。
即使设置了密码,也可能被暴力破解。
公开 3306 端口,实际上就是为攻击者提供了直接入口。
| 正常设置 | 危险设置 | ||
| Web服务器 | localhost 或 127.0.0.1 的3306端口 | Web服务器 | 0.0.0.0 或服务器公网IP的3306端口 |
| 外部连接 | 被完全阻断,无法访问 | 外部连接 | 任何人都可以访问 |
* 127.0.0.1 是保留给计算机本机使用的专用 IP 地址,固定用于指向“本机”。
换句话说,设置为 127.0.0.1 时,只有服务器自身才能访问该服务,外部设备无法连接。
危险设置不仅源于知识不足,也容易在特定工作情况下发生。
在特定工作情况下,很多人会抱着:“只是临时用一下”、“反正现在能正常运行”的侥幸心理,进行危险设置。
通常,出现危险设置可归为以下几类原因。
| 初始设置沿用示例 | 直接使用教程或示例网站的默认配置(如 bind-address = 0.0.0.0),未作调整就部署到正式环境。 |
| 对接外部服务后忘记关闭 | 为了临时让外部工具或备份服务访问数据库,开放了连接,但操作完成后忘记关闭。 |
| 工作交接疏漏 | 前任人员为“一时应急”修改设置,却未记录在交接文档中,后续被误当作常规配置沿用。 |
| 外包厂商配置错误 | 系统开发商误将测试环境的设置应用到正式环境。 |
将3306端口暴露在互联网上,不只是简单的设置失误问题,还将给企业业务带来重大的安全隐患。
具体危险包括:
-- 攻击者可以直接连接并操作你的数据库
DROP TABLE users;
DELETE FROM orders;
〇 客户信息(姓名・邮箱等)
〇 密码(即便经过哈希化处理仍可能被破解)
〇 订单记录及其他机密数据
一旦数据库被删除,网站将完全停止运行。(网站页面也无法显示)
攻击者可能通过数据库入侵整个系统,将服务器用作发动攻击的跳板。(如传播勒索病毒等)
可以通过在线工具或命令行,快速检测MySQL的3306端口是否对外公开。
访问在线端口检测网站,输入服务器IP地址,查询3306端口是否显示为”OPEN”。
〇 ping.eu
https://ping.eu/port-chk
〇 you get signal
https://www.yougetsignal.com/tools/open-ports
在服务器内部尝试连接 3306 端口,如果连接成功,说明端口可能对外暴露,需要立即处理。
telnet [服务器IP] 3306
本指南假设Web服务器和数据库部署在同一台服务器上,介绍3306端口的安全设置方法。
* 重要提示: 在正式环境操作前,请务必备份数据库,以防设置出错导致数据丢失。
执行以下命令检查MySQL配置文件中的bind-address设置。
如果显示0.0.0.0或服务器公网IP,则说明端口对外开放,需要立即修正。
# 检查 MySQL 设置文件 * 确认 bind-address 设置
sudo grep -r "bind-address" /etc/mysql/
# 查看 MySQL 当前监听的网络接口
sudo netstat -tlnp | grep mysql
[mysqld]
bind-address = 127.0.0.1 # 安全!
# bind-address = 0.0.0.0 # 危险!
通过修改 MySQL 配置文件,仅允许本机连接。
# 编辑设置文件(文件路径根据环境可能不同)
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
# 或
sudo nano /etc/mysql/my.cnf
在MySQL配置文件中找到并修改以下内容。
# 安全设置(确认或修改为如下)
bind-address = 127.0.0.1
# 危险设置(若存在需立即修改)
# bind-address = 0.0.0.0
# bind-address = 服务器公网IP
保存设置文件后,需要重启MySQL以应用更改。
# 可选:检查设置文件语法(推荐)
sudo mysqld --validate-config
# 重启 MySQL 服务
sudo systemctl restart mysql
# 或(根据系统不同)
sudo service mysql restart
# 检查服务状态是否正常
sudo systemctl status mysql
重启后,检查MySQL是否按新的配置运行。
# 查看 MySQL 是否仅监听本机地址
sudo netstat -tlnp | grep mysql
# 预期输出示例:
# tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN -
# 从进程信息中再次确认
sudo ps aux | grep mysql
如果结果显示 127.0.0.1:3306,说明配置已成功生效,数据库已处于不可从外部访问的安全状态。
若在修改MySQL设置后,网站无法连接数据库,可按以下步骤排查。
# 查看 MySQL 错误日志
sudo tail -f /var/log/mysql/error.log
若需要从远程环境连接数据库,必须同时满足两点。“限制允许访问的固定IP地址(可信来源)”和“通过SSH(SSH隧道)进行连接”,这两者缺一不可。
如果未指定可信任的固定IP就直接开放SSH端口,将会带来新的安全风险。
〇 适用于RHEL / AlmaLinux(使用firewalld)
# 仅允许来自“可信固定IP”的SSH连接
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="[你的固定IP]" port port="22" protocol="tcp" accept'
sudo firewall-cmd --permanent --remove-service=ssh
sudo firewall-cmd --reload
# 确认当前设置
sudo firewall-cmd --list-all
〇 适用于Ubuntu(使用 UFW)
# 仅允许来自“可信固定IP”的SSH连接
sudo ufw allow from [你的固定IP] to any port 22
sudo ufw deny 22
sudo ufw reload#
sudo nano /etc/ssh/sshd_config
在文件中进行以下修改或添加。
# 禁用密码认证,只允许密钥认证
PasswordAuthentication no
# 限制特定用户仅从指定固定IP登录
AllowUsers username@[你的固定IP]
# 禁止root用户登录
PermitRootLogin no
修改完成后,重启SSH服务以应用更改。
sudo systemctl restart sshd
在完成固定IP限制后,可以通过SSH隧道安全连接数据库。
通过SSH隧道,所有通信均被加密,MySQL的3306端口无需对外开放,从而保障数据库安全。
sh -L 3306:localhost:3306 [你的用户名]@[服务器IP或域名等]
データベースを直接外部のインターネット上に晒すことは、「鍵のかかっていない金庫を路上に置いている」ようなものです。将数据库直接暴露在互联网上,就像把“没锁的金库放在大街上”。
为了避免事后后悔,请尽快确认以下三点。
〇 检查3306端口是否对外开放
〇 若已对外开放,立即修正设置
〇 养成定期进行安全检查的习惯
▼ 公司微信公众号(公司官方)▼

▼ 直接联系负责人微信号 ▼


扫码关注微信公众号
微信公众号
负责人微信号