הקדמה
UFW, או גישת הגנה ללא קושי, היא ממשק ל־iptables
המיועד לפשט את תהליך התצורה של חומת אש. בעוד iptables
הוא כלי אמין וגמיש, יכול להיות קשה למתחילים ללמוד כיצד להשתמש בו כדי להגדיר באופן תקין חומת אש. אם אתה מחפש להתחיל באבטחת הרשת שלך ואינך בטוח איזה כלי להשתמש, UFW עשוי להיות הבחירה הנכונה עבורך.
מדריך זה יראה לך איך להגדיר חומת אש עם UFW ב־Ubuntu v18.04 ומעלה.
דרישות מוקדמות
אם אתה משתמש בגרסה 16.04 של Ubuntu או מתחת לכך, אנו ממליצים לך לשדרג לגרסה מעודכנת יותר מאחר ו־Ubuntu אינה מספקת תמיכה לגרסאות אלו יותר. מהווה אוסף של מדריכים יעזור לך בשדרוג הגרסה של Ubuntu שלך.
כדי לעקוב אחרי המדריך הזה, תצטרך:
-
שרת המורץ ב־Ubuntu, יחד עם משתמש לא־ראשי המחזיק בהרשאות
sudo
. להנחיות על איך להגדיר אלו, אנא בחר את ההפצה שלך מתוך רשימה זו ועקוב אחר מדריך ההתקנה הראשוני שלנו. -
UFW מותקן כבר ברירת מחדל על Ubuntu. אם הוסר מכל סיבה, תוכל להתקין אותו עם
sudo apt install ufw
.
הגדרת הגנת האש ב־Ubuntu עם UFW
- הפעלת IPv6
- הגדרת מדיניות ברירת מחדל
- אפשר חיבורי SSH
- הפעלת UFW
- אפשר חיבורים נדרשים נוספים
- כיבוי חיבורים
- מחיקת כללי הגנה בגישה לגישה
- בדוק את מצב ואת כללי הגנת הגישה לגישה
- איך לנטרל או לאפס את כללי הגנת הגישה לגישה באובונטו
שלב 1 — ודא ש-IPv6 מופעל
בגרסאות האחרונות של אובונטו, 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 להשתמש בפורט שונה, עליך לציין את הפורט המתאים. לדוגמה, אם השרת שלך 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
- Apache עם HTTP ו-HTTPS, באמצעות
sudo ufw allow ‘Apache Full’
- Nginx עם HTTP ו-HTTPS, באמצעות
sudo ufw allow ‘Nginx Full’
אל תשכח לבדוק אילו פרופילי אפליקציות זמינים עבור השרת שלך באמצעות 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 מקורית או תת-רשת, אולי מפני שאתה יודע שהשרת שלך מותקף משם. גם אם ברצונך לשנות את מדיניות הכניסה הרגילה שלך ל- לאשר (שזה לא מומלץ), תצטרך ליצור דחפור כללים עבור שירותים או כתובות IP שאינך רוצה לאפשר חיבורים עבורם.
כדי לכתוב כללי דחיה, תוכל להשתמש בפקודות שתוארו כבר, ולהחליף את לאפשר ב- לדחות.
לדוגמה, כדי למנוע חיבורי 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 יש אפשרות להציג מספרים ליד כל כלל, כפי שמודגש כאן:
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. שים לב שהמדיניות המוגדרת כברירת מחדל לא תשתנה להגדרותיה המקוריות, אם שינית אותן באופן כלשהו.
השתמש באפשרות 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