Firewall inayoruhusu lango la VPN pekee si kanuni moja. Ni maamuzi matatu tofauti ambayo kwa bahati yanahusiana na namba moja ya lango: mnyororo wa uingizaji huamua kile kinachoweza kufikia mchakato wa ndani, mnyororo wa upitishaji huamua kile kinachoweza kupita kwenye mwenyeji kwa niaba ya wateja wa handaki, na jedwali la NAT huandika upya anwani ya chanzo wakati wa kutoka. Kosa moja kati ya haya na matokeo mara chache huwa usumbufu safi. Unapata mwenyeji anayekubali wateja lakini hapakii kitu, au mwenyeji anayeonekana amefungwa hadi mtu asome mpangilio wa minyororo.

Lango pekee lisiloweza kufungwa

Msikilizaji wa VPN lazima akubali miunganisho kutoka anwani usizoweza kuzitabiri, kwa hiyo ni huduma ya umma kwa ufafanuzi. Hii ndiyo isiyo ya kawaida pekee ambayo muundo umejengwa juu yake: lango moja la UDP kwa OpenVPN, lango moja la UDP kwa WireGuard, lango moja la TCP kwa VPN ya SSL. Kila kitu kingine ni cha nyuma ya handaki, maana yake huduma za programu zinapaswa kujifunga kwenye anwani ya handaki au loopback, si kwenye kila kiolesura.

Hata hivyo kufunga si utekelezaji. Mchakato uliofungwa kwenye 0.0.0.0 unafikiwa tu ikiwa kanuni inaruhusu, na sera chaguo-msingi ni mbadala wa trafiki ambayo hakuna kanuni iliyoilinganisha, si kanuni inayosimamia lango. Kibali kilichowekwa juu ya kataa yako bado ni kibali, na kuhamisha huduma kutoka anwani ya umma ni uboreshaji huru, si mbadala wa mnyororo.

Uingizaji, upitishaji na NAT hujibu maswali tofauti

Trafiki ya uingizaji inaelekezwa kwa mwenyeji mwenyewe, kwa hiyo msikilizaji wa VPN na njia ya kiutawala huishi hapo. Trafiki ya upitishaji hupita kwenye mwenyeji, na wateja wa handaki wanaihitaji pamoja na net.ipv4.ip_forward=1. Mpangilio wa kawaida uliovunjika nusu huruhusu mtiririko wa kutoka na kusahau mwelekeo wa kurudi, kwa hiyo mteja hukamilisha kupeana mikono kisha hakuna kinachopakiwa; kanuni ya conntrack kwa trafiki iliyoanzishwa na inayohusiana inashughulikia mwelekeo huo.

NAT ni swali la tatu. Bila kuandika upya katika postrouting, pakiti zilizopitishwa hutoka na chanzo cha faragha cha handaki na hutupwa juu, kwa sababu hakuna mtandao zaidi ya mwenyeji unaojua jinsi ya kuelekeza bwawa kurudi. Kiambishi cha chanzo katika kanuni hiyo lazima kilingane na bwawa la VPN, si anwani ya mwenyeji mwenyewe, na hiyo hiyo inatumika kwa kanuni ya upitishaji inayotaja subneti ya wateja.

IPv6 ni sera ya pili, si wazo la baadaye. Mwenyeji mwenye mnyororo mkali wa IPv4 na sera wazi kwenye ip6tables hajafunga chochote; huduma bado zinafikiwa kupitia familia nyingine. Ama akisi seti ya kanuni kwa ip6tables, au zima IPv6 kwa makusudi kwenye kiolesura cha umma, na uandike ni ipi uliyochagua.

Msingi unaosomwa kwa mara moja

Anza na kukataa, kisha ongeza tu kile mwenyeji anahitaji. Kwanza loopback na majibu, kisha njia ya kiutawala, kisha msikilizaji wa handaki, kisha sera ya upitishaji kwa wateja:

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT
iptables -A INPUT -p udp --dport 1194 -m conntrack --ctstate NEW -j ACCEPT
sysctl -w net.ipv4.ip_forward=1
iptables -A FORWARD -i tun0 -o eth0 -s 10.8.0.0/24 -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

Majina ya violesura, lango na bwawa ni nafasi za kubakiza; yasoma kutoka kwa seva badala ya kuyanakili. Kuhifadhi matokeo ni muhimu kama kuyandika, kwa sababu seti ya kanuni inayoishi kwenye kumbukumbu pekee hupotea kwenye kuwasha upya kunakofuata na kufungua mwenyeji tena kimya kimya. Ifanye ya kudumu kwa utaratibu wa usambazaji, na uweke nakala nje ya mashine kwa siku ambayo mashine haitawaka.

Kufunga lango la mwisho bila kumpoteza mwenyeji

Kuna mtego katika muundo. Ikiwa SSH inapatikana tu kupitia handaki, huduma ya VPN inayoshindikana huichukua SSH pamoja nayo, na njia pekee ya kurudi inaweza kuwa konsoli usiyoifungua kamwe. Kabla ya kufunga lango la mwisho la umma, thibitisha kuwa konsoli hiyo ipo na kwamba kwa kweli unaweza kuitumia, au baki na njia moja nyembamba ya kiutawala isiyotegemea handaki: SSH kutoka anwani isiyobadilika, funguo pekee, uthibitishaji wa nenosiri umezimwa.

Tumia mabadiliko kutoka kikao kilichoanzishwa tayari, si kupitia muunganisho unaokaribia kuchuja. Panga kurudi nyuma ili kosa liishe badala ya kuwa la kudumu, kwa mfano kazi ya systemd-run --on-active=10min inayorejesha seti ya awali ya kanuni, na uache kikao cha pili cha SSH wazi unapojaribu cha kwanza. Kisha thibitisha kuwa kazi ya kurudi nyuma inawaka kweli, kwa sababu urejeshaji usiojaribiwa ni sawa na kutokuwa na urejeshaji.

Thibitisha njia, si script

Soma kanuni zilizopakiwa, si faili ambayo ilipaswa kuzipakia. Kutoka kwa mwenyeji wa nje aliyeruhusiwa, thibitisha kuwa malango yaliyokusudiwa pekee ndiyo yanayojibu; kutoka ndani ya handaki, thibitisha kuwa huduma ulizokusudia kuchapisha zinafikiwa. Sera chaguo-msingi ya kukataa ambayo pia inazuia trafiki ya handaki inaonekana sawa na kufungwa kunakofanya kazi hadi mtu ajaribu kuitumia.

iptables -S
iptables -t nat -S
ss -lntup
ip -4 addr show

Andika lango lililoruhusiwa, bwawa la wateja, kiolesura cha handaki, chanzo cha kiutawala na utaratibu wa konsoli kando ya usanidi. Mabadiliko yanayofuata kwenye bwawa au jina la kiolesura lazima yalingane kwenye kichujio na kanuni ya NAT, vinginevyo mwenyeji atarudi kwenye hali ya nusu-wazi bila mtu yeyote kugundua.

Tabia moja ina thamani kuliko seti ya kanuni: baada ya kila mabadiliko, thibitisha njia ya upitishaji kwa ombi la mteja na njia ya urejeshaji kwa kikao cha pili. Ufungaji ambao hukuitumia ni dhana tu.

Makala zinazohusiana