php - 启用 IPTables 时 LAN 上的 MySQL 不工作

标签 php mysql apache iptables centos6.5

<分区>

我有两个 Centos 虚拟机。 VM_1 上的 IP 地址是 10.99.0.10,VM_2 是 10.99.0.12。 Apache 和 PHP 在 VM_1 中,MySQL 在 VM_2 中。两者都有 IPTables 规则。 VM_2 可以正常使用规则。现在我正在从 VM_1 进行测试。

首先,我禁用了 VM_1 IPTables 并连接到 VM_2 MySQL(连接成功)。

[root@foster ~]# service IPTables  stop
IPTables : Applying firewall rules:                         [  OK  ]
[root@foster ~]# mysql -h 10.99.0.12 -u root -p
Enter password:

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 16
Server version: 5.6.21 MySQL Community Server (GPL)

接下来,我启用了 VM_1 IPTables 并连接到 VM_2 MySQL(它也不会在数小时内响应)。

[root@foster ~]# service IPTables  start
IPTables : Applying firewall rules:                         [  OK  ]
[root@foster ~]# mysql -h 10.99.0.12 -u root -p
Enter password:

我的 IPTables 规则有什么问题?我的规则在 Pastebin .

最佳答案

问题出在您启用 MySQL 流量的方法中:

# Allow MySQL private Networking
sudo iptables -A INPUT -i eth1 -p tcp -s 10.99.0.12 --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -o eth1 -p tcp --sport 3306 -m state --state ESTABLISHED -j ACCEPT

这些规则有两个问题:

  1. 仅当连接首先从 VM_2(10.99.0.12)发起时,它们才允许来自 VM_1 的传出 MySQL 流量>).
  2. 他们将端口 3306 指定为客户端的 (VM_1) 端口,而不是服务器的 (VM_2) 端口。

更合适的规则集如下:

# Allow MySQL private Networking
sudo iptables -A OUTPUT -o eth1 -p tcp --dport 3306 -m state --state NEW, ESTABLISHED -j ACCEPT
sudo iptables -A INPUT -i eth1 -p tcp -s 10.99.0.12 --sport 3306 -m state --state ESTABLISHED -j ACCEPT

关于php - 启用 IPTables 时 LAN 上的 MySQL 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26530900/

相关文章:

mysql - 为现有列设置非空属性

java - 延迟初始化异常 : load lazy attribute from a session different from the original one in Hibernate

linux - 让 WAMP 服务器检查是否区分大小写(或 IDE)

PHP:从数组中的字符串获取值

PHP ONE 脚本处理所有请求

mysql - 基准测试期间有趣的 MySQL 行为

apache - 如何将 HDFS namenode 移动到新主机

javascript - 将信息从 javascript 对话框发送到 php

javascript - php从链接中删除mysql行

regex - 带有嵌套 .htaccess 文件的 mod_rewrite