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.   КЗКГ ^ Гаара сказал

    И поэтому перед DDoS-атаками я поставил учебник 😉
    Чтобы указать / объяснить причину или проблему (предыдущий учебник), а также дать вам решение (этот учебник) 🙂

    1.    диазепан сказал

      совершенной.

  2.   Корацуки сказал

    Детские конфеты ...

  3.   Хьюго сказал

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

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

    В случае пакетов UDP флаг SYN не существует, потому что это протокол без контроля состояния. Однако, как ни парадоксально, состояния NEW и ESTABLISHED существуют, потому что iptables внутренне содержит таблицы для этой цели.

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

    Другое дело, что в случае протокола ICMP (и в целом) удобно регулировать как запросы, так и ответы, потому что мы, вероятно, в какой-то момент заинтересованы в том, чтобы пинговать себя, и, включив эту функцию, кто-то мог бы использовать ботнет и фальсифицирует исходный адрес, чтобы без конца пинговать многие из этих скомпрометированных компьютеров, и ответы будут идти на наш сервер, разрушая его, если не наложены ограничения.

    Обычно я разрешаю типы ICMP 0,3,8,11, 12, XNUMX и XNUMX с ограничением ввода один раз в секунду и максимум двумя или четырьмя пакетами, а все остальное оставляю для 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.   Мигель Анхель сказал

    Всем привет и спасибо за ваш вклад, но правда в том, что мы в отчаянии, мы не знаем, что делать сейчас, и мы обращаемся к вам за этим iptables, который, как мы знаем, вы являетесь экспертом в области систем.
    Я являюсь лидером сообщества источников counter strike в Испании, и мы одни из немногих, кто все еще еле стоит, мы получаем постоянные атаки от машины и другие атаки через определенные промежутки времени, постоянная удаляет мало, но нагружает сервер немного, но тот, который вовремя, наносит больше вреда. Наша машина установлена ​​на 6.2 сентос
    и у нас есть tcadmin для управления серверами. Вы могли бы сделать нам конфигурацию, которая могла бы хоть немного остановить этот тип атаки, мы уже в отчаянии,
    и мы не знаем, к кому обратиться, мы знаем, что существует два ботнета, один самодельный, а другой оплачиваемый за время и силы. Таким образом, мы выдерживаем жестокие атаки такого типа в течение почти года, если бы вы могли нам помочь, мы были бы бесконечно благодарны, потому что сейчас это неустойчиво, я люблю настраивать серверы, как hoobie, и я не ребенок, я вас уверяю, но для меня это много. Если вы хотите, чтобы мой ts3 говорил или что-то еще, что я хотел бы, если бы вы могли нам помочь, чтобы мы публиковали здесь результаты и все, что было решено на благо многих людей, это будет самый посещаемый блог года, что я вас уверяю потому что невероятно как это раздражает эти атаки ddos. Поскольку мы пытались настроить его самостоятельно и заблокировали доступ к машине, нам пришлось отформатировать его из BIOS, так что представьте, как мы.
    Шлю сердечный привет. И мои поздравления с отсутствующим блогом, многие люди находят тот, который был обновлен этим. -Мигель Анхель-

    1.    КЗКГ ^ Гаара сказал

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

  8.   Артур Шелби сказал

    Привет, ребята, пока я работаю, возьмите этот скрипт, кстати, очень хороший ... только одно сомнение: модуль «недавний» не снижает производительность?

    Привет - Спасибо / Кому ты нравишься?

  9.   Хосе Тапиа сказал

    Отличный вклад, мой друг, я помещу вас в ссылки на обучающее видео, которое мы монтируем, объятие из Коста-Рики

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

    Привет,

    Не можете использовать скрипт на нескольких портах?
    У меня есть игровой сервер, и я получаю атаки как на Интернет, так и на порты игрового сервера.

    Приветствие.