URPF – Unicast Reverse Path Forwarding
by admin · Lipiec 29, 2018
PRZYKŁAD:
W celu zademonstrowania działania mechanizmu uRPF w routerach CISCO posłużę się następując topologią zbudowaną w GNS3
Konfiguracja wygląda następująco:
R1
interface FastEthernet0/0
ip address 192.168.12.1 255.255.255.0
ip verify unicast source reachable-via rx
duplex full
!
interface FastEthernet1/0
ip address 192.168.13.1 255.255.255.0
duplex full
!
router ospf 1
network 192.168.0.0 0.0.255.255 area 0
R2
interface Loopback0
ip address 3.3.3.3 255.255.255.255
!
interface FastEthernet0/0
ip address 192.168.12.2 255.255.255.0
duplex full
!
interface FastEthernet1/0
ip address 192.168.23.2 255.255.255.0
duplex full
!
router ospf 1
network 192.168.0.0 0.0.255.255 area 0
R3
interface Loopback0
ip address 3.3.3.3 255.255.255.255
!
interface FastEthernet0/0
ip address 192.168.13.3 255.255.255.0
duplex full
!
interface FastEthernet1/0
ip address 192.168.23.3 255.255.255.0
duplex full
!
router ospf 1
network 3.3.3.3 0.0.0.0 area 0
network 192.168.0.0 0.0.255.255 area 0
Sprawdźmy teraz jak wygląda tablica routingu na routerze R1.
R1# show ip route
3.0.0.0/32 is subnetted, 1 subnets
O 3.3.3.3 [110/2] via 192.168.13.3, 00:06:01, FastEthernet1/0
192.168.12.0/24 is variably subnetted, 2 subnets, 2 masks
C 192.168.12.0/24 is directly connected, FastEthernet0/0
L 192.168.12.1/32 is directly connected, FastEthernet0/0
192.168.13.0/24 is variably subnetted, 2 subnets, 2 masks
C 192.168.13.0/24 is directly connected, FastEthernet1/0
L 192.168.13.1/32 is directly connected, FastEthernet1/0
O 192.168.23.0/24 [110/2] via 192.168.13.3, 00:14:33, FastEthernet1/0
[110/2] via 192.168.12.2, 00:14:33, FastEthernet0/0
Jak widać na powyższym wyniku prefix 3.3.3.3 jest osiągalny przez interfejs FastEthernet1/0, czyli interfejsu podłączonego do routera R3. Teraz ustawmy uRPF w trybie strict na interfejsach routera R1.
interface FastEthernet0/0
ip verify unicast source reachable-via rx
!
interface FastEthernet1/0
ip verify unicast source reachable-via rx
Przetestujmy działanie tego mechanizmu. Z routera R3 spingujmy router R1 i zobaczmy co się stanie.
R3#ping 192.168.13.1 source 3.3.3.3
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.13.1, timeout is 2 seconds:
Packet sent with a source address of 3.3.3.3
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 36/46/56 ms
Jak widać wszystko przebiegło bez zarzutów, ponieważ pakiet przyszedł przez interfejs FastEthernet1/0, czyli zgodnie z tablicą CEF FIB:
R1#show ip cef 3.3.3.3
3.3.3.3/32
nexthop 192.168.13.3 FastEthernet1/0
Sprawdzić działanie uRPF możemy wykonując polecenie:
R1#show ip int fa0/0 | in verif
IP verify source reachable-via RX
0 verification drops
0 suppressed verification drops
0 verification drop-rate
Jak widać mechanizm nie odrzucił pakietów, ponieważ założenia trybu ścisłego zostały spełnione.
Teraz spróbujmy wysłać pakiet z adresem źródłowym 3.3.3.3 przez interfejs FastEthernet0/0. Najprościej jest to zrobić z routera R2, w tym celu dodajmy interfejs Loopback0 z adresem 3.3.3.3/32 i wykonajmy polecenie ping:
R2(config)#int Loopback 0
R2(config-if)#ip address 3.3.3.3 255.255.255.255
R2(config-if)#do ping 192.168.12.1 source 3.3.3.3
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.12.1, timeout is 2 seconds:
Packet sent with a source address of 3.3.3.3
.....
Success rate is 0 percent (0/5)
Nie otrzymaliśmy odpowiedzi, sprawdźmy więc czy rzeczywiście mechanizm zadziałał:
R1#show ip int fa0/0 | in verif
IP verify source reachable-via RX
5 verification drops
0 suppressed verification drops
0 verification drop-rate
Teraz sprawdźmy jak działa tryb luźy (loose mode). Zmieńmy konfiguracje intefejsów na R1:
interface FastEthernet0/0
ip verify unicast source reachable-via any
!
interface FastEthernet1/0
ip verify unicast source reachable-via any
i spróbujmy wykonać jeszcze raz polecenie ping na routerze R2:
R2#ping 192.168.12.1 source 3.3.3.3
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.12.1, timeout is 2 seconds:
Packet sent with a source address of 3.3.3.3
.....
Success rate is 0 percent (0/5)
Hmm, nie otrzymaliśmy odpowiedzi, czyli wynik jest taki sam jak w przypadku trybu strict, sprawdźmy to dla pewności:
R1#show ip int fa0/0 | in verif
IP verify source reachable-via ANY
5 verification drops
5 suppressed verification drops
0 verification drop-rate
Wynik powyższej komendy jest jednak inny niż w przypadku trybu strict. Sugeruje to, że pakiety nie zostały odrzucone i powinniśmy dostać odpowiedzi, dlaczego więc się tak nie stało ?
Odpowiedź jest bardzo prosta (IP spoofing), ponieważ na R2 sfałszowaliśmy adres źródłowy (3.3.3.3), router R1 odesłał odpowiedzi do tego adresu, zgodnie ze swoją tablicą routingu, czyli do R3. Wykonajmy jeszcze raz to samo polecenie ping, ale włączmy tym razem debugowanie pakietów icmp na routerze R3:
R3#debug ip icmp
R3#
*Jul 29 10:38:02.111: ICMP: echo reply rcvd, src 192.168.12.1, dst 3.3.3.3, topology BASE, dscp 0 topoid 0
R3#
*Jul 29 10:38:04.131: ICMP: echo reply rcvd, src 192.168.12.1, dst 3.3.3.3, topology BASE, dscp 0 topoid 0
R3#
*Jul 29 10:38:06.079: ICMP: echo reply rcvd, src 192.168.12.1, dst 3.3.3.3, topology BASE, dscp 0 topoid 0
R3#
*Jul 29 10:38:07.967: ICMP: echo reply rcvd, src 192.168.12.1, dst 3.3.3.3, topology BASE, dscp 0 topoid 0
Czyli wszystko działa tak jak należy 🙂
PODSUMOWANIE
uRFP jest jednym z mechanizmów ochrony przed fałszowaniem źródłowego adresu IP i powinno być wykorzystywane jeśli tylko jest taka możlwość. Dodatkowe komendy przydatne przy diagnozowani problemów z uRPF to:
R1#show ip traffic
IP statistics:
Rcvd: 298 total, 296 local destination
0 format errors, 0 checksum errors, 0 bad hop count
0 unknown protocol, 0 not a gateway
0 security failures, 0 bad options, 0 with options
Opts: 0 end, 0 nop, 0 basic security, 0 loose source route
0 timestamp, 0 extended security, 0 record route
0 stream ID, 0 strict source route, 0 alert, 0 cipso, 0 ump
0 other
Frags: 0 reassembled, 0 timeouts, 0 couldn't reassemble
0 fragmented, 0 fragments, 0 couldn't fragment
Bcast: 0 received, 0 sent
Mcast: 255 received, 285 sent
Sent: 332 generated, 0 forwarded
Drop: 0 encapsulation failed, 0 unresolved, 0 no adjacency
0 no route, 7 unicast RPF, 0 forced drop, 0 unsupported-addr
0 options denied, 0 source IP address zero
R1#show cef interface f0/0
FastEthernet0/0 is up (if_number 2)
Corresponding hwidb fast_if_number 2
Corresponding hwidb firstsw->if_number 2
Internet address is 192.168.12.1/24
ICMP redirects are always sent
Per packet load-sharing is disabled
IP unicast RPF check is enabled
Input features: uRPF
IP policy routing is disabled
BGP based policy accounting on input is disabled
BGP based policy accounting on output is disabled
Hardware idb is FastEthernet0/0
Fast switching type 1, interface type 18
IP CEF switching enabled
IP CEF switching turbo vector
IP CEF turbo switching turbo vector
IP prefix lookup IPv4 mtrie 8-8-8-8 optimized
Input fast flags 0x4000, Output fast flags 0x0
ifindex 2(2)
Slot Slot unit 0 VC -1
IP MTU 1500
R1#show cef interface f1/0
FastEthernet1/0 is up (if_number 3)
Corresponding hwidb fast_if_number 3
Corresponding hwidb firstsw->if_number 3
Internet address is 192.168.13.1/24
ICMP redirects are always sent
Per packet load-sharing is disabled
IP unicast RPF check is enabled
Input features: uRPF
IP policy routing is disabled
BGP based policy accounting on input is disabled
BGP based policy accounting on output is disabled
Hardware idb is FastEthernet1/0
Fast switching type 1, interface type 18
IP CEF switching enabled
IP CEF switching turbo vector
IP CEF turbo switching turbo vector
IP prefix lookup IPv4 mtrie 8-8-8-8 optimized
Input fast flags 0x4000, Output fast flags 0x0
ifindex 3(3)
Slot Slot unit 0 VC -1
IP MTU 1500