You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何阻止Docker容器对外开放?MySQL端口遭暴力攻击求助

解决Docker MySQL端口遭暴力攻击的问题

你的iptables规则失效的核心原因

  1. 未替换占位符网卡名:你用的ext_if是示例占位符,必须替换成服务器实际的外网网卡名称(比如eth0、ens33)。可以通过ip addr命令查看网卡列表,找到对应外网流量的网卡。
  2. 未指定目标端口:之前的规则会拦截所有非指定来源的流量,而非仅MySQL端口,精准度不足还容易引发其他问题。

正确的iptables配置示例

假设你的外网网卡是eth0,仅允许内网192.168.1.0/24段访问MySQL的3306端口,执行以下命令:

iptables -I DOCKER-USER -i eth0 ! -s 192.168.1.0/24 -p tcp --dport 3306 -j DROP

执行后可以用iptables -L DOCKER-USER -n查看规则是否生效。如果需要重启后保留规则,执行iptables-save > /etc/iptables/rules.v4(Debian/Ubuntu)或service iptables save(CentOS)。

更彻底的防范方案

除了iptables,还可以从源头减少暴露风险:

  • 仅绑定内网IP暴露端口:启动MySQL容器时,不要绑定0.0.0.0,只绑定服务器内网IP,比如:
    docker run -d -p 192.168.1.100:3306:3306 --name mysql mysql:latest
    
    这样外网无法直接访问该端口。
  • 使用Docker内部网络:创建专用Docker网络,让关联服务通过容器名/内部IP访问MySQL,完全不对外暴露端口:
    docker network create mysql-net
    docker run -d --name mysql --network mysql-net mysql:latest
    # 其他服务连接时同样加入该网络,用mysql:3306访问
    
  • MySQL自身限制:在my.cnf中设置bind-address = 192.168.1.0/24,仅允许指定IP段连接;同时禁用root用户远程登录,创建专用业务账号并限制IP。
  • 启用fail2ban:监控MySQL日志(比如/var/log/mysql/error.log),自动封禁多次失败登录的IP,降低暴力攻击成功率。
  • 修改默认端口:将MySQL端口从3306改为其他非默认端口,减少被批量扫描的概率。

内容的提问来源于stack exchange,提问作者Avora

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 13:21:12