יסודות של Iptables: כללי ופקודות נפוצים של הגנת האש

הקדמה

ספר זה מספק מדריך בסגנון גלגלת עבור 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 בצורה הבאה:

  1. sudo apt install iptables-persistent

במהלך ההתקנה, יתבקש ממך האם ברצונך לשמור את כללי החומה הנוכחיים שלך.

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

  1. sudo netfilter-persistent save

הפצות Linux אחרות עשויות להציע דרכים אלטרנטיביות לשמירה של השינויים שלך ב-iptables באופן קבוע. אנא הפנה לתיעוד הרלוונטי למידע נוסף.

רשימת חוקים ומחיקתם

אם ברצונך ללמוד איך לרשום ולמחוק חוקי iptables, ראה את המדריך הזה: איך לרשום ולמחוק חוקי חומת אש של iptables.

חוקים שימושיים באופן כללי

סעיף זה כולל מגוון פקודות iptables שיצרו חוקים השימושיים בדרך כלל בשרתים רבים.

מאפשר חיבורי לופבק

הממשק loopback, המכונה גם lo, הוא מה שמחשב משתמש בו כדי להעביר חיבורי רשת אליו עצמו. לדוגמה, אם אתה מפעיל את ping localhost או ping 127.0.0.1, השרת שלך יפעיל ping לעצמו באמצעות הלופבק. ממשק הלופבק משמש גם אם אתה מגדיר את שרת היישום שלך להתחבר לשרת בסיס נתונים עם כתובת localhost. כך, יהיה לך רצון לוודא שכיסוי האש שלך מאפשר את החיבורים האלה.

כדי לקבל את כל תעבורת התקשורת בממשק הלופבק, הפעל את הפקודות האלה:

  1. sudo iptables -A INPUT -i lo -j ACCEPT
  2. sudo iptables -A OUTPUT -o lo -j ACCEPT

כיוון שתעבורת הרשת כללית צריכה להיות דו-כיוונית – נכנסת ויוצאת – לעבוד כראוי, סביר ליצור כלל אש שמאפשר תעבורת נכנסת שקושרה ונקושרת, כך שהשרת יאפשר תעבורה בחזרה עבור חיבורים יוצאים שנפתחו על ידי השרת עצמו. הפקודה הזו תאפשר את זה:

  1. sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

הרשאת חיבורים יוצאים שקושרו

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

  1. sudo iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT

אישור גישה לרשת הפנימית לרשת החיצונית

נניח ש־eth0 היא הרשת החיצונית שלך, ו־eth1 היא הרשת הפנימית שלך, זה יאפשר לרשת הפנימית שלך לגשת לרשת החיצונית:

  1. sudo iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT

דילוג על חבילות לא תקינות

חלק מחבילות תנועת הרשת מסומנות כ־לא תקינות. לפעמים זה יכול להיות שימושי לרשום את סוג החבילה הזו אבל בדרך כלל זה בסדר לדחות אותן. ניתן לעשות זאת עם הפקודה הבאה:

  1. sudo iptables -A INPUT -m conntrack --ctstate INVALID -j DROP

חסימת כתובת IP

כדי לחסום חיבורי רשת שמקורם בכתובת IP מסוימת, לדוגמה 203.0.113.51, הריצו את הפקודה הבאה:

  1. sudo iptables -A INPUT -s 203.0.113.51 -j DROP

בדוגמה זו, -s 203.0.113.51 מציין כתובת IP מקורית של "203.0.113.51". ניתן לציין את כתובת ה-IP המקורית בכל כלל גישה, כולל כלל אישור.

אם ברצונך ל-דחות את החיבור במקום זאת, המגיב לבקשת החיבור עם שגיאת "חיבור נדחה", החלף את "DROP" ב-"REJECT" כך:

  1. sudo iptables -A INPUT -s 203.0.113.51 -j REJECT

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

כדי לחסום חיבורים מכתובת IP מסוימת, לדוגמה 203.0.113.51, לממשק רשת מסוים, לדוגמה eth0, השתמש בפקודה זו:

  1. iptables -A INPUT -i eth0 -s 203.0.113.51 -j DROP

זהו אותו דוגמה כמו הקודם, עם הוספת האפשרות -i eth0. ניתן לציין את ממשק הרשת בכל כלל גישה, וזוהי דרך מצוינת להגביל את הכלל לרשת מסוימת.

שירות: SSH

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

אישור כניסת SSH כל כניסה

כדי לאפשר את כל החיבורים הנכנסים של SSH, הפעילו את הפקודות האלו:

  1. sudo iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
  2. sudo iptables -A OUTPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT

הפקודה השנייה, המאפשרת את תעבורת היציאה של חיבורי SSH הקיימים, נחוצה רק אם מדיניות ה־OUTPUT לא מוגדרת ל־ACCEPT.

אישור SSH נכנס מכתובת IP ספציפית או תת־רשת

כדי לאפשר חיבורי SSH נכנסים מכתובת IP ספציפית או תת־רשת, ציינו את המקור. לדוגמה, אם ברצונכם לאפשר את רשת ה־203.0.113.0/24 בשלמותה, הפעילו את הפקודות האלו:

  1. sudo iptables -A INPUT -p tcp -s 203.0.113.0/24 --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
  2. sudo iptables -A OUTPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT

הפקודה השנייה, המאפשרת את תעבורת היציאה של חיבורי SSH הקיימים, נחוצה רק אם מדיניות ה־OUTPUT לא מוגדרת ל־ACCEPT.

אישור SSH יוצא

אם מדיניות הגנה של הגיבוי שלך OUTPUT לא מוגדרת כ- ACCEPT, ואתה רוצה לאפשר חיבורי SSH יוצאים – שרתך מתחיל חיבור SSH לשרת אחר – תוכל להפעיל את הפקודות האלו:

  1. sudo iptables -A OUTPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
  2. sudo iptables -A INPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT

אישור קלט נכנס של Rsync מכתובת IP או תת-רשת מסוימה

Rsync, שרץ על פורט 873, יכול לשמש להעברת קבצים ממחשב אחד למחשב אחר.

כדי להתיר חיבורי rsync נכנסים מכתובת IP או תת-רשת מסוימה, יש לציין את כתובת ה-IP ממקור ואת פורט היעד. לדוגמה, אם ברצונך לאפשר לרשת כל התת-רשת 203.0.113.0/24 לבצע חיבורים rsync לשרת שלך, תריץ את הפקודות האלו:

  1. sudo iptables -A INPUT -p tcp -s 203.0.113.0/24 --dport 873 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
  2. sudo iptables -A OUTPUT -p tcp --sport 873 -m conntrack --ctstate ESTABLISHED -j ACCEPT

הפקודה השנייה, שמאפשרת את התעבורה היוצאת של חיבורי rsync הקיימים, היא נחוצה רק אם מדיניות הגיבוי של OUTPUT אינה מוגדרת כ- ACCEPT.

שירות: שרת אינטרנט

שרתי האינטרנט, כמו Apache ו-Nginx, כללית מקשיבים לבקשות על פורט 80 ו-443 לחיבורי HTTP ו-HTTPS, בהתאמה. אם המדיניות המוגדרת שלך לתעבורת קלט היא לדחות או להסר, תרצה ליצור כללים שיאפשרו לשרת שלך להגיב לבקשות אלו.

מאפשר כל חיבורי HTTP נכנסים

כדי לאפשר את כל חיבורי ה-HTTP (פורט 80), הריצו את הפקודות הבאות:

  1. sudo iptables -A INPUT -p tcp --dport 80 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
  2. sudo iptables -A OUTPUT -p tcp --sport 80 -m conntrack --ctstate ESTABLISHED -j ACCEPT

הפקודה השנייה, שמאפשרת את תעבורת היציאה של חיבורי ה-HTTP המוצבים, נדרשת רק אם מדיניות ה-OUTPUT אינה מוגדרת ל-ACCEPT.

מאפשר כל חיבורי HTTPS נכנסים

כדי לאפשר את כל חיבורי ה-HTTPS (פורט 443) הנכנסים, הריצו את הפקודות הבאות:

  1. sudo iptables -A INPUT -p tcp --dport 443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
  2. sudo iptables -A OUTPUT -p tcp --sport 443 -m conntrack --ctstate ESTABLISHED -j ACCEPT

הפקודה השנייה, שמאפשרת את תעבורת היציאה של חיבורי ה-HTTP המוצבים, נדרשת רק אם מדיניות ה-OUTPUT אינה מוגדרת ל-ACCEPT.

מאפשר כל חיבורי HTTP ו-HTTPS נכנסים

אם ברצונכם לאפשר תעבורה של שני פרוטוקולים, HTTP ו-HTTPS, תוכלו להשתמש במודול ה-multiport כדי ליצור כלל שמאפשר את שני הפורטים. כדי לאפשר כל חיבורי ה-HTTP וה-HTTPS הנכנסים (פורט 443), הריצו את הפקודות הבאות:

  1. sudo iptables -A INPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
  2. sudo iptables -A OUTPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate ESTABLISHED -j ACCEPT

הפקודה השנייה, שמאפשרת את תעבורת היציאה של חיבורי HTTP ו-HTTPS שנקיימו, נדרשת רק אם מדיניות ה-OUTPUT אינה מוגדרת ל-ACCEPT.

שירות: MySQL

MySQL מאזין לחיבורי לקוחות בפורט 3306. אם שרת בסיס הנתונים שלך בשימוש על ידי לקוח משרת מרוחק, עליך לוודא שאתה מאפשר את התעבורה הזו.

מאפשר MySQL מכתובת IP או רשת מסוימה

כדי לאפשר חיבורי MySQL נכנסים מכתובת IP או רשת מסוימה, יש לציין את המקור. לדוגמה, אם ברצונך לאפשר את רשת ה-203.0.113.0/24 בשלמותה, יש להריץ את הפקודות הבאות:

  1. sudo iptables -A INPUT -p tcp -s 203.0.113.0/24 --dport 3306 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
  2. sudo iptables -A OUTPUT -p tcp --sport 3306 -m conntrack --ctstate ESTABLISHED -j ACCEPT

הפקודה השנייה, שמאפשרת את תעבורת היציאה של חיבורי MySQL שנקיימו, נדרשת רק אם מדיניות ה-OUTPUT אינה מוגדרת ל-ACCEPT.

מאפשר MySQL לממשק רשת מסוים

כדי לאפשר חיבורי MySQL לממשק רשת מסוים – נניח שיש לך ממשק רשת פרטי eth1, לדוגמה – השתמש בפקודות אלה:

  1. sudo iptables -A INPUT -i eth1 -p tcp --dport 3306 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
  2. sudo iptables -A OUTPUT -o eth1 -p tcp --sport 3306 -m conntrack --ctstate ESTABLISHED -j ACCEPT

הפקודה השנייה, שמאפשרת את תעבורת היציאה של חיבורי MySQL מקובלים, נחוצה רק אם מדיניות OUTPUT אינה מוגדרת ל־ACCEPT.

שירות: PostgreSQL

PostgreSQL תופסת לחיבורי לקוח על פתח 5432. אם שרת מסד הנתונים של PostgreSQL משמש על ידי לקוח בשרת רחוק, עליך לוודא שאתה מאפשר את התעבורה הזו.

PostgreSQL מכתובת IP או תת־רשת מסוימת

כדי לאפשר חיבורי PostgreSQL נכנסים מכתובת IP או תת־רשת מסוימת, ציין את המקור. לדוגמה, אם ברצונך לאפשר את כל התת־רשת 203.0.113.0/24, הרץ את הפקודות האלה:

  1. sudo iptables -A INPUT -p tcp -s 203.0.113.0/24 --dport 5432 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
  2. sudo iptables -A OUTPUT -p tcp --sport 5432 -m conntrack --ctstate ESTABLISHED -j ACCEPT

הפקודה השנייה, שמאפשרת את תעבורת היציאה של חיבורי PostgreSQL מקובלים, נחוצה רק אם מדיניות OUTPUT אינה מוגדרת ל־ACCEPT.

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

כדי לאפשר חיבורים של PostgreSQL לממשק רשת מסוים – נניח שיש לך ממשק רשת פרטי eth1, לדוגמה – השתמש בפקודות הללו:

  1. sudo iptables -A INPUT -i eth1 -p tcp --dport 5432 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
  2. sudo iptables -A OUTPUT -o eth1 -p tcp --sport 5432 -m conntrack --ctstate ESTABLISHED -j ACCEPT

הפקודה השנייה, שמאפשרת את תעבורת היציאה של חיבורי PostgreSQL שנקבעו, נחוצה רק אם מדיניות ה OUTPUT לא מוגדרת ל ACCEPT.

שירות: דואר

שרתי דואר, כמו Sendmail ו- Postfix, מקשיבים על מגוון פורטים התלויים בפרוטוקולים שמשמשים למסירת דואר. אם אתה מפעיל שרת דואר, עליך לקבוע אילו פרוטוקולים אתה משתמש בהם ולאפשר את סוגי התעבורה המתאימים. נראה גם איך ליצור כלל כדי לחסום שליחת דואר SMTP יוצא.

חסימת דואר SMTP יוצא

אם השרת שלך אינו צריך לשלוח דואר יוצא, ייתכן שתרצה לחסום סוג זה של תעבורה. כדי לחסום דואר SMTP יוצא, שמשתמש בפורט 25, הפעל את הפקודה הזו:

  1. sudo iptables -A OUTPUT -p tcp --dport 25 -j REJECT

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

מאפשר כל תעבורה נכנסת SMTP

כדי לאפשר לשרת שלך להגיב לחיבורי SMTP על פורט 25, הפעל את הפקודות האלה:

  1. sudo iptables -A INPUT -p tcp --dport 25 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
  2. sudo iptables -A OUTPUT -p tcp --sport 25 -m conntrack --ctstate ESTABLISHED -j ACCEPT

הפקודה השנייה, שמאפשרת את התעבורה היוצאת של חיבורי SMTP מיוצרים, נדרשת רק אם מדיניות ה- OUTPUT לא מוגדרת כ- ACCEPT.

מאפשר כל תעבורה נכנסת IMAP

כדי לאפשר לשרת שלך להגיב לחיבורי IMAP, פורט 143, הפעל את הפקודות האלה:

  1. sudo iptables -A INPUT -p tcp --dport 143 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
  2. sudo iptables -A OUTPUT -p tcp --sport 143 -m conntrack --ctstate ESTABLISHED -j ACCEPT

הפקודה השנייה, שמאפשרת את התעבורה היוצאת של חיבורי IMAP מיוצרים, נדרשת רק אם מדיניות ה- OUTPUT לא מוגדרת כ- ACCEPT.

מאפשר כל תעבורה נכנסת IMAPS

לאפשר לשרת שלך להגיב לחיבורי IMAPS, פתח 993, הפעל את הפקודות הבאות:

  1. sudo iptables -A INPUT -p tcp --dport 993 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
  2. sudo iptables -A OUTPUT -p tcp --sport 993 -m conntrack --ctstate ESTABLISHED -j ACCEPT

הפקודה השנייה, שמאפשרת את תעבורת היציאה של חיבורי IMAPS שכבר הוקמו, נחוצה רק אם מדיניות ה-OUTPUT לא מוגדרת ל-ACCEPT.

מאפשר כניסה של כל חיבורי POP3

כדי לאפשר לשרת שלך להגיב לחיבורי POP3, פתח 110, הפעל את הפקודות הבאות:

  1. sudo iptables -A INPUT -p tcp --dport 110 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
  2. sudo iptables -A OUTPUT -p tcp --sport 110 -m conntrack --ctstate ESTABLISHED -j ACCEPT

הפקודה השנייה, שמאפשרת את תעבורת היציאה של חיבורי POP3 שכבר הוקמו, נחוצה רק אם מדיניות ה-OUTPUT לא מוגדרת ל-ACCEPT.

מאפשר כניסה של כל חיבורי POP3S

כדי לאפשר לשרת שלך להגיב לחיבורי POP3S, פתח 995, הפעל את הפקודות הבאות:

  1. sudo iptables -A INPUT -p tcp --dport 995 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
  2. sudo iptables -A OUTPUT -p tcp --sport 995 -m conntrack --ctstate ESTABLISHED -j ACCEPT

הפקודה השנייה, שמאפשרת את תעבורת היציאה של חיבורי POP3S שכבר הוקמו, נחוצה רק אם מדיניות ה-OUTPUT לא מוגדרת ל-ACCEPT.

מסקנה

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

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

Source:
https://www.digitalocean.com/community/tutorials/iptables-essentials-common-firewall-rules-and-commands