Cyfyngu gwesteiwr Subversion i ddefnyddwyr VPN gydag Apache 2.4
Mae ServerName yn dewis gwesteiwr rhithwir; nid yw'n cyfyngu pwy sy'n cysylltu. Mynnwch yr ystod VPN a defnyddiwr storfa go iawn, yna profwch y ddau wrthodiad.
Mae cyfeirio gwesteiwr rhithwir Subversion at gyfeiriad VPN yn newid pa safle sy'n ateb cais, nid pwy sydd â chaniatâd i anfon un. Mae'r gwiriad mynediad yn digwydd yn ddiweddarach, yn ôl y rheolau yn yr adran a oedd yn cyfateb i'r URL, ac nid yw enw gwesteiwr byth yn dod i'r penderfyniad hwnnw. Os mai ServerName oedd eich unig newid, mae'r storfa yr un mor gyrraeddadwy ag yr oedd ddoe. Rhaid ateb dau gwestiwn ar wahân yn y ffurfweddiad: pa soced a dderbyniodd y cysylltiad, a pha hunaniaeth a gariai'r cais.
Beth mae ServerName yn ei benderfynu mewn gwirionedd
Mae gwesteiwr rhithwir yn seiliedig ar enw yn cymharu'r pennawd Host â chofnodion ServerName a ServerAlias, yn dewis un gwesteiwr ac yn gadael iddo drin y cais. Derbyniwyd y cysylltiad ei hun yn gynharach gan soced Listen sy'n perthyn i'r gweinydd, nid i'r gwesteiwr. Dyna pam nad yw enw sy'n edrych yn breifat yn cynnig unrhyw amddiffyniad: gall unrhyw gleient sy'n cyrraedd y soced anfon y pennawd Host hwnnw. Mae'r enw yn allwedd llwybro, a'r sawl sy'n galw sy'n dewis allweddi llwybro.
Gallwch weld y mapio heb ddyfalu. Mae apachectl -S yn argraffu pob gwesteiwr, ei borth a'i enwau, ac yn nodi pa un yw'r rhagosodedig ar gyfer y cyfeiriad.
RequireAll yw'r cynhwysydd sy'n gwneud y ddau wiriad yn orfodol
Mae Apache 2.4 yn lapio cyfarwyddiadau Require un adran mewn RequireAny ymhlyg, felly mae dau gyfarwyddiad noeth yn golygu bod unrhyw un yn ddigon. Ychwanegwch y cynhwysydd ac mae'r ystyr yn gwrthdroi:
<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>Mae RequireAll angen y ddau amod: cyfeiriad ffynhonnell o fewn amrediad y tiwnel a defnyddiwr y mae'r storfa yn ei dderbyn. Dyna a ddylai VPN-yn-unig ei olygu ar gyfer URL Subversion. Mae cyfeirlyfr mod_authz_core yn dogfennu rheolau'r cynhwysydd. Cadwch y bloc o fewn y Location presennol ar gyfer y storfa a gadewch y cyfarwyddiadau DAV sy'n gweithio eisoes yn eu lle, oherwydd nid yw'r darn hwn yn disodli AuthType na'r ffeil gyfrinair nac awdurdodi ar lefel llwybr.
Daw'r prawf ffynhonnell o mod_authz_host, felly cadarnhewch ei fod wedi'i lwytho cyn dadfygio unrhyw beth arall: apachectl -M | grep authz_host.
Y cyfeiriad y mae Apache yn ei werthuso yw cyfeiriad y soced
Mae Require ip yn cymharu â'r cyfeiriad a gofnododd Apache ar gyfer y cysylltiad, ac nid dyma'r cyfeiriad y mae'r cleient yn credu sydd ganddo bob amser.
Pan fo'r VPN yn llwybro ei gyfeiriadau heb gyfieithu, mae Apache yn gweld cyfeiriad y tiwnel ac mae 10.8.0.0/24 yn cyfateb. Pan fo porth yn cyfieithu, mae Apache yn gweld y porth ac mae'r rheol yn methu â chyfateb unrhyw beth yn dawel; mae'r un peth yn digwydd y tu ôl i falansiwr sy'n terfynu TLS o flaen y gwesteiwr. Mae mod_remoteip yn bodoli ar gyfer y cas hwnnw. Mae RemoteIPHeader X-Forwarded-For ynghyd â RemoteIPTrustedProxy ar gyfer y balansiwr yn disodli'r cyfeiriad a gofnodwyd, a dim ond yna mae gan yr amrediad rywbeth i'w gymharu ag ef.
Mae ymddiried mewn pennawd anfon mympwyol yn waeth na pheidio â chael unrhyw reol. Gall unrhyw gleient anfon X-Forwarded-For yn cynnwys 10.8.0.9 a bodloni gwiriad amrediad na chafodd ei angori erioed i gyfnewid y gellir ymddiried ynddo.
Haenwch y gwrandawr a pholisi'r storfa
Mae rhwymo yn reolaeth ar wahân ac yn aml y symlaf. Mae Listen 10.8.0.1:443 yn penderfynu pa socedi sy'n bodoli, ac ni all cais ddewis gwesteiwr ar soced na chafodd ei agor erioed. Y gost yw trefn cychwyn: os yw rhyngwyneb y tiwnel i lawr pan fydd Apache yn cychwyn, mae'r rhwymiad yn methu ac nid yw'r gwasanaeth yn codi. Parwch ef â threfn unedau, neu rwymwch at gyfeiriad sy'n bodoli'n annibynnol o'r tiwnel.
Mae caniatâd llwybr yn aros yn AuthzSVNAccessFile. Nid yw cyfrif dilys ar gyfer y safle yr un caniatâd â mynediad ysgrifennu at lwybr prosiect, ac nid yw'r rheol rwydwaith yn newid hynny.
Gwyliwch am uno adrannau pan fo'r bloc mewn ffeil sydd wedi'i chynnwys. Mae Apache yn uno cynwysyddion awdurdodi ar draws adrannau nythog a gall yr adran gyfatebol fwyaf penodol ddisodli'r gofyniad yn lle ychwanegu ato, felly efallai na fydd rheol ar /svn yn cyrraedd /svn/repo/trunk unwaith y bydd adran gulach yn diffinio ei hun.
Profwch y ddau wrthodiad cyn ei alw'n orffenedig
Profwch bedwar cais, nid un. Y tu mewn i'r VPN gyda chyfrif dilys dylech gael rhestr y storfa. Y tu mewn i'r VPN gyda chyfrinair anghywir dylech gael 401 yn hytrach na rhestr. O'r tu allan i'r VPN gyda manylion dilys dylech gael 403, a rhaid i'r un cais cyhoeddus at enw gwesteiwr arall fethu yr un ffordd.
Mae un gorchymyn fesul achos yn ddigon: curl -sI -u user:pass https://svn.example.com/svn/repo/, yna darllenwch y llinell statws. Ailadroddwch yr achos sy'n gweithio drwy'r cleient go iawn hefyd, oherwydd mae svn info yn arfer y dulliau DAV y bydd ymrwymiadau a diweddariadau yn eu defnyddio.
Os yw unrhyw un o'r pedwar canlyniad yn anghytuno â'r polisi roeddech yn ei fwriadu, nid yw'r ffurfweddiad wedi gorffen, ac ni fydd ailenwi'r gwesteiwr yn newid hynny.