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:
- Wybrać najlepszy zespół reguł i łańcuchów zapobiegający atakowi DDoS
- Dowiesz się jak można zabezpieczyć jądro systemu Linuxa.
- Dowiesz się jak blokować ruch oparty o protokół TCP, który nosi znamiona ataku.
- 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
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
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 😉
ataki zwykle są zautomatyzowana. Wyrafinowane raczej dotyczą wielkich graczy lub przyjacielskich uprzejmości.