כיצד להגדיר חומת אש עם UFW ב-Ubuntu

הקדמה

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

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

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

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

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

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

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

הגדרת חומת אש עבור Ubuntu עם UFW

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

שלב 1 — בדיקה שפרוטוקול IPv6 מופעל

בגרסאות אחרונות של Ubuntu, 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 שלך להשתמש בפתח שונה, עליך לציין את הפתח הרלוונטי. לדוגמה, אם השרת שלך מאזין לפתח 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
  • אפאצ'י עם HTTP ו-HTTPS, באמצעות sudo ufw allow 'אפאצ'י מלא'
  • אנג'ינקס עם HTTP ו-HTTPS, באמצעות sudo ufw allow 'Nginx מלא'

אל תשכח לבדוק אילו פרופילי אפליקציה זמינים עבור השרת שלך עם 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 מקורית או תת־רשת, אולי מכיוון שאתה יודע שהשרת שלך מותקף משם. גם אם ברצונך לשנות את מדיניות הקליטה הרגילה שלך ל־allow (שאינו מומלץ), תצטרך ליצור כללי deny עבור כל שירותים או כתובות IP שלא ברצונך לאפשר חיבורים אליהם.

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

לדוגמה, כדי למנוע חיבורי 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 status מציגה אפשרות להציג מספרים ליד כל כלל, כפי שמודגש כאן:

  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. יש לזכור כי מדיניות הברירת מחדל לא תשתנה להגדרותיהן המקוריות, אם ערכת אותן בכל שלב.

הפעל את אפליקציות החזית שלך מ- GitHub באמצעות פלטפורמת האפליקציות של DigitalOcean. תן ל-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-22-04