Regras Iptables com! personagem

3

Eu digitei as regras do iptables para registrar uma conexão específica em nosso servidor, mas não parece estar 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: '

O Iptables deve registrar apenas as conexões IP que não estão nas redes especificadas, mas continua registrando todas as conexões de todos os endereços IP.

    
por Bryan 17.04.2015 / 14:12

3 respostas

9

O problema é que você não pode se referir a vários intervalos IP em uma única regra iptables, mas usar várias regras indiretamente leva a uma disjunção (OR lógica): conexões serão registradas se corresponderem à primeira ou à segunda regra.

O que você quer, é um comportamento conjuntivo (AND lógico): novas conexões saindo 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 encontrar aquela solução simples que deseja. Não há.

Mas você pode resolver isso apenas de uma maneira um pouco mais complexa. Você pode criar 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 comandos fazem:

  1. eles criam uma nova tabela, chamada logger .
  2. Nós configuramos o iptables para cada conexão para testar sua tabela também.
  3. essa tabela registra se os pacotes são originários de suas redes confiáveis ( 192.168.0.0/16 e 10.51.0.0/16 ). Se sim, tudo correrá normalmente (o RETURN target retorna o controle para a tabela de origem).
  4. Se não, a conexão é registrada (e, como estamos no final da tabela, o controle também retorna à origem).

Como um efeito colateral, você pode usar essa nova tabela posteriormente para outras tarefas também - por exemplo, REJEITAR pacotes ou qualquer outra finalidade. Na minha opinião o melhor é se vermos o iptables como se fosse algum tipo de linguagem de programação simples.

    
por 17.04.2015 / 16:50
6

As conexões de entrada sempre irão corresponder a uma dessas regras, não são?

Uma conexão 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 sintaxe válida, mas está correta logicamente).

    
por 17.04.2015 / 14:45
0

Dependendo da versão e distribuição, às vezes você tem que ativar a extensão iprange:

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

    
por 17.04.2015 / 15:06