Unikaj ataku DDoS z iptables Ma na to wiele sposobów, według rozmiaru pakietu, limitu połączeń itp. Tutaj zobaczymy, jak w łatwy, intuicyjny i dobrze wyjaśniony sposób osiągniemy cel, a także powstrzymamy inne irytujące ataki na nasze serwery.
# 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
Zlicza liczbę pakietów SYN (Rozpoczęcie połączenia TCP) dla każdego adresu IP w ciągu ostatnich 10 sekund. Jeśli osiągnie 30, odrzuca ten pakiet, więc połączenie nie zostanie nawiązane (TCP spróbuje kilka razy, gdy spadnie poniżej limitu, który można ustawić).
#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
Oto skrypt w naszej Wklej: Pasta.DesdeLinux.net (Poprzedni skrypt)
Referencje:
- Próba zatrzymania DDoS (Forum ElHacker.net)
- Jak uniknąć ataku DDoS i jak go przeżyć na prawdziwych serwerach? (Forum ElHacker.net)
- Skrypt z warunkami (Malibyte.net.)
- Bardzo dobry przykład (LinuxGuruz.org)
- Zapobieganie atakowi DDoS (LinuxSecurity.com)
- Hartowanie stosu TCP / IP w celu zapobiegania atakom (BezpieczeństwoFocus.com)
I dlatego przed atakami DDoS umieszczam tutorial 😉
Aby podać / wyjaśnić przyczynę lub problem (poprzedni samouczek), a także podać rozwiązanie (ten samouczek) 🙂
idealny.
Cukierki dla dzieci ...
Dobry artykuł.
Moje dwa centy:
W przypadku pakietów UDP nie ma flagi SYN, ponieważ jest to protokół bez kontroli stanu. Jednak paradoksalnie, stany NEW i ESTABLISHED istnieją, ponieważ iptables wewnętrznie przenosi tabele do tego celu.
Z drugiej strony, moim zdaniem lepiej jest użyć miejsca docelowego DROP zamiast REJECT, z dwóch powodów: po pierwsze, z odrzuceniem przekazuje informacje potencjalnemu napastnikowi, a także komputer wykorzystuje część swojej łączności do wysyłania powiadomienie zespołu atakującego.
Inną sprawą jest to, że w przypadku protokołu ICMP (i ogólnie) wygodnie jest regulować zarówno żądania, jak i odpowiedzi, bo pewnie w pewnym momencie jesteśmy zainteresowani pingowaniem samych siebie, a włączając tę funkcjonalność, ktoś mógłby użyć botnetu i sfałszować Z adresu źródłowego wykonaj niekończące się polecenie ping do wielu z zainfekowanych komputerów, a odpowiedzi trafią do naszego serwera, zwijając go, jeśli nie zostaną nałożone żadne ograniczenia.
Zwykle zezwalam na typy ICMP 0,3,8,11 i 12 z limitem wejściowym jednego na sekundę i serią maksymalnie dwóch lub czterech, a wszystko inne pozostaje do DROP.
W rzeczywistości, z wyjątkiem protokołu TCP, który można lepiej regulować, wszystkie inne powinny być chronione środkiem anty-DDoS poprzez niedawne dopasowanie typu. W związku z tym, jako ciekawostka, autor tego modułu lubi najpierw umieścić aktualizację, a dopiero potem zestaw.
Iptables jest naprawdę bardzo elastyczny i potężny, do tej pory jedyne, co zaproponowałem i jeszcze tego nie osiągnąłem (chociaż jestem blisko osiągnięcia), to umożliwienie modułowi psd unikania portscanów, ale nawet ze wszystkim Dowiedziałem się o tym narzędziu, myślę, że jeszcze nawet nie zarysowałem powierzchni. 😉
Zresztą na tym świecie zawsze musisz się uczyć.
Zalety Hugo, w naszym glosariuszu: D, jak zawsze, uczenie się ...
Nawiasem mówiąc, mam już moduł psd do pracy. Problem polegał na tym, że początkowo zależało to od funkcjonalności jądra, która była przestarzała wraz z patch-o-matic, więc została domyślnie usunięta z modułów wbudowanych w netfilter. Więc teraz w Debianie, aby używać rozszerzenia psd, najpierw musisz zrobić to:
aptitude -RvW install iptables-dev xtables-addons-{common,source} module-assistant
module-assistant auto-install xtables-addons-source
Następnie można go normalnie używać, zgodnie z instrukcjami:
man xtables-addons
Hugo, dlaczego nie opublikujesz iptables.sh ze swoimi sugestiami dotyczącymi ulepszenia skryptu tego posta (co jest dobre), w tym psd
dzięki
Doskonały artykuł, doskonałe iptables i doskonałe wyjaśnienie od @hugo. Coraz bardziej przekonuję się, że jeszcze wiele muszę się nauczyć.
To nie ty sam, przynajmniej ja ... Brakuje mi miliona ... 😀
Witam wszystkich i dziękuję za wkład, ale prawda jest taka, że jesteśmy zdesperowani, nie wiemy co teraz zrobić, i przychodzimy do was po to iptables, że wiemy, że jesteście ekspertami w systemach.
Jestem liderem hiszpańskiej społeczności źródła kontrataków i jesteśmy jednymi z nielicznych, którzy wciąż ledwo stoją, otrzymujemy ciągłe ataki na maszynę i inne ataki w odstępach czasu, ciągłe usuwa niewiele, ale opóźnia serwer trochę, ale ten, który ma czas, wyrządza więcej szkód. Nasza maszyna jest zamontowana na 6.2 centa
i mamy tcadmin do kontrolowania serwerów. Mógłbyś zrobić nam konfigurację, która mogłaby choć trochę powstrzymać tego typu atak, już jesteśmy zdesperowani,
i nie wiemy, do kogo się zwrócić, wiemy, że istnieją dwa botnety, jeden domowy, a drugi opłacony za czas i siłę. W ten sposób znosiliśmy brutalne ataki tego typu od prawie roku, gdybyś mógł nam pomóc, bylibyśmy wdzięczni, ponieważ teraz jest to nie do utrzymania, uwielbiam konfigurować serwery jak hoobie i nie jestem dzieckiem, o czym zapewniam, ale to dla mnie dużo. Jeśli chcesz, aby moje ts3 przemówiło lub cokolwiek, co bardzo bym chciał, gdybyś mógł nam pomóc, abyśmy umieścili tutaj wyniki i wszystko, co zostało rozwiązane dla dobra wielu ludzi, byłby to najczęściej odwiedzany blog roku, o którym zapewniam, ponieważ jest niesamowite, jak denerwuje te ataki ddos. Ponieważ próbowaliśmy skonfigurować go samodzielnie i zablokowaliśmy dostęp do maszyny, musieliśmy sformatować go z biosu, więc wyobraź sobie, jacy jesteśmy.
Pozdrawiam serdecznie. I moje gratulacje z powodu zaginionego bloga, wiele osób znajduje taki, który został zaktualizowany o ten. -Miguel angel-
Cześć, jak się masz 🙂
Napisz na mój e-mail, chętnie Ci pomożemy 😀 -» kzkggaara[@]desdelinux[.]internet
Witam wszystkich, do tej pory pracuję, weź ten skrypt, tak przy okazji, bardzo dobry ... tylko jedna wątpliwość: Czy moduł «najnowszy» nie zmniejsza wydajności?
Pozdrowienia - Dziękuję / Kto cię lubi?
Znakomity wkład przyjacielu, umieszczę Cię w referencjach do tutoriala wideo, który montujemy, uścisk z Kostaryki
Cześć,
Nie możesz użyć skryptu na wielu portach?
Mam serwer gier i dostaję ataki zarówno w sieci, jak i na portach serwera gier.
Pozdrowienia.