הקדמה
UFW, או מערך הגדרות הפשוט, הוא ממשק ל iptables
שמוכוון להפשיט את התהליך של הגדרת מערך הגדרות. למרות ש iptables
הוא כלי יעיל ומתפתח, הוא יכול להיות קשה ללמידה עבור מתחילים כיוון שהוא דורש לומידה עמוקה על איך לשתמש בו באופן הגיוני כדי להגדיר מערך הגדרות. אם אתה מחפש להתחיל באימון את הרשת שלך ואינך ודאי מה כלי להשתמש בו, UFW עשוי להיות הבחירה הנכונה עבורך.
הסידור הזה יראה לך איך להגדיר מערך הגדרות עם UFW על Ubuntu v18.04 ומעלה.
דרישות קדם
אם אתה משתמש בגירסא ה-Ubuntu 16.04 או תחתה, אנחנו ממליצים לך לעדכן לגירסה העדכנית יותר, מפני ש Ubuntu כבר לא מספקת תמיכה בגירסאות אלה. האוסף הדרכים הבאיעזרו לך בעידן העדכני לגירסה ה-Ubuntu שלך.
כדי לעבוד עם הסידור הזה, תהיה צריך:
- שרת הריץ את אובונטו, יחד עם משתמש לא-על (non-root) בעל הרשאות
sudo
. להוראות כיצד להקים אותם, בבקשה בחר את הפיזור שלך מתוך הרשימה הזו ועקב אחרי המדריך להקדמת השרת הראשון שלנו. -
UFW מותקן כברירת מחדל על אובונטו. אם הוא בוטל בשל סיבה מסוימת, ניתן להתקין אותו עם
sudo apt install ufw
.
הקמת משגר חומה של אובונטו עם UFW
- הפעלת IPv6
- הגדרת מדיניות ברירת מחדל
- אפשר קישורים SSH
- בעליית UFW
- אפשר כל קישורים נחוצים אחרים
- דחיית קישורים
- מהירה על חוקי המחסה
- בדיקת מצב וחוקי UFW
- איך לדחוק או להחליף את המחסה ב Ubuntu
שלב 1 — וידוע שIPv6 מופעל
בגרסאות האחרונות של Ubuntu, IPv6 מופעל באופן בר-מודע. בפעולה, זה אומר שרוב הדיוקרטים שנוספים לשרת יכולים לכלול גירסאות של IPv4 וIPv6, אחד מהם מזוהה בעזרת v6
בתוצאות הפעלת הפקקים של UFW. כדי לוודא שIPv6 מופעל, אתה יכול לבדוק את הקונFIGורצייה של UFW בתוך הקובץ /etc/default/ufw
. פתח את הקובץ בעזרת nano או מועדף לך מהעורך הצורך בשורה בעזרת השורה:
אז ודא שערך של IPV6
נכפע ל yes
. הוא צריך להיראות כך:
שמו וסגיר את הקובץ. אם אתה משתמש ב nano, אתה יכול לעשות את זה על ידי הקלדת CTRL+X
, אחרת Y
ו ENTER
כדי לאשר.
כשUFW מופעל בשלב אחר במדריך הזה, הוא יתאים לכתוב דיוקרטים למחסום של IPv4 וIPv6.
שלב 2 — הגדרת מדיניות ברירת מחדל
אם אתה מתחיל לעבוד עם UFW לראשונה, שלב טוב מאד הוא לבדוק את מדיניות הפקקים הברירת מחדל שלך. הדיוקרטים האלה שולטים באיך להתייחס לתנועה שלא מתאימה באופן בר-מודע לכל דיוקרטים אחרים.
על ידי מוטבע, UFW מוגדר כבוד כל קישורים באוויר הבאים ולתת החלל לכל קישורים היוצאים. המשמעות היא שכל מי שמנסה להתחבר לשרת שלך לא יוכל להתחבר, בעוד כל היישומים בתוך השרת יכולים להגיע לעולם החיצוני. חוקים נוספים לאפשר שירותים ספציפיים ופורטים מוכתבים בתור יוצאות מהמדיניות הכללית הזו.
כדי להבטיח שתוכל לעקוב אחרי השאלון השאר, תיצרנו עכשיו את המדיניות הבסיסית של UFW לתנועה הבאה והיציאה.
כדי להגדיר את המדיניות הבסיסית של UFW לקישורים הבאים כדחייה
, יש להריץ:
OutputDefault incoming policy changed to 'deny'
(be sure to update your rules accordingly)
כדי להגדיר את המדיניות הבסיסית של UFW לקישורים היציאה כאישור
, יש להריץ:
OutputDefault outgoing policy changed to 'allow'
(be sure to update your rules accordingly)
הפקטים האלה מגדירים את הבסיסים לדחייה של קישורים הבאים ואישור של קישורים היציאה. בעצם הבסיסים האלה של מחסום היכולים להיות מספקים למחשב הפרטי, אך שרתים בדרך כלל צריכים להגיב לבקשות הבאה ממשתמשים מחוץ. אנחנו נסתכל על זה בהמשך.
שלב 3 — אישור קישורי SSH
אם תאפשרו את מחסום UFW הזה עכשיו, הוא ידחה את כל הקישורים הבאים. אתם צריכים ליצור חוקים שברורים לאפשר קישורים הבאים מוקדמים — קישורי SSH או קישורי HTTP, לדוגמה — אם אתם רוצים שהשרת שלכם יגיב לב
אפשרות הפרופיל של 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
- 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
) שהחוקים ייחייבו. לא הזכירנו את זה קודם בגלל שבלי ספקת הפרוטוקול באופן מובנה מאפשרת שני הפרוטוקולים, מה שברוב המקרים בסדר.
כתובות אינטרנט ספציפיות
בעבודה עם UFW, אתה גם יכול לספק כתובות אינטרנט בתוך החוקים שלך. לדוגמה, אם אתה רוצה לאפשר קישורים מכתובת אינטרנט ספציפית, כמו כתובת עבודה או הום של 203.0.113.4
, תצטרך להשתמש בפרמטר from
, ולספק את הכתובת האינטרנט שתרצה לאפשר:
OutputRule added
אתה יכול גם לספק פורט של כתובת האינטרנט הזו תהיה מורשת להתחבר אליו על ידי הוספת 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
חיבורים לממשק רשת ספציפי
אם אתה רוצה ליצור חוק חסימה שחל רק על ממשק רשת ספציפי, תוכל לעשות כן על-ידי ציון "allow in on" ואחריה שם הממשק הרשתי.
אולי תרצה לבדוק את ממשקי הרשת שלך לפני שתמשיך. כדי לעשות זאת, השתמש בפקודה זו:
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 על פי מספר, תרצה בעיקר לקבל רשימה מספרים על כל חוקי המחסה שלך. הפקטיבה הזו של הפקטיבה status
של 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. שימו לב שאם אתה מוכן להפעיל אינטרנט רשת 6, תרצה למחוק גם את החוק הקונפליקטיבי לרשת 6.
מחיקת חוק 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. תתמשך דיגיטליז על הגיוס של היישומך.
סיכום
המחסה שלך כעת מוגדר כך שיאפשר קישורים SSH. ודא שתאפשר את כל קישורים הכניסה האחרים שהשרת שלך צריך, בעוד שתווסף קישורים לא נחוצים, כך שהשרת שלך יהיה פופולרי ובטוח.
על מנת ללמוד על התצורות המקובלות של UFW, הביטו בסידרה UFW בסיסי: חוקי המחסה המקובלים והפקטים.
Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-ubuntu-20-04