10 votos

iptables no permitir las conexiones de mysql alias ips?

Tengo una bastante sencillo cortafuegos iptables en un servidor que proporciona servicios de MySQL, pero éste parece ser que me da resultados muy inconsistentes.

La política por defecto en el script es el siguiente:

iptables -P INPUT DROP

A continuación, puedo hacer que MySQL público con la siguiente regla:

iptables -A INPUT -p tcp --dport 3306 -j ACCEPT

Con esta regla en su lugar, yo me puedo conectar a MySQL desde cualquier dirección IP de origen a cualquier destino IP en el servidor sin problemas. Sin embargo, cuando trato de restringir el acceso a sólo tres IPs mediante la sustitución de la línea anterior con la siguiente, tengo problemas (xxx=enmascarado octect):

iptables -A INPUT -p tcp --dport 3306 -m state --state NEW -s 208.XXX.XXX.184 -j ACCEPT 
iptables -A INPUT -p tcp --dport 3306 -m state --state NEW -s 208.XXX.XXX.196 -j ACCEPT 
iptables -A INPUT -p tcp --dport 3306 -m state --state NEW -s 208.XXX.XXX.251 -j ACCEPT 

Una vez que las reglas anteriores están en su lugar, ocurre lo siguiente:

  • Me puede conectar con el servidor MySQL desde la .184, .196 y .251 hosts bien mientras estoy conectado al servidor de MySQL usando una dirección IP predeterminada o un alias IP en la misma subred que la dirección IP predeterminada.

  • Yo soy incapaz de conectarse a MySQL usando alias de IP que se asignan al servidor desde una subred distinta de la predeterminada del servidor de IP cuando vengo de la .184 o .196 hosts, pero .251 funciona bien. A partir de la .184 o .196 hosts, telnet intento sólo se bloquea...

    # telnet 209.xxx.xxx.22 3306
    Trying 209.xxx.xxx.22...
    
  • Si puedo quitar el .251 línea (haciendo .196 la última regla de agregado), el .196 host todavía no puede conectarse a MySQL usando alias de IP (así que no es el orden de las reglas que está causando el comportamiento incoherente). Sé que, de esta prueba fue el tonto que no importa lo que el fin de estas tres reglas se añaden, pero pensé que alguien podría preguntar.

  • Si puedo volver a la "opinión pública" de la regla, todos los hosts puede conectar con el servidor MySQL utilizando el valor predeterminado o un alias IPs (en cualquiera de subred):

    iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
    

El servidor se está ejecutando en un CentOS 5.4 OpenVZ/Proxmox contenedor (2.6.32-4-pve).

Y, en caso de que prefiera ver el problema de las reglas en el contexto de la secuencia de comandos de iptables, aquí está (xxx=enmascarado octect):

# Flush old rules, old custom tables
/sbin/iptables --flush
/sbin/iptables --delete-chain

# Set default policies for all three default chains
/sbin/iptables -P INPUT DROP
/sbin/iptables -P FORWARD DROP
/sbin/iptables -P OUTPUT ACCEPT

# Enable free use of loopback interfaces
/sbin/iptables -A INPUT -i lo -j ACCEPT
/sbin/iptables -A OUTPUT -o lo -j ACCEPT

# All TCP sessions should begin with SYN
/sbin/iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

# Accept inbound TCP packets (Do this *before* adding the 'blocked' chain)
/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Allow the server's own IP to connect to itself
/sbin/iptables -A INPUT -i eth0 -s 208.xxx.xxx.178 -j ACCEPT

# Add the 'blocked' chain *after* we've accepted established/related connections
#   so we remain efficient and only evaluate new/inbound connections
/sbin/iptables -N BLOCKED
/sbin/iptables -A INPUT -j BLOCKED

# Accept inbound ICMP messages
/sbin/iptables -A INPUT -p ICMP --icmp-type 8 -j ACCEPT
/sbin/iptables -A INPUT -p ICMP --icmp-type 11 -j ACCEPT

# ssh (private)
/sbin/iptables -A INPUT -p tcp --dport 22 -m state --state NEW -s xxx.xxx.xxx.xxx -j ACCEPT          

# ftp (private)
/sbin/iptables -A INPUT -p tcp --dport 21 -m state --state NEW -s xxx.xxx.xxx.xxx -j ACCEPT          

# www (public)
/sbin/iptables -A INPUT -p tcp --dport 80 -j ACCEPT                                
/sbin/iptables -A INPUT -p tcp --dport 443 -j ACCEPT                               

# smtp (public)
/sbin/iptables -A INPUT -p tcp --dport 25 -j ACCEPT                                
/sbin/iptables -A INPUT -p tcp --dport 2525 -j ACCEPT                              

# pop (public)
/sbin/iptables -A INPUT -p tcp --dport 110 -j ACCEPT                               

# mysql (private)
/sbin/iptables -A INPUT -p tcp --dport 3306 -m state --state NEW -s 208.xxx.xxx.184 -j ACCEPT 
/sbin/iptables -A INPUT -p tcp --dport 3306 -m state --state NEW -s 208.xxx.xxx.196 -j ACCEPT 
/sbin/iptables -A INPUT -p tcp --dport 3306 -m state --state NEW -s 208.xxx.xxx.251 -j ACCEPT 

Alguna idea? Gracias de antemano. :-)

8voto

Zoredache Puntos 84524

Hacer la .184 o .196 hosts cliente acoge también tienen direcciones IP adicionales en su la otra subred?

Si vas a hacer una tcpdump -qn port 3306 y intento y conectar de uno de esos sistemas ¿qué ves? ¿Puedes ver la dirección de origen se puede esperar? Esta es, probablemente, un simple problema de enrutamiento.

Cuando un sistema es hacer la ruta de decisión, consulta la tabla de rutas. Las tablas de ruta son una lista que siempre se consulta en un orden específico. El enlace de las rutas para las redes locales son casi siempre la mayoría de las rutas preferidas, y se utiliza antes de una ruta que utiliza una puerta de enlace(router). La puerta de enlace predeterminada es siempre la ruta que se utiliza cuando no hay otra ruta que se aplica. Si una ruta es una ruta determinada tiene un src definido, luego de que la dirección será preferido y lo más probable es que usa cuando la ruta está siendo utilizado.

10.2.13.0/24 dev eth1  proto kernel  scope link  src 10.2.13.1 
10.2.4.0/23 dev eth0  proto kernel  scope link  src 10.2.4.245 
default via 10.2.4.1 dev eth0 

Así que, dado que este ejemplo tabla de rutas de un sistema multitarjeta, nada destinados 10.2.13.0/24 provendrá 10.2.13.1, y nada destinados 10.2.4.0/23 provendrá 10.2.4.245.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: