המדריך למתחילים ל- iptables, חומת האש של לינוקס

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

צילום מאת ezioman .

אודות iptables

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

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

sudo apt-get install iptables

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

סוגי שרשראות

iptables משתמש בשלוש שרשראות שונות: קלט, קדימה ופלט.

קלט - שרשרת זו משמשת לשליטה בהתנהגות עבור חיבורים נכנסים. לדוגמא, אם משתמש מנסה SSH למחשב / שרת שלך, iptables ינסו להתאים את כתובת ה- IP והיציאה לכלל בשרשרת הקלט.

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

יש דרך אחת בטוחה לבדוק אם המערכת שלך משתמשת / זקוקה לשרשרת הקדמית או לא.

iptables -L -v

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

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

האזהרה

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

התנהגות ברירת מחדל בשרשרת מדיניות

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

כדי לראות מה רשתות המדיניות שלך מוגדרות כעת לתנועה ללא תחרות, הפעל את iptables -Lהפקודה.

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

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

iptables --policy INPUT ACCEPT


iptables --policy OUTPUT ACCEPT


iptables --policy FORWARD ACCEPT

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

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

iptables --policy INPUT DROP


iptables --policy OUTPUT DROP


iptables --policy FORWARD DROP

תגובות ספציפיות לחיבור

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

קבל - אפשר את החיבור.

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

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

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

מאפשר את החיבור:

ביטול הקשר:

דוחה את החיבור:

מתיר או חוסם חיבורים ספציפיים

כאשר רשתות המדיניות שלך מוגדרות, תוכל כעת להגדיר טבלאות ipt כדי לאפשר או לחסום כתובות ספציפיות, טווחי כתובות ויציאות. בדוגמאות אלה נקבע את החיבורים ל- DROP, אך תוכל להחליף אותם ACCEPTאו REJECT, בהתאם לצרכים שלך ואופן הגדרת רשתות המדיניות שלך.

הערה: בדוגמאות אלה נשתמש iptables -Aלצירוף כללים לשרשרת הקיימת. iptables מתחיל בראש הרשימה ועובר על כל כלל עד שהוא מוצא אחד שהוא תואם. אם עליך להוסיף כלל מעל לכלל אחר, תוכל iptables -I [chain] [number]לציין את המספר שהוא צריך להיות ברשימה.

חיבורים מכתובת IP אחת

דוגמה זו מראה כיצד לחסום את כל החיבורים מכתובת ה- IP 10.10.10.10.

iptables -A INPUT -s 10.10.10.10 -j DROP

חיבורים ממגוון כתובות IP

דוגמה זו מראה כיצד לחסום את כל כתובות ה- IP בתחום הרשת 10.10.10.0/24. אתה יכול להשתמש במסכת רשת או בסימן קו נטוי סטנדרטי כדי לציין את טווח כתובות ה- IP.

iptables -A INPUT -s 10.10.10.0/24 -j DROP

אוֹ

iptables -A INPUT -s 10.10.10.0/255.255.255.0 -j DROP

חיבורים ליציאה ספציפית

דוגמה זו מראה כיצד לחסום חיבורי SSH מתאריך 10.10.10.10.

iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -j DROP

אתה יכול להחליף את "ssh" בכל פרוטוקול או מספר יציאה. -p tcpחלק מהקוד מספרת iptables איזה סוג של חיבור השימושים פרוטוקול. אם חוסמת פרוטוקול המשתמש UDP ולא TCP, -p udpיהיה צורך במקום זאת.

דוגמה זו מראה כיצד לחסום חיבורי SSH מכל כתובת IP.

iptables -A INPUT -p tcp --dport ssh -j DROP

מדינות חיבור

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

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

iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -m state --state NEW,ESTABLISHED -j ACCEPT

iptables -A OUTPUT -p tcp --sport 22 -d 10.10.10.10 -m state --state ESTABLISHED -j ACCEPT

שמור שינויים

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

אובונטו:

sudo /sbin/iptables-save

Red Hat / CentOS:

/sbin/service iptables save

אוֹ

/etc/init.d/iptables save

פקודות אחרות

ציין את כללי ה- iptables שהוגדרו כרגע:

iptables -L

הוספת -vהאפשרות תתן לך מידע על מנות ובתים, והוספה -nתפרט את הכל באופן מספרי. במילים אחרות - שמות מארחים, פרוטוקולים ורשתות רשומים כמספרים.

כדי למחוק את כל הכללים שהוגדרו כעת, תוכל להוציא את פקודת ההדחה.

iptables -F