חזרה
צור מעקף localhost עם שרת עצמי באמצעות OpenSSH ו-nginx
SiTech AI Team2 דק׳ קריאה

צור מעקף localhost עם שרת עצמי באמצעות OpenSSH ו-nginx

תצורת אירוח עצמי משלבת הפניה מרוחקת של OpenSSH עם nginx כדי לחשוף תצוגה מקדימה של localhost, להוסיף TLS כללי ולהגן על קישורים משותפים עם נתוני גישה מוגבלי תוקף מבוססי גיבוב.

הפניית תצוגה מקדימה מקומית

תצוגה מקדימה של בלוג שרץ על localhost:8080 יכולה להיות משותפת באמצעות מעקף עצמי, ללא שירות מסחרי. הפקודה ssh -N -R 0:localhost:8080 web02.luffy.cx מבקשת מ-OpenSSH להפנות פורט מרוחק לשירות המקומי. ערך 0 לפורט המרוחק מאלץ את השרת להקצות פורט פנוי, שבדוגמה הוא 41535.

בשרת המרוחק nginx מסיים חיבורי HTTPS ומפנה בקשות לפורט loopback מוקצה. ביטוי server-name לוקח את הפורט משם המארח של המעקף, מה שמאפשר ל-nginx להעביר תעבורה להפניה המקומית הנכונה. התצורה דורשת גם רשומת DNS כללית עבור *.ssh.luffy.cx ואישור כללי מ-Let's Encrypt.

הגנה על כתובות URL משותפות

ללא הגנה נוספת, הפורט המוקצה הוא הסוד היחידי שומר על התוכן חסום. התצורה משפרת את בקרת הגישה עם ngx_http_secure_link_module, אשר מחשב גיבוב מערכי הבקשה וממפתח סודי. מכיוון שגיבוב המקודד ב-base64 לא יכול להיכנס לשם דומיין רגיש לרשימה, הוא נשלח כחלק משם המשתמש של HTTP Basic Authentication, יחד עם חותם זמן תפוגה.

Nginx קורא את שם המשתמש מהמשתנה $remote_user. ביטוי map מפריד בין הגיבוב לבין חותם זמן התפוגה, וביטוי secure link מאחד את חותם הזמן, הפורט שהוקצה והמפתח הסודי המוגדר לצורך אימות. גיבוב לא קיים או שגוי גורם לתגובת 401 עם כותרת WWW-Authenticate. קישור שפג תוקפו גורם לתגובת 410. לפני שהוא מפנה בקשה תקינה, nginx מסיר את כותרת Authorization ומוגדר לתמיכה בחיבורי WebSocket.

יצירת קישורי מעקף

גיבוב הקישור נוצר מזמן התפוגה, הפורט והמפתח הסודי באמצעות פעולות MD5 ו-base64 של OpenSSL, ולאחר מכן התוצאה הופכת לטוקן בטוח ל-URL. הסקריפט העוזר משתמש באורך חיים של 86400 שניות. מכיוון ש-OpenSSH לא חושף את הפורט שהוקצה במשתנה סביבה, הסקריפט עובר על גב תהליכי האב כדי למצוא תהליכי sshd-session ואת הפורטים שהם מאזינים להם.

לאחר קבלת הפורטים, הסקריפט יוצר URL מאובטח לכל אחד ושומר את הסשן בגלוי. רשומת תצורת SSH בשם http-over-ssh מפעילה את העוזר בשרת המרוחק. התצורה המתקבלת נשענת רק על OpenSSH ועל nginx שכבר רץ שם, ותצורת NixOS נפרדת זמינה לניהול העוזר על NixOS.

SSiTech

SiTech — פיתוח אתרים בכוח ה-AI

אנחנו בונים אתרים מהירים ומודרניים ומשלבים AI בתהליכי עבודה אמיתיים. יש לכם פרויקט או שאלה? נשמח לעזור.