د 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 هغه DAV میتودونه تمرینوي چې commit او تازه کول به یې وکاروي۔
که د څلورو پایلو څخه کومه یوه ستاسو د غوښتل شوې تګلارې سره سمون ونه خوري، ترتیبات بشپړ نه دي، او د کوربه نوم بدلول به دا بدل نکړي۔