Prenosnik sedi v /24 pisarne prek Etherneta in se hkrati pridruži strežniku OpenVPN, ki živi v istem /24. Kolega pinga naslov tunela; zahteva očitno prispe in nič se ne vrne. Dnevnik tunela je čist in brskanje še deluje, zato je tunel napačni osumljenec. Preverjanje vira IPv4 na prejemni napravi zavrže paket, preden ga karkoli prebere.

Zavrženje se zgodi, preden karkoli prebere paket

Preverjanje vira postavi eno vprašanje o vsakem dohodnem paketu: če bi ta gostitelj odgovoril temu viru, bi odgovor šel ven skozi vmesnik, na katerega je paket pravkar prispel? Ko je odgovor ne, jedro paket zavrže ob prihodu. Niti vtičnica niti pot posredovanja ga nikoli ne vidita, zato zajem na tunelu še vedno zabeleži zahtevo, ki je aplikacija nikoli ne prejme.

Odjemalec tu drži 10.66.0.9 na svojem tunelu, strežnik OpenVPN pa odgovarja na 192.168.80.10 znotraj pisarniške predpone. Kolega na 192.168.80.25 pinga naslov tunela, zato zahteva prestopi omrežje, strežnik jo usmeri v tunel, in prispe na tunelski vmesnik odjemalca z naslovom vira iz pisarne. V usmerjevalni tabeli tega računalnika predpona pisarne pripada napravi Ethernet, ne tunelu. Preverjanje primerja vmesnik prihoda s potjo, najde neskladje in paket zavrže, zato kolega vidi popolno izgubo, medtem ko oba konca poročata o zdravem tunelu.

Zrcalna smer ima enako obliko: ko odjemalec začne proti pisarni, so odgovori lahko zavrženi na strani pisarne iz prav istega razloga. Popravek, preverjen le v eni smeri, se običajno vrne kot druga zahteva.

Dokažite veljavni način, preden se dotaknete katerega koli sysctl

Berite dejanske vrednosti, namesto da bi zaupali privzeti vrednosti distribucije, ker je nastavitev za vmesnik le polovica odločitve. Veljavni način je višji od vrednosti vmesnika in vrednosti all, zato ničla na tunelskem vmesniku ne pomeni nič, dokler je all ena. Odločitev strogega načina je odločitev usmerjanja, zato zaženite iskanje, ki ga zažene jedro, in primerjajte njegov odgovor z vmesnikom, po katerem je paket v resnici prispel.

tcpdump -ni tun0 icmp and host 192.168.80.25
ip route get 192.168.80.25
sysctl net.ipv4.conf.all.rp_filter net.ipv4.conf.tun0.rp_filter

Nato ping ponovite in opazujte števec napak. Števec, ki raste ob zahtevi, ki jo zajem že kaže, je podpis tega zavrženja in ne manjkajoče poti. Vklopite marsovsko beleženje, dokler ste tam, da jedro poimenuje vir in vmesnik, ki ju je zavrnilo. Skupaj izključita šifro, požarni zid in manjkajoči iroute kot pojasnila.

Zapišite izhodišče, preden karkoli spremenite: obe vrednosti, napravo, ki jo je izbralo iskanje, in števec, ki ste ga spremljali. Prav ta zapis vam pozneje pove, ali je sprememba naredila to, kar mislite.

Kaj vsak način rp_filter v resnici sprejme

Jedro pokaže tri vrednosti na vmesnik in to niso trije odtenki enega pravila. Ničla preverjanje izklopi. Ena je stroga in zahteva, da se vir usmeri nazaj skozi vmesnik prihoda. Dva je ohlapna in zahteva le, da v tabeli obstaja kakšna pot do vira, kamor koli kaže.

ValueNameAcceptsStill rejects
0offany source at allnothing on this check
1stricta source routed back out the arrival interfacea source whose route points elsewhere
2loosea source with any route in the tablea source with no route at all

Vrstica, ki tukaj šteje, je ohlapna, in to, kar še vedno zavrača. Ponarejen vir, ki ga je mogoče usmerjati kjer koli v vaši tabeli, gre skozi, medtem ko je vir brez kakršne koli poti še vedno zavrnjen. Na prenosniku je to ozka popustljivost; na usmerjevalniku, ki posreduje promet drugih ljudi, je široka. Način pripada gostitelju, zato isto število nosi različno težo na obeh mestih.

Katera vrstica je potrebna tej topologiji, izhaja iz tabele in ne iz navade. Paket je zakonit in njegov vir je usmerljiv, zato ohlapna vrstica sprejme, stroga pa ne. Nič v tem primeru ne zahteva ničle, izbira ničle pa bi odstranila preverjanje, ki tukaj nič ne stane.

Izberite najmanjšo spremembo, ki odpravi dvoumnost

Ohlapni način je najmanjša ustrezna sprememba in je resnično zmanjšanje strogosti, ne nedolžno stikalo. Boljša možnost obstaja vedno, ko to topologija dopušča: odstranite prekrivanje in dvoumnost izgine.

Kjer je pisarniška predpona potrebna le prek Etherneta, jo odstranite iz poti, ki jih vleče profil, in naslov bo dosegljiv po eni poti. Ko morata obe poti resnično sobivati, pripnite vir in napravo s pravilom politike, namesto da bi popuščali preverjanje na vsakem vmesniku. To ohrani strogo filtriranje za vse drugo na napravi in dokumentira izjemo tam, kjer jo bo iskal naslednji inženir.

Katero pot izberete, jo zabeležite v drop-in sysctl in ne v živi ukaz. Nastavite ključa all in default skupaj, da ponovna povezava ne more tiho obnoviti strogega načina.

# /etc/sysctl.d/99-rp-filter.conf
net.ipv4.conf.default.rp_filter = 2
net.ipv4.conf.all.rp_filter = 2
sysctl --system

Čemu se ohlapni način odpove, in kje

Ohlapni način še vedno zavrne vir, do katerega ne bi prišla nobena pot, in preneha zavračati ponarejen vir, ki je slučajno usmerljiv. Na prenosniku je to ozka popustljivost. Na napravi, ki posreduje promet, ki ni njen, je ista izbira veliko širša. Zato ista nastavitev nosi dva zelo različna pomena glede na to, kje teče.

Popolna izključitev preverjanja na gostitelju, ki posreduje promet drugih ljudi, je edini popravek, ki se mu je treba izogniti. Ničla zavrže preverjanje, ki ga ohlapni način skrbno ohranja. Če gostitelj posreduje za druge, zagovarjajte namesto tega možnost s pravilom politike iz prejšnjega razdelka.

Pustite opombo, ki poimenuje oba vmesnika, prekrivajočo se predpono in natančen preizkus, ki zdaj uspe. To je za naslednjega inženirja bolj uporabno kot vrstica, da je bilo filtriranje prilagojeno.

Sorodni članki