IPTables Várias fontes ou faixas de IP de destino?

2

primeira vez postar para ServerFault, então vou tentar e acertar:)

Eu tenho vários ambientes (por exemplo, prod, dev, test, etc) e estou tentando gravar o arquivo IPTables para meus servidores RHEL 6.6, o que permite que grupos específicos de máquinas conversem entre esses ambientes em portas definidas.

Inicialmente, ter as regras para cada destino diferente ou sub-rede de origem definida em sua própria linha funcionou - no entanto, o arquivo iptables resultante é bastante grande. Na tentativa de simplificar / limpar o conjunto de regras, tentei combinar regras para vários IPs de origem ou de destino utilizando as mesmas portas.

Encontrei um artigo relevante do ServerFault sobre o assunto IPTables IPs de várias fontes , mas o exemplo mais bem avaliado não parece estar funcionando para mim.

Por exemplo, tentando combinar as duas regras a seguir:

-A INPUT  -i $INTERFACE -m conntrack --ctstate NEW,ESTABLISHED,RELATED -s $CV1 -p tcp --dport 8400:8403 -j ACCEPT -m comment --comment "Source 1"
-A INPUT  -i $INTERFACE -m conntrack --ctstate NEW,ESTABLISHED,RELATED -s $CV2 -p tcp --dport 8400:8403 -j ACCEPT -m comment --comment "Source 2"

Para isso:

-A INPUT  -i $INTERFACE -m conntrack --ctstate NEW,ESTABLISHED,RELATED -s $CV1,$CV2 -p tcp --dport 8400:8403 -j ACCEPT -m comment --comment "Not Working!"

Também tenho regras que misturam IPs de várias origens e vários destinos (da mesma forma sem sucesso):

-A INPUT  -i $INTERFACE -s $FOO1,$FOO2 -d $FOO1,$FOO2 -p tcp --dport 8400:8403 -j ACCEPT
-A OUTPUT -o $INTERFACE -s $FOO1,$FOO2 -d $FOO1,$FOO2 -p tcp --dport 8400:8403 -j ACCEPT

Nota: O arquivo / etc / sysconfig / iptables é escrito pelo meu script de configuração personalizado (daí as variáveis $), com os IPs sendo definidos assim:

CV1=10.1.1.0/27
CV2=10.25.128.128/29
FOO1=10.1.30.140/30
FOO2=10.2.30.140/30

As falhas de tráfego são detectadas pelas regras de rejeição / log na parte inferior do arquivo IPTables:

-A INPUT   -i $INTERFACE -m limit --limit 5/m --limit-burst 7 -j LOG --log-prefix "Packet Rejected. "
-A FORWARD -i $INTERFACE -m limit --limit 5/m --limit-burst 7 -j LOG --log-prefix "Packet Forward Rejected. "
-A OUTPUT  -o $INTERFACE -m limit --limit 5/m --limit-burst 7 -j LOG --log-prefix "Packet Dropped. "
-A INPUT   -i $INTERFACE -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -i $INTERFACE -j REJECT --reject-with icmp-host-prohibited
-A OUTPUT  -o $INTERFACE -j REJECT --reject-with icmp-host-prohibited

Referindo-se à entrada da página man do IPTables, parece que deve funcionar:

[!] -s, --source address[/mask][,...]

Source specification. Address can be either a network name, a hostname, a network IP address (with /mask), or a plain IP address. Hostnames will be resolved once only, before the rule is submitted to the kernel. Please note that specifying any name to be resolved with a remote query such as DNS is a really bad idea. The mask can be either a network mask or a plain number, specifying the number of 1âs at the left side of the net- work mask. Thus, a mask of 24 is equivalent to 255.255.255.0. A "!" argument before the address specification inverts the sense of the address. The flag --src is an alias for this option.
Multiple addresses can be specified, but this will expand to multiple rules (when adding with -A), or will cause multiple rules to be deleted (with -D).

[!] -d, --destination address[/mask][,...]

Destination specification. See the description of the -s (source) flag for a detailed description of the syntax. The flag --dst is an alias for this option.

Alguém é capaz de me esclarecer sobre o que estou fazendo de errado aqui?

    
por Tyderian 11.01.2016 / 05:27

1 resposta

2

Copiei sua primeira regra combinada do iptables para minha caixa do Ubuntu e funcionou para mim:

iptables -A INPUT -i wlan0 -m conntrack --ctstate NEW,ESTABLISHED,RELATED -s 172.16.10.0/24,172.16.9.0/24 -p tcp --dport 8400:8403 -j ACCEPT -m comment --comment "Working! :)"

Não recebi saída após esse comando, significando sucesso. Eu também executei o seu comando multi-source-destination com sucesso:

iptables -A INPUT -i wlan0 -s 172.16.10.0/24,172.16.9.0/24 -d 172.16.10.0/24,172.16.9.0/24 -p tcp --dport 8400:8403 -j ACCEPT

As únicas alterações que fiz nos seus comandos foram para a interface e as redes de origem, já que não usei um script para testar seus comandos.

Você postou suas variáveis de rede em sua pergunta, mas não postou sua variável $ INTERFACE. Está faltando o roteiro? Ou talvez inacessível se este script é separado do script em que a variável é declarada?

Qual é a saída quando você executa seu script iptables com as regras combinadas de origem / destino?

    
por 21.01.2016 / 04:39

Tags