הקדמה
ספר זה מספק מדריך בסגנון גלגלת עבור Iptables, שהוא גישת המגן התוכנה עבור הפצות Linux. המדריך מספק הפניה מהירה לפקודות iptables שיצור כללי מגן שימושיים בסצנריות יומיומיות נפוצות. כך כוללים הדוגמאות של iptables אישור וחסימת שירותים שונים לפי פורט, ממשק רשת וכתובת IP מקורית.
איך להשתמש במדריך זה
- רוב הכללים שמתוארים כאן מניחים כי ה- iptables שלך מוגדר ל- DROP תעבורה נכנסת, דרך מדיניות הקלט המוגדרת בברירת המחדל, ואתה רוצה לאפשר באופן ברירת מחדל תעבורה נכנסת
- השתמש באיזה מהחלקים הבאים שניתן להחיל על מה שאתה מנסה להשיג. רוב החלקים אינם מתבססים על חלק אחר, כך שניתן להשתמש בדוגמאות למטה באופן עצמאי
- השתמש בתפריט התוכן בצד ימין של העמוד (ברוחבי עמוד רחבים) או בפונקציית החיפוש של הדפדפן שלך כדי לאתר את הסעיפים שאתה צריך
- העתק והדבק את דוגמאות הפקודות שנתנו, תחליף את הערכים המודגשים בשלך
שים לב שסדר הכללים שלך חשוב. כל פקודות ה- iptables
האלה משתמשות באפשרות ה- -A
כדי להוסיף את הכלל החדש לסוף שרשרת. אם ברצונך לשים את זה במקום אחר בשרשרת, אתה יכול להשתמש באפשרות ה- -I
שמאפשרת לך לציין את מיקומו של הכלל החדש (או לשים אותו בתחילת השרשרת על ידי שאילת מספר כלל).
הערה: כאשר אתה עובד עם חומת אש, תשים לב שלא לנעול את עצמך מחוץ לשרת שלך על ידי חסימת תעבורת SSH (יציאה 22, כברירת מחדל). אם אתה מאבד גישה עקב הגדרות החומה שלך, עשוי להיות עליך להתחבר אליו דרך מסוף מבוסס אינטרנט כדי לתקן את הגישה שלך. אם אתה משתמש ב-DigitalOcean, תוכל לקרוא את תיעוד המוצר שלנו לקונסולת שחזור למידע נוסף. לאחר שתתחבר דרך הקונסולה, תוכל לשנות את כללי החומה שלך כך שיאפשרו גישה דרך SSH (או לאפשר תעבורה כולה). אם הגדרות החומה השמורות שלך מאפשרות גישה דרך SSH, שיטה נוספת היא לאתחל את השרת שלך.
תזכורת שתוכל לבדוק את סט הכללים הנוכחי של iptables בעזרת sudo iptables -S
ו־sudo iptables -L
.
בואו נסתכל על פקודות iptables!
שמירת כללים
כללי iptables הם עקפים, כלומר עליך לשמור אותם באופן ידני כדי שישמרו לאחר האתחול.
ב-Ubuntu, דרך אחת לשמור כללי iptables היא להשתמש בחבילת iptables-persistent
. התקן אותה עם apt בצורה הבאה:
במהלך ההתקנה, יתבקש ממך האם ברצונך לשמור את כללי החומה הנוכחיים שלך.
אם עדכנת את כללי החומה שלך ורוצה לשמור את השינויים, הפעל את הפקודה הזו:
הפצות Linux אחרות עשויות להציע דרכים אלטרנטיביות לשמירה של השינויים שלך ב-iptables באופן קבוע. אנא הפנה לתיעוד הרלוונטי למידע נוסף.
רשימת חוקים ומחיקתם
אם ברצונך ללמוד איך לרשום ולמחוק חוקי iptables, ראה את המדריך הזה: איך לרשום ולמחוק חוקי חומת אש של iptables.
חוקים שימושיים באופן כללי
סעיף זה כולל מגוון פקודות iptables שיצרו חוקים השימושיים בדרך כלל בשרתים רבים.
מאפשר חיבורי לופבק
הממשק loopback, המכונה גם lo
, הוא מה שמחשב משתמש בו כדי להעביר חיבורי רשת אליו עצמו. לדוגמה, אם אתה מפעיל את ping localhost
או ping 127.0.0.1
, השרת שלך יפעיל ping לעצמו באמצעות הלופבק. ממשק הלופבק משמש גם אם אתה מגדיר את שרת היישום שלך להתחבר לשרת בסיס נתונים עם כתובת localhost
. כך, יהיה לך רצון לוודא שכיסוי האש שלך מאפשר את החיבורים האלה.
כדי לקבל את כל תעבורת התקשורת בממשק הלופבק, הפעל את הפקודות האלה:
הרשאת חיבורים נכנסים שקושרו ונקושרו
כיוון שתעבורת הרשת כללית צריכה להיות דו-כיוונית – נכנסת ויוצאת – לעבוד כראוי, סביר ליצור כלל אש שמאפשר תעבורת נכנסת שקושרה ונקושרת, כך שהשרת יאפשר תעבורה בחזרה עבור חיבורים יוצאים שנפתחו על ידי השרת עצמו. הפקודה הזו תאפשר את זה:
הרשאת חיבורים יוצאים שקושרו
עשוי להיות רצוי לאפשר תנועה יוצאת של כל חיבורים המקובלים, שבדרך כלל מהווים את התגובה לחיבורים נכנסים חוקיים. הפקודה הבאה תאפשר זאת:
אישור גישה לרשת הפנימית לרשת החיצונית
נניח ש־eth0
היא הרשת החיצונית שלך, ו־eth1
היא הרשת הפנימית שלך, זה יאפשר לרשת הפנימית שלך לגשת לרשת החיצונית:
דילוג על חבילות לא תקינות
חלק מחבילות תנועת הרשת מסומנות כ־לא תקינות. לפעמים זה יכול להיות שימושי לרשום את סוג החבילה הזו אבל בדרך כלל זה בסדר לדחות אותן. ניתן לעשות זאת עם הפקודה הבאה:
חסימת כתובת IP
כדי לחסום חיבורי רשת שמקורם בכתובת IP מסוימת, לדוגמה 203.0.113.51
, הריצו את הפקודה הבאה:
בדוגמה זו, -s 203.0.113.51
מציין כתובת IP מקורית של "203.0.113.51". ניתן לציין את כתובת ה-IP המקורית בכל כלל גישה, כולל כלל אישור.
אם ברצונך ל-דחות את החיבור במקום זאת, המגיב לבקשת החיבור עם שגיאת "חיבור נדחה", החלף את "DROP" ב-"REJECT" כך:
חסימת חיבורים לממשק רשת
כדי לחסום חיבורים מכתובת IP מסוימת, לדוגמה 203.0.113.51
, לממשק רשת מסוים, לדוגמה eth0
, השתמש בפקודה זו:
זהו אותו דוגמה כמו הקודם, עם הוספת האפשרות -i eth0
. ניתן לציין את ממשק הרשת בכל כלל גישה, וזוהי דרך מצוינת להגביל את הכלל לרשת מסוימת.
שירות: SSH
אם אתה משתמש בשרת ללא מסך מקומי, כנראה תרצה לאפשר חיבורי SSH נכנסים (פתח 22) כדי שתוכל להתחבר ולנהל את השרת שלך. הסעיף הזה מכסה איך להגדיר את הגדרות הגישה של הגנת האש עם כללים הקשורים ל-SSH.
אישור כניסת SSH כל כניסה
כדי לאפשר את כל החיבורים הנכנסים של SSH, הפעילו את הפקודות האלו:
הפקודה השנייה, המאפשרת את תעבורת היציאה של חיבורי SSH הקיימים, נחוצה רק אם מדיניות ה־OUTPUT
לא מוגדרת ל־ACCEPT
.
אישור SSH נכנס מכתובת IP ספציפית או תת־רשת
כדי לאפשר חיבורי SSH נכנסים מכתובת IP ספציפית או תת־רשת, ציינו את המקור. לדוגמה, אם ברצונכם לאפשר את רשת ה־203.0.113.0/24
בשלמותה, הפעילו את הפקודות האלו:
הפקודה השנייה, המאפשרת את תעבורת היציאה של חיבורי SSH הקיימים, נחוצה רק אם מדיניות ה־OUTPUT
לא מוגדרת ל־ACCEPT
.
אישור SSH יוצא
אם מדיניות הגנה של הגיבוי שלך OUTPUT
לא מוגדרת כ- ACCEPT
, ואתה רוצה לאפשר חיבורי SSH יוצאים – שרתך מתחיל חיבור SSH לשרת אחר – תוכל להפעיל את הפקודות האלו:
אישור קלט נכנס של Rsync מכתובת IP או תת-רשת מסוימה
Rsync, שרץ על פורט 873, יכול לשמש להעברת קבצים ממחשב אחד למחשב אחר.
כדי להתיר חיבורי rsync נכנסים מכתובת IP או תת-רשת מסוימה, יש לציין את כתובת ה-IP ממקור ואת פורט היעד. לדוגמה, אם ברצונך לאפשר לרשת כל התת-רשת 203.0.113.0/24
לבצע חיבורים rsync לשרת שלך, תריץ את הפקודות האלו:
הפקודה השנייה, שמאפשרת את התעבורה היוצאת של חיבורי rsync הקיימים, היא נחוצה רק אם מדיניות הגיבוי של OUTPUT
אינה מוגדרת כ- ACCEPT
.
שירות: שרת אינטרנט
שרתי האינטרנט, כמו Apache ו-Nginx, כללית מקשיבים לבקשות על פורט 80 ו-443 לחיבורי HTTP ו-HTTPS, בהתאמה. אם המדיניות המוגדרת שלך לתעבורת קלט היא לדחות או להסר, תרצה ליצור כללים שיאפשרו לשרת שלך להגיב לבקשות אלו.
מאפשר כל חיבורי HTTP נכנסים
כדי לאפשר את כל חיבורי ה-HTTP (פורט 80), הריצו את הפקודות הבאות:
הפקודה השנייה, שמאפשרת את תעבורת היציאה של חיבורי ה-HTTP המוצבים, נדרשת רק אם מדיניות ה-OUTPUT
אינה מוגדרת ל-ACCEPT
.
מאפשר כל חיבורי HTTPS נכנסים
כדי לאפשר את כל חיבורי ה-HTTPS (פורט 443) הנכנסים, הריצו את הפקודות הבאות:
הפקודה השנייה, שמאפשרת את תעבורת היציאה של חיבורי ה-HTTP המוצבים, נדרשת רק אם מדיניות ה-OUTPUT
אינה מוגדרת ל-ACCEPT
.
מאפשר כל חיבורי HTTP ו-HTTPS נכנסים
אם ברצונכם לאפשר תעבורה של שני פרוטוקולים, HTTP ו-HTTPS, תוכלו להשתמש במודול ה-multiport כדי ליצור כלל שמאפשר את שני הפורטים. כדי לאפשר כל חיבורי ה-HTTP וה-HTTPS הנכנסים (פורט 443), הריצו את הפקודות הבאות:
הפקודה השנייה, שמאפשרת את תעבורת היציאה של חיבורי HTTP ו-HTTPS שנקיימו, נדרשת רק אם מדיניות ה-OUTPUT
אינה מוגדרת ל-ACCEPT
.
שירות: MySQL
MySQL מאזין לחיבורי לקוחות בפורט 3306. אם שרת בסיס הנתונים שלך בשימוש על ידי לקוח משרת מרוחק, עליך לוודא שאתה מאפשר את התעבורה הזו.
מאפשר MySQL מכתובת IP או רשת מסוימה
כדי לאפשר חיבורי MySQL נכנסים מכתובת IP או רשת מסוימה, יש לציין את המקור. לדוגמה, אם ברצונך לאפשר את רשת ה-203.0.113.0/24
בשלמותה, יש להריץ את הפקודות הבאות:
הפקודה השנייה, שמאפשרת את תעבורת היציאה של חיבורי MySQL שנקיימו, נדרשת רק אם מדיניות ה-OUTPUT
אינה מוגדרת ל-ACCEPT
.
מאפשר MySQL לממשק רשת מסוים
כדי לאפשר חיבורי MySQL לממשק רשת מסוים – נניח שיש לך ממשק רשת פרטי eth1, לדוגמה – השתמש בפקודות אלה:
הפקודה השנייה, שמאפשרת את תעבורת היציאה של חיבורי MySQL מקובלים, נחוצה רק אם מדיניות OUTPUT
אינה מוגדרת ל־ACCEPT
.
שירות: PostgreSQL
PostgreSQL תופסת לחיבורי לקוח על פתח 5432. אם שרת מסד הנתונים של PostgreSQL משמש על ידי לקוח בשרת רחוק, עליך לוודא שאתה מאפשר את התעבורה הזו.
PostgreSQL מכתובת IP או תת־רשת מסוימת
כדי לאפשר חיבורי PostgreSQL נכנסים מכתובת IP או תת־רשת מסוימת, ציין את המקור. לדוגמה, אם ברצונך לאפשר את כל התת־רשת 203.0.113.0/24
, הרץ את הפקודות האלה:
הפקודה השנייה, שמאפשרת את תעבורת היציאה של חיבורי PostgreSQL מקובלים, נחוצה רק אם מדיניות OUTPUT
אינה מוגדרת ל־ACCEPT
.
אפשרות חיבור PostgreSQL לממשק רשת מסוים
כדי לאפשר חיבורים של PostgreSQL לממשק רשת מסוים – נניח שיש לך ממשק רשת פרטי eth1
, לדוגמה – השתמש בפקודות הללו:
הפקודה השנייה, שמאפשרת את תעבורת היציאה של חיבורי PostgreSQL שנקבעו, נחוצה רק אם מדיניות ה OUTPUT
לא מוגדרת ל ACCEPT
.
שירות: דואר
שרתי דואר, כמו Sendmail ו- Postfix, מקשיבים על מגוון פורטים התלויים בפרוטוקולים שמשמשים למסירת דואר. אם אתה מפעיל שרת דואר, עליך לקבוע אילו פרוטוקולים אתה משתמש בהם ולאפשר את סוגי התעבורה המתאימים. נראה גם איך ליצור כלל כדי לחסום שליחת דואר SMTP יוצא.
חסימת דואר SMTP יוצא
אם השרת שלך אינו צריך לשלוח דואר יוצא, ייתכן שתרצה לחסום סוג זה של תעבורה. כדי לחסום דואר SMTP יוצא, שמשתמש בפורט 25, הפעל את הפקודה הזו:
זה מגדיר את iptables כדי לדחות את כל תעבורה יוצאת בפורט 25. אם נדרש לדחות שירות שונה על פי מספר הפורט שלו, במקום פורט 25, החלף את מספר הפורט ההוא ב- 25
למעלה.
מאפשר כל תעבורה נכנסת SMTP
כדי לאפשר לשרת שלך להגיב לחיבורי SMTP על פורט 25, הפעל את הפקודות האלה:
הפקודה השנייה, שמאפשרת את התעבורה היוצאת של חיבורי SMTP מיוצרים, נדרשת רק אם מדיניות ה- OUTPUT
לא מוגדרת כ- ACCEPT
.
מאפשר כל תעבורה נכנסת IMAP
כדי לאפשר לשרת שלך להגיב לחיבורי IMAP, פורט 143, הפעל את הפקודות האלה:
הפקודה השנייה, שמאפשרת את התעבורה היוצאת של חיבורי IMAP מיוצרים, נדרשת רק אם מדיניות ה- OUTPUT
לא מוגדרת כ- ACCEPT
.
מאפשר כל תעבורה נכנסת IMAPS
לאפשר לשרת שלך להגיב לחיבורי IMAPS, פתח 993, הפעל את הפקודות הבאות:
הפקודה השנייה, שמאפשרת את תעבורת היציאה של חיבורי IMAPS שכבר הוקמו, נחוצה רק אם מדיניות ה-OUTPUT
לא מוגדרת ל-ACCEPT
.
מאפשר כניסה של כל חיבורי POP3
כדי לאפשר לשרת שלך להגיב לחיבורי POP3, פתח 110, הפעל את הפקודות הבאות:
הפקודה השנייה, שמאפשרת את תעבורת היציאה של חיבורי POP3 שכבר הוקמו, נחוצה רק אם מדיניות ה-OUTPUT
לא מוגדרת ל-ACCEPT
.
מאפשר כניסה של כל חיבורי POP3S
כדי לאפשר לשרת שלך להגיב לחיבורי POP3S, פתח 995, הפעל את הפקודות הבאות:
הפקודה השנייה, שמאפשרת את תעבורת היציאה של חיבורי POP3S שכבר הוקמו, נחוצה רק אם מדיניות ה-OUTPUT
לא מוגדרת ל-ACCEPT
.
מסקנה
כך כיסיתי רבות מהפקודות שנהוגות לשימוש בעת הגדרת חומת אש iptables. כמובן, iptables הוא כלי גמיש מאוד, אז אל תהסס לערבב ולהתאים את הפקודות עם אפשרויות שונות להתאמה לצרכים המסוימים שלך אם הן לא מופיעות כאן.
אם אתה מחפש עזרה לקביעת איך יש להגדיר את החומה שלך, תבדוק את המדריך הזה: כיצד לבחור מדיניות חומת אש אפקטיבית לאבטחת השרתים שלך.