Nechajte jeden klient OpenVPN spojiť sa SSH k druhému bez otvorenia fondu adries
Ponechajte client-to-client vypnuté, prenechajte jadru preposielanie jedného toku a zvyšok fondu nechajte zavretý. Dve pravidlá na serveri a jedno na cieli.
Jeden klient potrebuje dosiahnuť SSH službu iného klienta a zvyšok fondu má zostať izolovaný ako doteraz. Lákavým prepínačom je client-to-client, ktorý zapne vzájomný prístup pre všetkých naraz a rozhodnutie odovzdá OpenVPN namiesto jadra. Užšia odpoveď nechá tento prepínač vypnutý a nechá serverový routing a firewall niesť presne jeden tok.
Mechanizmus je dôležitejší než text pravidla, pretože oba prístupy umiestňujú paket na rôzne miesta. Keď viete, ktorý ste zvolili, vysvetlí to aj pravidlo, ktoré ako by nič nerobilo, aj protistranu, ktorá sa bez neho pripojí.
Kam client-to-client posúva paket
Keď je client-to-client zapnuté, server preposiela paket protistrany interne, namiesto toho aby ho poslal späť von tunelovým zariadením, takže paket sa nikdy nedostane na preposielaciu cestu jadra. To je pohodlné a tiež to znamená, že váš firewall nikdy neuvidí tok, ktorý má strážiť. Nechajte voľbu vypnutú a server odošle paket späť von tým istým rozhraním, čo ho postaví pred netfilter. To isté rozhranie dnu, to isté von, a reťaz FORWARD má slovo.
Výmena je jasná: získate rozhodovací bod a prevezmete routing a preposielanie, ktoré za vás robila skratka. Tá práca je pri jednom toku malá a rastie s každou výnimkou, ktorú pridáte. Spočítajte výnimky teraz, pretože sada pravidiel je miesto, kde zásady voči protistranám skutočne žijú.
Cesta, ktorou paket protistrany skutočne prechádza
Predpokladajte službu Linux Community OpenVPN 2.6, spracovanie TUN v používateľskom priestore namiesto DCO, subnet topológiu, tun0 a fond 10.44.0.0/24 s klientom A na 10.44.0.21 a klientom B na 10.44.0.37. Pri subnet topológii adresa a maska, ktoré A dostal, už fond pokrývajú, takže A pošle paket do tunelového zariadenia bez potreby ďalšej tlačenej routy. Overte efektívnu routu na A namiesto toho, aby ste nejakú predpokladali.
Na serveri paket dorazí adresovaný B, čo nie je lokálna adresa, takže sa preposiela. Preposielanie IPv4 musí byť zapnuté, aby k tomu vôbec došlo, a vyhľadanie routy musí paket poslať späť cez tun0. Firewall teda vidí preposielaný tok s rovnakým rozhraním na oboch stranách, a to je detail, ktorý väčšina sád pravidiel prehliadne. Tu nie je potrebný preklad zdroja a zachovanie adresy A je to, čo B umožní uplatniť jeho vlastné pravidlo podľa zdroja.
Dve pravidlá na serveri, v tomto poradí
Celé povolenie nesú tri pravidlá: preposielanie, výnimka pre dvojicu a predvolené zahadzovanie pre tunelovú dvojicu. Pravidlo prijatia pomenúva dvojicu a službu, takže povolenie prežije rastúci fond. Umiestnite ho pred akýmkoľvek plošným zamietnutím prevádzky tunel-tunel, pretože prvá zhoda vyhráva:
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 DROPTie príkazy sú ilustratívne a patria do mechanizmu, ktorým váš hostiteľ pravidlá uchováva; vloženie za behu zmizne pri ďalšom štarte. Je to stavové pravidlo, ktoré nechá odpovede B a TCP handshake vrátiť sa bez druhého, zrkadlového prijatia.
Potom skontrolujte počítadlá, nie výpis pravidiel, pretože pravidlo, ktoré nikdy neodpovedá, vyzerá rovnako ako to, ktoré funguje. Ak počítadlá zostanú na nule, paket nejde cestou, ktorou si myslíte.
Čo musí B ešte povoliť
B prevádzkuje SSH službu, takže B rozhoduje o tom, či na tunelovej adrese niečo počúva a či jeho vlastný firewall hostiteľa zdroj prijme. Sieťové povolenie na serveri nie je povolením pre žiadny účet na B a overenie kľúča hostiteľa aj autentifikácia používateľa stále platia ako odinakiaľ.
Najprv otestujte pozitívny prípad: nové SSH spojenie z A na tunelovú adresu B, prijaté s očakávaným kľúčom hostiteľa. Potom otestujte inú protistranu alebo iný port a overte, že je odmietnuté, pretože povolenie, ktoré potichu dovolí všetko, je na nerozoznanie od toho, ktoré funguje, kým na tom nezáleží. Obe polovice tohto testu sú nutné a druhú ľudia preskakujú.
Zapíšte si pridelené adresy, efektívne routy na oboch klientoch a presné pravidlá na serveri a na B. Úspešný ping na bránu alebo otvorený port na serveri nič z toho nedokazuje, pretože oboje môže platiť, kým je preposielanie medzi protistranami stále zablokované. Zapíšte tie čísla, kým je tunel hore, pretože adresa, ktorú klient dostane po opätovnom pripojení, môže byť iná.