MySQL 本身不直接提供“IP 黑名单”功能,但可以通过多种方式实现限制特定 IP 访问数据库的目的。以下是几种实用且常见的配置方法。
1. 使用 MySQL 的用户权限系统控制访问
MySQL 通过 GRANT 和 REVOKE 命令管理用户权限,可以针对特定主机(IP)创建或删除用户,从而间接实现黑名单效果。
例如,若要禁止某个 IP(如 192.168.1.100)访问,确保不要为该 IP 创建用户账户:
-- 查看是否存在来自该 IP 的用户 SELECT User, Host FROM mysql.user WHERE Host = '192.168.1.100'; <p>-- 如果存在,删除该用户 DROP USER 'username'@'192.168.1.100';</p>
也可以显式地只允许白名单 IP,避免遗漏黑名单。
2. 利用防火墙(iptables 或 firewalld)封禁 IP
更高效的方式是在操作系统层面使用防火墙阻止非法 IP 连接 MySQL 端口(默认 3306)。
使用 iptables 封禁指定 IP:
# 禁止来自 192.168.1.100 的访问
iptables -A INPUT -s 192.168.1.100 -p tcp --dport 3306 -j DROP
<h1>永久保存规则(CentOS/RHEL)</h1><p>service iptables save</p><div class="aritcle_card flexRow">
<div class="artcardd flexRow">
<a class="aritcle_card_img" href="/ai/1646" title="Hoppy Copy"><img
src="https://www.herecours.com/d/file/efpub/2026/28-28/20260228122810722247.jpg" alt="Hoppy Copy" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
<div class="aritcle_card_info flexColumn">
<a href="/ai/1646" title="Hoppy Copy">Hoppy Copy</a>
<p>AI邮件营销文案平台</p>
</div>
<a href="/ai/1646" title="Hoppy Copy" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a>
</div>
</div>使用 firewalld(CentOS 7+):
# 封禁 IP firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="3306" reject' <h1>重新加载配置</h1><p>firewall-cmd --reload</p>
3. 配置 TCP Wrappers(如果系统支持)
部分 Linux 发行版支持 TCP Wrappers,可通过 /etc/hosts.deny 和 /etc/hosts.allow 控制服务访问。
编辑 /etc/hosts.deny 添加以下内容:
mysqld: 192.168.1.100
确保 MySQL 启动时链接了 libwrap 库,否则此方法无效。
4. 使用安全组或云平台防火墙(云服务器适用)
如果你使用的是阿里云、腾讯云、AWS 等云服务,建议在安全组中直接屏蔽恶意 IP 的 3306 端口入站流量。这种方法最简单、最安全,无需登录服务器操作。
进入云控制台 → 找到对应实例的安全组 添加规则:拒绝来源为黑名单 IP,协议为 TCP,端口 3306基本上就这些方法。推荐组合使用“MySQL 用户权限 + 防火墙”双重防护,既灵活又安全。单纯依赖 MySQL 权限可能不够及时,而防火墙能第一时间阻断连接。
