Neka jedan OpenVPN klijent radi SSH prema drugom bez otvaranja pula adresa
Ostavite client-to-client isključen, prepustite kernelu da proslijedi jedan tok, a ostatak pula neka ostane zatvoren. Dva pravila na serveru plus jedno na odredištu.
Jedan klijent mora doći do SSH usluge drugog klijenta, a ostatak pula treba ostati izolovan kao i danas. Prekidač koji mami je client-to-client, koji uključuje pristup među klijentima za sve odjednom i odluku predaje OpenVPN umjesto kernelu. Uže rješenje ostavlja taj prekidač isključenim i pušta da serversko rutiranje i firewall nose tačno jedan tok.
Mehanizam je važniji od teksta pravila, jer dva pristupa smještaju paket na različita mjesta. Kad znate koje ste odabrali, to objašnjava i pravilo koje kao da ništa ne radi i klijenta koji se povezuje bez njega.
Kuda client-to-client premješta paket
Kad je client-to-client uključen, server prenosi paket klijenta interno umjesto da ga pošalje natrag kroz tunelski uređaj, pa paket nikada ne stigne na kernelov put prosljeđivanja. To je zgodno i ujedno znači da vaš firewall nikada ne vidi tok koji bi trebalo da čuva. Ostavite opciju isključenu i server usmjerava paket natrag kroz isto sučelje, što ga stavlja pred netfilter. Isto sučelje ulazi, isto sučelje izlazi, a lanac FORWARD dobija glas.
Razmjena je jasna: dobijate tačku politike i preuzimate rutiranje i prosljeđivanje koje je prečica radila za vas. Taj posao je mali za jedan tok i raste sa svakim izuzetkom koji dodate. Prebrojite izuzetke sada, jer pravila su mjesto gdje politika prema klijentima zaista živi.
Put kojim paket klijenta zaista ide
Pretpostavite Linux Community OpenVPN 2.6 uslugu, obradu TUN u korisničkom prostoru umjesto DCO, subnet topologiju, tun0 i pul od 10.44.0.0/24 sa klijentom A na 10.44.0.21 i klijentom B na 10.44.0.37. Kod subnet topologije adresa i maska koju je A dobio već pokrivaju pul, pa A šalje paket tunelskom uređaju bez dodatne gurane rute. Provjerite stvarnu rutu na A umjesto da je pretpostavljate.
Na serveru paket stiže adresiran na B, što nije lokalna adresa, pa se prosljeđuje. IPv4 prosljeđivanje mora biti uključeno da bi se to uopšte dogodilo, a pretraga rute mora poslati paket natrag kroz tun0. Firewall zato vidi proslijeđeni tok sa istim sučeljem na obje strane, a to je detalj koji većina skupova pravila propusti. Ovdje nije potrebno prevođenje izvora, a očuvanje A-ove adrese je ono što B-u omogućava da primijeni svoje pravilo zasnovano na izvoru.
Dva pravila na serveru, ovim redom
Tri pravila nose cijelu dozvolu: prosljeđivanje, izuzetak za par i podrazumijevano odbacivanje za tunelski par. Pravilo prihvatanja imenuje par i uslugu, pa dozvola preživljava pul koji raste. Postavite ga prije bilo kakvog sveobuhvatnog odbijanja tunel-na-tunel saobraćaja, jer prvo podudaranje pobjeđuje:
sysctl -w net.ipv4.ip_forward=1
iptables -A FORWARD -i tun0 -o tun0 -s 10.44.0.21 -d 10.44.0.37 -p tcp --dport 22 -j ACCEPT
iptables -A FORWARD -i tun0 -o tun0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i tun0 -o tun0 -j DROPTe komande su ilustrativne i pripadaju mehanizmu koji vaš host koristi za čuvanje pravila; unos u toku rada nestaje pri sljedećem podizanju. Pravilo stanja je ono koje pušta B-ove odgovore i TCP rukovanje natrag bez drugog, preslikanog prihvatanja.
Provjerite brojače poslije, a ne listu pravila, jer pravilo koje se nikad ne podudara izgleda isto kao ono koje radi. Ako brojači ostanu na nuli, paket ne ide putem koji mislite.
Šta B još mora dopustiti
B pokreće SSH uslugu, pa B odlučuje da li bilo šta sluša na tunelskoj adresi i da li njegov vlastiti firewall prihvata izvor. Mrežna dozvola na serveru nije dozvola za bilo koji račun na B-u, a provjera ključa hosta i autentifikacija korisnika i dalje važe kao i sa bilo kojeg drugog mjesta.
Prvo testirajte pozitivan slučaj: novu SSH vezu od A do B-ove tunelske adrese, prihvaćenu sa očekivanim ključem hosta. Zatim testirajte drugog klijenta ili drugi port i potvrdite da je odbijen, jer dozvola koja tiho dopušta sve do trenutka kad je važno ne razlikuje se od one koja radi. Obje polovine tog testa su neophodne, a drugu ljudi preskaču.
Zapišite dodijeljene adrese, stvarne rute na oba klijenta i tačna pravila na serveru i na B-u. Uspješan ping do gejta ili otvoren port na serveru ne dokazuje ništa od ovoga, jer oboje može biti tačno dok je prosljeđivanje među klijentima još blokirano. Zapišite te brojeve dok je tunel podignut, jer adresa koju klijent dobije nakon ponovnog povezivanja može biti druga.