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

Ось сценарій нашої вставки: Paste.FromLinux.net (попередній сценарій)

Посилання:

 


Зміст статті відповідає нашим принципам редакційна етика. Щоб повідомити про помилку, натисніть тут.

14 коментарі, залиште свій

Залиште свій коментар

Ваша електронна адреса не буде опублікований. Обов'язкові для заповнення поля позначені *

*

*

  1. Відповідальний за дані: Мігель Анхель Гатон
  2. Призначення даних: Контроль спаму, управління коментарями.
  3. Легітимація: Ваша згода
  4. Передача даних: Дані не передаватимуться третім особам, за винятком юридичних зобов’язань.
  5. Зберігання даних: База даних, розміщена в мережі Occentus Networks (ЄС)
  6. Права: Ви можете будь-коли обмежити, відновити та видалити свою інформацію.

  1.   KZKG ^ Гаара - сказав він

    Ось чому я поклав підручник перед DDoS-атаками 😉
    Щоб пояснити / пояснити причину чи проблему (попередній підручник), а також дати вам рішення (цей посібник) 🙂

    1.    діазепан - сказав він

      perfecto

  2.   Корацукі - сказав він

    Дитячі цукерки ...

  3.   Хьюго - сказав він

    Хороша стаття.

    Мої два центи:

    У разі пакетів UDP прапор SYN не існує, оскільки це протокол без контролю стану. Однак, як це не парадоксально, НОВІ та ВСТАНОВЛЕНІ стани існують, оскільки iptables внутрішньо несе таблиці для цієї мети.

    З іншого боку, на мій погляд, краще використовувати DROP призначення замість REJECT з двох причин: по-перше, при відхиленні один надає інформацію можливому зловмиснику, а також комп’ютер використовує частину свого зв’язку для надсилання повідомлення команді, що атакує.

    Інша справа, що у випадку з протоколом ICMP (і взагалі) зручно регулювати як запити, так і відповіді, тому що ми, мабуть, зацікавлені в певний момент перевірити себе, і, увімкнувши цю функціональність, хтось міг би використовувати ботнет і фальсифікувати вихідну адресу, щоб без кінця пінгувати багато з цих скомпрометованих ПК, і відповіді надходитимуть на наш сервер, згортаючи його, якщо не буде встановлено обмежень.

    Зазвичай я дозволяю типи 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.   нельсон - сказав він

    Відмінна стаття, відмінні iptables та відмінне пояснення від @hugo. Я дедалі більше переконуюсь, що мені ще потрібно багато чому навчитися.

  6.   Корацукі - сказав він

    Це не ти один, принаймні я ... Мені не вистачає мільйона ... 😀

  7.   Мігель Анхель - сказав він

    Привіт усім, і дякуємо за внесок, але правда в тому, що ми відчайдушні, ми не знаємо, що робити зараз, і ми звертаємось до вас за цим варіантом, що ми знаємо, що ви є експертами в системах.
    Я лідер спільноти в Іспанії джерела контратаки, і ми є одними з небагатьох, хто все ще ледь стоїть, ми отримуємо постійні атаки від машини та інші атаки через проміжки часу, константа видаляє мало, але затримує сервера трохи, але той, що встигає, завдає більше шкоди. Наша машина встановлена ​​на 6.2 сантиметра
    і у нас є tcadmin для управління серверами. Ви могли б зробити нам конфігурацію, яка могла б хоч трохи зупинити такий тип атаки, це те, що ми вже відчайдушні,
    і ми не знаємо, до кого звернутися, ми знаємо, що є два ботнети, один саморобний, а другий платить за час і силу. Таким чином, ми витримуємо жорстокі атаки такого типу майже рік, якщо б ви могли нам допомогти, ми були б їм вічно вдячні, тому що це зараз неможливо, я люблю налаштовувати сервери типу hoobie, і я не дитина, запевняю вас, але це для мене багато. Якщо ви хочете, щоб мій ts3 розмовляв або щось інше, я хотів би, щоб ви нам допомогли, щоб ми розмістили тут результати та все, що було вирішено на благо багатьох людей, це був би найбільш відвідуваний блог року, що я вас запевняю, бо неймовірно, як це дратує ці атаки ddos. Оскільки ми намагалися налаштувати його самостійно і заблокували доступ до машини, нам довелося відформатувати його з біосу, тож уявіть, як ми.
    Надсилаю сердечне привітання. І мої вітання за зниклий блог, багато людей знаходять такий, який був оновлений цим. -Мігель Ангел-

    1.    KZKG ^ Гаара - сказав він

      Привіт, як справи 🙂
      Напишіть мені на електронну пошту, ми із задоволенням допоможемо вам 😀 - »kzkggaara [@] desdelinux [.] Net

  8.   АртурШелбі - сказав він

    Привіт, хлопці, до теперішнього часу, коли я працюю, візьміть цей сценарій, до речі дуже хороший ... лише один сумнів: чи не знижує "нещодавній" модуль продуктивність?

    Привіт - Дякую / Кому подобається?

  9.   Хосе Тапіа - сказав він

    Чудовий внесок, друже, я поміщу вас у посиланнях на навчальне відео, яке ми готуємо, обійми з Коста-Рики

  10.   Крістіан Марфіл Рейнозо - сказав він

    Привіт

    Не можете використовувати сценарій на декількох портах?
    У мене є ігровий сервер, і я отримую атаки як на Інтернет, так і на порти ігрового сервера.

    Привітання.