Subversion virtual xostini VPN manziliga yo'naltirish qaysi sayt so'rovga javob berishini o'zgartiradi, kim unga yuborishga haqli ekanini emas. Kirish tekshiruvi keyinroq, URL ga mos kelgan bo'limdagi qoidalar bo'yicha amalga oshiriladi va xost nomi bu qarorga hech qachon kirmaydi. Agar ServerName sizning yagona o'zgarishingiz bo'lsa, ombor kechagidek ochiq. Konfiguratsiyada ikkita alohida savolga javob berish kerak: qaysi soket ulanishni qabul qildi va so'rov qanday shaxsni olib yurdi.

ServerName aslida nimani hal qiladi

Nomga asoslangan virtual xosting Host sarlavhasini ServerName va ServerAlias yozuvlari bilan solishtiradi, bitta xostni tanlaydi va unga so'rovni qayta ishlashga ruxsat beradi. Ulanishning o'zini avvalroq serverga tegishli Listen soketi qabul qilgan, xostga emas. Shuning uchun shaxsiy ko'rinadigan nom hech qanday himoya bermaydi: soketga yetib boradigan har qanday mijoz o'sha Host sarlavhasini yuborishi mumkin. Nom marshrutlash kaliti, marshrutlash kalitlarini esa chaqiruvchi tanlaydi.

Xaritalashni taxmin qilmasdan ko'rishingiz mumkin. apachectl -S har bir xostni, uning portini va nomlarini chop etadi va manzil uchun qaysi biri standart ekanini belgilaydi.

RequireAll ikkala tekshiruvni majburiy qiladigan konteyner

Apache 2.4 bitta bo'limning Require ko'rsatmalarini yashirin RequireAny ichiga o'raydi, shuning uchun ikkita yalang'och ko'rsatma ulardan biri yetarli degani. Konteynerni qo'shing, ma'no teskari bo'ladi:

<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 ikkala shartni talab qiladi: tunnel diapazoni ichidagi manba manzili va ombor qabul qiladigan foydalanuvchi. Subversion URL uchun faqat-VPN shu ma'noni bildirishi kerak. mod_authz_core ma'lumotnomasi konteyner qoidalarini hujjatlashtiradi. Blokni omborning mavjud Location ichida qoldiring va allaqachon ishlayotgan DAV ko'rsatmalarini joyida qoldiring, chunki bu parcha AuthType, parol fayli yoki yo'l darajasidagi avtorizatsiyani almashtirmaydi.

Manba tekshiruvi mod_authz_host dan keladi, shuning uchun boshqa narsani tuzatishdan oldin uning yuklanganini tasdiqlang: apachectl -M | grep authz_host.

Apache baholaydigan manzil soket manzili

Require ip Apache ulanish uchun qayd etgan manzil bilan solishtiradi va bu har doim mijoz o'zida bor deb o'ylagan manzil emas.

VPN o'z manzillarini tarjimasiz marshrutlaganda, Apache tunnel manzilini ko'radi va 10.8.0.0/24 mos keladi. Shlyuz tarjima qilsa, Apache shlyuzni ko'radi va qoida jimgina hech narsaga mos kelmaydi; xuddi shu holat xost oldida TLS ni tugatuvchi yuk balanslagichi orqasida ham bo'ladi. O'sha holat uchun mod_remoteip mavjud. Balanslagich uchun RemoteIPTrustedProxy bilan birga RemoteIPHeader X-Forwarded-For qayd etilgan manzilni almashtiradi va shundagina diapazonda solishtiradigan narsa bo'ladi.

Har qanday yo'naltirish sarlavhasiga ishonish hech qanday qoida bo'lmasligidan yomonroq. Har qanday mijoz 10.8.0.9 ni o'z ichiga olgan X-Forwarded-For yuborib, ishonchli sakrashga hech qachon bog'lanmagan diapazon tekshiruvini qanoatlantirishi mumkin.

Tinglovchi va ombor siyosatini qatlamlarga ajrating

Bog'lash alohida nazorat va ko'pincha soddaroq. Listen 10.8.0.1:443 qaysi soketlar borligini hal qiladi va so'rov hech qachon ochilmagan soketda xost tanlay olmaydi. Narx — ishga tushish tartibi: agar Apache ishga tushganda tunnel interfeysi o'chirilgan bo'lsa, bog'lash muvaffaqiyatsiz bo'ladi va xizmat ko'tarilmaydi. Uni birlik tartibi bilan bog'lang yoki tunneldan mustaqil mavjud manzilga bog'lang.

Yo'l ruxsatlari AuthzSVNAccessFile ichida qoladi. Sayt uchun haqiqiy hisob loyiha yo'liga yozish huquqi bilan bir xil ruxsat emas va tarmoq qoidasi buni o'zgartirmaydi.

Blok kiritilgan faylda bo'lsa, bo'limlar birlashuviga e'tibor bering. Apache avtorizatsiya konteynerlarini ichma-ich bo'limlar bo'ylab birlashtiradi va eng aniq mos bo'lim talabni qo'shish o'rniga almashtirishi mumkin, shuning uchun /svn dagi qoida torroq bo'lim o'zinikini belgilagach /svn/repo/trunk ga yetmasligi mumkin.

Tayyor deb aytishdan oldin ikkala rad etishni isbotlang

Bitta emas, to'rtta so'rovni sinab ko'ring. VPN ichida haqiqiy hisob bilan ombor ro'yxatini olishingiz kerak. VPN ichida noto'g'ri parol bilan ro'yxat o'rniga 401 olishingiz kerak. VPN tashqarisidan haqiqiy hisob ma'lumotlari bilan 403 olishingiz kerak va muqobil xost nomiga qilingan xuddi shu ommaviy so'rov ham xuddi shunday muvaffaqiyatsiz bo'lishi lozim.

Har bir holat uchun bitta buyruq yetarli: curl -sI -u user:pass https://svn.example.com/svn/repo/, so'ng holat satrini o'qing. Ishlaydigan holatni haqiqiy mijoz orqali ham takrorlang, chunki svn info commit va yangilanishlar ishlatadigan DAV usullarini mashq qiladi.

Agar to'rtta natijadan birortasi siz ko'zlagan siyosatga zid bo'lsa, konfiguratsiya tugallanmagan va xost nomini o'zgartirish buni o'zgartirmaydi.

O'xshash maqolalar