Zuia mwenyeji wa Subversion kwa watumiaji wa VPN kwa Apache 2.4
ServerName huchagua mwenyeji pepe; haizuii nani anajiunga. Dai masafa ya VPN na mtumiaji halisi wa hazina, kisha thibitisha makataa yote mawili.
Kuelekeza mwenyeji pepe wa Subversion kwenye anwani ya VPN hubadilisha tovuti ipi inajibu ombi, si nani anaruhusiwa kulituma. Ukaguzi wa ufikiaji hufanyika baadaye, kwa kanuni zilizo katika sehemu iliyolingana na URL, na jina la mwenyeji haliingii kamwe katika uamuzi huo. Ikiwa ServerName lilikuwa badiliko lako pekee, hazina inapatikana sawa na jana. Maswali mawili tofauti yanapaswa kujibiwa katika usanidi: soketi ipi ilikubali muunganisho na utambulisho upi uliobeba ombi.
ServerName huamua nini kwa hakika
Upangishaji pepe unaotegemea jina hulinganisha kichwa cha Host na maingizo ya ServerName na ServerAlias, huchagua mwenyeji mmoja na kumruhusu ashughulikie ombi. Muunganisho wenyewe ulikubaliwa mapema na soketi ya Listen inayomilikiwa na seva, si mwenyeji. Ndiyo sababu jina linaloonekana la faragha halitoi ulinzi wowote: mteja yeyote anayefikia soketi anaweza kutuma kichwa hicho cha Host. Jina ni ufunguo wa uelekezaji, na funguo za uelekezaji huchaguliwa na anayeita.
Unaweza kuona ramani bila kukisia. apachectl -S huchapisha kila mwenyeji, bandari yake na majina yake, na huashiria lipi ni chaguo-msingi kwa anwani.
RequireAll ni chombo kinachofanya ukaguzi wote mawili kuwa lazima
Apache 2.4 hufunga maagizo ya Require ya sehemu moja ndani ya RequireAny isiyo wazi, kwa hivyo maagizo mawili wazi yanamaanisha kwamba moja yao inatosha. Ongeza chombo na maana inageuka:
<Location /svn/repo>
AuthType Basic
AuthName "Subversion"
AuthBasicProvider file
AuthUserFile /etc/apache2/svn.htpasswd
<RequireAll>
Require ip 10.8.0.0/24
Require valid-user
</RequireAll>
</Location>RequireAll huhitaji masharti yote mawili: anwani ya chanzo ndani ya masafa ya handaki na mtumiaji anayekubaliwa na hazina. Hiyo ndiyo inapaswa kumaanisha VPN-pekee kwa URL ya Subversion. Marejeleo ya mod_authz_core yanaandika kanuni za chombo. Acha kizuizi ndani ya Location iliyopo ya hazina na acha maagizo ya DAV yanayofanya kazi tayari mahali pake, kwa sababu kipande hiki hakibadilishi AuthType wala faili ya nenosiri wala idhini ya kiwango cha njia.
Jaribio la chanzo linatoka mod_authz_host, kwa hivyo thibitisha limepakiwa kabla ya kurekebisha kitu kingine: apachectl -M | grep authz_host.
Anwani ambayo Apache hutathmini ni anwani ya soketi
Require ip hulinganisha na anwani ambayo Apache ilirekodi kwa muunganisho, na si kila mara ni anwani ambayo mteja anadhani anayo.
Wakati VPN inaelekeza anwani zake bila tafsiri, Apache huona anwani ya handaki na 10.8.0.0/24 inalingana. Wakati lango linatafsiri, Apache huona lango na kanuni kimyaa hailingani na kitu; jambo hilo hilo hutokea nyuma ya kisawazisha mzigo kinachomaliza TLS mbele ya mwenyeji. Kwa hali hiyo kuna mod_remoteip. RemoteIPHeader X-Forwarded-For pamoja na RemoteIPTrustedProxy kwa kisawazisha hubadilisha anwani iliyorekodiwa, na hapo tu masafa yana kitu cha kulinganisha.
Kuamini kichwa chochote cha upelekaji ni mbaya kuliko kutokuwa na kanuni kabisa. Mteja yeyote anaweza kutuma X-Forwarded-For iliyo na 10.8.0.9 na kutimiza ukaguzi wa masafa ambao haukuwa umefungwa kamwe kwa hatua inayoaminika.
Panga kisikilizaji na sera ya hazina kwa tabaka
Ufungaji ni udhibiti tofauti na mara nyingi ndio rahisi zaidi. Listen 10.8.0.1:443 huamua soketi zipi zipo, na ombi haliwezi kuchagua mwenyeji kwenye soketi ambayo haikufunguliwa kamwe. Gharama ni mpangilio wa kuanza: ikiwa kiolesura cha handaki kiko chini Apache inapoanza, ufungaji unashindikana na huduma haipandi. Unganisha na mpangilio wa vitengo, au funga kwenye anwani inayopatikana bila kutegemea handaki.
Ruhusa za njia zinabaki katika AuthzSVNAccessFile. Akaunti halali ya tovuti si ruhusa sawa na ufikiaji wa kuandika kwenye njia ya mradi, na kanuni ya mtandao haibadilishi hilo.
Angalia muunganisho wa sehemu wakati kizuizi kiko katika faili iliyojumuishwa. Apache huunganisha vyombo vya idhini katika sehemu zilizopangwa na sehemu inayolingana mahususi zaidi inaweza kuchukua nafasi ya hitaji badala ya kuongeza, kwa hivyo kanuni kwenye /svn inaweza isifike /svn/repo/trunk mara sehemu nyembamba inapofafanua yake.
Thibitisha makataa yote mawili kabla ya kusema imekamilika
Jaribu maombi manne, si moja. Ndani ya VPN ukiwa na akaunti halali unapaswa kupata orodha ya hazina. Ndani ya VPN ukiwa na nenosiri lisilo sahihi unapaswa kupata 401 badala ya orodha. Kutoka nje ya VPN ukiwa na vitambulisho halali unapaswa kupata 403, na ombi lilelile la umma kwa jina lingine la mwenyeji lazima lishindikane vivyo hivyo.
Amri moja kwa kila kisa inatosha: curl -sI -u user:pass https://svn.example.com/svn/repo/, kisha soma mstari wa hali. Rudia kisa kinachofanya kazi kupitia mteja halisi pia, kwa sababu svn info hufanya mazoezi ya mbinu za DAV ambazo commit na masasisho zitatumia.
Ikiwa mojawapo ya matokeo manne hayapatani na sera uliyokusudia, usanidi haujakamilika, na kubadilisha jina la mwenyeji hakutabadilisha hilo.