iptables múltiplos sinalizadores -d não permitidos

7

Estou tentando registrar todas as minhas conexões de saída em um arquivo usando o iptables.

Esta é a minha regra:

-A OUTPUT ! -o lo ! --destination 127.0.0.1  -m state --state NEW -j LOG --log-prefix "new_connection " --log-level 7

No entanto, se eu adicionar outro destino de IP (multicast), minha regra se tornará assim:

-A OUTPUT ! -o lo ! --destination 127.0.0.1 ! --destination 239.192.0.0 -m state --state NEW -j LOG --log-prefix "new_connection " --log-level 7

Eu recebo o seguinte erro:

multiple -d flags not allowed

Minha pergunta não é o que o erro significa, mas como posso excluir vários endereços IP na minha regra? As duas condições

! --destination 127.0.0.1

e

! --destination 239.192.0.0

são mutuamente exclusivos, de modo que ter duas regras seria efetivamente como não tê-las de forma alguma (só pior, já que eu obteria quase o dobro dos logs)

Existe um operador "e"?

    
por Tom Macdonald 05.04.2014 / 18:03

3 respostas

9

Para problemas deste tipo você pode definir novas correntes e saltar entre elas. Você pode, por exemplo, adicionar uma cadeia LOGGING e, no início dessa cadeia, corresponder aos pacotes que você não deseja registrar com uma ação de RETURN :

$ iptables -N LOGGING
$ iptables -A LOGGING -d 127.0.0.0/8 -j RETURN
$ iptables -A LOGGING -d 239.192.0.0/16 -j RETURN
$ iptables -A LOGGING -j LOG 
$ iptables -A OUTPUT -j LOGGING

Dessa forma, todos os pacotes que chegam pela cadeia OUTPUT primeiro passariam pela cadeia LOGGING e tudo que não fosse para 127.0.0.0/8 e 239.192.0.0/16 seria registrado, então o controle retornaria para a OUTPUT .

    
por 05.04.2014 / 18:24
3

Sim, mas não funciona do jeito que você quer. Na página do manual:

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).

A maneira de fazer isso é adicionar regras anteriores à cadeia para desviar o tráfego que você não deseja registrar ou modificar, por exemplo,

-A OUTPUT -o lo -j ACCEPT
-A OUTPUT --destination 239.192.0.0 -j ACCEPT
-A OUTPUT  -m state --state NEW -j LOG --log-prefix "new_connection " --log-level 7
    
por 05.04.2014 / 18:22
1

Você pode usar valores separados por vírgula com -d ou -s para definir vários IPs. (Veja a discussão no link )

Por exemplo, comando

sudo iptables -A OUTPUT -d 192.168.235.43,192.168.235.46 -j DROP

filtra o tráfego para dois servidores.

    
por 18.08.2015 / 18:57

Tags