Reverse Path Filtering e Martian Logging


NOTA: Esta página está desactualizada. A nova versão está disponível aqui.

Para aumentar a segurança em máquinas que funcionam como routers, o kernel Linux permite, opcionalmente, filtrar pacotes recebidos por uma interface que não é a que seria usada para enviar pacotes para o endereço IP de origem do pacote recebido. Esta opção controla-se através da variável rp_filter (ver abaixo). Uma outra variável relacionada, log_martians, indica que deve registar-se nos logs do sistema a chegada de pacotes nessas condições.

Pelo facto de esta filtragem causar problemas em situações em que é legítimo existirem caminhos assimétricos, como é o caso do trabalho 1, o valor-padrão da variável rp_filter é 0, desactivando a filtragem. No entanto, algumas distribuições de Linux vêm, ainda assim, configuradas de origem para activar essa filtragem, como é o caso da versão do Mandriva actualmente instalada nos laboratórios.

Para evitar efeitos indesejados nos trabalhos em que se usam máquinas Linux com mais que uma interface de rede activa, devem desactivar a filtragem de caminho inverso nessas máquinas. Em particular, devem desactivá-la no RLin e no Term2 do trabalho 1. Podem fazê-lo de forma permanente alterando no ficheiro /etc/sysctl.conf as linhas net.ipv4.conf.default.rp_filter=1, net.ipv4.conf.all.rp_filter=1 e net.ipv4.conf.all.log_martians=1 para, respectivamente, net.ipv4.conf.default.rp_filter=0, net.ipv4.conf.all.rp_filter=0 e net.ipv4.conf.all.log_martians=0. Para o fazerem de forma imediata sem necessidade de reboot podem usar o seguinte código na shell:

for i in default all eth0 eth1 eth2; do
   sysctl -w net.ipv4.conf.$i.rp_filter=0
   sysctl -w net.ipv4.conf.$i.log_martians=0
done

Alguma informação adicional extraída da documentação do kernel Linux:
rp_filter - BOOLEAN

        1 - do source validation by reversed path, as specified in RFC1812
            Recommended option for single homed hosts and stub network
            routers. Could cause troubles for complicated (not loop free)
            networks running a slow unreliable protocol (sort of RIP),
            or using static routes.
        0 - No source validation.

        conf/all/rp_filter must also be set to TRUE to do source validation
        on the interface

        Default value is 0. Note that some distributions enable it
        in startup scripts.



log_martians - BOOLEAN

        Log packets with impossible addresses to kernel log.

        log_martians for the interface will be enabled if at least one of
        conf/{all,interface}/log_martians is set to TRUE,
        it will be disabled otherwise