CentOS - IPTables - Permitir nós no acesso total da sub-rede

2

Estou usando o linode.com e eles fornecem a capacidade de atribuir um IP privado a cada vps. O que estou tentando fazer é configurar o firewall de cada nó para permitir o acesso de outros nós na rede, mas parece que não tenho muito sucesso.

Por exemplo, estou tentando permitir acesso ao server1: 1337 do server2, ambos são configurados da seguinte forma:

server1:
   ifcfg-eth0:
     DEVICE="eth0"
     IPADDR="1.1.1.1"
     NETMASK="255.255.255.0"

   ifcfg-eth0:0:
     DEVICE="eth0:0"
     IPADDR="192.168.132.96"
     NETMASK="255.255.128.0"

server2:
   ifcfg-eth0:
     DEVICE="eth0"
     IPADDR="1.1.1.2"
     NETMASK="255.255.255.0"

   ifcfg-eth0:0:
     DEVICE="eth0:0"
     IPADDR="192.168.132.97"
     NETMASK="255.255.128.0"

E o conjunto de regras do IPTables no server1:

#-----
# Flush all current rules from iptables#
#-----
iptables -F
iptables -F -t nat
#-----

#-----
# Set access for localhost
#-----
iptables -A INPUT -i lo -j ACCEPT

# !! Tried to allow all nodes on the subnet access to everything, but still didn't work !!
iptables -A INPUT -s 192.168.132.0/17 -j ACCEPT
#-----

#-----
# Accept packets belonging to established and related connections
#-----
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#-----

# !! Tried to allow access to the port directly !!
iptables -A INPUT -i eth0:0 -p tcp -s 192.168.132.0/17 --dport 1337 -j ACCEPT 

#-----
# Lock everything down
#-----
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
#-----

Eu tropecei em alguns fóruns antigos afirmando que o iptables não pode usar a chamada -i eth0:0 , já que as configurações virtuais compartilham configurações de pai, mas não consegui confirmar isso completamente.

- Editar -

Eu também adicionei a sub-rede privada (192.168.132.0/17) ao server2, mas ainda não consigo conectá-lo.

    
por Mike Purcell 07.08.2013 / 00:57

1 resposta

4

Graças a sugestões de comentários e algumas informações do suporte técnico do linode, resolvi o problema de conexão.

Para resolver o problema, eu precisava garantir que tanto server1 quanto server2 tivessem as entradas de sub-rede privadas adequadas para o iptables:

iptables -A INPUT -s 192.168.132.0/17 -j ACCEPT

Depois de fazer esta entrada em ambos os servidores, eu poderia telnet para o server2: 1337 (do server1) e monitorar os bytes / pacotes via iptables e ver que, de fato, os pacotes estão sendo aceitos:

$ -> telnet 192.168.132.97 1337
Trying 192.168.132.97...
Connected to 192.168.132.97.
Escape character is '^]'.

$ -> iptables -L -vn
Chain INPUT (policy DROP 337 packets, 18695 bytes)
pkts bytes target     prot opt in     out     source               destination
56 30019 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0
53 40539 ACCEPT     all  --  *      *       192.168.128.0/17     0.0.0.0/0

O problema agora é que eu estou usando o nginx como um balanceador de carga, e ele estava usando a entrada server2 dns, que eu suponho que seja o ip público, que não é parte do conjunto de regras iptables, nem deveria ser, senão tem que entrar em cada ip na rede privada para permitir o acesso à porta 1337. No entanto, este problema é para outra questão, como o OP foi resolvido.

- Atualizar -

Atualizando esta resposta caso alguém mais se depare com ela no futuro. Eu optei por esta solução; DNS Stealth . Adicionando o recurso DNS a um dos meus VPS, posso adicionar todos os ips internos e os ips externos, para que todas as minhas configurações internas de iptable funcionem como esperado, enquanto ainda permitindo o acesso remoto a qualquer um dos vps via ip público.

    
por 07.08.2013 / 20:28