How To Set Up Password Authentication with Nginx

תומר קליין - Nginx Reverse Proxy

היום, אחת השיטות הנפוצות להגן עם שירותים שונים (אתרים או שרותים מבוססי Web כמו plex ועוד) היא על ידי שימוש במערכת הנקראת Nginx. מערכת זו יכולה לשמש כשרת אינטרנט וכן כ Reverse Proxy.
המצב בו המערכת משמשת כ Reverse Proxy ניתן בעצם לבודד את השרת מן הרשת החיצונית ולהעביר את כל התעבורה מבחוץ דרך שרת ה Reverse Proxy וכן להוסיף שכבת הגנה באמצעות שימוש בפרוטוקול SSL
עם Certificate.

נכון שלרוב גם שרותי ה Self Hosted למיניהם מוגנים בסיסמה אך יש כאלה שאינם או לחלופין ישנו אתר שכתבתם או דף אינטנרט שמאפשר לכם ביצוע פעולות ברשת הפנימית אך אינם מוגנים בשם משתמש וסיסמה או שישנם אזורים באתר אליהם תרצו להגביל את הגישה.
במאמר זה אלמדכם כיצד ניתן להוסיף שכבת הגנה על ידי הוספת שם משתמש וסיסמה לאתרים אשר עוברים דרך שרת ה NGINX שלכם.

ראשית, על מנת שנוכל להוסיף את הגדרת הסיסמאות יש להתקין Nginx על פי המאמר הבא: https://images.weserv.nl/?&maxage=120d&url=https://techblog.co.il/2017/10/raspberry-pi-ssl-certificates-using-lets-encrypt/ (ניתן לדלג על החלק של ה SSL במאמר).

יצירת  קובץ הסיסמה על ידי שימוש ב OpenSSL Utilities

בשלב הראשון ניצור קובץ נסתר בשם .htpasswd שיכיל את שם המשתמש אותו נרצה להגדיר לשימוש על ידי הפקודה הבאה:

sudo sh -c "echo -n 'sammy:' >> /etc/nginx/.htpasswd"

את שם המשתמש "sammy" החליפו בשלכם כמובן.

כעת נוסיף את הסיסמה המוצפנת אל תוך הקובץ, לכם כך כתבו את הפקודה הבאה:

sudo sh -c "openssl passwd -apr1 >> /etc/nginx/.htpasswd"

כעת נתבקש להקליד את הסיסמה הרצויה וכן אימות סיסמה.
ניתן לחזור על התהליך עבור הגדרת משתמשים נוספים.

כעת נכתוב את הפקודה הבאה על מנת להציג את תוכן הקובץ:

cat /etc/nginx/.htpasswd

הקובץ אמור להראות כך:

sammy:$apr1$lzxsIfXG$tmCvCfb49vpPFwKGVsuYz.
another_user:$apr1$p1E9MeAf$kiAhneUwr.MhAE2kKGYHK.

הגדרת האבטחה מבוססת סיסמה ב NGIXN.

כעת, שקובץ הססמאות מוכן עם שמות המשתמש והססמאות ובמבנה ששרת ה NGINX יכול להבין נצטרך להורות לשרת לקרוא את הקובץ לפני שיגיש לנו את תוכן האתר.
לצורך כך נערוך לדוגמא את קובץ ההגדרות של אתר ברירת המחדל אל ידי הפקודה הבאה:

sudo nano /etc/nginx/sites-enabled/default

הקובץ אמור להראות כך:

server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    root /usr/share/nginx/html;
    index index.html index.htm;

    server_name localhost;

    location / {
        try_files $uri $uri/ =404;
    }
}

כדי להגדיר אימות, עליך להחליט על המיקום אותו תרצה להגביל. בין היתר, Nginx מאפשר לך להגדיר הגבלות ברמת השרת או בתוך מיקום ספציפי. בדוגמה שלנו, נחסום את את דף הבית (ספריית השורש) של האתר, אך תוכל תמיד לשנות את ההגבלה ולהכילה  על סיפריה ספציפית בלבד בתוך האתר. לצורך כך הוסיפו את השורות הבאות:

auth_basic "Restricted Content";
auth_basic_user_file /etc/nginx/.htpasswd;

כך שהקובץ אמור להראות כך:

server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    root /usr/share/nginx/html;
    index index.html index.htm;

    server_name localhost;

    location / {
        try_files $uri $uri/ =404;
        auth_basic "Restricted Content";
        auth_basic_user_file /etc/nginx/.htpasswd;
    }
}

כעת, על מנת שההגדרות יכנסו לתוקף הריצו את הפקודה הבאה:

sudo service nginx restart

כעת, פתחו את הדפדפן והקישו את כתובת ה IP של השרת. אם עשיתם הכל קשורה אתם אמורים לראות מסך שנראה כך:

Nginx Password Authentication - תומר קליין

Be the first to comment

Leave a Reply

כתובת האימייל שלך לא תפורסם


*