איך להקים חומה עם UFW על Ubuntu

הקדמה

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

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

דרישות קדם

אם אתה משתמש בגירסא ה-Ubuntu 16.04 או תחתה, אנחנו ממליצים לך לעדכן לגירסה העדכנית יותר, מפני ש Ubuntu כבר לא מספקת תמיכה בגירסאות אלה. האוסף הדרכים הבאיעזרו לך בעידן העדכני לגירסה ה-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 מופעל, אתה יכול לבדוק את הקונFIGורצייה של 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 לקישורים הבאים כדחייה, יש להריץ:

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

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

  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, לדוגמה — אם אתם רוצים שהשרת שלכם יגיב לב

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

כתובות אינטרנט ספציפיות

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

  1. sudo ufw allow from 203.0.113.4
Output
Rule added

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

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

אם אתה רוצה ליצור חוק חסימה שחל רק על ממשק רשת ספציפי, תוכל לעשות כן על-ידי ציון "allow in on" ואחריה שם הממשק הרשתי.

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

  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 על פי מספר, תרצה בעיקר לקבל רשימה מספרים על כל חוקי המחסה שלך. הפקטיבה הזו של הפקטיבה status של 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. שימו לב שאם אתה מוכן להפעיל אינטרנט רשת 6, תרצה למחוק גם את החוק הקונפליקטיבי לרשת 6.

מחיקת חוק 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. תתמשך דיגיטליז על הגיוס של היישומך.

סיכום

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

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

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