pacotes enviados em IP virtual não atingem a regra iptables

5

Eu tenho uma interface virtual eth1:3 com endereço IP 222.192.124.3 , eu configurei uma regra iptables para registrar pacotes que chegam nessa interface usando o IP da interface (eu sei que o iptables não se importa com rótulos de interfaces virtuais), assim:

iptables -A INPUT -d 222.192.124.3 -j LOG --log-level warning --log-prefix "VIP3-IN: "

Quando eu executo o tcpdump e envio pacotes neste IP de outra máquina, eu os vejo, então eu suponho que eles são recebidos e tratados corretamente pelo kernel, mas o iptables nunca registra esses pacotes, e quando eu executo iptables -nvL , contagem de pacotes para aquela regra não é incrementada, como se eles nunca atingissem a regra (ou como se o iptables nem sequer visse pacotes chegando naquela interface).

Primeiro, pensei em outra regra que correspondesse ao pacote e, portanto, manipulá-lo antes que ele atingisse a regra de LOG, por isso removi todas as regras do iptables e adicionei apenas a regra de registro, sem mais sucesso.

O servidor está sendo executado no RHEL 6.2, com um kernel 2.6.32, virtualizado no VMware ESX.

Aqui está a saída completa de iptables -nvL :

Chain INPUT (policy ACCEPT 40 packets, 2891 bytes)
  pkts bytes target     prot opt in     out     source               destination
  0     0    LOG        all  --  *      *       0.0.0.0/0            222.192.124.3 LOG flags 0 level 4 prefix 'VIP3-IN: '

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
  pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 34 packets, 3816 bytes)
  pkts bytes target     prot opt in     out     source               destination

E aqui está uma amostra da saída do tcpdump mostrando os pacotes recebidos ( tcpdump -n -nn -vvv -i eth1 "host 203.0.59.135" ):

10:26:01.259409 IP (tos 0x50, ttl 121, id 26746, offset 0, flags [DF], proto TCP (6), length 52)
    203.0.59.135.62332 > 222.192.124.3.8888: Flags [S], cksum 0x8da8 (correct), seq 3373891789, win 8192, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0

E, finalmente, a ifconfig eth1:3 output:

eth1:3    Link encap:Ethernet  HWaddr 00:50:56:AC:35:35
      inet addr:222.192.124.3  Bcast:222.192.127.255  Mask:255.255.252.0
      UP BROADCAST RUNNING PROMISC MULTICAST  MTU:1500  Metric:1

ATUALIZAÇÃO:

diagrama iptables http://www.austintek.com/LVS/LVS -HOWTO / HOWTO / images / ce.Iptables.gif

Ajudado pelo diagrama acima, eu configurei as regras do iptables em tabelas diferentes para ver onde os pacotes estão indo. Eu criei o seguinte script:

IPT_FILTER="iptables -t filter"
IPT_MANGLE="iptables -t mangle"
IPT_NAT="iptables -t nat"

$IPT_FILTER -F
$IPT_FILTER -X
$IPT_FILTER -A INPUT -d 222.192.124.0/22 -j LOG --log-prefix "DEBUG filter: "
$IPT_FILTER -Z

$IPT_MANGLE -F
$IPT_MANGLE -X
$IPT_MANGLE -A PREROUTING -d 222.192.124.0/22 -j LOG --log-prefix "DEBUG mangle/prerouting: "
$IPT_MANGLE -A INPUT -d 222.192.124.0/22 -j LOG --log-prefix "DEBUG mangle/input: "
$IPT_MANGLE -Z

$IPT_NAT -F
$IPT_NAT -X
$IPT_NAT -A PREROUTING -d 222.192.124.0/22 -j LOG --log-prefix "DEBUG nat/prerouting: "
$IPT_NAT -Z

E parece que os pacotes passam pelas tabelas mangle/PREROUTING e nat/PREROUTING , mas não atingem a tabela mangle/INPUT , então acho que é necessária a ramificação "Não" em "Dados para o firewall". E sendo de forma alguma um especialista em rede ou sistema (no máximo, um usuário avançado), é aqui que me perco e não entendo o que está acontecendo ...

EDIT FINAL (solução)

Como sugerido por @nodens em sua resposta, o problema foi causado pelo RPF estar no modo "Estrito" ... Tanta dor de cabeça para uma configuração tão simples ...

    
por mdeous 04.04.2014 / 09:35

2 respostas

3

Tem certeza de que não há regra de correspondência em outras tabelas, como mangle ou nat? Você também pode tentar registrar cada entrada do INPUT ou, melhor ainda, tentar o alvo TRACE na tabela bruta (cadeia PREROUTING), se estiver disponível no RHEL 6

Editar (ainda não posso adicionar um comentário):

OK, então o pacote atingiu a interface, mas não é considerado como um que deve ser tratado localmente. Verifique sua tabela de roteamento, talvez você não tenha uma rota de link de escopo para esta rede, ou o pacote é descartado pelo kernel devido a filtros RPF (isso pode acontecer dependendo da topologia de rede): check link

    
por 04.04.2014 / 11:47
0

A interface virtual não existe no nível do kernel. São aliases colocados em endereços pelo ifconfig. Eles não devem ser usados desde o final do milênio anterior.

Em relação ao iptables. Como esta não é uma interface no nível do kernel, você precisa filtrar com o nome real da interface. No seu caso eth1. Se você deseja ser rigoroso, será necessário filtrar por rede de origem, se possível, para imitar o que estava tentando fazer usando o nome da interface virtual.

    
por 04.04.2014 / 11:17