Como habilitar o traceroute na máquina linux

5

Estou trabalhando em algo na camada de transporte e depois de executar nossas políticas personalizadas para proteger as políticas, não consigo fazer traceroute da máquina linux.

root@keystone-evm:~# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     udp  --  anywhere             10.222.4.212         udp dpt:echo
ACCEPT     udp  --  anywhere             10.222.4.212         udp dpt:isakmp
ACCEPT     udp  --  anywhere             10.222.4.212         udp dpt:radius
ACCEPT     udp  --  anywhere             10.222.4.212         udp dpt:ntp
ACCEPT     icmp --  anywhere             10.222.4.212
ACCEPT     udp  --  anywhere             10.222.4.212         udp dpt:domain
ACCEPT     udp  --  anywhere             10.222.4.212         udp dpt:bootpc
ACCEPT     udp  --  anywhere             10.222.4.212         udp dpt:bootps
ACCEPT     123  --  anywhere             10.222.4.212
DROP       all  --  anywhere             anywhere
ACCEPT     udp  --  anywhere             anywhere             udp spts:33434:33524 state NEW,RELATED,ESTABLISHED

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     udp  --  10.222.4.212         anywhere             udp dpt:echo
ACCEPT     udp  --  10.222.4.212         anywhere             udp dpt:isakmp
ACCEPT     udp  --  10.222.4.212         anywhere             udp dpt:radius
ACCEPT     udp  --  10.222.4.212         anywhere             udp dpt:ntp
ACCEPT     icmp --  10.222.4.212         anywhere
ACCEPT     udp  --  10.222.4.212         anywhere             udp dpt:domain
ACCEPT     udp  --  10.222.4.212         anywhere             udp dpt:bootpc
ACCEPT     udp  --  10.222.4.212         anywhere             udp dpt:bootps
ACCEPT     123  --  10.222.4.212         anywhere
DROP       all  --  anywhere             anywhere
ACCEPT     udp  --  anywhere             anywhere             udp dpts:33434:33524 state NEW
root@keystone-evm:~# traceroute 10.222.4.100
traceroute to 10.222.4.100 (10.222.4.100), 30 hops max, 38 byte packets
 1traceroute: sendto: Operation not permitted

O dado abaixo é o comando que eu emiti para ativar o traceroute:

  • iptables -A OUTPUT -o eth0 -p udp --dport 33434:33524 -m state --state NEW -j ACCEPT
  • iptables -A INPUT -p udp --sport 33434:33524 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
por Renold Singh 26.08.2014 / 08:05

3 respostas

4

Obrigado por todas as entradas.

Eu criei um shell script para fazer o trabalho por mim. Eu acredito que isso seria útil para outros usuários também executarem a tarefa. Por favor, note que o IP da máquina local. Por favor, faça as alterações necessárias em conformidade.

#!/bin/sh
echo "Enabling Traceroute..."

#Outbound UDP traffic Policy

iptables -I OUTPUT -o eth0 -p udp --dport 33434:33524 -m state --state NEW -j ACCEPT

iptables -I INPUT -p udp --sport 33434:33524 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

#Inbound ICMP traffic Policy


iptables -I INPUT -p icmp --icmp-type 3/3 -d 10.222.4.212 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

iptables -I INPUT -p icmp --icmp-type 11  -d 10.222.4.212 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
    
por 26.08.2014 / 14:37
5

Nenhuma das respostas existentes explica como permitir um traceroute de entrada; a resposta aceita nem sequer tenta responder à pergunta.

Podemos ver em man 8 traceroute que:

  • O UDP é o mecanismo padrão do traceroute no Linux
  • traceroute espera receber uma mensagem "ICMP inacessível" em resposta à sua consulta
  • os rastreios iniciam na porta 33434 e são incrementados em um para cada salto

Enquanto isso, a Microsoft confirma que o Windows usa "ICMP Echo Requests" em sua implementação.

Então, aqui está a resposta para permitir que um host processe corretamente traceroutes de entrada. Anexe uma regra para rejeitar (não descartar) o tráfego nas portas UDP 33434-33474 e responder a solicitações de eco.

iptables -I INPUT -p udp --dport 33434:33474 -j REJECT
iptables -I INPUT -p ICMP --icmp-type echo-request -j ACCEPT

Para o registro, o trecho da página man:

LIST OF AVAILABLE METHODS
       In  general,  a  particular traceroute method may have to be chosen by -M name, but
       most of the methods have their simple cmdline switches (you can see them after  the
       method name, if present).

   default
       The traditional, ancient method of tracerouting. Used by default.

       Probe  packets  are udp datagrams with so-called "unlikely" destination ports.  The
       "unlikely" port of the first probe is 33434, then for each next probe it is  incre-
       mented by one. Since the ports are expected to be unused, the destination host nor-
       mally returns "icmp unreach port" as a final response.  (Nobody knows what  happens
       when some application listens for such ports, though).

       This method is allowed for unprivileged users.

   icmp       -I
       Most usual method for now, which uses icmp echo packets for probes.
       If you can ping(8) the destination host, icmp tracerouting is applicable as well.

   tcp        -T
       Well-known modern method, intended to bypass firewalls.
       Uses the constant destination port (default is 80, http).
    
por 06.06.2016 / 22:03
2

Primeiro de tudo: o comando iptables -A adiciona a nova regra após ao final de suas cadeias reais. Eles foram processados somente após a última regra em suas cadeias. Mas isso não acontecerá, porque a última regra já filtra tudo ! Você precisa colocar estes comandos antes da sua última regra, o que pode ser feito com o -I <n> flag do iptables.

Segundo: Traceroute está trabalhando enviando pacotes ICMP, assim como o ping faz. É essencialmente um ping, que tenta obter uma lista dos nós da rede remota no caminho para a máquina de destino, enviando pacotes com campos TTL de pacote baixo, mas em crescimento.

Eu não tenho nenhuma ideia, de onde você tirou essa coisa do udp / 33434. Se você quiser traceroute, ative o ICMP, que não possui portas.

Terceiro: (reagindo bem) Parece que, às vezes, traceroute não usa apenas pacotes icmp simples, mas também pacotes udp ou tcp. Existe até uma ferramenta chamada tcptraceroute , que pode fazer a última coisa de uma maneira configurável muito boa. Se você não tiver certeza, verifique com strace ou com tcpdump , onde seu traceroute deseja realmente se comunicar e ative pelo menos essa porta.

    
por 26.08.2014 / 11:08