د تصدیق نامې هېڅکله نه ساتلو سره کوډ شوي بایټونه لیږل هغه څه دي چې TLS passthrough ریلې کوي، او دا ترتیب هم اسانه دی او هم لږ ګډوډونکی. ځکه چې هېڅ شی نه کوډ کېږي، د فلټر کولو لپاره د HTTP په بڼه هېڅ شی نشته، نو عادي location بلاک او د هغې د لاسرسي قواعد دلته هېڅ کار نه کوي. هغه پرېکړه چې NGINX یې لري د اړیکې په اړه ده: کوم شبکه یي peer ودرول شو، او ایا هغه peer باید په بشپړه توګه ولیږل شي.

پرېکړه په HTTP کې نه، په stream کې ده

په stream شرایطو کې NGINX د TCP غونډو سره کار کوي. دا د اړیکې peer پته ګوري او کولی شي د هغې په سر منظم allow او deny قواعد پلي کړي، مخکې لدې چې هر بایټ backend ته ورسیږي. دا بشپړه د منلو پرېکړه ده او شخصي کیلي، تصدیق نامې یا HTTP تحلیل ته اړتیا نه لري.

MechanismWhat it decidesWhere it lives
stream allow/denyWhether this TCP peer is relayedstream server block
ssl_preread mapWhich backend a named connection goes tostream, with the preread module
HTTP location ruleWhether an HTTP request is servedhttp server block

هغه درې کرښې هېڅکله یو بل نه بدلوي. د HTTP لاسرسي لارښود په کوم فایل کې چې د 443 پورټ یادونه کوي کاپي کول هېڅ نه بدلوي، ځکه چې stream سرور هېڅکله http شرایط نه لولي.

اړیکه ومنئ مخکې لدې چې یې ولیږئ

فرض کړئ چې د stream او stream-access ماډولونو سره یو موجود نصب دی، VPN پیریدونکي سرچینې پتې په 10.90.0.0/24 کې ساتي، او 192.168.50.20:443 کې backend لا دمخه غوښتل شوې HTTPS هویت وړاندې کوي.

stream {
    server {
        listen 443;

        allow 10.90.0.0/24;
        deny all;

        proxy_pass 192.168.50.20:443;
    }
}

دا د نوي listener ټوټې په توګه ولولئ، نه د روان ترتیب مستقیم بدلون په توګه. لومړی موجود listener او include وګورئ، ځکه چې په لا نیول شوي پورټ کې دوهم listener د غوښتنې په وخت نه، بلکې په reload کې ناکام شي.

په دې پام وکړئ چې څه نشته: listen ... ssl نشته، د تصدیق نامې لارښود نشته. NGINX کوډ شوی جریان لیږي، او backend TLS پای ته رسوي او هغه تصدیق نامه وړاندې کوي چې پیریدونکی یې تصدیقوي. هغه پیریدونکی چې په allowlist کې ناکام شي د هغې TCP غونډه رد کیږي، نه د HTTP 403 پاڼه، او هر وسیله چې د حالت کوډ تمه لري بې ګټې څه راپور کوي.

allowlist څه پوښي او څه نه پوښي

که ریلې لا دمخه backendونه د سرور نوم له مخې غوره کوي، نو د ماډول شتون سره ssl_preread او map کولی شي هغه کار ته دوام ورکړي. نوم لا هم پیریدونکی وړاندې کوي، او د نوم وړاندې کول دا نه ثابتوي چې پیریدونکی VPN ته ورننوت.

د مثال قاعده ټول stream listener پوښي. دا هغه د یوې واحدې ننوتنې نقطې لپاره ناسمه کوي چې د عامه او یوازې-VPN سایټونو مخلوط وړاندې کوي، چېرې چې د هر نوم لپاره استثنا ته اړتیا وي؛ جلا listenerونه معمولا د نوم پورې تړلي هغه پالیسۍ څخه روښانه وي چې هیڅوک یې نشي لوستلی.

دوه نور تشې د یادولو وړ دي. prefix سمون نه وایي چې پیکټ کوم انټرفېس له مخې راغی، او په بل ځای کې HTTP قاعده دا listener نه شي محدودولی. دواړه دلیلونه دي چې د host کچې ingress پالیسي په انځور کې وساتئ، پرځای دې چې یوه allow کرښه ټوله پوله وګڼئ. پوله د دوو کنټرولونو په توګه ولیکئ چې باید سره سمون ولري، ترڅو په هر یو کې بدلون وڅیړل شي.

NGINX په رښتیا د چا پته ګوري؟

د بار انډول کوونکی، بل proxy یا source NAT کولی شي NGINX ته مخکې منځګړی کېږدي، نو هغه peer چې ګوري د VPN پیریدونکي داخلي پته نه ده. د prefix غوره کولو دمخه ریښتینې لار وګورئ، ځکه چې د غلطې پتې لپاره لیکل شوې allowlist یا د ژباړونکي شاته هر څوک مني یا هیڅوک.

PROXY پروتوکول او د ریښتیني IP اداره قانوني ځوابونه دي، او یوازې د مطابقت لرونکو، په څرګنده توګه باوري لیږونکو لپاره تنظیم شي. دواړه میکانیزمونه هغه څه مني چې لیږونکی یې وایي، او همدا لامل دی چې د لیږونکو لیست باید لنډ وي. د هر انټرنیټ پیریدونکي څخه د پیژندنې سرلیک باور کول د سرچینې معلومات بیا باوري نه کوي؛ دا سم انکار په جعلي منلو بدلوي.

د reload دمخه دواړه پایلې وازموئ

ترتیب تایید کړئ، reload وکړئ، بیا دوه ځله وازموئ: یوه نوې اجازه شوې غونډه چې باید کار وکړي، او یوه رد شوې چې باید ونه کړي. په اجازه شوې ازموینه کې نورمال backend تصدیق نامې تایید وساتئ، ځکه چې هغه ریلې چې نښلي خو backend نه شي تصدیق کولی یوه ستونزه حل او بله جوړه کړې.

nginx -t
ss -tnp | grep ':443'

backend لار او ځواب هم جلا وګورئ. allowlist تېرول یوازې دا ثابتوي چې NGINX غونډه منلې؛ دا نه شي کولی نه رسېدونکی backend ځواب ته اړ کړي، او نه هغه بیرته راستنېدونکې لار سمولی شي چې ستاسو د پیل دمخه نه وه.

اړوندې مقالې