Administradores de redes podem utilizar o Unicast Reverse Path Forwarding (Unicast RPF) para ajudar a diminuir o tráfego malicioso/indesejado nas redes.
Esse sistema de segurança funciona de forma com que o roteador verifique a alcançabilidade do endereço de origem dos pacotes que serão encaminhados. Assim cria um barreira contra ataques do tipo spoofing (falsificação de pacotes), que normalmente são utilizados como parte de ataques de negação de serviço.
O URPF tem três modos de operação: Strict Mode, Loose Mode e Vrf Mode. Nem todos os dispositivos de redes suportam todos esses modos de operação, e neste post não falaremos do URPF em Vrf Mode.
Geralmente quando um pacote unicast chega no roteador, o encaminhamento é realizado com base no endereço IP de destino. O roteador consulta a tabela de roteamento e encaminha o pacote pela interface indicada para atingir o next-hop.
Pelo fato de o roteador não analisar o endereço IP de origem dos pacotes, é possível que atacantes falsifiquem os seus endereços e enviem pacotes que normalmente deveriam ser bloqueados por um firewall ou ACLs.
URPF Strict Mode
O roteador fará duas checagens nos pacotes chegando em uma interface:
-
Existe alguma entrada válida na tabela de roteamento para esta origem?
-
A interface para alcançar origem deste pacote é a mesma que o pacote chegou ?
Se essas duas respostas forem positivas o pacote será aceito, caso contrario o roteador descarta o pacote.
Veja que o roteador R1 tem em sua tabela de roteamento uma entrada para a rede 172.16.16.0/24 apontada para a interface FastEthernet0/0. Um pacote com origem (S = source) 172.16.16.1, recebido na interface F0/0 é aceito e encaminhado. Já o pacote recebido na interface F0/1, com a mesma origem, será descartado, pois não completa os dois fatores de verificação do URPF Strict Mode.
Configuração URPF Stric Mode
Configuramos as interfaces com os seus devidos endereços IPs, e posteriormente habilitamos o URPF com o comando ip verify unicast source reachable-via seguido da opção rx que define o modo como Strict.
Para finalizar inserimos uma rota para a rede de origem saindo pela interface FastEthernet0/0, como mostra o exemplo abaixo.
R1(config)#interface FastEthernet 0/0
R1(config-if)#ip address 192.168.12.1 255.255.255.252
R1(config-if)#ip verify unicast source reachable-via rxR1(config)#interface FastEthernet 1/0
R1(config-if)#ip address 192.168.13.1 255.255.255.252
R1(config-if)#ip verify unicast source reachable-via rxR1(config)#ip route 172.16.16.0 255.255.255.0 192.168.12.2
Realizando os testes podemos ver que os pacotes que vem pela interface FastEthernet0/0 são aceitos, o que não ocorre na interface FastEthernet1/0.
Para analisar o funcionamento do URPF, podemos usar o comando show ip interface fastethernet 0/0 e show ip interface fastethernet 0/1, procurando pela opção drops. Note que a interface F0/1 teve 5 pacotes descartados pelo uRPF.
URPF Loose Mode
Nesse modo o roteador fará uma única checagem nos pacotes recebidos:
-
Existe alguma entrada na tabela de roteamento para esta origem?
Se a resposta for positiva o pacote será aceito, caso contrario o descarte será realizado. A interface de retorno do pacote não precisa ser a mesma de onde ele veio.
O Loose Mode é muito utilizado quando roteador se conecta a mais de um ISP e é utilizado roteamento assimétrico.
Veja que o roteador R1 tem em sua tabela de roteamento uma entrada para a rede 172.16.16.0/24 apontando para a interface FastEthernet0/0. Neste caso um pacote com origem 172.16.16.1 será aceito tanto quando chegar pela interface F0/0 como pela interface F0/1.
Configuração URPF Loose Mode
A configuração é semelhante ao exemplo anterior, com a diferença de que agora usamos a opção any após o comando ip verify unicast source reachable-via, indicando o Loose Mode.
Para finalizar inserimos uma rota para a rede de origem saindo pela interface FastEthernet0/0.
R1(config)#interface FastEthernet 0/0
R1(config-if)#ip address 192.168.12.1 255.255.255.252
R1(config-if)#ip verify unicast source reachable-via any
R1(config)#interface FastEthernet 1/0
R1(config-if)#ip address 192.168.13.1 255.255.255.252
R1(config-if)#ip verify unicast source reachable-via any
R1(config)#ip route 172.16.16.0 255.255.255.0 192.168.12.2
Podemos ver que os pacotes são aceitos independentes da interface que chegam no roteador R1, porque a único fator analisado é a existência de uma rota de retorno para o endereço IP de origem do pacote.
Loose Mode com Rota Default
É muito comum a utilização de rota default em redes com dois pontos de saída, neste caso as configurações realizadas anteriormente não se encaixam pelo fato do roteador não ter uma rota especifica para a origem dos pacotes.
Para termos o URPF configurado e funcionando com rota default precisamos usar o atributo allow-default.
Configuração Loose Mode com Rota Default
Utilizamos o mesmo comando ip verify unicast source reachable-via any, e completamos com a opção allow-default. Para finalizar inserimos as rotas default apontando para os IPs dos next-hops.
R1(config)#interface FastEthernet 0/0
R1(config-if)#ip address 192.168.12.1 255.255.255.252
R1(config-if)#ip verify unicast source reachable-via any allow-default
R1(config)#interface FastEthernet 1/0
R1(config-if)#ip address 192.168.13.1 255.255.255.252
R1(config-if)#ip verify unicast source reachable-via any allow-defaultR1(config)#ip route 0.0.0.0 0.0.0.0 192.168.12.2
R1(config)#ip route 0.0.0.0 0.0.0.0 192.168.13.2
Assim como anteriormente, podemos ver que os pacotes são aceitos independente da interface por onde chegaram.
Ainda temos a opção de utilizar ACLs para realizar filtragens em conjunto com o URPF.
Referências:
Até a próxima.
Muito bom Arthur.
Com a configuração Loose Mode com Rota Default, você evita o ataque do tipo spoofing apenas para ips explicitos na tabela de roteamento, correto? Se o ip de origem não estiver na tabela de roteamento, então, ele vai considerar a rota default? É isso?
Correto João, se a tabela de roteamento conter explicitamente uma entrada para o endereço ip do pacote, ele sera descartado.