Mtu anaomba kivinjari kitumie handaki, na jibu hurudi kama kanuni ya ukuta wa moto inayolingana na lango lengwa 80 na 443. Inaonekana mahususi na haiko hivyo. Ulinganisho wa lango huchagua pakiti kwa kichwa chake cha usafirishaji, si kwa programu iliyofungua soketi, na uvinjari wa kisasa haujifungi kwenye malango hayo mawili kwenye TCP. Kanuni itakosa baadhi ya trafiki uliyokusudia kujumuisha na itakamata trafiki usiyokuwa na nia ya kuigusa. Kabla ya kuiandika, amua ni mpaka upi kati ya mitatu tofauti unautaka kwa kweli.

Kanuni inaeleza tabaka la usafirishaji, si programu

Kwenye Linux, ulinganisho wa lango lengwa hukagua kichwa cha TCP na hakuna chochote juu yake. Kuweka alama kwenye pakiti hizo na kuzielekeza kwa njia ya sera hufanya kazi kama ilivyoandikwa, na hakuna moja ya mitambo hiyo inayojua mzigo unamaanisha nini au mchakato upi uliituma. Alama ni namba iliyoambatishwa kwenye pakiti, si utambulisho ulioambatishwa kwenye programu.

nft add rule inet mangle output tcp dport { 80, 443 } meta mark set 0x1
ip rule add fwmark 0x1 table 100
ip route add default dev wg0 table 100

Matoatoa mawili hufuata mara moja. Kisasisisha programu kinachowasiliana na TCP 443 hupata matibabu sawa na kivinjari, jambo ambalo linaweza kuwa sawa au kuwa kizuizi kinachosubiri mzunguko ujao wa usasishaji. Na huduma ya wavuti iliyochapishwa kwa makusudi kwenye lango lingine, tuseme 8443, huanguka nje ya kanuni kabisa ingawa bado ni trafiki ya wavuti ambayo mtumiaji aliijali.

Namba ni vichaguzi halali wakati hitaji linahusu kweli malango hayo. Huwa hadithi ya kubuni wakati tiketi inaandika «kivinjari» na masafa ya malango yanatekelezwa katika seti ya kanuni. Pengo hilo si uzuri wa nyaraka. Ni tofauti kati ya kanuni unayoweza kuitetea katika ukaguzi na ile ambayo hakuna anayeweza kuijaribu.

HTTP/3 huiacha kanuni yako ya TCP kwa kimya

HTTP/3 hufanya kazi juu ya QUIC, na QUIC husafirishwa kwa UDP. Kanuni inayolingana na TCP pekee haiwezi kuiona, kwa hivyo kivinjari hicho hicho kinachofaulu ukurasa wako wa majaribio kinaweza kutuma ombi la baadaye kwa UDP na kukwepa handaki bila mtu yeyote kubadilisha mpangilio. RFC 9114 inaeleza HTTP/3 kama itifaki inayotegemea QUIC, na QUIC hutumia UDP yenye lango chaguo-msingi 443 katika usambazaji wa kawaida.

Ikiwa kivinjari fulani kitajaribu HTTP/3 hutegemea usanidi wake, tovuti na ikiwa jaribio la awali lilifaulu. Hilo huifanya kuwa kitu kibaya cha kufikiria kutoka kwa kumbukumbu. Uliza chombo badala yake:

curl --http3 -sS -o /dev/null -w '%{http_version} %{time_total}\n' https://example.com
ss -tunp | grep -E ':443\b'

Mstari wa curl huchapisha toleo lililojadiliwa, kwa hivyo 3 huthibitisha kwamba njia ya UDP ilitumika. Kisha orodha ya soketi huonyesha ikiwa muunganisho huo umeunganishwa na kiolesura cha handaki au cha kimwili. Ikiwa HTTP/3 haipatikani kwenye ujenzi wako wa curl, bendera hushindwa kwa sauti kubwa badala ya kurudi nyuma kwa kimya, jambo ambalo ni rehema yake ndogo.

DNS ni uamuzi tofauti unaopaswa kuufanya

Kanuni ya lango kwa trafiki ya wavuti haisemi chochote kuhusu utatuzi wa majina. Kivinjari kinaweza kutumia kitatuzi cha mfumo, kitatuzi kilichosanidiwa ndani ya kivinjari, au kile kilichosukumwa na muunganisho wa mwisho. Kila kimoja kinaweza kutuma maswali kwa njia tofauti na ile inayochaguliwa na kanuni yako, jambo ambalo huzalisha mgawanyiko wa kawaida: ukurasa hupakiwa, jina hutatuliwa mahali usikokutarajia, na tovuti ya ndani hutatuliwa kwenda anwani ya umma au haitatuliwi kabisa.

Amua hilo kwa uwazi. Ikiwa majina ya ndani lazima yatatuliwe kupitia handaki, kitatuzi lazima kiwe ndani yake, na seti ya kanuni lazima iruhusu DNS kwa kitatuzi hicho huku ikizuia maswali mengine nje. Ikiwa kivinjari kinatumia DNS over HTTPS kwa mtoa huduma wa umma, swali hupita kitatuzi chako kabisa na kanuni ya lango haiwezi kusaidia. Andika chaguo katika rekodi hiyo hiyo ya mabadiliko kama kanuni ya uelekezaji, kwa sababu zote mbili husomwa pamoja na yeyote atakayetatua hitilafu inayofuata.

Kisha thibitisha kwa kitatuzi badala ya ukurasa:

resolvectl query intranet.example.internal
resolvectl status | grep -A3 'Current DNS Server'

Jibu lililokosekana ni tatizo la utatuzi hata wakati ujumbe wa hitilafu wa kivinjari unailaumu mtandao. Hitilafu hizi mbili huonekana sawa kwa mtumiaji na ni tiketi tofauti kabisa.

Mipaka mitatu, mbinu tatu tofauti

Fadhaa nyingi huondoka mara tu unapotaja mpaka unaoutaka. Hazibadilishani, na kila moja ina namna tofauti ya kushindwa wakati handaki linapoanguka.

What you actually wantMechanism that fitsWhat it does not cover
These transport ports use this exitFirewall mark plus policy routeApplications, HTTP/3 over UDP, DNS
This browsing session stays separateApplication-aware VPN, or a separate network namespace plus a proxyOther applications in the same session
Only these private sites are reachableDestination-based routes with private DNSPublic sites on the same address family

Wasifu tofauti wa kivinjari ni mtego wa mstari wa kati. Hutenganisha vidakuzi na historia, na haubadilishi chochote kwenye jedwali la uelekezaji la mwenyeji, kwa hivyo wasifu wote wawili huchukua njia moja. Utengano unahitaji kitu ambacho kerneli hulazimisha, yaani nafasi ya majina, kontena au programu inayomiliki kiolesura chake cha handaki.

Mstari wowote unaotumika, andika kinachopaswa kutokea handaki linapoanguka. Njia inayotegemea alama ambayo hupotea pamoja na kiolesura kwa kawaida hurudi kwenye njia chaguo-msingi ya kimwili, jambo ambalo ni tabia ya fail-open. Hilo linaweza kukubalika kwa uvinjari na halikubaliki kwa kitu kingine chochote, na ni uamuzi, si maelezo ya utekelezaji.

Jaribu mitiririko unayodai kuifunika

Jaribio la kukubalika lazima lifuate mpaka uliouandika, si namba za lango zilizokuwa rahisi. Chagua mtiririko mmoja ambao lazima upite handakini, mmoja ambao haupaswi, na mmoja unaotumia usafirishaji usioutafakari:

ip route get 203.0.113.40
curl -sS -o /dev/null -w 'v4 %{http_version} %{remote_ip}\n' https://example.com
nft list ruleset | grep -A2 'dport'

Utafutaji wa njia hukuambia kiolesura kipi lengo hutumia kwa kweli, na hilo ni ukweli ambao ripoti nyingi huukosea. Mstari wa curl huthibitisha toleo lililojadiliwa na familia ya anwani. Utoaji wa seti ya kanuni hukamata kanuni uliyoiongeza wakati wa majaribio na ukasahau kuipunguza, na hivyo alama ya muda huja kuwa uelekezaji wa fail-open wa kudumu.

Rekodi matokeo yote matatu na muhuri wa muda na uyahifadhi pamoja na mabadiliko. Wakati baadaye mtu anaripoti kwamba «VPN iliharibu intraneti», tofauti kati ya mpaka uliokusudiwa na ule uliotekelezwa itaonekana kwenye rekodi hiyo, na marekebisho yatakuwa mabadiliko ya kanuni, si mjadala.

Makala zinazohusiana