Ochrona przed atakiem DDoS w 2018r.

Jest wiele sposobów aby zbudować ochronę przeciwko atakowi DDoS za pomocą reguł iptables. W poniższym artykule zostaną przedstawione najbardziej ogólne założenia takiej ochrony.

Dzięki temu tutorialowi dowiesz się jak:

  1. Wybrać najlepszy zespół reguł i łańcuchów zapobiegający atakowi DDoS
  2. Dowiesz się jak można zabezpieczyć jądro systemu Linuxa.
  3. Dowiesz się jak blokować ruch oparty o protokół TCP, który nosi znamiona ataku.
  4. Dowiesz się jak użyć reguł SYNPROXY do blokowania ataku SYN floods polegającego na wysyłaniu dużej ilości pakietów z nagłówkiem synchronizacji.

Proszę zwrócić uwagę że artykuł został napisany dla użytkowników którzy zajmują się serwerami linuxowymi na codzień.

Jeżeli tylko chcesz ochronić swój serwer przed atakami typy DDos, możesz użyć usług twojego dostawcy VPS-a przed tego rodzaju atakami.

Niestety ale na chwilę obecną nie ma dobrego rozwiązania hardwerowego do zatrzymania takiego typu ataków. Jednak dobrą informacją jest to że dzięki iptables możemy filtrować ruch i wychwytywać wrogi ruch (ilość odpytań lub anomalie związane z ruchem).

W tym artykule skupimy się wyłącznie na ochronie związanej z ruchem TCP. Większość ataków związanych z protokołem UDP polega na zapchaniu transferu ruchem sieciowym na karcie sieciowej. Jednak z drugiej strony protokuł UDP nie jest tak często wykorzystywany i przy większości usług może być zablokowany. Ksiązkowym przykładem jest streaming audio/video w trybie live.

Czym jest iptables?

jest poleceniem/filtrem użytkownika służącym do konfiguracji pakietów sieciowych jądra systemowego w systemach linuksowych. Polecenia tego może używać jedynie superużytkownik. Za pomocą tego polecenia można w szczególności ustawiać reguły służące do filtrowania i zmieniania pakietów, jak również wyświetlać istniejące reguły.

Iptables jest domyślnym narzędziem dla firewali w systemach linuxowych. Każdy kto pracował na systemach linuxowych powinien przynajmniej słyszeć o czym takim jak iptables.

Iptables jest używany aby filtrować pakiety, blokować źródło tych pakietów albo cel jak również adres IP zarówno źródłowy i docelowy. Iptables potrafi przekazywać również pakiety jak i blokować ich przekazywanie.

Przy pomocy iptables możemy blokować również niektóre usługi wykorzystujące różne porty jak ftp w trybie aktywnym oraz torrenty, za pomocą zbiorów sygnatur.

Dlaczego reguły iptables mogą cię przerazić?

Do zrozumienia jak funkcjonują reguły iptables i jak uchornić się przed atakiem DDoS musisz najpierw zrozumieć ogólny zarys jak działają reguły iptables.

Samo iptables można potraktować jako polecenie wykonywane na terminalu które daje kontrolę nad tabelką adresów ip, portów, adresów mac i reguł. Są różne tablice dla różnych reguł i różnego przeznaczenia.

Tabele IPTABLES

Filter – odrzuca niechciane pakiety,

Nat – zmienia adresy źródłowe lub docelowe pakietu. Jeżeli pakiet tworzy nowe połącznei tablica NAT sprawdza jego reguły

Mangle – modyfikuje lub oznacza pakiety, może zmieniać nagłówek

Raw – udostępnia pakiety przed ich przetworzeniem przez część kernela (np. w trybie śledzenia połączeń (conntrack)),

Security – używana przy zaawansowanych modelach bezpieczeństwa w Linuksie (np. SELinux).

Jak widzisz jest pięć tabel w systemach linuxowych, z czego najważniejsze są Filter, Nat, Mangel i Raw i to one są zwykle zainstalowane wraz z jądrem na każdym systemie. Każda z tych tabeli wspiera różne łańcuchy.

IPtables Chains

PREROUTING: raw, nat, mangle

  • Dotyczy pakietów które są na wejściu do karty sieciowej – network interface card (NIC)

INPUT: filter, mangle

  • Dotyczą pakietów które są adresowane do lokalnego adresu

FORWARD: filter, mangle

  • Dotyczy pakietów które są routowane i przekazywane dalej poprzez serwer np. do sieci urządzenia lokalnego

OUTPUT: raw, filter, nat, mangle

  • Dotyczą  pakietów które serwer wysyła, a są lokalnie wygenerowane

POSTROUTING: nat, mangle

  • Dotyczy pakietów które mają opuścić serwer

https://n0where.net/how-does-it-work-iptables

W zależności od tego z jakiego rodzaju pakietami mamy doczynienia możemy je zablokować, zmodyfikować wybrać rodzaj tablicy i łańcuch który dana tablica wspiera.

Oczywiście nadal brakuje na wyjaśnienia co można i jak można z pakietem zrobić a więc (ACCEPT, DROP, REJECT, etc.), ale zakładając że czytasz ten artykuł wiesz o co chodzi.

A więc wyjaśnijmy dlaczego reguły iptables mogą zatrzymać atak DDoS bez uczenia cię jak działają reguły.

Jeżeli chcesz zablokować atak DDoS za pomocą reguł iptables, to wiedz że wydajność reguł iptables jest niezwykel istotna. Większość ataków DDoS za pomocą protokołu TCP używa dużej ilości pakietów które mają za zadanie zalać serwer odpytaniami i doprowadzić do jego zawieszenia w ten sposób. Dlatego też powinieneś mieć pewność że potrafisz przetworzyć i zablokować atak prz zalewaniu Twojego serwera niechcianymi odpytaniami.

Jeżeli byłeś już zainteresowany tematem i znalazłeś tutoriale opisujące jak to zrobić z pewnością natknąłeś się na tablice filter i łańcuch CHAIN który ma cię ochronić przed atakiem DDoS.

Jednak należy zdać sobie sprawę że przy tym podejściu do tematu łańcuch INPUT jest wyłącznie przetwarzany po łańcuchu PREROUTING i FORWARD a w związku z tym nie pasuje do żadnego z nich. To powoduje opóźnienia w filtrowaniu pakietów a zasoby komputera zanim dojdą do tego pakietu są zużywane. Dlatego tak ważne jest efektywne używanie reguł jak to tylko możliwe, aby zapobiec takiemu atakowi zanim serwer się zawiesi na czym zależy atakującemu.

Pierwszym łańcuchem który użyjemy jest łańcuch PREROUTING, który chcemy przefiltrować ze złych pakietów/

Należy zauważyć że tablica fiter nie wspiera PREROUTING-u, a więc aby ominąć ten problem wykorzystamy tablicę mangle. Wspiera ona większość jeżeli nie wszystkie reguły filter.

Teraz powinieneś wiedzieć dlaczego iptables może zawodzić przed atakiem DDoS. Dzieje się tak ponieważ jeżeli używasz tablicy filter do blokowania wrogich pakietów!

Najlepszym rozwiązaniem które zwiększy wydajność twoich reguł iptables i uchroni cię przed atakiem (TCP) DDoS jest użycie tablicy mangle oraz łańcucha PREROUTINGU.

Rozszerzenia reguł

Wiele funkcji dostępnych jest poprzez rozszerzenia, ładowane przez -m (patrz teżman iptables-extensions): –

-m tcp/udp – jest automatycznie ładowany razem z -p udp/tcp; pozwala ustalić m.in. port źródłowy i docelowy –sport/–dport,

-m conntrack – wybiera stan połączenia –ctstate, m.in.: INVALID, NEW, ESTABLISHED, RELATED,

-m comment – pozwala na dowolny komentarz –comment,

-m limit – dzięki –limit ogranicza liczbę pakietów na jednostkę czasu,

-m time – pozwala włączyć regułę o –datestart i wyłączyć o –datestop,

-m connlimit – używając –connlimit-above pozwala ograniczyć liczbę połączeń z jednego adresu.

Najlepsze ustawienia jądra systemowego do łagodzenia ataków DDoS

Kolejnym błędem popełnianym przez administratorów systemów jest brak optymalizacji jądra systemowego które może łagodzić objawy ataku.

Zwróć uwagę że ten poradnik skupia się na systemie CentOS 7 i uwzględnia implementacje mechanizmu SYNPROXY będący nowym modułem iptables.

Musisz mieć więc na uwadze że niektóre opcje kernela muszą być dostosowane do Twojej dystrybucji linuxa.

Tak więc umieść poniższe ustawienia w pliku:

/etc/sysctl.conf i zatwierdź poleceniem sysctl -p.

Anti-DDoS Kernel Settings (sysctl.conf)

kernel.printk = 4 4 1 7 
kernel.panic = 10 
kernel.sysrq = 0 
kernel.shmmax = 4294967296 
kernel.shmall = 4194304 
kernel.core_uses_pid = 1 
kernel.msgmnb = 65536 
kernel.msgmax = 65536 
vm.swappiness = 20 
vm.dirty_ratio = 80 
vm.dirty_background_ratio = 5 
fs.file-max = 2097152 
net.core.netdev_max_backlog = 262144 
net.core.rmem_default = 31457280 
net.core.wmem_max = 67108864 
net.core.somaxconn = 65535  
net.core.rmem_max = 67108864 
net.core.wmem_default = 31457280
net.core.optmem_max = 25165824 
net.ipv4.neigh.default.gc_thresh1 = 4096 
net.ipv4.neigh.default.gc_thresh2 = 8192 
net.ipv4.neigh.default.gc_thresh3 = 16384 
net.ipv4.neigh.default.gc_interval = 5 
net.ipv4.neigh.default.gc_stale_time = 120 
net.netfilter.nf_conntrack_max = 10000000 
net.netfilter.nf_conntrack_tcp_loose = 0 
net.netfilter.nf_conntrack_tcp_timeout_close_wait = 10 
net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 20
net.netfilter.nf_conntrack_tcp_timeout_established = 1800 
net.netfilter.nf_conntrack_tcp_timeout_close = 10 
net.netfilter.nf_conntrack_tcp_timeout_last_ack = 20 
net.netfilter.nf_conntrack_tcp_timeout_syn_recv = 20 
net.netfilter.nf_conntrack_tcp_timeout_syn_sent = 20 
net.netfilter.nf_conntrack_tcp_timeout_time_wait = 10 
net.ipv4.tcp_slow_start_after_idle = 0 
net.ipv4.ip_local_port_range = 1024 65000 
net.ipv4.ip_no_pmtu_disc = 1 
net.ipv4.route.flush = 1 
net.ipv4.route.max_size = 8048576 
net.ipv4.icmp_echo_ignore_broadcasts = 1 
net.ipv4.icmp_ignore_bogus_error_responses = 1 
net.ipv4.tcp_congestion_control = htcp 
net.ipv4.tcp_mem = 65536 131072 262144 
net.ipv4.udp_mem = 65536 131072 262144 
net.ipv4.tcp_rmem = 4096 87380 33554432 
net.ipv4.udp_rmem_min = 16384 
net.ipv4.tcp_wmem = 4096 87380 33554432 
net.ipv4.udp_wmem_min = 16384 
net.ipv4.tcp_max_tw_buckets = 1440000 
net.ipv4.tcp_tw_recycle = 0 
net.ipv4.tcp_tw_reuse = 1 
net.ipv4.tcp_max_orphans = 400000 
net.ipv4.tcp_window_scaling = 1 
net.ipv4.tcp_rfc1337 = 1 
net.ipv4.tcp_syncookies = 1 
net.ipv4.tcp_synack_retries = 1 
net.ipv4.tcp_syn_retries = 2 
net.ipv4.tcp_max_syn_backlog = 16384 
net.ipv4.tcp_timestamps = 1 
net.ipv4.tcp_sack = 1 
net.ipv4.tcp_ecn = 2net.ipv4.tcp_fack = 1 
net.ipv4.tcp_fin_timeout = 10 
net.ipv4.tcp_keepalive_time = 600 
net.ipv4.tcp_keepalive_intvl = 60 
net.ipv4.tcp_keepalive_probes = 10 
net.ipv4.tcp_no_metrics_save = 1 
net.ipv4.ip_forward = 0 
net.ipv4.conf.all.accept_redirects = 0 
net.ipv4.conf.all.send_redirects = 0 
net.ipv4.conf.all.accept_source_route = 0 
net.ipv4.conf.all.rp_filter = 1

Powyższe ustawnienia zmaksymalizują wydajność podczas ataku typu DDoS.

Co da Ci realną ochronę przed atakiem DDoS?

Ataki DDoS są złożone i jest wiele rodzajów ataków niemożliwych do zatrzymania na podstawie sygnatur dla nich wspólnych ponieważ jest zbyt wiele.

Ale na szczęście jest coś takiego jak śledzenie połączenia (connection tracking – nf_conntrack) wbudowane w jądro systemu, które umożliwia złagodzenie każdego rodzaju ataku które nie używa pakietów SYN. To uwzględnia wszystkie pakiety ACK i SYN-ACK a także fałszywe pakiety z flagą TCP.

A więc zacznijmy od prostej reguły która zatrzymuje atak DDoS na protokole TCP.

Blokowanie nieprawidłowych PAKIETÓW

iptables -t mangle -A PREROUTING -m conntrack --ctstate INVALID -j DROP

Poniższa reguła blokuje wszystkie pakiety które nie służą do zestawienia połączenia TCP przy użyciu pakietów SYN.

Blokowanie nowych połączeń TCP które nie są inicjowane przez pakiety SYN

iptables -t mangle -A PREROUTING -p tcp ! --syn -m conntrack --ctstate NEW -j DROP

Poniżej zablokujemy pakietu które są nowe (nie służą do zestawienia połączenia) i nie używają flagi SYN. Poniższe reguły są podobne do „Blokowania nieprawidłowych pakietów” ale zauważ że przechwytują pakiety których inne reguły nie przechwytują

Blokowanie pakietów MSS o niprawidłowej wartości

iptables -t mangle -A PREROUTING -p tcp -m conntrack --ctstate NEW -m tcpmss ! --mss 536:65535 -j DROP

Powyższe reguły blokują tylko takie z flagą SYN niektóre ale nie wszystkie również TCP MSS to pozwala zapobiec atakom SYN FLOOD. 

Blokowanie pakietów ze błędną flagą TCP

iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP 
iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,SYN FIN,SYN -j DROP 
iptables -t mangle -A PREROUTING -p tcp --tcp-flags SYN,RST SYN,RST -j DROP 
iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,RST FIN,RST -j DROP 
iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,ACK FIN -j DROP 
iptables -t mangle -A PREROUTING -p tcp --tcp-flags ACK,URG URG -j DROP 
iptables -t mangle -A PREROUTING -p tcp --tcp-flags ACK,FIN FIN -j DROP 
iptables -t mangle -A PREROUTING -p tcp --tcp-flags ACK,PSH PSH -j DROP 
iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL ALL -j DROP 
iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL NONE -j DROP 
iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL FIN,PSH,URG -j DROP 
iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL SYN,FIN,PSH,URG -j DROP 
iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP

Powyższe reguły blokują błędne pakiety flagi TCP które nie zostaną użyte.

Blokowanie pakietów z podsieci (Spoofing)

iptables -t mangle -A PREROUTING -s 224.0.0.0/3 -j DROP 
iptables -t mangle -A PREROUTING -s 169.254.0.0/16 -j DROP 
iptables -t mangle -A PREROUTING -s 172.16.0.0/12 -j DROP 
iptables -t mangle -A PREROUTING -s 192.0.2.0/24 -j DROP 
iptables -t mangle -A PREROUTING -s 192.168.0.0/16 -j DROP 
iptables -t mangle -A PREROUTING -s 10.0.0.0/8 -j DROP 
iptables -t mangle -A PREROUTING -s 0.0.0.0/8 -j DROP 
iptables -t mangle -A PREROUTING -s 240.0.0.0/5 -j DROP 
iptables -t mangle -A PREROUTING -s 127.0.0.0/8 ! -i lo -j DROP

Reguły blokują ruch podsieci lokalnych. Zwykle w sieciach publicznych nie chesz otrzymywać pakietów z sieci lokalnych od urządzeń podpiętych pod nią.

Powyższe reguły dotyczą również twojego interfejsu loopback – 127.0.0.0/8.

Dodatkowe reguły

iptables -t mangle -A PREROUTING -p icmp -j DROP

Dzięki tej regule nie będziesz spingowany a host nie uzyska odpowiedzi. Używane jest to tylko po to aby atakujący nie wiedział czy widniejsz w sieci. Dość dużo ataków jest automatyzowanych a dzięki tej regule po ‚spingowaniu’ skrypt atakujący może uznać że urządzenia/serwera pod tym adresem IP nie ma. Reguła ta też blokuje atak typu ping flood i ICMP fragmentation flood.

iptables -A INPUT -p tcp -m connlimit --connlimit-above 80 -j REJECT --reject-with tcp-reset

Powyższa reguła nakłada limit połączeń powyżej 80. Należy wziąść pod uwagę że ten limit przy niektórych usługach może być zaniżony.

iptables -A INPUT -p tcp -m conntrack --ctstate NEW -m limit --limit 60/s --limit-burst 20 -j ACCEPT 
iptables -A INPUT -p tcp -m conntrack --ctstate NEW -j DROP

Powyższe reguły ograniczają ilość połączeń na sekundę. Takie reguły mogą być pomocne przeciwko atakom, ale nie przed atakiem typu SYN floods ponieważ takie ataki zwykle wukorzystują dużą ilość adresów IP.

iptables -t mangle -A PREROUTING -f -j DROP

Powyższa reguła blokuje pofragmentowane pakiety, zwykle nie potrzebujesz blokowanie takich pakietów ale może to uchronić się przed atakiem typu UDP fragmentation flood. Jednak zwróć uwagę że taki typ ataku raczej ma wyczerpać przepustowość Twojej karty sieciowej, a więc reguła raczej jest opcjonalna i nie jest użyteczna,

iptables -A INPUT -p tcp --tcp-flags RST RST -m limit --limit 2/s --limit-burst 2 -j ACCEPT 
iptables -A INPUT -p tcp --tcp-flags RST RST -j DROP

Powyższe reguły mają zablokować przychodzące połączenia pakietów TCP RST i zapobiec atakowi TCP RST floods. Zasadność tej reguły jest kwestionowana.

Ochrona przed atakami SYN Floods za pomocą SYNPROXY

SYNPROXY to nowe narzędzie wprowadzone wraz z jądrem Linuxa w wersji 3.12 i  iptables w wersji 1.4.21. dla CentOS 7 które zostało domyślnie wprowadzone wraz z kernelem 3.10.

Zadaniem SYNPROXY jest sprawdzenie kiedy urządzenie wysyła pakiety SYN i kiedy zostało zestawione połączenie TCP.

Pomimo tego że wprowadziliśmy wiele mechanizmów blokujących ataki DDoS to można go przeprowadzić nadal za pomocą wyszukanych metod.

Ważnym jest zauważenie że wydajność reguł zawsze jest lepsza jeżeli jest znana sygnatura lub wzorzec który ma zostać zablokowany tako jak długość pakietu (-m długość),TOS czyli Type of Service (-m tos), czas życia (-m ttl) wartości łańcuchów znaków lub wartości hexadecymalne (-m text -m u32 dla bardziej zaawansowanych użytkowników)

Jednak w kilku rzadkich przypadkach nie jest możliwe lub trudne do osiągnięcia zablokowanie takiego ataku dlatego też należy skorzystać z  SYNPROXY.

Poniżej zbiór reguł SYNPROXY który ograniczy atak SYN flood:

iptables -t raw -A PREROUTING -p tcp -m tcp --syn -j CT --notrack 
iptables -A INPUT -p tcp -m tcp -m conntrack --ctstate INVALID,UNTRACKED -j SYNPROXY --sack-perm --timestamp --wscale 7 --mss 1460 
iptables -A INPUT -m conntrack --ctstate INVALID -j DROP

Powyższe reguły odnoszą się do wszystkich portów. Jeżeli chcesz używać SYNPROXY tylko na wybranych portach które są aktywne co jest rekomendowane nie powinieneś blokować wszystkich portów, tylko wybrane używając tablicy MANGLE i łańcuch PREROUTINGU. Możwsz w prosty sposób dodać port który cię interesje np –dport 80 dla każdej regułki która używa SYNPROXY.

Aby zweryfikować że SYNPROXY działa, możesz sprawdzić to poleceniem

watch -n1 cat /proc/net/stat/synproxy

Jeżeli wartość zmienia się jeżeli zestawisz nowe połączenie TCP na porcie który wspazałeś oznacza to że SYNPROXY działa.

Kompletny zestaw regół przeciw atakowu DDoS

Jeżeli nie chcesz kopiować i wklejać poszczególnych reguł w tym artykule możesz to wykonać zbiorczo kopiując skrypt poniżej:

### 1: Drop invalid packets ### 
/sbin/iptables -t mangle -A PREROUTING -m conntrack --ctstate INVALID -j DROP  

### 2: Drop TCP packets that are new and are not SYN ### 
/sbin/iptables -t mangle -A PREROUTING -p tcp ! --syn -m conntrack --ctstate NEW -j DROP 
 
### 3: Drop SYN packets with suspicious MSS value ### 
/sbin/iptables -t mangle -A PREROUTING -p tcp -m conntrack --ctstate NEW -m tcpmss ! --mss 536:65535 -j DROP  

### 4: Block packets with bogus TCP flags ### 
/sbin/iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP 
/sbin/iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,SYN FIN,SYN -j DROP 
/sbin/iptables -t mangle -A PREROUTING -p tcp --tcp-flags SYN,RST SYN,RST -j DROP 
/sbin/iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,RST FIN,RST -j DROP 
/sbin/iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,ACK FIN -j DROP 
/sbin/iptables -t mangle -A PREROUTING -p tcp --tcp-flags ACK,URG URG -j DROP 
/sbin/iptables -t mangle -A PREROUTING -p tcp --tcp-flags ACK,FIN FIN -j DROP 
/sbin/iptables -t mangle -A PREROUTING -p tcp --tcp-flags ACK,PSH PSH -j DROP 
/sbin/iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL ALL -j DROP 
/sbin/iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL NONE -j DROP 
/sbin/iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL FIN,PSH,URG -j DROP 
/sbin/iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL SYN,FIN,PSH,URG -j DROP 
/sbin/iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP  

### 5: Block spoofed packets ### 
/sbin/iptables -t mangle -A PREROUTING -s 224.0.0.0/3 -j DROP 
/sbin/iptables -t mangle -A PREROUTING -s 169.254.0.0/16 -j DROP 
/sbin/iptables -t mangle -A PREROUTING -s 172.16.0.0/12 -j DROP 
/sbin/iptables -t mangle -A PREROUTING -s 192.0.2.0/24 -j DROP 
/sbin/iptables -t mangle -A PREROUTING -s 192.168.0.0/16 -j DROP 
/sbin/iptables -t mangle -A PREROUTING -s 10.0.0.0/8 -j DROP 
/sbin/iptables -t mangle -A PREROUTING -s 0.0.0.0/8 -j DROP 
/sbin/iptables -t mangle -A PREROUTING -s 240.0.0.0/5 -j DROP 
/sbin/iptables -t mangle -A PREROUTING -s 127.0.0.0/8 ! -i lo -j DROP  

### 6: Drop ICMP (you usually don't need this protocol) ### 
/sbin/iptables -t mangle -A PREROUTING -p icmp -j DROP  

### 7: Drop fragments in all chains ### 
/sbin/iptables -t mangle -A PREROUTING -f -j DROP  

### 8: Limit connections per source IP ### 
/sbin/iptables -A INPUT -p tcp -m connlimit --connlimit-above 111 -j REJECT --reject-with tcp-reset  

### 9: Limit RST packets ### 
/sbin/iptables -A INPUT -p tcp --tcp-flags RST RST -m limit --limit 2/s --limit-burst 2 -j ACCEPT 
/sbin/iptables -A INPUT -p tcp --tcp-flags RST RST -j DROP  

### 10: Limit new TCP connections per second per source IP ### 
/sbin/iptables -A INPUT -p tcp -m conntrack --ctstate NEW -m limit --limit 60/s --limit-burst 20 -j ACCEPT 
/sbin/iptables -A INPUT -p tcp -m conntrack --ctstate NEW -j DROP  

### 11: Use SYNPROXY on all ports (disables connection limiting rule) ### 
# Hidden - unlock content above in "Mitigating SYN Floods With SYNPROXY" section

Dodatkowe reguły iptables

Jeżeli chcesz dodatkowo wzmocnić swój VPS / Serwer użyj dodatkowo tych reguł:

### SSH brute-force protection ### 
/sbin/iptables -A INPUT -p tcp --dport ssh -m conntrack --ctstate NEW -m recent --set 
/sbin/iptables -A INPUT -p tcp --dport ssh -m conntrack --ctstate NEW -m recent --update --seconds 60 --hitcount 10 -j DROP  

### Protection against port scanning ### 
/sbin/iptables -N port-scanning 
/sbin/iptables -A port-scanning -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s --limit-burst 2 -j RETURN 
/sbin/iptables -A port-scanning -j DROPP

 

Piśmiennictwo:

https://netfilter.org/documentation/HOWTO/pl/netfilter-extensions-HOWTO-4.html

http://www.cs.put.poznan.pl/anstroinski/courses/sk/sk1-lab7-iptables.pdf

https://www.frozentux.net/iptables-tutorial/chunkyhtml/x4758.html

https://javapipe.com/ddos/blog/iptables-ddos-protection/

https://n0where.net/how-does-it-work-iptables

2 myśli nt. „Ochrona przed atakiem DDoS w 2018r.

  1. fantastycznie napisane, dzięki.
    Zastanawiam się czy prosty serwer wystawiony z kilkoma stronami www dla znajomych jest narażony na ddos ze strony automatów, a może zdarza się, że takie miejsca są manualnie atakowane? chyba za niezapłacone faktury 😉

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

This site uses Akismet to reduce spam. Learn how your comment data is processed.