מה זה iptables - חומת האש שיושבת בתוך כל שרת לינוקס¶
כל מי שניהל שרת לינוקס תקופה מספיק ארוכה נתקל בשלב מסוים ב-iptables, בין אם ישירות ובין אם דרך כלי שמתעטף סביבו. זה הכלי הקלאסי לניהול חומת אש ברמת מערכת ההפעלה בלינוקס, ולמרות שיש כיום חלופות נוחות יותר, הבנה של iptables היא עדיין הבסיס שכל השאר בנוי עליו.
מה בעצם iptables מנהל¶
iptables הוא כלי שורת פקודה שמאפשר להגדיר כללים למרכיב שנקרא netfilter, המנגנון שמוטמע בליבת לינוקס (kernel) ומטפל בכל חבילת רשת שעוברת דרך המערכת. iptables לא עושה את הסינון בעצמו, הוא בעצם ממשק שדרכו אתם אומרים ל-netfilter מה לעשות עם כל סוג תעבורה.
המבנה - Tables ו-Chains¶
כדי להבין iptables, צריך להבין קודם שני מושגים בסיסיים.
Tables (טבלאות) מייצגות קטגוריות של פעולות. הנפוצה ביותר היא filter, שאחראית על החלטות פשוטות של מותר או אסור. יש גם nat, שמשמשת לתרגום כתובות (למשל להעברת תעבורה נכנסת מהראוטר לשרת פנימי ספציפי), ו-mangle, שמאפשרת לשנות תכונות של החבילה עצמה.
Chains (שרשראות) בתוך כל טבלה מייצגות את שלב התעבורה. שלושת השרשראות המרכזיות בטבלת filter הן:
- INPUT. תעבורה שמיועדת למחשב עצמו.
- OUTPUT. תעבורה שיוצאת מהמחשב עצמו.
- FORWARD. תעבורה שרק עוברת דרך המחשב, כשהוא משמש כראוטר בין שתי רשתות.
כל חבילת רשת שמגיעה למערכת עוברת דרך השרשרת הרלוונטית, שבודקת אותה מול רשימת כללים בסדר, עד שהיא מוצאת התאמה.
איך נראה כלל בפועל¶
הפקודה הכי בסיסית שחוסמת תעבורה נכנסת מכתובת IP ספציפית נראית כך:
-A INPUT מוסיף כלל לשרשרת INPUT, -s 203.0.113.5 מציין את כתובת המקור, ו--j DROP אומר "זרוק את החבילה בשקט, בלי להשיב". פקודה כמעט זהה, אבל עם -p tcp --dport 22, מאפשרת להגביל את הכלל לתעבורת SSH בלבד, ולא לכל התעבורה מאותה כתובת.
כלל שמאפשר תעבורה נכנסת לפורט 443 מכל מקום נראה כך:
סדר הכללים קובע הכל¶
זו בדיוק הנקודה שגורמת למתחילים הכי הרבה כאב ראש - iptables בודק כללים לפי הסדר שבו הם מוגדרו, ועוצר בהתאמה הראשונה. אם כלל שחוסם הכל מופיע לפני כלל שמתיר משהו ספציפי, הכלל המתיר פשוט לעולם לא ייבדק. זו הסיבה שכללי חסימה כלליים תמיד צריכים להיות אחרונים ברשימה, אחרי שכל מה שרוצים לאפשר במפורש כבר הוגדר.
מדיניות ברירת מחדל - deny by default¶
בדיוק כמו בכל חומת אש רצינית, הגישה הנכונה היא לקבוע מדיניות ברירת מחדל שחוסמת הכל, ואז לפתוח במפורש רק את מה שצריך:
מרגע זה, כל תעבורה נכנסת שלא מותאמת לכלל מפורש שמתיר אותה, נחסמת אוטומטית. זה מגן מפני מצב שבו שוכחים לחסום משהו, כי ברירת המחדל היא כבר "אסור", לא "מותר".
למה iptables נחשב מסובך, ומתי כדאי כלי אחר¶
הבעיה עם iptables היא לא המורכבות הרעיונית, אלא התחביר - כללים ארוכים, קשה לזכור אילו דגלים שייכים לאיזו טבלה, וקל מאוד לכתוב כלל שגוי שסוגר גישה בטעות לשרת שאתם מנהלים מרחוק. זו בדיוק הסיבה שנוצרו כלים ידידותיים יותר שיושבים מעל iptables ומפשטים את התחביר, בלי לשנות את העיקרון הבסיסי.
למה עדיין שווה להכיר את iptables לעומק¶
גם אם בפועל תעבדו עם כלי נוח יותר, הבנה של iptables עצמו נותנת לכם ידע בסיס שעובד בכל שרת לינוקס, בלי תלות בכלי ספציפי, וגם מאפשרת לכם לדבג מצב שבו כלי אחר לא מתנהג כמו שציפיתם, כי בסוף כולם בסופו של דבר מתרגמים לכללי netfilter.
קורס הרשתות המלא נמצא כאן, חינם ובעברית, כולל תרגול מעשי על הגדרת כללי חומת אש אמיתיים.
יש לכם כלל iptables שלא מתנהג כמו שציפיתם? שאלו בדיסקורד.
לסיכום¶
iptables הוא הממשק הקלאסי לניהול חומת האש שמוטמעת בליבת לינוקס עצמה. ברגע שמבינים את הרעיון של טבלאות, שרשראות, וסדר כללים, כל כלל ארוך שנראה מפחיד הופך למשפט פשוט - מאיפה, לאן, ומה לעשות עם החבילה.