Уникайте нападу 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 (попередній скрипт)
Посилання:
- Спроба зупинити DDoS (Форум ElHacker.net)
- Як уникнути DDoS-атаки та як пережити її на реальних серверах? (Форум ElHacker.net)
- Сценарій з умовними умовами (MaliByte.net)
- Дуже хороший приклад (LinuxGuruz.org)
- Запобігання DDoS-атаці (LinuxSecurity.com)
- Затвердження стеку TCP / IP для запобігання атакам (SecurityFocus.com)
Ось чому я поклав підручник перед DDoS-атаками 😉
Щоб пояснити / пояснити причину чи проблему (попередній підручник), а також дати вам рішення (цей посібник) 🙂
perfecto
Дитячі цукерки ...
Хороша стаття.
Мої два центи:
У разі пакетів UDP прапор SYN не існує, оскільки це протокол без контролю стану. Однак, як це не парадоксально, НОВІ та ВСТАНОВЛЕНІ стани існують, оскільки iptables внутрішньо несе таблиці для цієї мети.
З іншого боку, на мій погляд, краще використовувати DROP призначення замість REJECT з двох причин: по-перше, при відхиленні один надає інформацію можливому зловмиснику, а також комп’ютер використовує частину свого зв’язку для надсилання повідомлення команді, що атакує.
Інша справа, що у випадку з протоколом ICMP (і взагалі) зручно регулювати як запити, так і відповіді, тому що ми, мабуть, зацікавлені в певний момент перевірити себе, і, увімкнувши цю функціональність, хтось міг би використовувати ботнет і фальсифікувати вихідну адресу, щоб без кінця пінгувати багато з цих скомпрометованих ПК, і відповіді надходитимуть на наш сервер, згортаючи його, якщо не буде встановлено обмежень.
Зазвичай я дозволяю типи ICMP 0,3,8,11 та 12 з обмеженням на вхід - одна на секунду та серійною передачею максимум два чи чотири, а все інше залишається на DROP.
Насправді, за винятком протоколу TCP, який можна краще регулювати, усі інші повинні бути захищені анти-DDoS мірою за допомогою недавнього збігу типів. Щодо цього, як цікавість, автор цього модуля любить розміщувати спочатку оновлення, а потім набір.
Iptables насправді дуже гнучкий і потужний, поки що єдине, що я запропонував зробити, але ще не досяг цього (хоча я наближений до його досягнення), - це дозволити модулю psd уникати портових сканувань, але навіть з усім Я дізнався про цей інструмент, думаю, ще навіть не подряпав поверхню. 😉
У будь-якому випадку, у цьому світі вам завжди потрібно вчитися.
Хороші зауваження, Гюго, в архіві нашого глосарію: D, як завжди, вчимось
До речі, 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
Юго, чому б тобі не опублікувати iptables.sh зі своїми пропозиціями щодо вдосконалення сценарію цього допису (що добре), включаючи psd
Грекіас
Відмінна стаття, відмінні iptables та відмінне пояснення від @hugo. Я дедалі більше переконуюсь, що мені ще потрібно багато чому навчитися.
Це не ти один, принаймні я ... Мені не вистачає мільйона ... 😀
Привіт усім, і дякуємо за внесок, але правда в тому, що ми відчайдушні, ми не знаємо, що робити зараз, і ми звертаємось до вас за цим варіантом, що ми знаємо, що ви є експертами в системах.
Я лідер спільноти в Іспанії джерела контратаки, і ми є одними з небагатьох, хто все ще ледь стоїть, ми отримуємо постійні атаки від машини та інші атаки через проміжки часу, константа видаляє мало, але затримує сервера трохи, але той, що встигає, завдає більше шкоди. Наша машина встановлена на 6.2 сантиметра
і у нас є tcadmin для управління серверами. Ви могли б зробити нам конфігурацію, яка могла б хоч трохи зупинити такий тип атаки, це те, що ми вже відчайдушні,
і ми не знаємо, до кого звернутися, ми знаємо, що є два ботнети, один саморобний, а другий платить за час і силу. Таким чином, ми витримуємо жорстокі атаки такого типу майже рік, якщо б ви могли нам допомогти, ми були б їм вічно вдячні, тому що це зараз неможливо, я люблю налаштовувати сервери типу hoobie, і я не дитина, запевняю вас, але це для мене багато. Якщо ви хочете, щоб мій ts3 розмовляв або щось інше, я хотів би, щоб ви нам допомогли, щоб ми розмістили тут результати та все, що було вирішено на благо багатьох людей, це був би найбільш відвідуваний блог року, що я вас запевняю, бо неймовірно, як це дратує ці атаки ddos. Оскільки ми намагалися налаштувати його самостійно і заблокували доступ до машини, нам довелося відформатувати його з біосу, тож уявіть, як ми.
Надсилаю сердечне привітання. І мої вітання за зниклий блог, багато людей знаходять такий, який був оновлений цим. -Мігель Ангел-
Привіт, як справи 🙂
Напишіть мені на електронну пошту, ми будемо раді вам допомогти 😀 -» kzkggaara[@]desdelinux[.]чистий
Привіт, хлопці, до теперішнього часу, коли я працюю, візьміть цей сценарій, до речі дуже хороший ... лише один сумнів: чи не знижує "нещодавній" модуль продуктивність?
Привіт - Дякую / Кому подобається?
Чудовий внесок, друже, я поміщу вас у посиланнях на навчальне відео, яке ми готуємо, обійми з Коста-Рики
Привіт
Не можете використовувати сценарій на декількох портах?
У мене є ігровий сервер, і я отримую атаки як на Інтернет, так і на порти ігрового сервера.
Привітання.