我有一个 MySQL 服务器在端口 3306 上运行,私有 IP:10.64.30.117。我还有一个 Web 应用程序在另一个节点上运行,其私有 IP:10.17.23.1。
我希望 Web 应用程序能够访问 MySQL 服务器,但我不希望 MySQL 公开可用。(两个节点也都有公共 IP)。
我尝试使用 UFW 但它似乎阻止了一切,ufw status
命令显示如下:
To Action From
-- ------ ----
3306 DENY Anywhere
3306 ALLOW 10.0.0.0/8
3306 ALLOW 10.0.0.0/24
3306 (v6) DENY Anywhere (v6)
完整ifconfig
的样子如下:
$ ifconfig
ens2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.64.30.117 netmask 255.255.255.254 broadcast 10.64.30.117
inet6 2001:xxxx:xxxx:xxx::1 prefixlen 127 scopeid 0x0<global>
inet6 fe80::dc1c:3cff:fe32:203b prefixlen 64 scopeid 0x20<link>
ether de:1c:3c:32:20:3b txqueuelen 1000 (Ethernet)
RX packets 363358 bytes 1082623290 (1.0 GB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 310592 bytes 37970748 (37.9 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 2844 bytes 779466 (779.4 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 2844 bytes 779466 (779.4 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
注意:这些私有 IP 可以更改,因此我无法对其进行硬编码。
有没有其他方法可以在 UFW 或 iptables 中设置它?
你没有说你正在使用什么发行版,但我相信你所有的规则都存储在这个文件中:
您应该能够重新排列此文件的内容,以便具有 ALLOW 规则的私有 CIDR 排在最前面,而 DENY 规则将作为列表中的最后一项。如果您成功地重新安排了事物,该
sudo ufw status
命令将显示您的规则,如下所示:参考
防火墙的替代(或补充)策略是遵循没有不必要的服务/配置的黄金法则,因此首先不要让 Mysql 在公共地址中回答。
这里建议的策略是绑定/使 Mysql 守护进程/服务只监听私有 IP 地址。
编辑
my.cnf
和使用:正如您提到的 ip 地址更改,作为替代方案,您可以将此指令与 /etc/hosts 中定义的主机名一起使用,并在(重新)启动 Mysql 之前更改它。(或使用它存在的私有 DNS 名称)
然后重启 Mysql 守护进程,设备将不再监听其他 IP 地址上的请求。
PS 作为奖励,这样你也不会担心公共 IP 地址的变化。至于私有 IP 地址的更改,必须通过强制网络设置、虚拟 IP 地址或动态更改配置文件来解决。
PPS 这一原则适用于其他服务,如 Web 服务器后面的 Tomcat。只有当客户端位于同一台机器/VM 中时,您也可以将服务绑定到 localhost
对于处理 IP 地址更改,请参阅相关问题Method for acting on the IP address change from the ISP?