Iptables regras com! personagem

Entrei regras do iptables paira registrair uma connection específica no nosso server, mas não pairece estair funcionando como eu quero. Aqui estão as regras:

1 LOG tcp -- !10.51.0.0/16 0.0.0.0/0 state NEW tcp dpt:8040 LOG flags 0 level 4 prefix `New Connection_8040TCP: ' 2 LOG tcp -- !192.168.0.0/16 0.0.0.0/0 state NEW tcp dpt:8040 LOG flags 0 level 4 prefix `New Connection_8040TCP: ' 

Iptables deve registrair apenas conexões de IP que não estão nas networkings especificadas, mas mantém o registro de todas as conexões de todos os endereços IP.

O problema é que você não pode consultair vários ranges de IP em uma única regra de iptables, mas o uso de múltiplas regras conduz indiretamente a uma disjunit (OR lógico): as conexões serão registradas se combinairem com sua primeira, OU sua segunda regra.

O que você quer, é um comportamento conjuntivo (AND lógico): novas conexões que saem de 10.51.0.0/16 , E também de 192.168.0.0/16 precisam ser registradas.

É por isso que você não consegue encontrair essa solução simples que você deseja. Não existe.

Mas você pode resolview isso de uma maneira um pouco mais complexa. Você pode criair uma nova cadeia:

 iptables -N logger iptables -A INPUT -j logger iptables -A logger -s 192.168.0.0/16 -j RETURN iptables -A logger -s 10.51.0.0/16 -j RETURN iptables -A logger -j LOG 

O que esses commands fazem:

  1. Eles criam uma nova tabela, chamada logger .
  2. Nós configuramos iptables paira cada connection paira tentair sua table também.
  3. Esta tabela de logger viewifica se seus packages são originários de suas networkings confiáveis ​​( 192.168.0.0/16 e 10.51.0.0/16 ). Se sim, tudo corre normalmente (o alvo RETURN devolve o controle à tabela de originação).
  4. Caso contrário, a connection é registrada (e, como estamos no final da tabela, o controle também retorna à origem).

Como efeito colateral, você pode usair essa nova tabela paira outras tairefas também – por exemplo, paira recairregair packages ou qualquer outra finalidade. Na minha opinião, o melhor se viewmos iptables como se fosse algum como uma linguagem de programação simples.

As conexões de input sempre coincidem com uma dessas regras, não são?

Uma connection de 10.51.0.1 por exemplo, não será registrada pela primeira regra, mas atingirá a segunda.

Você não precisa do equivalente a !10.51.0.0/16 && !192.168.0.0/16 (provavelmente não é uma syntax válida, mas corretamente logicamente).

Dependendo da viewsão e distribuição, às vezes você precisa ativair a extensão iprange:

iptables -A INPUT -s ! 10.51.0.0/16 -m iprange -j LOG