Não é possível conectar à porta 3306

1

Estou rodando o CentOS no meu VPS e tentando obter acesso remoto ao meu banco de dados MySQL. Então eu adicionei uma linha ao meu iptables usando este comando:

/sbin/iptables -A INPUT -i eth0 -p tcp --destination-port 3306 -j ACCEPT

Mas não consigo acessar meu banco de dados mysql. Quando eu faço uma varredura de porta com nmap Este é o resultado:

>nmap -p 3306 x.x.x.x
>3306/tcp filtered mysql

Portanto, stat não é OPEN . Estas são todas as regras de entrada no VPS. Existe uma linha (já existente) que contém REJECT . Isso está bloqueando o tráfego para a porta 3306?

Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
ACCEPT     icmp --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ftp
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:smtp
ACCEPT     udp  --  anywhere             anywhere            state NEW udp dpt:domain
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:domain
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:http
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:pop3
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:imap
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:https
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:submission
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:imaps
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:pop3s
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:EtherNet/IP-1
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpts:35000:35999
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:mysql
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:mysql

Obrigado antecipadamente!

arquivo my.cnf:

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
bind-address=x.x.x.x

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
    
por Timo002 20.02.2014 / 12:17

3 respostas

2

EDIT: Eu olhei para a sua saída do iptables mais profundamente e notei que você tem alguns problemas lá.

REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:mysql
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:mysql

Você está rejeitando todo o tráfego antes que sua regra permita explicitamente que o tráfego para o MySQL tenha uma chance de ser correspondido. Você precisa reordenar essas regras.

Resposta antiga:

É provável que o seu servidor MySQL não esteja ativamente escutando conexões remotas.

O comando 'ss -ln | grep 3306 'provavelmente não retornará nenhum resultado.

Verifique no arquivo de configuração do MySQL as palavras-chave skip-networking e bind-address. Se o skip-networking estiver presente na configuração, comente ou remova-o. Assegure-se de que o endereço de ligação esteja configurado como 0.0.0.0 ('curinga') ou um endereço IP do sistema. Reinicie o MySQL para aplicar as alterações de configuração.

Você desejará garantir que não tenha contas acessíveis ao mundo com senhas vazias ou triviais. É altamente recomendável restringir o acesso remoto à porta do MySQL, além das ACLs do usuário e do banco de dados do MySQL.

    
por 20.02.2014 / 12:19
0

Este deve ser um comentário e não um anwer, eu não tenho representação suficiente.

Desde o

3306/tcp filtered mysql

Você provavelmente tem algo errado com o seu firewall. Se o mysql não está aceitando conexões com o 3306 devido a não ser ligado à rede, ele deve ser fechado

tcpdump é seu amigo para depurar o problema, tente verificar se os pacotes estão realmente chegando

Apenas para indicar que o estado filtrado é frequentemente associado a problemas de firewall e fechado com o serviço real não vinculado

    
por 20.02.2014 / 12:28
0

As regras em um firewall do netfilter são verificadas sequencialmente até a primeira partida.

A opção -A para o iptables adiciona novas regras no fim da sua configuração existente.

Sua configuração existente abre várias portas e termina com uma regra que corresponde e REJEITA tudo o que não foi aberto anteriormente. Então você adicionou a porta MySQL depois disso.

Essa regra nunca será alcançada e a porta do MySQL permanece fechada.

Você deveria ter usado a opção -I para o iptables para inserir a nova regra no início da configuração do seu firewall.

    
por 20.02.2014 / 12:30