NGINX stream සන්දර්භයේ TLS passthrough සම්බන්ධතාවයට ඉඩ දෙන්න
NGINX හට TLS අවසන් නොකර TCP TLS රිලේ ප්රතික්ෂේප කළ හැක. අවසර නියමය HTTP location එකේ නොව stream එකේ තබන්න, සහ කුමන peer ලිපිනය පැමිණේ දැයි පරීක්ෂා කරන්න.
සහතිකය කිසිදා නොරඳවා සංකේතනය කළ බයිට් ඉදිරියට යැවීම TLS passthrough රිලේ කරන දෙයයි, සහ මෙම සැකසුම පහසු මෙන්ම තරමක් ව්යාකූල ය. කිසිවක් විකේතනය නොවන බැවින් පෙරහන් කිරීමට HTTP හැඩයේ කිසිවක් නැත, එබැවින් සුපුරුදු location block සහ එහි ප්රවේශ නීති මෙහි කිසිදු ප්රයෝජනයක් නැත. NGINX සතු තීරණය සම්බන්ධතාවය ගැනම ය: කුමන ජාල peer එකක් ඇමතුවා ද, සහ එම peer එක කිසිසේත් යැවිය යුතු ද.
තීරණය HTTP හි නොව stream හි ය
stream සන්දර්භයේ NGINX TCP සැසි සමඟ කටයුතු කරයි. එය සම්බන්ධතාවයේ peer ලිපිනය දකින අතර කිසිදු බයිටයක් backend වෙත ළඟා වීමට පෙර එය මත අනුපිළිවෙලින් allow සහ deny නීති යෙදිය හැක. මෙය සම්පූර්ණ පිළිගැනීමේ තීරණයක් වන අතර එයට පෞද්ගලික යතුරක්, සහතිකයක් හෝ HTTP විශ්ලේෂණයක් අවශ්ය නොවේ.
| Mechanism | What it decides | Where it lives |
|---|---|---|
| stream allow/deny | Whether this TCP peer is relayed | stream server block |
| ssl_preread map | Which backend a named connection goes to | stream, with the preread module |
| HTTP location rule | Whether an HTTP request is served | http server block |
එම පේළි තුන කිසිදා එකිනෙකට ආදේශ නොවේ. 443 වරාය සඳහන් ඕනෑම ගොනුවකට HTTP ප්රවේශ නියෝගය පිටපත් කිරීමෙන් කිසිවක් වෙනස් නොවේ, මන්ද 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 සීමා කළ නොහැක. දෙකම එක් allow පේළියක් සම්පූර්ණ මායිම ලෙස සැලකීම වෙනුවට සත්කාරක මට්ටමේ ingress ප්රතිපත්තිය රූපයේ තබා ගැනීමට හේතු වේ. මායිම එකඟ විය යුතු පාලන දෙකක් ලෙස ලියන්න, එවිට ඕනෑම එකක වෙනසක් සමාලෝචනය වේ.
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 එකකට පිළිතුරු දීමට බල නොකළ හැක, සහ ඔබ ආරම්භ කිරීමට පෙර නොතිබූ ආපසු මාර්ගයක් අලුත්වැඩියා කළ නොහැක.