הקדמה
UFW, או חומת אש בלתי מסובכת, היא ממשק ל־iptables
המיועד לפשט את התהליך של הגדרת חומת אש. בעוד ש־iptables
הוא כלי יציב וגמיש, זה יכול להיות קשה למתחילים ללמוד איך להשתמש בו כדי להגדיר חומת אש בצורה תקינה. אם אתה מחפש להתחיל באבטחת הרשת שלך ואינך בטוח איזה כלי להשתמש, UFW עשוי להיות הבחירה הנכונה עבורך.
מדריך זה יראה לך איך להגדיר חומת אש עם UFW על Ubuntu v18.04 ומעלה.
דרישות מוקדמות
אם אתה משתמש בגרסת Ubuntu 16.04 או גרסה ישנה יותר, אנו ממליצים לשדרג לגרסה יותר חדשה יותר מאשר Ubuntu אינה מספקת עוד תמיכה בגרסאות אלו. מאגר זה של מדריכים יעזור לך לשדרג את גרסת ה-Ubuntu שלך.
כדי לעקוב אחרי המדריך הזה, תצטרך:
-
שרת המופעל ב-Ubuntu, יחד עם משתמש לא-רוט עם הרשאות
sudo
. להדרכה איך להגדיר את אלו, אנא בחר את ההפצה שלך מתוך רשימה זו ועקוב אחר מדריך ההגדרה הראשית של השרת שלנו. -
UFW מותקן כברירת מחדל ב־Ubuntu. אם הוסר מכל סיבה, ניתן להתקין אותו עם
sudo apt install ufw
.
הגדרת חומת אש עבור Ubuntu עם UFW
- הפעלת IPv6
- הגדרת מדיניות ברירת המחדל
- אישור חיבורי SSH
- הפעלת UFW
- אישור חיבורים נדרשים נוספים
- דחיית חיבורים
- מחיקת כללי חומת אש
- בדיקת מצב UFW וכללים
- איך להשבית או לאפס את חומת האש ב־Ubuntu
שלב 1 — בדיקה שפרוטוקול IPv6 מופעל
בגרסאות אחרונות של Ubuntu, IPv6 מופעל כברירת מחדל. בפועל, זאת אומרת שרוב כללי הגישה שנוספים לשרת יכללו גרסת IPv4 וגרסת IPv6, כלומר האחרונה מזוהה על ידי v6
בתוך פלט הפקודת המצב של UFW. כדי לוודא ש־IPv6 מופעל, תוכל לבדוק את קובץ התצורה של UFW ב־/etc/default/ufw
. פתח את הקובץ הזה באמצעות nano
או העורך הטקסט שלך:
ואז ודא כי ערך ה־IPV6
מוגדר ל־yes
. הוא צריך להיראות כמו זה:
שמור וסגור את הקובץ. אם אתה משתמש ב־nano
, תוכל לעשות זאת על ידי לחיצה על CTRL+X
, ואז Y
ו־ENTER
לאישור.
כאשר UFW מופעל בשלב מאוחר יותר של מדריך זה, זה יוגדר לכתוב כללי חומת אש עבור IPv4 ו־IPv6 כאחד.
שלב 2 — הגדרת מדיניות ברירת מחדל
אם אתה רק מתחיל עם UFW, השלב הראשון הוא לבדוק את מדיניות הגישה הברירת מחדל של הגן האש שלך. כללי אלו שולטים באופן שבו מתגברת תעבורה שאינה תואמת באופן ברור כללי אחרים.
כברירת מחדל, UFW מוגדר לדחות את כל החיבורים הנכנסים ולאפשר את כל החיבורים היוצאים. זה אומר שכל אחד שמנסה להתחבר לשרת שלך לא יוכל להתחבר, בעוד שכל יישום בתוך השרת יוכל להגיע לעולם החיצוני. כללים נוספים לאפשר שירותים ופתחים ספציפיים כלולים כיוצא בזה כמופעלים חריגה ממדיניות הכללים הזו.
כדי לוודא שתוכל לעקוב אחרי השלבים של המדריך, תגדיר כעת את מדיניות ברירת המחדל של UFW לתעבורה נכנסת ויוצאת.
כדי להגדיר את מדיניות הכניסה הברירת מחדל של UFW ל־deny
, הפעל:
OutputDefault incoming policy changed to 'deny'
(be sure to update your rules accordingly)
כדי להגדיר את מדיניות היציאה הברירת מחדל של UFW ל־allow
, הפעל:
OutputDefault outgoing policy changed to 'allow'
(be sure to update your rules accordingly)
פקודות אלו מגדירות את הברירות המחדליות לדחות חיבורים נכנסים ולאפשר חיבורים יוצאים. מדיניות הגנת אש זו לבדה עשויה להיות מספקת למחשב אישי, אך שרתים כמעט תמיד צריכים להגיב לבקשות נכנסות ממשתמשים מחוץ לרשת. נבדוק את זה בשלב הבא.
שלב 3 — הרשאת חיבורי SSH
אם תפעיל את חומת האש UFW כעת, היא תכחיש את כל החיבורים הנכנסים. זה אומר שתצטרך ליצור כללים שמאפשרים באופן פורמלי חיבורים נכנסים תקפים — לדוגמה, חיבורי SSH או HTTP — אם ברצונך שהשרת שלך יגיב לסוגים אלה של בקשות. אם אתה משתמש בשרת ענן, כנראה תרצה לאפשר חיבורי SSH נכנסים כדי שתוכל להתחבר ולנהל את השרת שלך.
אישור פרופיל היישום OpenSSH של UFW
בעת התקנה, רוב היישומים שמתבססים על חיבורי רשת ירשמו פרופיל יישום בתוך UFW, שמאפשר למשתמשים לאפשר או לדחות במהירות גישה חיצונית לשירות. ניתן לבדוק אילו פרופילים רשומים כרגע נמצאים ב-UFW עם:
OutputAvailable applications:
OpenSSH
כדי להפעיל את פרופיל היישום של OpenSSH, הרץ:
OutputRule added
Rule added (v6)
זה ייצור כללי חומת אש לאפשר את כל החיבורים בפורט 22
, שהוא הפורט שבו דימון ה-SSH מקשיב כברירת מחדל.
לאפשר SSH לפי שם השירות
דרך נוספת להגדיר את UFW כך שיאפשר חיבורי SSH נכנסים היא על ידי התייחסות לשם השירות שלו: ssh
.
OutputRule added
Rule added (v6)
UFW מכיר אילו פתחים ופרוטוקולים משתמש בשירות על פי קובץ /etc/services
.
אישור SSH לפי מספר פתח
לחילופין, ניתן לכתוב את הכלל השקול בהגדרת הפתח במקום שם היישום או שם השירות. לדוגמה, פקודה זו עובדת באותה הדרך כמו הדוגמאות הקודמות:
OutputRule added
Rule added (v6)
אם הגדרת את השירות SSH שלך להשתמש בפתח שונה, עליך לציין את הפתח הרלוונטי. לדוגמה, אם השרת שלך מאזין לפתח 2222
, תוכל להשתמש בפקודה זו כדי לאפשר חיבורים באותו הפתח:
OutputRule added
Rule added (v6)
עכשיו שהגדרת הגדרת הגנת האש שלך כך שתאפשר חיבורים נכנסים של SSH, תוכל להפעיל אותה.
שלב 4 — הפעלת UFW
הגדרת הגנה צריכה כעת להיות מוגדרת כך שתאפשר חיבורי SSH. כדי לוודא אילו כללים נוספו עד כה, גם כאשר הגנת האש עדיין מושבתת, ניתן להשתמש בפקודה הבאה:
OutputAdded user rules (see 'ufw status' for running firewall):
ufw allow OpenSSH
לאחר אישורך כי קיים כלל לאפשר חיבורי SSH נכנסים, ניתן להפעיל את הגנת האש עם הפקודה הבאה:
OutputCommand 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, שמשתמשים בפורטים 6000
– 6007
, יש להשתמש בפקודות אלה:
כאשר מציינים טווחי פורטים עם UFW, עליך לציין את הפרוטוקול (tcp
או udp
) שבו ייחולו החוקים. לא ציינו זאת קודם מכיוון שאי הציון של הפרוטוקול מאפשר באופן אוטומטי את שני הפרוטוקולים, מה שבסדר ברוב המקרים.
כתובות IP ספציפיות
כאשר אתה עובד עם UFW, תוכל גם לציין כתובות IP בתוך הכללים שלך. לדוגמה, אם ברצונך לאפשר חיבורים מכתובת IP ספציפית, כגון כתובת IP של העבודה או הבית שלך, כמו 203.0.113.4
, עליך להשתמש בפרמטר from
, ולספק את כתובת ה-IP שברצונך לאפשר:
OutputRule added
תוכל גם לציין יציאה שה-IP מורשה להתחבר אליה על ידי הוספת to any port
ואז מספר היציאה. לדוגמה, אם ברצונך לאפשר ל-203.0.113.4
להתחבר ליציאה 22
(SSH), השתמש בפקודה הבאה:
OutputRule added
תתי-רשתות
אם ברצונך להרשות תת-רשת של כתובות IP, תוכל לעשות זאת באמצעות רשומת CIDR כדי לציין סכימת רשת. לדוגמה, אם ברצונך להרשות את כל כתובות ה-IP בטווח מ־203.0.113.1
עד 203.0.113.254
, תוכל להשתמש בפקודה הבאה:
OutputRule added
ככה גם תוכל לציין את יציאת היעד שבה רשת התת-רשת 203.0.113.0/24
רשאית להתחבר אליה. שוב, נשתמש ביציאה 22
(SSH) כדוגמה:
OutputRule added
חיבורים אל ממשק רשת מסוים
אם ברצונך ליצור כלל של חומת אש שנוגע רק לממשק רשת מסוים, תוכל לעשות זאת על ידי ציון "לאפשר נכנס בעזרת" ואז להמשיך עם שם הממשק הרשת.
ייתכן ותרצה לחפש את ממשקי הרשת שלך לפני שתמשיך. כדי לעשות זאת, השתמש בפקודה הזו:
Output Excerpt2: 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
) אליו עם הפקודה הזו:
OutputRule added
Rule added (v6)
פעולה זו תאפשר לשרת שלך לקבל בקשות HTTP מהאינטרנט הציבורי.
או, אם ברצונך ששרת מסד הנתונים MySQL שלך (פתחה 3306
) יאזין לחיבורים בממשק הרשת הפרטי eth1
, לדוגמה, תוכל להשתמש בפקודה הזו:
OutputRule added
Rule added (v6)
פעולה זו תאפשר לשרתים אחרים ברשת הפרטית שלך להתחבר למסד הנתונים של MySQL.
שלב 6 — דחיית חיבורים
אם לא שינית את המדיניות הברירתית לחיבורים נכנסים, UFW מוגדר לדחות את כל החיבורים הנכנסים. בדרך כלל, זה מקל על תהליך יצירת מדיניות חומת האש הבטוחה על ידי דרישה ליצירת כללים שמאפשרים באופן ברור פורטים וכתובות IP מסוימות.
אך לעיתים תרצה למנוע חיבורים ספציפיים בהתבסס על כתובת IP מקורית או תת־רשת, אולי מכיוון שאתה יודע שהשרת שלך מותקף משם. גם אם ברצונך לשנות את מדיניות הקליטה הרגילה שלך ל־allow (שאינו מומלץ), תצטרך ליצור כללי deny עבור כל שירותים או כתובות IP שלא ברצונך לאפשר חיבורים אליהם.
כדי לכתוב כללי deny, תוכל להשתמש בפקודות שתוארו כבר, ולהחליף allow ב־deny.
לדוגמה, כדי למנוע חיבורי HTTP, תוכל להשתמש בפקודה זו:
OutputRule added
Rule added (v6)
או אם ברצונך לחסום את כל החיבורים מ־203.0.113.4
תוכל להשתמש בפקודה זו:
OutputRule added
במקרים מסוימים, עשויים גם להיות רצון לחסום חיבורים יוצאים מהשרת. כדי למנוע מכל המשתמשים להשתמש בפורט בשרת, כמו פורט 25
לתעבורת SMTP, תוכל להשתמש ב־deny out
לאחריו מספר הפורט:
OutputRule added
Rule added (v6)
זה יחסום את כל תעבורת ה־SMTP היוצאת מהשרת.
שלב 7 — מחיקת כללים
לדעת כיצד למחוק כללי חומת אש חשוב כמו ליצורם. ישנם שני דרכים שונות לציין אילו כללים למחוק: לפי מספר הכלל או לפי השם הנקרא באדם (דומה לאופן שהכללים נצוינו כאשר נוצרו).
מחיקת כלל UFW לפי מספר
כדי למחוק כלל UFW לפי מספרו, תרצה תחילה לקבל רשימה ממוספרת של כל כללי הגנה של הגדרת האש שלך. פקודת ה-UFW status מציגה אפשרות להציג מספרים ליד כל כלל, כפי שמודגש כאן:
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 כך:
OutputDeleting:
allow 80
Proceed with operation (y|n)? y
Rule deleted
זה יפעיל אישור ואז ימחק את הכלל 2, המאפשר חיבורי HTTP. שים לב כי אם יש לך IPv6 מופעל, תרצה למחוק גם את הכלל המתאים של IPv6.
מחיקת כלל UFW לפי שם
במקום להשתמש במספרי כללים, תוכל גם להתייחס לכלל לפי שמו הנקרא באנושי, שמבוסס על סוג הכלל (רגילית allow
או deny
) ועל שם השירות או מספר הפורט שהיה היעד לכלל זה, או שם פרופיל היישום במקרה שבו נעשה שימוש בזה. לדוגמה, אם תרצה למחוק כלל allow
עבור פרופיל היישום בשם Apache Full
שהופעל מראש, תוכל להשתמש:
OutputRule deleted
Rule deleted (v6)
הפקודה delete
עובדת באותו האופן גם עבור כללים שנוצרו בהתייחסות לשירות על פי שמו או פורט. לדוגמה, אם הגדרת כלל בעבור חיבורי HTTP עם sudo ufw allow http
, כך תוכל למחוק את הכלל:
OutputRule deleted
Rule deleted (v6)
מאחר ששמות השירותים הם ניתנים להחלפה עם מספרי פורט כאשר מציינים כללים, תוכל גם להתייחס לאותו כלל כמו allow 80
, במקום allow http
:
OutputRule deleted
Rule deleted (v6)
כאשר מוחקים כללי UFW לפי שם, שני כללים IPv4 ו-IPv6 נמחקים אם הם קיימים.
שלב 8 — בדיקת מצב וכללי UFW
בכל עת, תוכל לבדוק את מצב ה-UFW עם הפקודה הבאה:
אם ה-UFW מנוטרל, כפי שהוא כברירת מחדל, תראה משהו דומה לזה:
OutputStatus: inactive
אם ה-UFW פעיל, כמו שצריך להיות אם עקבת אחרי שלב 3, הפלט יציין שהוא פעיל ויפרט כללים שהוגדרו. לדוגמה, אם הגדרת לגישה ל־SSH (פורט 22
) מכל מקום, הפלט עשוי להיראות כמו זה:
OutputStatus: 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, תוכל להשבית אותה באמצעות הפקודה הזו:
OutputFirewall stopped and disabled on system startup
כללי המעקב שיצרת עם UFW לא יהיו פעילים יותר. תמיד תוכל להריץ sudo ufw enable
אם תצטרך להפעיל אותה מאוחר יותר.
אם כבר קיימים כללי UFW מוגדרים אך החלטת שברצונך להתחיל מחדש, תוכל להשתמש בפקודת האיפוס:
OutputResetting 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