איך להגדיר חומת אש עם UFW על Ubuntu

הקדמה

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

מדריך זה יראה לך איך להגדיר חומת אש עם UFW ב־Ubuntu v18.04 ומעלה.

דרישות מוקדמות

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

כדי לעקוב אחרי המדריך הזה, תצטרך:

  • שרת המורץ ב־Ubuntu, יחד עם משתמש לא־ראשי המחזיק בהרשאות sudo. להנחיות על איך להגדיר אלו, אנא בחר את ההפצה שלך מתוך רשימה זו ועקוב אחר מדריך ההתקנה הראשוני שלנו.

  • UFW מותקן כבר ברירת מחדל על Ubuntu. אם הוסר מכל סיבה, תוכל להתקין אותו עם sudo apt install ufw.

הגדרת הגנת האש ב־Ubuntu עם UFW

  1. הפעלת IPv6
  2. הגדרת מדיניות ברירת מחדל
  3. אפשר חיבורי SSH
  4. הפעלת UFW
  5. אפשר חיבורים נדרשים נוספים
  6. כיבוי חיבורים
  7. מחיקת כללי הגנה בגישה לגישה
  8. בדוק את מצב ואת כללי הגנת הגישה לגישה
  9. איך לנטרל או לאפס את כללי הגנת הגישה לגישה באובונטו

שלב 1 — ודא ש-IPv6 מופעל

בגרסאות האחרונות של אובונטו, IPv6 מופעל כברירת מחדל. בפועל, זאת אומרת שרוב כללי הגנה שנוספים לשרת יכילו גרסת IPv4 וגרסת IPv6, האחרות מזוהות על ידי v6 בתוך פלט הפקודת המצב של UFW. כדי לוודא ש-IPv6 מופעל, תוכל לבדוק את קובץ התצורה של UFW בנתיב /etc/default/ufw. פתח את הקובץ הזה באמצעות nano או העורך לשורת פקודות האהוב עליך:

  1. sudo nano /etc/default/ufw

ובדוק שערך IPV6 מוגדר כ-yes. זה צריך להיראות כמו זה:

/etc/default/ufw excerpt
  1. IPV6=yes

שמור וסגור את הקובץ. אם אתה משתמש ב-nano, תוכל לעשות זאת על ידי לחיצה על CTRL+X, אז Y ואז ENTER כדי לאשר.

כאשר UFW מופעל בשלב מאוחר יותר של מדריך זה, הוא יוגדר לכתוב גם כללי הגנה ל-IPv4 וגם כללי הגנה ל-IPv6.

שלב 2 — הגדרת מדיניות ברירת מחדל

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

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

כדי לוודא שתוכל לעקוב אחר ההדרכה המשך של המדריך, עכשיו תגדיר את מדיניות האש הברירת מחדל של UFW לתעבורת נכנסת ויוצאת.

כדי להגדיר את מדיניות התעבורה הנכנסת הברירת מחדל של UFW ל־deny, הפעל:

  1. sudo ufw default deny incoming
Output
Default incoming policy changed to 'deny' (be sure to update your rules accordingly)

כדי להגדיר את מדיניות התעבורה היוצאת הברירת מחדל של UFW ל־allow, הפעל:

  1. sudo ufw default allow outgoing
Output
Default outgoing policy changed to 'allow' (be sure to update your rules accordingly)

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

שלב 3 — מאפשר חיבורי SSH

אם תפעיל את חומת האש של UFW כעת, היא תדחוף את כל החיבורים הנכנסים. זה אומר שתצטרך ליצור כללים שמאפשרים באופן ברור חיבורים נכנסים חוקיים — כמו חיבורי SSH או HTTP, לדוגמה — אם ברצונך שהשרת שלך יגיב לסוגי בקשות אלה. אם אתה משתמש בשרת בענן, כנראה תרצה לאפשר חיבורי SSH נכנסים כדי שתוכל להתחבר ולנהל את השרת שלך.

מאפשר פרופילי אפליקציה של OpenSSH ב-UFW

בעת התקנה, רוב היישומים התומכים בחיבורי רשת ירשמו פרופיל אפליקציה בתוך UFW, אשר מאפשר למשתמשים לאפשר או לדחות גישה חיצונית לשירות. תוכל לבדוק אילו פרופילים רשומים כעת ב-UFW עם:

  1. sudo ufw app list
Output
Available applications: OpenSSH

כדי לאפשר את פרופיל האפליקציה של OpenSSH, הפעל:

  1. sudo ufw allow OpenSSH
Output
Rule added Rule added (v6)

זה ייצור כללי חומת אש לאפשר את כל החיבורים בפורט 22, שהוא הפורט שבו דימון ה-SSH מאזין כברירת מחדל.

לאפשר SSH על ידי שם השירות

דרך נוספת להגדיר את UFW כך שתאפשר חיבורי SSH נכנים היא על ידי הפניה לשם השירות שלו: ssh.

  1. sudo ufw allow ssh
Output
Rule added Rule added (v6)

UFW מכיר אילו פורטים ופרוטוקולים משמשים לשירות על פי קובץ /etc/services.

לאפשר SSH על ידי מספר הפורט

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

  1. sudo ufw allow 22
Output
Rule added Rule added (v6)

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

  1. sudo ufw allow 2222
Output
Rule added Rule added (v6)

עכשיו שהגדרת את הגישה לציפוי האש שלך כך שתאפשר חיבורי SSH נכנים, ניתן להפעיל אותו.

שלב 4 — הפעלת UFW

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

  1. sudo ufw show added
Output
Added user rules (see 'ufw status' for running firewall): ufw allow OpenSSH

לאישור שיש לך כלל המאפשר חיבורי SSH נכנסים, תוכל להפעיל את הגנת האש בעזרת:

  1. sudo ufw enable
Output
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y Firewall is active and enabled on system startup

תקבל אזהרה שאומרת שהפקודה עשויה להפריע לחיבורי SSH קיימים. כבר הגדרת כלל גישה שמאפשר חיבורי SSH, לכן יש להמשיך. ענה על הבקשה עם y ולחץ על ENTER.

הגנת האש פעילה כעת. הריץ את הפקודה sudo ufw status verbose כדי לראות את הכללים שהוגדרו. שאר חלקי המדריך מכסים איך להשתמש ב-UFW בפרטיות יותר, כגון הרשאת או איסור סוגי חיבורים שונים.

שלב 5 — אישור חיבורים נוספים

בנקודה זו, עליך להרשות את כל החיבורים האחרים שהשרת שלך צריך להגיב אליהם. החיבורים שעליך להרשות תלויים בצרכים המסוימים שלך. כבר יש לך ידע כיצד לכתוב כללים שמאפשרים חיבורים בהתבסס על פרופילי אפליקציה, שם שירות, או פורט; כבר עשית זאת עבור SSH בפורט 22. תוכל גם לעשות זאת עבור:

  • HTTP בפורט 80, שם משתמשי שרתי האינטרנט באופן לא מוצפן, באמצעות sudo ufw allow http או sudo ufw allow 80.
  • HTTPS על פתחת 443, שהוא מה ששרתי האינטרנט המוצפנים משתמשים בהם, באמצעות sudo ufw allow https או sudo ufw allow 443
  • Apache עם HTTP ו-HTTPS, באמצעות sudo ufw allow ‘Apache Full’
  • Nginx עם HTTP ו-HTTPS, באמצעות sudo ufw allow ‘Nginx Full’

אל תשכח לבדוק אילו פרופילי אפליקציות זמינים עבור השרת שלך באמצעות sudo ufw app list.

ישנם מספר דרכים נוספות לאפשר חיבורים, למעט ציון פורט או שם שירות ידוע. נראה כמה מהם להלן.

טווחי פורטים ספציפיים

ניתן לציין טווחי פורטים עם UFW. חלק מיישומים משתמשים במספר פורטים מרובים, במקום פורט יחיד.

לדוגמה, כדי לאפשר חיבורי X11, שמשתמשים בפורטים 60006007, השתמש בפקודות האלה:

  1. sudo ufw allow 6000:6007/tcp
  2. sudo ufw allow 6000:6007/udp

כאשר מציינים טווחי פורטים עם UFW, עליך לציין את הפרוטוקול (tcp או udp) שבו יחולו הכללים. לא דיברנו על כך קודם מכיוון שלא לציין את הפרוטוקול מאפשר אוטומטית את שני הפרוטוקולים, וזה בסדר ברוב המקרים.

כתובות IP ספציפיות

כאשר אתה עובד עם UFW, תוכל גם לציין כתובות IP בתוך החוקים שלך. לדוגמה, אם ברצונך לאפשר חיבורים מכתובת IP ספציפית, כמו כתובת IP של מקום עבודה או בית כגון 203.0.113.4, עליך להשתמש בפרמטר from, ולספק את כתובת ה-IP שברצונך לאפשר:

  1. sudo ufw allow from 203.0.113.4
Output
Rule added

ניתן גם לציין יציאה שבה תתאפשר החיבור מכתובת ה-IP על ידי הוספת to any port ואז מספר היציאה. לדוגמה, אם ברצונך לאפשר ל-203.0.113.4 להתחבר ליציאה 22 (SSH), עליך להשתמש בפקודה הבאה:

  1. sudo ufw allow from 203.0.113.4 to any port 22
Output
Rule added

תתי-רשתות

אם ברצונך להתיר תת-רשת של כתובות IP, תוכל לעשות זאת באמצעות ריווח CIDR כדי לציין רשת. לדוגמה, אם ברצונך להתיר את כל כתובות ה-IP בטווח מ-203.0.113.1 עד 203.0.113.254 תוכל להשתמש בפקודה הבאה:

  1. sudo ufw allow from 203.0.113.0/24
Output
Rule added

באופן דומה, תוכל גם לציין את היציאת היעד שאליה הרשת 203.0.113.0/24 רשאית להתחבר. שוב, נשתמש ביציאה 22 (SSH) כדי להמחיש:

  1. sudo ufw allow from 203.0.113.0/24 to any port 22
Output
Rule added

חיבורים לממשק רשת ספציפי

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

עשוי להיות לך רצוי לבדוק את ממשקי הרשת שלך לפני שתמשיך. לעשות זאת, השתמש בפקודה הזו:

  1. ip addr
Output Excerpt
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state . . . 3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default . . .

הפלט המסומן מציין את שמות ממשקי הרשת. הם נקראים בדרך כלל משהו כמו eth0 או enp3s2.

לכן, אם לשרת שלך יש ממשק רשת ציבורי בשם eth0, תוכל לאפשר תעבורת HTTP (יציאה 80) אליו בעזרת פקודה זו:

  1. sudo ufw allow in on eth0 to any port 80
Output
Rule added Rule added (v6)

על ידי כך תאפשר לשרת שלך לקבל בקשות HTTP מאינטרנט הציבורי.

או, אם ברצונך ששרת מסד הנתונים שלך MySQL (יציאה 3306) יאזין לחיבורים בממשק הרשת הפרטי eth1, לדוגמה, תוכל להשתמש בפקודה הזו:

  1. sudo ufw allow in on eth1 to any port 3306
Output
Rule added Rule added (v6)

זה יאפשר לשרתים אחרים ברשת הפרטית שלך להתחבר למסד הנתונים של MySQL.

שלב 6 — מונע חיבורים

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

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

כדי לכתוב כללי דחיה, תוכל להשתמש בפקודות שתוארו כבר, ולהחליף את לאפשר ב- לדחות.

לדוגמה, כדי למנוע חיבורי HTTP, תוכל להשתמש בפקודה זו:

  1. sudo ufw deny http
Output
Rule added Rule added (v6)

או אם ברצונך למנוע את כל החיבורים מ- 203.0.113.4 תוכל להשתמש בפקודה זו:

  1. sudo ufw deny from 203.0.113.4
Output
Rule added

במקרים מסוימים, תרצה גם לחסום חיבורים יוצאים מהשרת. כדי למנוע מכל המשתמשים להשתמש בפורט בשרת, כגון פורט 25 לתעבורת SMTP, תוכל להשתמש ב- deny out עם מספר הפורט המבוקש:

  1. sudo ufw deny out 25
Output
Rule added Rule added (v6)

זה יחסום את כל תעבורת ה- SMTP היוצאת מהשרת.

שלב 7 — מחיקת כללים

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

מחיקת כלל של UFW לפי מספר

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

  1. sudo ufw status numbered
Numbered Output:
Status: active To Action From -- ------ ---- [ 1] 22 ALLOW IN 15.15.15.0/24 [ 2] 80 ALLOW IN Anywhere

אם החלטת שתרצה למחוק את הכלל מספר 2, הכלל שמאפשר חיבורי פורט 80 (HTTP), תוכל לציין אותו בפקודת מחיקה של UFW כך:

  1. sudo ufw delete 2
Output
Deleting: allow 80 Proceed with operation (y|n)? y Rule deleted

זה יבקש אישור ואז ימחק את הכלל 2, שמאפשר חיבורי HTTP. שים לב שאם יש לך IPv6 מאופשר, תרצה למחוק גם את הכלל המתאים של IPv6.

מחיקת כלל של UFW לפי שם

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

  1. sudo ufw delete allow "Apache Full"
Output
Rule deleted Rule deleted (v6)

הפקודה delete פועלת באופן זהה עבור כללים שנוצרו על ידי הפנייה לשירות לפי שמו או לפי פתחת. לדוגמה, אם בעבר הגדרת כלל כדי לאפשר חיבורי HTTP עם sudo ufw allow http, זה איך תוכל למחוק את הכלל:

  1. sudo ufw delete allow http
Output
Rule deleted Rule deleted (v6)

מכיוון ששמות השירותים ניתנים להחלפה עם מספרי פתחות בעת ציון הכללים, תוכל גם להתייחס לאותו כלל כ- allow 80, במקום allow http:

  1. sudo ufw delete allow 80
Output
Rule deleted Rule deleted (v6)

כאשר מוחקים כללי UFW לפי שם, גם כללי IPv4 ו-IPv6 מוחקים אם הם קיימים.

שלב 8 — בדיקת מצב וכללי UFW

בכל עת, תוכל לבדוק את מצב ה-UFW בעזרת הפקודה הזו:

  1. sudo ufw status verbose

אם ה-UFW מושבת, כמו שהוא בברירת המחדל, תראה משהו דומה לכך:

Output
Status: inactive

אם ה-UFW פעיל, כפי שצריך להיות אם עקבת אחרי שלב 3, הפלט יציין כי הוא פעיל ויפרט כללים שהוגדרו. לדוגמה, אם הגדרת הגבלת חיבורי SSH (פתחה 22) מכל מקום, הפלט עשוי להיראות כך:

Output
Status: active Logging: on (low) Default: deny (incoming), allow (outgoing), disabled (routed) New profiles: skip To Action From -- ------ ---- 22/tcp ALLOW IN Anywhere

השתמש בפקודת status אם ברצונך לבדוק איך ה-UFW הגדיר את הגימור.

שלב 9 — השבת או איפוס הגנה אש

אם החלטת שאינך רוצה להשתמש בגנה אש של UFW, אתה יכול להשבית אותה עם הפקודה הזו:

  1. sudo ufw disable
Output
Firewall stopped and disabled on system startup

כל הכללים שיצרת עם UFW לא יהיו פעילים יותר. תמיד תוכל להריץ sudo ufw enable אם תצטרך להפעיל אותה מאוחר יותר.

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

  1. sudo ufw reset
Output
Resetting all rules to installed defaults. This may disrupt existing ssh connections. Proceed with operation (y|n)? y Backing up 'user.rules' to '/etc/ufw/user.rules.20210729_170353' Backing up 'before.rules' to '/etc/ufw/before.rules.20210729_170353' Backing up 'after.rules' to '/etc/ufw/after.rules.20210729_170353' Backing up 'user6.rules' to '/etc/ufw/user6.rules.20210729_170353' Backing up 'before6.rules' to '/etc/ufw/before6.rules.20210729_170353' Backing up 'after6.rules' to '/etc/ufw/after6.rules.20210729_170353'

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

השתמש באפשרות DigitalOcean App Platform כדי לפרסם את היישומים שלך מ- GitHub. תן ל-DigitalOcean להתמקד בהתרחבות היישום שלך.

מסקנה

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

כדי ללמוד עוד על הגדרות UFW נפוצות, ראו את המדריך UFW Essentials: Common Firewall Rules and Commands.

Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-ubuntu