Rută VPN sau regulă de firewall: care aruncă pachetul?
Ruta alege o cale, iar filtrul decide permisiunea. Verificați ambele pentru aceeași sursă, destinație și direcție înainte de a extinde o regulă de firewall.
Două decizii independente au loc asupra aceluiași pachet, iar oricare dintre ele poate încheia cererea în tăcere. Căutarea rutei alege o interfață și un salt următor, apoi filtrul de pachete decide dacă acea combinație este permisă. Un timeout vă spune că una dintre cele două a refuzat, nu care. Parcurgeți etapele în ordine și reparația încetează de obicei să mai fie o presupunere.
Două decizii, un pachet, doi proprietari
Căutarea rutei consultă mai întâi regulile de politică, apoi tabela către care indică acestea, și alege prefixul cel mai specific care corespunde destinației. Un client care a instalat o rută de tunel deține acea decizie, iar nimic dintr-o regulă de firewall nu o poate înlocui. Când căutarea indică un loc neașteptat, fiecare etapă ulterioară lucrează pe pachetul greșit.
Filtrarea este separată. Pe un host Linux, cârligele netfilter împart traficul după destinatarul pachetului: ieșirea părăsește mașina, intrarea se termină pe ea, forward trece prin ea. Un gateway care acceptă clienți VPN și îi rutează către o LAN are nevoie de calea de forward, și exact acesta este lanțul pe care majoritatea configurațiilor implicite îl lasă gol.
Selecția sursei aparține aceleiași decizii, și aici se ascund cele mai multe nepotriviri. Kernelul alege o adresă sursă de pe interfața de ieșire dacă ruta nu indică una, așa că o regulă de filtru scrisă pentru subrețeaua LAN nu corespunde niciodată unui pachet care iese cu adresa tunelului.
Citiți ce a ales de fapt căutarea
Tipăriți decizia în loc să o deduceți. Comanda de mai jos rezolvă ruta pe care kernelul ar folosi-o pentru acea destinație, inclusiv interfața și sursa pe care ar alege-o:
ip route get 10.8.0.5 ip route get 10.8.0.5 from 192.0.2.44 ip rule show ip route show table all | sed -n '1,40p'
Clienții VPN instalează adesea reguli de politică la priorități sub tabela principală, așa că o tabelă principală curată nu dovedește nimic singură. Comparați prioritățile regulilor cu tabelele pe care le selectează și verificați dacă ruta tunelului supraviețuiește unei reconectări în loc să fie adăugată manual o dată.
IPsec bazat pe politică adaugă o a treia etapă de potrivire pe care rutarea nu o acoperă, așa cum descriu notele de forwarding ale strongSwan pentru configurațiile de tunel și transport. Politica de securitate selectează traficul după prefix și protocol, în timp ce ruta decide doar unde ar merge un pachet neprotejat. O subrețea rutată dar fără selector potrivit fie rămâne neprotejată, fie este aruncată, în funcție de configurație, și niciunul dintre rezultate nu arată ca o problemă de firewall. Tipăriți politica și comparați selectoarele ei cu prefixele despre care așteptați că tunelul le va transporta.
Filtrarea se aplică la un cârlig, nu la o rută
O regulă care permite ascultătorul VPN este o regulă despre traficul adresat gateway-ului însuși. Nu spune nimic despre clienții care ajung la hosturi din spatele acelui gateway, pentru că traficul forwardat trece printr-un alt lanț. Citirea setului de reguli ca o singură listă plată este motivul obișnuit pentru care o regulă care pare corectă nu se declanșează niciodată.
Contoarele rezolvă întrebarea repede. O regulă cu număr de pachete zero nu a fost atinsă niciodată, ceea ce indică lanțul greșit, interfața greșită sau o aruncare anterioară. O regulă cu contor crescător sub o politică de aruncare este granița pe care o căutați, iar pachetul este aruncat în loc să fie rutat greșit.
Trimiteți o sondă pe calea pe care o folosește clientul
Testele rulate pe gateway-ul însuși trec prin ieșire și intrare, cu adresa de sursă proprie a gateway-ului. Aceasta este o cale diferită de cererea forwardată a unui client, așa că un curl local reușit dovedește mai puțin decât pare. Testați de pe mașina care eșuează sau fixați explicit interfața și sursa.
nc -vz -w 3 10.8.0.5 443 ping -c 3 -W 1 10.8.0.5 tcpdump -ni any host 10.8.0.5 and port 443 iptables -vnL FORWARD --line-numbers nft list ruleset | sed -n '1,60p'
O captură la ambele capete separă cazurile rămase. Un SYN care pleacă de la client și nu ajunge niciodată înseamnă rutare, criptare sau o listă de acces în amonte. Un SYN care ajunge și nu primește răspuns înseamnă serviciul sau filtrul lui de host, iar tunelul nu a fost niciodată problema.
Traficul de retur merită o privire proprie. Rutarea asimetrică plus filtrarea căii inverse aruncă răspunsurile care sosesc pe interfața greșită, ceea ce apare ca o conexiune unidirecțională în loc de un port blocat. Verificați valoarea sysctl înainte de a da vina pe firewall pentru un simptom pe care nu l-a cauzat.
Logarea funcționează ca a doua opinie, nu ca prim pas. O instrucțiune de log temporară pe lanțul de forward numește interfața și adresele care au lovit-o, și este ușor de eliminat după aceea. Lăsați-o permanent și ați construit o problemă de volum de loguri în loc de un răspuns.
Puneți fiecare modificare acolo unde supraviețuiește unei reconectări
O rută adăugată cu ip route add trăiește până când interfața cade. Salvați-o în profilul conexiunii: NetworkManager acceptă rute suplimentare pe conexiune, iar netplan le păstrează între porniri. Aceeași regulă se aplică unei excepții de firewall pe partea clientului, care dispare după următoarea reîncărcare.
Regulile de pe partea serverului aparțin fișierului de configurare pe care serviciul îl încarcă la pornire, nu unei sesiuni interactive care se termină când o închideți. Scrieți regula, reîncărcați și confirmați că contorul s-a mișcat, deoarece o reîncărcare care a respins sintaxa lasă în tăcere vechiul set de reguli pe loc.
Apoi repetați cererea originală a aplicației de la un capăt la altul și notați care strat s-a schimbat. O corecție de rută care avea nevoie și de o schimbare de filtru va eșua în continuare, iar al doilea eșec se citește mult mai ușor după ce știți că primul a dispărut. Notați data și versiunea clientului lângă rezultat, deoarece valorile implicite de rutare și filtrare se mișcă ambele între versiuni. Păstrați nota pe tichet ca următoarea persoană să înceapă de unde v-ați oprit în loc să repete drumul în două etape.