Subversion virtuālā resursdatora vēršana uz VPN adresi maina to, kura vietne atbild uz pieprasījumu, nevis to, kam atļauts to sūtīt. Piekļuves pārbaude notiek vēlāk, saskaņā ar noteikumiem sadaļā, kas atbilda URL, un resursdatora nosaukums nekad neiekļūst šajā lēmumā. Ja ServerName bija vienīgā izmaiņa, krātuve ir tieši tikpat pieejama kā vakar. Konfigurācijā jāatbild uz diviem atsevišķiem jautājumiem: kura ligzda pieņēma savienojumu un kādu identitāti nesa pieprasījums.

Ko ServerName patiesībā nosaka

Uz nosaukumu balstīta virtuālā mitināšana salīdzina Host galveni ar ServerName un ServerAlias ierakstiem, izvēlas vienu resursdatoru un ļauj tam apstrādāt pieprasījumu. Pašu savienojumu agrāk pieņēma Listen ligzda, kas pieder serverim, nevis resursdatoram. Tāpēc privāti izskatošs nosaukums nesniedz nekādu aizsardzību: jebkurš klients, kas sasniedz ligzdu, var nosūtīt šo Host galveni. Nosaukums ir maršrutēšanas atslēga, un maršrutēšanas atslēgas izvēlas izsaucējs.

Jūs varat redzēt kartējumu, neizdomājot. apachectl -S izdrukā katru resursdatoru, tā portu un nosaukumus un atzīmē, kurš ir adreses noklusējums.

RequireAll ir konteiners, kas abas pārbaudes padara obligātas

Apache 2.4 iesaiņo vienas sadaļas Require direktīvas netiešā RequireAny, tāpēc divas kailas direktīvas nozīmē, ka pietiek ar jebkuru no tām. Pievienojiet konteineru, un nozīme apgriežas:

<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 prasa abus nosacījumus: avota adresi tuneļa diapazonā un lietotāju, kuru krātuve pieņem. Tam vajadzētu nozīmēt tikai-VPN Subversion URL gadījumā. mod_authz_core atsauce dokumentē konteinera noteikumus. Atstājiet bloku esošajā krātuves Location un atstājiet vietā jau strādājošās DAV direktīvas, jo šis fragments neaizstāj ne AuthType, ne paroļu failu, ne ceļa līmeņa autorizāciju.

Avota pārbaude nāk no mod_authz_host, tāpēc pirms jebkā cita atkļūdošanas pārliecinieties, ka tas ir ielādēts: apachectl -M | grep authz_host.

Adrese, ko Apache novērtē, ir ligzdas adrese

Require ip salīdzina ar adresi, ko Apache reģistrēja savienojumam, un tā ne vienmēr ir adrese, kuru klients uzskata, ka tam ir.

Kad VPN maršrutē savas adreses bez tulkošanas, Apache redz tuneļa adresi un 10.8.0.0/24 atbilst. Kad vārteja tulko, Apache redz vārteju un noteikums klusi neatbilst nekam; tas pats notiek aiz slodzes balansētāja, kas pārtrauc TLS resursdatora priekšā. Šim gadījumam pastāv mod_remoteip. RemoteIPHeader X-Forwarded-For kopā ar balansētājam paredzēto RemoteIPTrustedProxy aizstāj reģistrēto adresi, un tikai tad diapazonam ir ar ko salīdzināt.

Uzticēties patvaļīgai pārsūtīšanas galvenei ir sliktāk nekā vispār nebūt noteikumam. Jebkurš klients var nosūtīt X-Forwarded-For ar 10.8.0.9 un izpildīt diapazona pārbaudi, kas nekad nav bijusi piesaistīta uzticamam lēcienam.

Sakārtojiet klausītāju un krātuves politiku slāņos

Saistīšana ir atsevišķa kontrole un bieži vien vienkāršākā. Listen 10.8.0.1:443 nosaka, kuras ligzdas pastāv, un pieprasījums nevar izvēlēties resursdatoru ligzdā, kas nekad nav atvērta. Cena ir palaišanas secība: ja tuneļa saskarne ir izslēgta, kad Apache startē, saistīšana neizdodas un pakalpojums nepaceļas. Saistiet to ar vienību secību vai saistiet ar adresi, kas pastāv neatkarīgi no tuneļa.

Ceļa atļaujas paliek AuthzSVNAccessFile. Derīgs vietnes konts nav tāda pati atļauja kā rakstīšanas piekļuve projekta ceļam, un tīkla noteikums to nemaina.

Sekojiet sadaļu apvienošanai, kad bloks atrodas iekļautā failā. Apache apvieno autorizācijas konteinerus pāri ligzdotām sadaļām, un visprecīzāk atbilstošā sadaļa var aizstāt prasību, nevis to papildināt, tāpēc noteikums uz /svn var nesasniegt /svn/repo/trunk, tiklīdz šaurāka sadaļa definē savu.

Pierādiet abus atteikumus, pirms saucat to par pabeigtu

Pārbaudiet četrus pieprasījumus, nevis vienu. VPN iekšienē ar derīgu kontu jums jāsaņem krātuves saraksts. VPN iekšienē ar nepareizu paroli jums jāsaņem 401, nevis saraksts. Ārpus VPN ar derīgiem akreditācijas datiem jums jāsaņem 403, un tādam pašam publiskam pieprasījumam uz alternatīvu resursdatora nosaukumu ir jāneizdodas tāpat.

Ar vienu komandu katram gadījumam pietiek: curl -sI -u user:pass https://svn.example.com/svn/repo/, pēc tam nolasiet statusa rindu. Atkārtojiet strādājošo gadījumu arī ar īstu klientu, jo svn info trenē DAV metodes, ko izmantos commit un atjauninājumi.

Ja kāds no četriem rezultātiem neatbilst politikai, ko bijāt iecerējis, konfigurācija nav pabeigta, un resursdatora pārdēvēšana to nemainīs.

Saistītie raksti