За последние пару дней я много чего пробовал решить Can't connect to MySQL server
. Я хотел бы описать все, что делал до сих пор.
/etc/my.cnf
.Измените таблицы IP, как показано ниже:
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- 127.0.0.0/8 anywhere
Admin tcp -- anywhere anywhere tcp dpt:caiccipc
REJECT tcp -- anywhere anywhere tcp dpt:mysql reject-with icmp-port-unreachable
REJECT tcp -- anywhere anywhere tcp dpt:caiccipc reject-with icmp-port-unreachable
REJECT tcp -- anywhere anywhere tcp dpt:ssslic-mgr reject-with icmp-port-unreachable
REJECT tcp -- anywhere anywhere tcp dpt:h323hostcallsc reject-with icmp-port-unreachable
REJECT tcp -- anywhere anywhere tcp dpt:cadkey-tablet reject-with icmp-port-unreachable
REJECT tcp -- anywhere anywhere tcp dpt:ufastro-instr reject-with icmp-port-unreachable
REJECT tcp -- anywhere anywhere tcp dpt:5062 reject-with icmp-port-unreachable
REJECT tcp -- anywhere anywhere tcp dpt:ca-2 reject-with icmp-port-unreachable
REJECT tcp -- anywhere anywhere tcp dpt:5070 reject-with icmp-port-unreachable
REJECT tcp -- anywhere anywhere tcp dpt:6060 reject-with icmp-port-unreachable
REJECT tcp -- anywhere anywhere tcp dpt:8005 reject-with icmp-port-unreachable
REJECT tcp -- anywhere anywhere tcp dpt:8009 reject-with icmp-port-unreachable
REJECT udp -- anywhere anywhere udp dpt:itelserverport reject-with icmp-port-unreachable
ACCEPT tcp -- 103.19.0.0/24 anywhere tcp dpt:mysql state NEW,ESTABLISHED
DROP tcp -- 103.19.0.0/24 anywhere tcp dpt:mysql state NEW,ESTABLISHED
DROP tcp -- 103.19.0.0/24 anywhere tcp dpt:mysql
ACCEPT tcp -- 103.19.0.0/24 anywhere tcp dpt:mysql
ACCEPT tcp -- 103.19.0.0/24 anywhere tcp dpt:mysql state NEW,ESTABLISHED
ACCEPT tcp -- anywhere anywhere tcp dpt:mysql
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Мой nmap для 198.211.37.xx показывает ниже:
PORT STATE SERVICE
1/tcp filtered tcpmux
2/tcp filtered compressnet
3/tcp filtered compressnet
4/tcp filtered unknown
5/tcp filtered rje
6/tcp filtered unknown
7/tcp filtered echo
8/tcp filtered unknown
9/tcp filtered discard
10/tcp filtered unknown
11/tcp filtered systat
12/tcp filtered unknown
13/tcp filtered daytime
14/tcp filtered unknown
15/tcp filtered netstat
16/tcp filtered unknown
17/tcp filtered qotd
18/tcp filtered msp
19/tcp filtered chargen
21/tcp open ftp
22/tcp filtered ssh
25/tcp open smtp
26/tcp open unknown
53/tcp open domain
80/tcp open http
110/tcp open pop3
143/tcp open imap
443/tcp open https
465/tcp open smtps
587/tcp open submission
993/tcp open imaps
995/tcp open pop3s
3306/tcp open mysql
8080/tcp open http-proxy
После всего этого я все еще получаю Can't connect to MySQL server on '198.211.37.xx'
в моем приложении.
Мне очень нужна экспертная оценка по этому вопросу.
Я бы лично удалил всю вашу конфигурацию iptables и начал снова, используя эта документация для справки.
Для хорошей практики я бы использовал правило «запрета по умолчанию» и явно разрешил бы соединения для служб, которые вы хотите запускать (например, порты 22 и 3306 для SSH и MySQL соответственно). Согласно это руководство (имейте в виду, что команды, возможно, потребуется изменить для вашей системы):
Сначала удалите все существующие правила:
iptables -F
iptables -X
Затем добавьте политики по умолчанию для INPUT
, OUTPUT
и FORWARD
цепочки и разрешить петлевые соединения - обратите внимание, что по умолчанию это разрешит весь исходящий доступ:
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -A INPUT -i lo -j ACCEPT
Разрешить SSH (заменить <SERVER_IP>
с публичным IP-адресом вашего сервера):
iptables -A INPUT -p tcp -s 0.0.0.0/0 -d <SERVER_IP> --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
Разрешить MySQL (заменить <OTHER_SERVER_IP>
с IP-адресом, который вы хотите внести в белый список для доступа к MySQL - я настоятельно рекомендую вам сделать это, чтобы ваш порт MySQL не был виден всем). Вы можете повторить следующее для всех портов, которые вы хотите сделать общедоступными:
iptables -A INPUT -p tcp -s <OTHER_SERVER_IP> -d <SERVER_IP> --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT
Наконец, отбросьте весь остальной входящий трафик:
iptables -A INPUT -j DROP