Назад | Перейти на главную страницу

Не удается подключиться к серверу MySQL на 198.211.37.xx

За последние пару дней я много чего пробовал решить Can't connect to MySQL server. Я хотел бы описать все, что делал до сих пор.

  1. Создайте пользователя mysql и ПРЕДОСТАВЛЯЙТЕ ВСЕ привилегии.
  2. Привязка 0.0.0.0 в /etc/my.cnf.
  3. Измените таблицы 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
    
  4. Мой 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