Apache 2.4 менен Subversion хостун VPN колдонуучуларына чектөө
ServerName виртуалдык хост тандайт, бирок ким туташаарын чектебейт. VPN диапазонун жана реалдуу кампа колдонуучусун талап кылып, эки баш тартууну тең далилдеңиз.
Subversion виртуалдык хосту VPN дарегине багыттоо кайсы сайт сурамга жооп берерин өзгөртөт, ким аны жөнөтүүгө укуктуу экенин эмес. Жеткиликтүүлүктү текшерүү кийинчерээк, URLге дал келген бөлүмдүн эрежелери боюнча жүрөт, жана хосттун аты бул чечимге эч качан кирбейт. Эгер ServerName сиздин жалгыз өзгөртүүңүз болсо, кампа кечээгидей жеткиликтүү. Конфигурацияда эки өзүнчө суроого жооп берүү керек: кайсы сокет туташууну кабыл алды жана сурам кайсы инсанды алып жүрдү.
ServerName чындыгында эмнени чечет
Атка негизделген виртуалдык хостинг Host аталышын ServerName жана ServerAlias жазуулары менен салыштырат, бир хостту тандайт жана ага сурамды иштетүүгө уруксат берет. Туташуунун өзүн мурун серверге таандык Listen сокети кабыл алган, хостко эмес. Ошондуктан жеке көрүнгөн ат эч кандай коргоо бербейт: сокетке жеткен ар кандай кардар ошол Host аталышын жөнөтө алат. Ат — маршруттоо ачкычы, маршруттоо ачкычтарын чакырган тандайт.
Дал келүүнү болжолсуз көрө аласыз. apachectl -S ар бир хостту, анын портун жана аттарын басып чыгарат жана дарек үчүн кайсынысы демейки экенин белгилейт.
RequireAll — эки текшерүүнү тең милдеттүү кылган контейнер
Apache 2.4 бир бөлүмдүн Require директиваларын жашыруун RequireAny ичине ороп, эки жылаңач директива алардын бири жетиштүү дегенди билдирет. Контейнерди кошуңуз, мааниси тескери болот:
<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 эки шартты тең талап кылат: туннелдин диапазонундагы булак дареги жана кампа кабыл алган колдонуучу. Subversion URL үчүн тек-VPN ушуну билдириши керек. mod_authz_core маалымдамасы контейнердин эрежелерин документтештирет. Блокту кампанын учурдагы Location ичинде калтырыңыз жана буга чейин иштеп жаткан DAV директиваларын ордунда калтырыңыз, анткени бул үзүндү AuthType, сырсөз файлы же жол деңгээлиндеги авторизацияны алмаштырбайт.
Булак текшерүүсү mod_authz_host модулунан келет, ошондуктан башка нерсени оңдоодон мурун анын жүктөлгөнүн ырастаңыз: apachectl -M | grep authz_host.
Apache баалаган дарек — сокеттин дареги
Require ip Apache туташуу үчүн жазган дарек менен салыштырат, бул кардар өзүндө бар деп ойлогон дарек ар дайым эмес.
VPN даректерин котормосуз маршруттаганда Apache туннелдин дарегин көрөт жана 10.8.0.0/24 дал келет. Шлюз которгондо Apache шлюзду көрөт жана эреже үнсүз эч нерсеге дал келбейт; хосттун алдында TLS-ти бүтүргөн жүктөө теңдештиргичинин артында да ушундай болот. Ошол учур үчүн mod_remoteip бар. Теңдештиргич үчүн RemoteIPTrustedProxy менен бирге RemoteIPHeader X-Forwarded-For жазылган даректи алмаштырат, ошондо гана диапазондун салыштырар нерсеси болот.
Каалаган жөнөтүү аталышына ишенүү эч эреже жок болгондон да жаман. Ар кандай кардар 10.8.0.9 камтыган X-Forwarded-For жөнөтүп, ишенимдүү секирикке эч качан байланбаган диапазон текшерүүсүн канааттандыра алат.
Угуучуну жана кампанын саясатын катмарлаңыз
Байлоо өзүнчө көзөмөл жана көбүнчө жөнөкөйүрөөк. Listen 10.8.0.1:443 кайсы сокеттер бар экенин чечет, жана сурам эч качан ачылбаган сокетте хост тандай албайт. Баасы — баштоо тартиби: эгер Apache башталганда туннелдин интерфейси өчүк болсо, байлоо ишке ашпайт жана кызмат көтөрүлбөйт. Аны бирдиктердин тартиби менен коштоп коюңуз же туннелге көз карандысыз дарекке байлаңыз.
Жол уруксаттары AuthzSVNAccessFile ичинде калат. Сайт үчүн жарактуу эсеп долбоордун жолуна жазуу укугу менен бирдей эмес, жана тармак эрежеси муну өзгөртпөйт.
Блок киргизилген файлда турганда бөлүмдөрдүн биригишине көңүл буруңуз. Apache авторизация контейнерлерин уяланган бөлүмдөр боюнча бириктирет жана эң так дал келген бөлүм талапты кошуунун ордуна алмаштырышы мүмкүн, ошондуктан /svn эрежеси тар бөлүм өзүнүкүн аныктаганда /svn/repo/trunk-га жетпеши мүмкүн.
Бүттү деп айтуудан мурун эки баш тартууну тең далилдеңиз
Бир эмес, төрт сурамды сынаңыз. VPN ичинде жарактуу эсеп менен кампанын тизмесин алышыңыз керек. VPN ичинде туура эмес сырсөз менен тизме эмес, 401 алышыңыз керек. VPN сыртынан жарактуу кирүү маалыматтары менен 403 алышыңыз керек, жана башка хост атына болгон ошол эле коомдук сурам да ушундай ишке ашпашы керек.
Ар бир учурга бир буйрук жетиштүү: curl -sI -u user:pass https://svn.example.com/svn/repo/, анан статус сабын окуңуз. Иштеген учурду реалдуу кардар аркылуу да кайталаңыз, анткени svn info commit жана жаңыртуулар колдоно турган DAV ыкмаларын машыктырат.
Эгер төрт жыйынтыктын кайсынысы болбосун сиз көздөгөн саясатка каршы келсе, конфигурация бүтө элек, жана хосттун атын өзгөртүү муну өзгөртпөйт.