Interface de Rede Virtual e NAT desabilitam o acesso localhost para MySQL e Apache

1

Estou executando um Ubuntu Server 12.04 e recentemente o configurei para fazer o NAT para meu laptop. Como o servidor tem apenas uma NIC, segui as instruções on-line para criar um dispositivo de rede virtual (eth0: 0) que tenha um endereço IP da LAN, depois configurei iptables e UFW para permitir o compartilhamento de internet. No entanto, apenas alguns dias atrás, descobri que uma das páginas do PHP hospedadas no servidor falhou sem motivo aparente. Um pouco de escavação revelou que o servidor MySQL começou a recusar conexões do localhost. O mesmo aconteceu com uma página (PhpMyAdmin) que foi configurada para ser acessível somente a partir do host local (no Apache2).

O erro, conforme mostrado por $mysql --protocol=tcp -u root -p , parece

ERROR 1130 (HY000): Host '<host name of eth0>' is not allowed to connect to this MySQL server

No entanto, o engraçado é que eu configurei o servidor mysql para permitir o acesso root do host local (apenas). Além disso, o servidor mysql escuta apenas em 127.0.0.1:3306 , como mostrado por:

sudo netstat -npa | head
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      1029/mysqld

que significa que a conexão pode ter vindo somente de 127.0.0.1 (Note que o MySQL está funcionando porque eu ainda posso me conectar a ele via sockets de domínio unix)

Na verdade, parece que todas as conexões tcp originadas de 127.0.0.1 a 127.0.0.1 aparecem para qualquer daemon local proveniente do endereço IP eth0. De fato, o apache2 me permitiu acessar o PhpMyAdmin depois que eu adicionei allow <eth0 IP address> .

A seguir estão minhas configurações de rede (editadas):

/ etc / hosts:

127.0.0.1       localhost
211.x.x.x   <host name of eth0>      <server name>
#IPv6 Defaults follows ....

/ etc / network / interfaces:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address 211.x.x.x
netmask 255.255.255.0
gateway 211.x.x.x
dns-nameservers 8.8.8.8
# dns-* options are implemented by the resolvconf package, if installed
dns-search xxxxxxx.com
hwaddress ether xx:xx:xx:xx:xx:xx

auto eth0:0
iface eth0:0 inet static
address 192.168.57.254
netmask 255.255.254.0
broadcast 192.168.57.255
network 192.168.57.0

/etc/ufw/sysctl.conf:

#Uncommented the following lines
net/ipv4/ip_forward=1
net/ipv6/conf/default/forwarding=1

/ etc / default / ufw:

DEFAULT_FORWARD_POLICY="ACCEPT" #Changed DROP to ACCEPT

/etc/init/internet-sharing.conf (script upstart que escrevi), script de pré-inicialização da seção:

iptables -A FORWARD -o eth0 -i eth0:0 -s 192.168.57.22 -m conntrack --ctstate NEW -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A POSTROUTING -t nat -j MASQUERADE

Observe novamente que meu problema aqui é que os programas não podem acessar os serviços tcp localhost , do próprio , e esse acesso é bloqueado porque os serviços têm controle de acesso permitindo apenas 127.0.0.1. Eu não tenho nenhum problema conectando (como em conexões TCP) a serviços via tcp, mesmo se os serviços escutarem somente em 127.0.0.1. Eu faço NÃO quero me conectar aos serviços de outro computador.

    
por Interarticle 28.06.2012 / 08:29

1 resposta

0

Parece que o problema é a terceira regra de NAT do iptables. Como eu não especifiquei e filtrando a regra para a regra final POSTROUTING nat, ela de alguma forma correspondia aos pacotes de localhost e traduzia seus endereços IP de origem para o endereço eth0 . Um script de inicialização fixo é mostrado abaixo:

iptables -A FORWARD -o eth0 -i eth0:0 -s 192.168.57.22 -m conntrack --ctstate NEW -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A POSTROUTING -s 192.168.57.22 -t nat -j MASQUERADE

Observe a opção -s 192.168.57.22 adicional.

    
por 30.06.2013 / 06:04