У меня есть два Centos VM. IP-адрес на VM_1 является 10.99.0.10 а VM_2 это 10.99.0.12. Apache и PHP находятся в VM_1, а MySQL — в VM_2. Оба имеют правила IPTables. VM_2 работает нормально с правилами. Сейчас я тестирую от VM_1.
Сначала я отключил виртуальные IP-таблицы VM_1 и подключился к MySQL VM_2 (подключился успешно).
[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
Эти правила имеют две проблемы:
MySQL
трафик от VM_1
только если соединение было впервые инициировано с VM_2
(10.99.0.12
). 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
Других решений пока нет …