如何限制特定IP地址段访问MySQL数据库服务器?

大静吖_1870

大静吖_1870

2026-07-13

134人浏览

原创

iptables规则必须用-i插入链首才能生效,因匹配自上而下;mysql网段控制需结合iptables(网络层阻断)与'192.168.5.%'用户host(字符串匹配),并协同配置bind-address和skip_name_resolve。

如何限制特定ip地址段访问mysql数据库服务器?

iptables -I 必须插在链首,否则规则无效

MySQL 连接请求在 TCP 握手阶段就被拦截,靠的是 iptables 在网络层丢包。如果规则用 -A INPUT 追加到末尾,前面已有 ACCEPT 规则(比如默认放行所有 ESTABLISHED 连接),那你的 DROP 就永远不生效。

  • 正确写法:iptables -I INPUT -s 192.168.5.0/24 -p tcp --dport 3306 -j DROP —— -I 确保插入最前
  • 必须指定 --dport 3306,否则会误杀 SSH、HTTP 等其他服务
  • 封禁后立刻验证:telnet 192.168.5.10 3306 应该超时或被拒绝;如果返回 Connection refused,说明 MySQL 已响应,iptables 没起作用
  • 持久化保存:Debian/Ubuntu 执行 iptables-save > /etc/iptables/rules.v4;CentOS 6 用 service iptables save

mysql.user 表的 Host 字段不支持 CIDR,只认 % 和 _

你不能写 UPDATE mysql.user SET Host = '192.168.5.0/24',MySQL 解析 Host 时根本不识别斜杠和数字。它只做字符串前缀匹配,不是子网计算。

MySQL
MySQL

编写正确的MySQL查询,避免字符集、索引和锁方面的常见陷阱。

下载
  • 想覆盖 C 类网段,只能用 '192.168.5.%' —— 注意是点加 %,不是 /24
  • 这个写法有副作用:它也会匹配 192.168.5.abc.example.com 或非法 IP 192.168.5.999(MySQL 静默截断为 192.168.5.99)
  • 别试图对已有 'user'@'%' 账号执行 REVOKE 来“补救”——权限系统里根本不存在 'user'@'192.168.5.%' 这条记录,REVOKE 无效
  • 真正有效的是先 DROP USER 'user'@'%',再 CREATE USER 'user'@'192.168.5.%' 并重新 GRANT

bind-address 和 skip_name_resolve 必须协同配置

只改 my.cnf 里的 bind-address 不等于安全。MySQL 监听地址和防火墙规则、用户 Host 匹配是三者联动关系。

  • bind-address = 127.0.0.1 最彻底:外部 IP 根本连不上,但代价是放弃所有远程访问
  • bind-address = 0.0.0.0 或未设置 → MySQL 监听所有接口,此时防火墙必须严格限制入向流量
  • skip_name_resolve = ON 强制 MySQL 只用客户端原始 IP 匹配 Host 字段,禁用 DNS 反查——否则可能因反向解析失败或延迟导致连接异常或绕过限制
  • 验证监听地址:ss -tlnp | grep :3306,输出含 *:3306 或 0.0.0.0:3306 才需防火墙干预;若为 127.0.0.1:3306,防火墙规则基本无意义

localhost 和 127.0.0.1 是两个完全不同的账号

很多本地脚本连不上,就卡在这里。MySQL 把 'user'@'localhost' 和 'user'@'127.0.0.1' 当作两个独立账号,行为完全不同。

  • 'localhost' 强制走 Unix socket,跳过 TCP/IP 栈;'127.0.0.1' 明确走 TCP,受 Host 字段和防火墙双重约束
  • 应用代码里写 host=127.0.0.1(如 Docker 容器内连接),'user'@'localhost' 的权限完全不生效
  • 要两者都支持,得分别建账号:CREATE USER 'dev'@'localhost' 和 CREATE USER 'dev'@'127.0.0.1',并各自 GRANT
  • 检查当前账号:SELECT User, Host FROM mysql.user WHERE User = 'dev';,确认是否存在对应 Host 记录
实际生产中,单靠 MySQL 层无法做到精确网段控制,'192.168.5.%' 是字符串模糊匹配,iptables 才是真正在网络层阻断。最容易被忽略的是 skip_name_resolve 开关和 bind-address 实际监听状态——这两项不配好,前面所有操作都可能白忙。

相关专题

更多
服务器是什么
服务器是什么

服务器是一种计算机硬件设备或软件程序,它具有强大的计算和存储能力,用请求、存储数据和提供服务。它在互联网中着关重要的作用,为用户提供各种服务和资源。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.15

437

5

连接apple id服务器时出错
连接apple id服务器时出错

连接apple id服务器时出错的原因包括网络连接问题、服务器问题、Apple ID账户问题、设备问题、防火墙或安全软件问题、时间和日期设置问题、Apple服务器维护等。本专题为大家提供apple id相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.08

900

5

搭建互联网服务器
搭建互联网服务器

搭建互联网服务器需要:1、选择合适的硬件和操作系统,第一步是选择合适的硬件和操作系统;2、安装和配置操作系统,是搭建互联网服务器的关键步骤;3、安装和配置服务器软件,是搭建互联网服务器的下一步,常见的服务器软件包括Apache、Nginx、Tomcat等;4、配置防火墙和安全性,是搭建互联网服务器的重要步骤;5、域名解析和配置,是搭建互联网服务器的最后一步。

2023.09.19

2692

5

如何查看服务器状态
如何查看服务器状态

查看服务器状态的方法有使用命令行工具、图形界面工具、监控工具、日志文件和远程管理工具等。本专题为大家提供服务器状态相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.09

916

5

服务器域名转接慢怎么解决
服务器域名转接慢怎么解决

服务器域名转接慢的解决办法有DNS优化、服务器优化、CDN加速、前端优化和网络优化等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.17

809

5

服务器评测软件
服务器评测软件

服务器评测软件有PassMark Software、CPU-Z、GPU-Z、CrystalDiskMark、IOmeter、JMeter、LoadRunner、Apache Bench等等。详细介绍:1、PassMark Software是一款综合性的服务器性能测试软件,可以评估服务器在各种负载条件下的性能;2、CPU-Z是一款可以提供服务器CPU详细信息的软件等等。

2023.10.17

414

3

如何开启TFTP服务器
如何开启TFTP服务器

开启TFTP服务器的步骤包括选择TFTP服务器软件、下载和安装软件、配置TFTP服务器以及启动和测试服务器等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.18

2456

4

服务器负载不兼容怎么解决
服务器负载不兼容怎么解决

解决方法:1、增加服务器资源;2、负载均衡;3、优化应用程序;4、增加缓存机制;5、分布式架构;6、限流和熔断;7、自动化扩容。想知道更详细服务器负载不兼容的解决方法,可以访问本专题下面的文章。

2023.10.20

4532

4

宽带如何接入服务器
宽带如何接入服务器

宽带接入服务器的方法有ADSL宽带接入服务器、光纤接入服务器、无线接入服务器和以太网接入服务器等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.20

727

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL vs MySQL
PostgreSQL vs MySQL

共1课时 | 180人学习

使用phpenv集成环境安装极致CMS
使用phpenv集成环境安装极致CMS

共2课时 | 287人学习