שאלה IPTABLES - שיעור הגבלת כתובת IP נכנסת


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

john.domain.local (192.168.1.100) can only download from our httpd/ftp servers at "10KB/s" (instead of 1MB/s)

כיצד אוכל לדרג את השימוש ב- IPTables בהתבסס על כתובות IP נכנסות?


101
2018-04-28 21:09






תשובות:


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

התשובה האמיתית לכך היא מתקני שליטה תנועה מדהימה underused בלינוקס. שים לב להתעסק עם זה בלי לדעת מה קורה עלולה להוביל אותך לאבד את הקישוריות לרשת למכונה! ראה הוזהרת!

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

היופי של זה הוא שאתה יכול ליצור מצב שבו אתה מאפשר הרבה תעבורה יוצאת עבור המשתמש איטי, אלא אם כן בכיתה overriding רוצה את רוחב הפס, אבל זה לא עושה את זה דוגמה (תמיד לספק 10kbps למשתמשים איטי). מערכת התור תיראה כך:

                         Inbound traffic
                              +
                              |
                              |
                              v
                     +------------------+
                     |   Class 1:1      |
                     |------------------|
                     |  Root (all flows)|
                     |       100mbit    |
                     +-----+-----+------+
                           |     |
                           |     |
                           |     |
                           |     |
                           |     |
          +----------+     |     |     +----------+
          |    1:11  +-----+     +-----+    1:12  |
          |----------|                 |----------|
          | Default  |                 | Slow     |
          |100mb-80kb|                 |   80kb   |
          +----------+                 +----------+

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

#!/bin/bash
tc qdisc add dev eth0 parent root handle 1: hfsc default 11
tc class add dev eth0 parent 1: classid 1:1 hfsc sc rate 100mbit ul rate 100mbit
tc class add dev eth0 parent 1:1 classid 1:11 hfsc sc rate 99920kbit ul rate 100000kbit
tc class add dev eth0 parent 1:1 classid 1:12 hfsc sc rate 80kbit ul rate 80kbit

tc qdisc add dev eth0 parent 1:11 handle 11:1 pfifo
tc qdisc add dev eth0 parent 1:12 handle 12:1 pfifo

"ברירת המחדל 11" חשובה כפי שהוא אומר את הקרנל מה לעשות עם התנועה לא מסווג.

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

אז, ליצור מסד נתונים ipset לעשות את ההתאמה נגד ...

ipset create slowips hash:ip,port

ואז ליצור את הכלל iptables לעשות את המשחק ..

iptables -t mangle -I OUTPUT -m set --match-set slowips dst,src -j CLASSIFY --set-class 1:12

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

עכשיו, סוף סוף בכל פעם שאתה רוצה להאט IP למטה אתה יכול להשתמש בפקודה ipset להוסיף את ה- IP כדי להגדיר כגון זה:

ipset add slowips 192.168.1.1,80
ipset add slowips 192.168.1.1,21
...

אתה יכול לבדוק את זה עובד באמצעות הפקודה "tc- s בכיתה להראות dev eth0" ואתה תראה נתונים סטטיסטיים שם המציין מנות להיות מנותב אל התור האיטי.

שים לב רק downside אמיתי זה עושה את זה לשרוד reboots. אני לא חושב שיש כל סקריפט init זמין כדי ליצור את ipsets מ dumps על אתחול (וגם הם חייבים להיות שנוצר לפני iptables כללים) ואני בטוח שאין scriptים init כדי לאפס את כללי בקרת התנועה על אתחול מחדש. אם לא מוטרד שלך, אתה יכול פשוט ליצור מחדש את כל העניין מלהשתמש script ב rc.local.


165
2018-04-28 23:35



טוב, אני לא יכול להודות לך מספיק. זה מאוד תיאורי ואינפורמטיבי מאוד. מאוחר יותר הבנתי כי הידע של TC יידרש ואני מאז התחלתי להסתכל לתוך זה. שוב תודה! - James
אה, כמו לאבד את הקשר. אני מוודא שיש לי את התצורה למטה לפני המעבר מ VPS שלי אל המחשב המארח. כמו כן, יש לי גישה VPN לרשת פרטית על ETH0. אני רק עובד על ETH1 כך בתיאוריה אני רגיל לבעיה. אבל האזהרה שמעה! - James
אני לא יכולה להגיד לך כמה פעמים קראתי מדריכים דומים, זה הראשון הגיוני - RC1140
כמו סיידנוט, שלה בדרך כלל מתאים יותר לעשות הגבלת משאבים כמו זה בקבוצות שליטה (שוב, גם אפשרי וגם underused ו מדהים) כפי שאתה יכול להגדיר לכל יישום מגבלות על מעבד, זיכרון, IO ורשת בחנות מדיניות מרכזי '. אבל עדיין לא ראיתי שאלה כזו להיות הציעו להציע תשובה. - Matthew Ife
אם אתה לא אוהב את זה tc תחביר שאתה יכול לתת tcng ניסיון אשר מוסיף קצת יותר ידידותי למשתמש שפה שיוצר tc פקודות. נהגתי לאהוב את זה בתסריטים פגז: echo '... multi line tcng configuration ...' | tcng | sh. - Mattias Wadman


זה פשוט כמו לקיחת כלל הגבלת שיעור והוספת -s החלף. ה -s מתג תואם כתובות IP נכנסות. לדוגמה iptables -A INPUT -s 1.1.1.1 ולאחר מכן מסיימת עם השיטה המועדפת שלך שיעור הגבלת עבור כלל זה.


5
2018-04-28 21:12



תודה על תשובתך המהירה. למרבה הצער הבעיה המרכזית שלי היא במחצית השנייה. אני כבר הסתכלתי - לא ראיתי ולא ראיתי דבר המאפשר לי להגביל מבוסס על KB / s - כל כיוון אתה יכול להצביע לי? - James
@James הייתי מקבל בחזרה לך אבל הייתי צריך לצאת לבית של חבר. רק חזרתי וראיתי שמיפ עשתה עבודה. 49 - Wesley