DDoS והתקפות אחרות לעומת iptables (אבטחה נגד DDoS ב- iptables)

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

# Iptables

IPT="/sbin/iptables"
ETH="eth0"

#Todo el tráfico syn
$IPT -P INPUT DROP
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -p tcp ! --syn -j REJECT --reject-with tcp-reset
$IPT -A INPUT -m state --state INVALID -j DROP
$IPT -P OUTPUT DROP
$IPT -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A OUTPUT -p tcp ! --syn -j REJECT --reject-with tcp-reset
$IPT -A OUTPUT -m state --state INVALID -j DROP
$IPT -P FORWARD DROP
$IPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A FORWARD -p tcp ! --syn -j REJECT --reject-with tcp-reset
$IPT -A FORWARD -m state --state INVALID -j DROP
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT
$IPT -A FORWARD -i lo -o lo -j ACCEPT

#Cuando sube la carga
$IPT -A INPUT -p tcp --syn -j REJECT --reject-with icmp-port-unreachable

#La que mejor va
$IPT -N syn-flood
$IPT -A syn-flood -m limit --limit 100/second --limit-burst 150 -j RETURN
$IPT -A syn-flood -j LOG --log-prefix "SYN flood: "
$IPT -A syn-flood -j DROP

#Igual que el de arriba pero muy raw
$IPT -N syn-flood
$IPT -A INPUT -i eth0:2 -p tcp --syn -j syn-flood
$IPT -A syn-flood -m limit --limit 1/s --limit-burst 4 -j RETURN
$IPT -A syn-flood -j DROP
$IPT -A INPUT -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -m limit --limit 1/sec -j ACCEPT
$IPT -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK RST -m limit --limit 1/sec -j ACCEPT

#Descartar paquetes mal formados
$IPT -N PKT_FAKE
$IPT -A PKT_FAKE -m state --state INVALID -j DROP
$IPT -A PKT_FAKE -p tcp --dport 80 --tcp-flags ALL ACK,RST,SYN,FIN -j DROP
$IPT -A PKT_FAKE -p tcp --dport 80 --tcp-flags SYN,FIN SYN,FIN -j DROP
$IPT -A PKT_FAKE -p tcp --dport 80 --tcp-flags SYN,RST SYN,RST -j DROP
$IPT -A PKT_FAKE -p tcp --dport 80 ! --syn -m state --state NEW -j DROP
$IPT -A PKT_FAKE -f -j DROP
$IPT -A PKT_FAKE -j RETURN

#Syn-flood
$IPT -N syn-flood
$IPT -A INPUT -i eth+ -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j syn-flood
$IPT -A FORWARD -i eth+ -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j syn-flood
$IPT -A syn-flood -m limit --limit 4/s --limit-burst 16 -j RETURN
$IPT -A syn-flood -m limit --limit 75/s --limit-burst 100 -j RETURN -A syn-flood -j LOG --log-prefix "SYN FLOOD " --log-tcp-sequence --log-tcp-options --log-ip-options -m limit --limit 1/second
$IPT -A syn-flood -j DROP

#Requiere módulo "recent"
modprobe ipt_recent
$IPT -A INPUT -p tcp --dport 80 -m state --state NEW -m recent --set
$IPT -A INPUT -p tcp --dport 80 -m state --state NEW -m recent --update --seconds 10 --hitcount 10 -j DROP

# explicación:
# Se añade cada ip que se conecte a la tabla de recent
# Por por cada ip en la tabla de recent si hace mas de x hits en x segundos, se dropea.
$IPT -I INPUT -p tcp --syn -m recent --set
$IPT -I INPUT -p tcp --syn -m recent --update --seconds 10 --hitcount 30 -j DROP

#UDP Flood
$IPT -A OUTPUT -p udp -m state --state NEW -j ACCEPT
$IPT -A OUTPUT -p udp -m limit --limit 100/s -j ACCEPT
$IPT -A OUTPUT -p udp -j DROP

מה שהוא עושה זה לספור את מספר חבילות SYN (התחלת חיבור TCP) עבור כל כתובת IP ב -10 השניות האחרונות. אם הוא מגיע לגיל 30 הוא זורק את החבילה כך שהחיבור לא יתבצע (TCP ינסה שוב מספר פעמים, כאשר הוא יורד מתחת למגבלה ניתן להגדיר אותו).

#Evitando Layer7 DoS limitando a 80 la máxima cantidad de conexiones
$IPT -A INPUT -p tcp --dport 80 -m hashlimit --hashlimit-upto 50/min --hashlimit-burst 80 --hashlimit-mode srcip --hashlimit-name http -j ACCEPT
$IPT -A INPUT -p tcp --dport 80 -j DROP

#Permitir el ping, pero a 1 paquete por segundo, para evitar un ataque ICMP Flood
$IPT -A INPUT -p icmp -m state --state NEW --icmp-type echo-request -m limit --limit 1/s --limit-burst 1 -j ACCEPT
$IPT -A INPUT -p icmp -j DROP

#Evitando que escaneen la máquina
$IPT -A INPUT -i $ETH -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE –j DROP
$IPT -A INPUT -i $ETH -p tcp -m tcp --tcp-flags SYN,FIN SYN,FIN –j DROP
$IPT -A INPUT -i $ETH -p tcp -m tcp --tcp-flags SYN,RST SYN,RST –j DROP
$IPT -A INPUT -i $ETH -p tcp -m tcp --tcp-flags FIN,RST FIN,RST –j DROP
$IPT -A INPUT -i $ETH -p tcp -m tcp --tcp-flags ACK,FIN FIN –j DROP
$IPT -A INPUT -i $ETH -p tcp -m tcp --tcp-flags ACK,URG URG –j DROP

הנה התסריט בהדבקה שלנו: לְהַדבִּיק.DesdeLinux.net (תסריט קודם)

הפניות:


השאירו את התגובה שלכם

כתובת הדוא"ל שלך לא תפורסם. שדות חובה מסומנים *

*

*

  1. אחראי לנתונים: מיגל אנחל גטון
  2. מטרת הנתונים: בקרת ספאם, ניהול תגובות.
  3. לגיטימציה: הסכמתך
  4. מסירת הנתונים: הנתונים לא יועברו לצדדים שלישיים אלא בהתחייבות חוקית.
  5. אחסון נתונים: מסד נתונים המתארח על ידי Occentus Networks (EU)
  6. זכויות: בכל עת תוכל להגביל, לשחזר ולמחוק את המידע שלך.

  1.   KZKG ^ גאארה דיג'ו

    וזו הסיבה ששמתי הדרכה לפני התקפות DDoS 😉
    לשים / להסביר את הסיבה או הבעיה (הדרכה קודמת), וגם לתת לך את הפתרון (הדרכה זו) 🙂

    1.    דיאזפאן דיג'ו

      מושלם.

  2.   קוראצוקי דיג'ו

    ממתקים לילדים ...

  3.   הוגו דיג'ו

    מאמר טוב

    שני הסנטים שלי:

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

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

    דבר נוסף הוא שבמקרה של פרוטוקול ICMP (ובכלל) נוח להסדיר הן את הבקשות והן את התגובות, מכיוון שאנחנו כנראה מעוניינים בשלב כלשהו לפינג את עצמנו, ועל ידי הפעלת פונקציונליות זו, מישהו יכול להשתמש botnet ולזייף את הכתובת From the source address, עשה פינג אינסופי לרבים מהמחשבים שנפגעו אלה, והתגובות היו עוברות לשרת שלנו, וממוטטות אותו אם לא יוטלו מגבלות.

    בדרך כלל אני מתיר סוגי ICMP 0,3,8,11 ו- 12 עם מגבלת קלט של אחת לשנייה והתפרצות של שניים או ארבעה מקסימום, וכל השאר נותר ל- DROP.

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

    Iptables הוא באמת מאוד גמיש וחזק, עד כה הדבר היחיד שהצעתי לעשות וטרם השגתי את זה (למרות שאני קרוב להשגה), הוא לאפשר למודול ה- psd להימנע מסריקות פורט, אבל אפילו עם הכל למדתי על הכלי הזה, אני חושב שעוד לא גירדתי את פני השטח. 😉

    בכל מקרה, בעולם הזה אתה תמיד צריך ללמוד.

  4.   קוראצוקי דיג'ו

    נקודות טובות הוגו, בתיק למילון המונחים שלנו: D, כמו תמיד, לומד ...

    1.    הוגו דיג'ו

      אגב, כבר קיבלתי את מודול ה- psd לעבוד בשבילי. הבעיה הייתה שבתחילה זה היה תלוי בפונקציונליות של גרעין שהוצא משימוש יחד עם patch-o-matic, ולכן הוא הוסר מהמודולים המובנים ב- netfilter כברירת מחדל. אז עכשיו ב- Debian להשתמש בתוסף psd, ראשית עליך לעשות זאת:


      aptitude -RvW install iptables-dev xtables-addons-{common,source} module-assistant
      module-assistant auto-install xtables-addons-source

      לאחר מכן ניתן להשתמש בו כרגיל, בהתאם להוראות:

      man xtables-addons

      1.    רָחוֹק דיג'ו

        הוגו, מדוע שלא תפרסם iptables.sh עם הצעותיך לשיפור התסריט של פוסט זה (וזה טוב) כולל psd

        תודה

  5.   נלסון דיג'ו

    מאמר מעולה, טבליות מעולות והסבר מצוין מאת @hugo. אני נהיה יותר ויותר משוכנע שיש לי עוד הרבה מה ללמוד.

  6.   קוראצוקי דיג'ו

    זה לא אתה לבד, לפחות אני ... חסר לי מיליון ... 😀

  7.   מיגל אנחל דיג'ו

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

    1.    KZKG ^ גאארה דיג'ו

      שלום מה שלומך 🙂
      כתבו למייל שלי, נשמח לעזור לכם 😀 -» kzkggaara[@]desdelinux[.]נֶטוֹ

  8.   ארתור שילבי דיג'ו

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

    ברכות - תודה / מי כמוך?

  9.   ז'וזה טאפיה דיג'ו

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

  10.   כריסטיאן מרפיל ריינוסו דיג'ו

    שלום,

    לא ניתן להשתמש בסקריפט במספר יציאות?
    יש לי שרת משחקים ואני מקבל התקפות גם על רשת האינטרנט וגם על יציאות שרתי המשחק.

    ברכה.