Por que o iptables não recebe o pacote marcado?

3

Eu estava aprendendo as opções do comando ping. Em que eu encontrei a opção -m para definir a marca de um pacote.

O comando abaixo envia o pacote com marcação de 10 para o 192.168.2.65.

ping -m 10 192.168.2.65

Usando o comando abaixo, posso conseguir receber esse pacote no destino.

iptables -A INPUT -m mark --mark 0xa -j ACCEPT

Mas o comando acima não recebe o pacote marcado. O comando acima do iptables não retorna nada.

Nota: ambos estamos tendo a permissão de root.

    
por Mat 23.05.2016 / 06:36

2 respostas

6

Essa marca é interna e não está incluída em nenhum lugar do pacote ou de seus cabeçalhos.

Isso significa que ele se perde ao fazer a conexão de saída real e não seria visível na tabela INPUT do servidor de destino, mas você o veria na tabela OUTPUT da máquina iniciante.

O objetivo de dar suporte a uma marca no ping é permitir regras de roteamento de saída.

    
por 23.05.2016 / 06:45
3

A resposta de @Julie Pelletier está 100% correta, mas provavelmente não é compreensível para você.

Primeiro, como mencionado várias vezes nos comentários, a marca é não colocada no pacote ethernet no fio. Portanto, se você executar ping no servidor B do servidor A, o servidor B não poderá detectar a marca. Se você quiser fazer alguma coisa, você terá que usar o servidor A sozinho. Então, você terá que inserir / anexar uma regra à cadeia OUTPUT do remetente para ver qualquer coisa.

Agora, vamos ver como usar iptables . Primeiro, queremos ver quais regras estão ativas em OUTPUT:

root@roran:~# iptables -L OUTPUT -n -v
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination                                                                                           
root@roran:~#

Ok, sem regras. Vamos definir uma regra:

root@roran:~# iptables -I OUTPUT -m mark --mark 0xa -j ACCEPT
root@roran:~#

Como você vê, não há saída. Mas a tabela do kernel tem uma entrada agora:

root@roran:~# iptables -L OUTPUT -n -v
Chain OUTPUT (policy ACCEPT 177 packets, 120K bytes)
 pkts bytes target     prot opt in     out     source               destination                                                                                           
    0     0 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0  mark match 0xa
root@roran:~#

As colunas "pkts" e "bytes" são 0, já que nenhum pacote foi lançado ainda. Agora, faça ping em um servidor diferente, sem definindo uma marca:

root@roran:~# ping -c 1 bermuda
PING bermuda (192.168.178.2) 56(84) bytes of data.
64 bytes from bermuda (192.168.178.2): icmp_seq=1 ttl=64 time=0.331 ms
[... some more lines omitted]

Depois disso, a tabela do kernel ainda não corresponde a nada:

root@roran:~# iptables -L OUTPUT -n -v
Chain OUTPUT (policy ACCEPT 348 packets, 160K bytes)
 pkts bytes target     prot opt in     out     source               destination                                                                                           
    0     0 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0  mark match 0xa
root@roran:~#

Em seguida, tente executar o ping com um conjunto de marcações:

root@roran:~# ping -m 10 -c 1 bermuda
PING bermuda (192.168.178.2) 56(84) bytes of data.
64 bytes from bermuda (192.168.178.2): icmp_seq=1 ttl=64 time=0.324 ms
[... some more lines omitted]

e olhe novamente para a mesa:

root@roran:~# iptables -L OUTPUT -n -v
Chain OUTPUT (policy ACCEPT 631 packets, 319K bytes)
 pkts bytes target     prot opt in     out     source               destination                                                                                           
    1    84 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0  mark match 0xa
root@roran:~#

Agora, a regra encontrou um pacote com 84 bytes.

Se você quiser experimentar, depois disso, use iptables -F OUTPUT para limpar a tabela; iptables -I OUTPUT -m mark --mark 0x0a -j REJECT para evitar que os pacotes marcados saiam de sua máquina e, em seguida, efetue ping na outra máquina com e sem marca. Você verá os pacotes marcados sem resposta agora, conforme a regra os abandona.

    
por 23.05.2016 / 14:16