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