DDoS και άλλες επιθέσεις εναντίον iptables (Ασφάλεια Anti-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 (Script anterior)

Παραπομπές:


Αφήστε το σχόλιό σας

Η διεύθυνση email σας δεν θα δημοσιευθεί. Τα υποχρεωτικά πεδία σημειώνονται με *

*

*

  1. Υπεύθυνος για τα δεδομένα: Miguel Ángel Gatón
  2. Σκοπός των δεδομένων: Έλεγχος SPAM, διαχείριση σχολίων.
  3. Νομιμοποίηση: Η συγκατάθεσή σας
  4. Κοινοποίηση των δεδομένων: Τα δεδομένα δεν θα κοινοποιούνται σε τρίτους, εκτός από νομική υποχρέωση.
  5. Αποθήκευση δεδομένων: Βάση δεδομένων που φιλοξενείται από τα δίκτυα Occentus (ΕΕ)
  6. Δικαιώματα: Ανά πάσα στιγμή μπορείτε να περιορίσετε, να ανακτήσετε και να διαγράψετε τις πληροφορίες σας.

  1.   KZKG ^ Γκάρα dijo

    Και αυτός είναι ο λόγος που έβαλα ένα σεμινάριο πριν από επιθέσεις DDoS 😉
    Για να βάλω/εξηγήσω τον λόγο ή το πρόβλημα (προηγούμενο σεμινάριο), και επίσης να σας δώσω τη λύση (αυτό το σεμινάριο) 🙂

    1.    διαζεπάνη dijo

      τέλεια.

  2.   Κορατσούκι dijo

    Παιδική καραμέλα ...

  3.   Hugo dijo

    Καλό άρθρο

    Τα δύο σεντ μου:

    Στην περίπτωση πακέτων UDP, η σημαία SYN δεν υπάρχει επειδή είναι ένα πρωτόκολλο χωρίς έλεγχο κατάστασης. Ωστόσο, παραδόξως, οι ΝΕΕΣ και ΕΓΚΑΤΑΣΤΑΣΕΙΣ καταστάσεις υπάρχουν επειδή το iptables φέρνει εσωτερικά πίνακες για το σκοπό αυτό.

    Από την άλλη πλευρά, κατά τη γνώμη μου, είναι καλύτερο να χρησιμοποιήσετε έναν προορισμό DROP αντί για REJECT, για δύο λόγους: πρώτον, με απόρριψη, κάποιος δίνει πληροφορίες σε έναν πιθανό εισβολέα, και επίσης ο υπολογιστής χρησιμοποιεί μέρος της συνδεσιμότητάς του για να στείλει ειδοποίηση στην επιτιθέμενη ομάδα.

    Ένα άλλο πράγμα είναι ότι στην περίπτωση του πρωτοκόλλου ICMP (και γενικά) είναι βολικό να ρυθμίσουμε τόσο τα αιτήματα όσο και τις απαντήσεις, επειδή πιθανότατα ενδιαφερόμαστε κάποια στιγμή να κάνουμε pinging και ενεργοποιώντας αυτήν τη λειτουργικότητα, κάποιος θα μπορούσε να χρησιμοποιήσει ένα botnet και να παραποιήσει το διεύθυνση προέλευσης για ping πολλούς από αυτούς τους παραβιασμένους υπολογιστές χωρίς τέλος, και οι απαντήσεις θα πήγαιναν στον διακομιστή μας, καταρρέοντάς τον εάν δεν επιβλήθηκαν όρια.

    Συνήθως επιτρέπω τους τύπους ICMP 0,3,8,11 και 12 με όριο εισόδου ένα ανά δευτερόλεπτο και έκρηξη δύο ή τεσσάρων το μέγιστο, και όλα τα άλλα παραμένουν σε DROP.

    Στην πραγματικότητα, εκτός από το πρωτόκολλο TCP που μπορεί να ρυθμιστεί καλύτερα, όλα τα άλλα θα πρέπει να προστατεύονται με ένα μέτρο anti-DDoS μέσω μιας πρόσφατης αντιστοίχισης τύπου. Σχετικά με αυτό, ως περιέργεια, ο συγγραφέας αυτής της ενότητας θέλει να τοποθετήσει την ενημέρωση πρώτα και μετά το σετ.

    Το Iptables είναι πραγματικά πολύ ευέλικτο και ισχυρό, μέχρι στιγμής το μόνο πράγμα που έχω προτείνει να κάνω και δεν το έχω ακόμη επιτύχει (αν και πλησιάζω σχεδόν το να το επιτύχω), είναι να επιτρέψω στη μονάδα psd να αποφύγει portcans, αλλά ακόμη και με όσα έχω μάθει σχετικά με αυτό εργαλείο, δεν νομίζω ότι έχω ακόμη ξύσει την επιφάνεια 😉

    Με λίγα λόγια, σε αυτόν τον κόσμο πρέπει πάντα να μελετάς.

  4.   Κορατσούκι dijo

    Καλά σημεία Hugo, κατατέθηκε για το γλωσσάρι μας :D, όπως πάντα, μαθαίνω…

    1.    Hugo dijo

      Παρεμπιπτόντως, έχω ήδη το psd module για να δουλέψει για μένα. Το πρόβλημα ήταν ότι εξαρτάται αρχικά από μια λειτουργικότητα πυρήνα που έχει καταργηθεί μαζί με το 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.    Μακριά dijo

        Hugo, γιατί δεν δημοσιεύεις ένα iptables.sh με τις προτάσεις σου για να βελτιώσεις το σενάριο αυτής της ανάρτησης (που είναι καλό) συμπεριλαμβανομένου του psd

        Ευχαριστίες

  5.   nelson dijo

    Εξαιρετικό άρθρο, εξαιρετικά iptables και εξαιρετική εξήγηση από τον @hugo. Είμαι όλο και πιο πεπεισμένος ότι έχω ακόμα πολλά να μάθω.

  6.   Κορατσούκι dijo

    Δεν είσαι μόνο εσύ, τουλάχιστον για μένα... Μου λείπουν ένα εκατομμύριο... 😀

  7.   Miguel Angel dijo

    Γεια σε όλους και ευχαριστώ για τη συνεισφορά, αλλά η αλήθεια είναι ότι είμαστε απελπισμένοι, δεν ξέρουμε τι να κάνουμε τώρα και ερχόμαστε σε εσάς λόγω των iptables που ξέρουμε ότι είστε ειδικοί στα συστήματα.
    Είμαι ο ηγέτης μιας κοινότητας στην πηγή της απεργίας και είμαστε ένας από τους λίγους που εξακολουθούν να στέκονται μόλις, λαμβάνουμε συνεχείς επιθέσεις από το μηχάνημα και άλλες επιθέσεις σε διαστήματα χρόνου, η σταθερά αφαιρεί λίγα αλλά χάνει το διακομιστής λίγο αλλά αυτός που είναι του χρόνου προκαλεί μεγαλύτερη ζημιά. Το μηχάνημά μας είναι τοποθετημένο σε 6.2 centos
    και έχουμε το tcadmin για τον έλεγχο των διακομιστών. Θα μπορούσατε να μας κάνετε μια διαμόρφωση που θα μπορούσε να σταματήσει αυτόν τον τύπο επίθεσης, ακόμα κι αν είναι λίγο, είμαστε ήδη απελπισμένοι,
    και δεν ξέρουμε σε ποιον να απευθυνθούμε, γνωρίζουμε ότι υπάρχουν δύο botnets, ένα σπιτικό και το άλλο πληρώνεται για χρόνο και δύναμη. Έχουμε υποστεί έτσι βίαιες επιθέσεις αυτού του τύπου για σχεδόν ένα χρόνο, αν μπορούσατε να μας βοηθήσετε, θα ήμασταν αιώνια ευγνώμονες, διότι δεν είναι βιώσιμος τώρα, μου αρέσει να διαμορφώνω διακομιστές όπως το hoobie και δεν είμαι παιδί που σας διαβεβαιώνω, αλλά αυτό είναι πολύ για μένα. Αν θέλετε το ts3 μου να μιλήσει ή οτιδήποτε άλλο, θα ήθελα να σας βοηθήσουμε, ώστε να δημοσιεύσουμε εδώ τα αποτελέσματα και όλα όσα επιλύθηκαν για το καλό πολλών ανθρώπων, θα σας διαβεβαιώσω το ιστολόγιο με τις περισσότερες επισκέψεις της χρονιάς, γιατί είναι απίστευτο πώς ενοχλεί αυτές τις επιθέσεις ddos. Δεδομένου ότι προσπαθήσαμε να το διαμορφώσουμε μόνοι μας και να αποκλείσουμε την πρόσβαση στο μηχάνημα, έπρεπε να το μορφοποιήσουμε από το bios, έτσι φανταστείτε πώς είμαστε.
    Στέλνω έναν εγκάρδιο χαιρετισμό. Και τα συγχαρητήριά μου για το ιστολόγιο που λείπει κάνει πολλούς ανθρώπους ένα που ενημερώθηκε με αυτό. - Miguel Angel-

    1.    KZKG ^ Γκάρα dijo

      Γεια σου πώς είσαι 🙂
      Escríbeme a mi email, te ayudamos con mucho gusto 😀 -» kzkggaara[@]desdelinux[.]καθαρά

  8.   Άρθουρ Σέλμπι dijo

    Γεια σας παιδιά, μέχρι τώρα που εργάζομαι, χρησιμοποιούσα αυτό το σενάριο, παρεμπιπτόντως πολύ καλό… Έχω απλώς μια ερώτηση: η "πρόσφατη" ενότητα δεν μειώνει την απόδοση;

    Χαιρετισμούς – Ευχαριστώ / Ποιος σας αρέσει;

  9.   Χοσέ Τάπια dijo

    Εξαιρετική συνεισφορά φίλε μου, θα σε βάλω στις αναφορές ενός εκπαιδευτικού βίντεο που φτιάχνουμε, μια αγκαλιά από την Κόστα Ρίκα

  10.   Κρίστιαν Μάρφιλ Ρέινοσο dijo

    Γεια σας,

    Δεν μπορώ να χρησιμοποιήσω το σενάριο σε πολλές θύρες;
    Έχω έναν διακομιστή παιχνιδιών και δέχομαι επιθέσεις τόσο στη θύρα του διακομιστή ιστού όσο και στη θύρα διακομιστή παιχνιδιών.

    Ένα χαιρετισμό.