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 (предишен скрипт)

Референции:


Оставете вашия коментар

Вашият имейл адрес няма да бъде публикуван. Задължителните полета са отбелязани с *

*

*

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

  1.   KZKG ^ Гаара каза той

    И затова поставих урок преди DDoS атаки 😉
    За да поставите / обясните причината или проблема (предишен урок), както и да ви дадете решението (този урок) 🙂

    1.    диазепан каза той

      Перфекто.

  2.   Корацуки каза той

    Детски бонбони ...

  3.   Уго каза той

    Добра статия.

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

    В случай на UDP пакети няма SYN флаг, защото това е протокол без държавен контрол. Парадоксално е обаче, че НОВИТЕ и УСТАНОВЕНИ състояния съществуват, защото iptables вътрешно носи таблици за тази цел.

    От друга страна, по мое мнение е по-добре да се използва DROP дестинация вместо REJECT, поради две причини: първо, с отхвърляне се дава информация на възможен нападател, а също така компютърът използва част от своята свързаност за изпращане уведомление до атакуващия екип.

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

    Обикновено разрешавам ICMP типове 0,3,8,11 и 12 с ограничение на въвеждане от една в секунда и максимум от два или четири, а всичко останало е оставено на DROP.

    Всъщност, с изключение на протокола TCP, който може да се регулира по-добре, всички останали трябва да бъдат защитени с анти-DDoS мярка посредством скорошен тип съвпадение. По отношение на това, като любопитство, авторът на този модул обича първо да поставя актуализацията и след това комплекта.

    Iptables е наистина много гъвкав и мощен, до момента единственото нещо, което съм предложил да направя и все още не съм го постигнал (въпреки че съм близо до постигането му), е да се даде възможност на PSD модула да избягва portscans, но дори и с всичко Научих за инструмента, мисля, че още дори не съм надраскал повърхността. 😉

    Както и да е, на този свят винаги трябва да учиш.

  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.   Miguel Angel каза той

    Здравейте на всички и благодаря за приноса, но истината е, че сме отчаяни, не знаем какво да правим сега и идваме при вас за това от приспособимите, за които знаем, че сте експерти в системите.
    Аз съм лидер на общност в Испания на counter strike source и ние сме едни от малкото, които все още едва стоят, получаваме постоянни атаки от машината и други атаки през интервали от време, константата премахва малко, но забавя сървъра малко, но този, който е навреме, нанася повече вреда. Нашата машина е монтирана на 6.2 centos
    и ние имаме tcadmin да контролира сървърите. Бихте могли да ни направите конфигурация, която би могла да спре този вид атака дори и малко, това е, че ние вече сме отчаяни,
    и не знаем към кого да се обърнем, знаем, че има два ботнета, единият домашен, а другият плаща за време и сила. По този начин понасяме жестоки атаки от този тип почти година, ако можете да ни помогнете, ще бъдем вечно благодарни, защото сега е неустойчиво, обичам да конфигурирам сървъри като hoobie и не съм дете, което ви уверявам, но това е много за мен. Ако искате моят ts3 да говори или нещо друго, бих се радвал, ако можете да ни помогнете, за да публикуваме тук резултатите и всичко, което беше решено в полза на много хора, това ще бъде най-посещаваният блог на годината, в който ви уверявам защото е невероятно как дразни тези атаки ddos. Тъй като се опитахме да го конфигурираме сами и блокирахме достъпа до машината, трябваше да го форматираме от биоса, така че представете си как сме.
    Изпращам сърдечен поздрав. И моите поздравления за липсващия блог, много хора имат такъв, който беше актуализиран с този. -Мигел Ангел-

    1.    KZKG ^ Гаара каза той

      Здравейте как сте 🙂
      Пишете на моя имейл, ще се радваме да ви помогнем 😀 -» kzkggaara[@]desdelinux[.] мрежа

  8.   АртърШелби каза той

    Здравейте момчета, до момента, в който работя, вземете този скрипт, много добър между другото ... само едно съмнение: Модулът «наскоро» не намалява ли производителността?

    Поздрави - Благодаря / Кой като теб?

  9.   Хосе Тапия каза той

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

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

    Здравейте,

    Не можете да използвате скрипта на множество портове?
    Имам сървър за игри и получавам атаки както към мрежата, така и към портовете на сървъра за игри.

    За поздрав.