# syn flood - obrona

## soban_

Wiec tak, znajomy wali w moja maszyne skryptem do syn-floodowania, czy jest mozliwosc jego zablokowania? Zwyklego dosa blokuje skryptem ktory czyta:

```
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
```

nastepnie jesli przekroczy ilosc polaczen ktora ustale to blokuje. Jednak nie dziala to na spoofowe ipiki, czy jest na to jakis sposob? Skrypt przed ktorym wybronic sie nie moge to: http://leetcoders.org/thread-1964.html macie jakies pomysly? Zeby na przyszlosc uniknac tego? Googlujac doszedlem do czegos takiego: http://pl.wikipedia.org/wiki/SYN_cookies jednak samo

```
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
```

chyba nie wystarczy? Jakies pomysly jeszcze? Ewentualnie cos, z czym powinienem sie bardziej zapoznac co chociaz troche zwiekszy odpornosc systemu na ten rodzaj ataku?

----------

## Belliash

DoS, a w szczegolnosci DDoS nie zablokujesz. Jak ktos przeprowadzi na Tobie taki atak, to bedziesz mogl sie conajwyzej poskarzyc swojemu ISP z nadzieja ze wytnie 'zlosliwy ruch'.

```
iptables -N syn_flood

iptables -A INPUT -p TCP --syn -j syn_flood

iptables -A syn_flood -m limit --limit X/s --limit-burst Y -j RETURN

iptables -A syn_flood -j DROP
```

gdzie X i Y to limity jakie chcesz nalozyc

----------

## soban_

No z tym ze moge co najwyzej sie poskarzyc to masz racje, nawet na ssh nie moge wbic na hetznera. Natomiast na drugim serwerze OVH wyklada cala matke. Hmm z tymi limitami to inni uzytkownicy wtedy beda mieli tez wyciety kawalek ruchu (mam na mysli tych legalnie uzywajacych uslugi)? Sprobuje z tymi regulkami i podam jakie sa efekty. Kurde najbardziej mnie to denerwuje, ze mozna sobie takiego np botneta kupic na miesiac za 7$ i moze osoba dreczyc do zajechania serwera. Jeszcze jakies kroki moge podjac, zeby to chociaz minimalnie wyeliminowac? A co z firewallami sprzetowymi, pomoga cos?

----------

## SlashBeast

 *soban_ wrote:*   

> 
> 
> ```
> netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
> ```
> ...

 

To jest mistrzostwo, proponuje uzyc iptables connlimit modul, zamiast takie partyzantki.

A co do ddosa, to mozesz sie bawic w odrzucanie polaczen ze spoofowanymi ip, zorietuj sie, co dokladnie jest Twoim problemem, czy wysycona rura, czy moze tak duzo polaczen tcp, ze nie ma juz wolnego portu by to odebrac. Zmniejszajac timeouty i blokujac dziwne polaczenia (ipki) jestes w stanie w miare sobie odblokowac boksa. Mozesz sobie tak jak w RFC1812 opisano wlaczyc 'sysctl -w net.ipv4.conf.all.rp_filter=1'

A sprzetowy firewall Ci nie wiele da, jezeli Ci rure zapycha, sprzetowy firewall co najwyzej w miare szybko ogarnie przychodzace pakiety, sprawdzi co to w nich siedzi, jak sa zle, dziwne, to w ogole nie pusci ich dalej i tyle.

----------

## soban_

 *SlashBeast wrote:*   

> blokujac dziwne polaczenia (ipki)

 To jest w sumie tez jakas mysl, z reszta ktora napisales tez beda kombinowal. Czy moge gdzies dorwac zakresy ipikow z poza Polski? To juz bedzie na pewno jakis sposob. Ewentualnie, jak rozpoznawac dziwne ipiki?

Jeszcze na taki pomysl wpadlem, zeby zrobic VPSa ktory filtruje ruch, czy by cos to dalo? Taki firewall na VPSie, tylko nie wiem w sumie czy istnieje cus gotowego, co bedzie robic za takowego fw, czy sam mam go budowac? No i czy w ogole to cos da, pozniej moge np przekierowac ruch na wlasciwa maszyne/vpsa juz z niego.

Co do gardla lacza, to ono nie wyglada jakby bylo zapychane, to raczej przez to ze maszyna probuje interpretowac kazdy pakiet poprawnie...

 *SlashBeast wrote:*   

> Mozesz sobie tak jak w RFC1812 opisano wlaczyc 'sysctl -w net.ipv4.conf.all.rp_filter=1'

  http://ts.soban.pl/cos w ten sposob to wyglada:

```
sysctl -a | grep rp_f

net.ipv4.conf.all.rp_filter = 1

net.ipv4.conf.all.arp_filter = 0

net.ipv4.conf.default.rp_filter = 1

net.ipv4.conf.default.arp_filter = 0

net.ipv4.conf.lo.rp_filter = 1

net.ipv4.conf.lo.arp_filter = 0

net.ipv4.conf.eth0.rp_filter = 0

net.ipv4.conf.eth0.arp_filter = 0
```

[OT]Przy okazji, znacie moze miejsca (portale/grupy godne zaufania) gdzie moge przetestowac zabezpieczenia na swoim serwerze wydajac na to zgode komus albo uzywajac do tego jakis narzedzi? Typu na ataki DDoS (no tutaj to moge sam bo moge kupic botnet i testowac na sobie) jednak explolity itp - chcialbym aby taka osoba informowala mnie co stosuje i ewentualnie jak moge to zablokowac i co we mnie wchodzi. Czy mozecie kogos takowego polecic albo jakas grupe na takowy test penetracyjny?[/OT]

----------

## Belliash

Jezeli problemem jest wysycone lacze to nic Ci nie pomoze, procz kontaktu z ISP i modlitwy, ze jednak wytna ten ruch. Sam tez mozesz go wyciac jakims firewallem, ale to nic nie da, bo lacze do Ciebie i tak bedzie wysycone (do Twojego firewalla), wiec ten ruch trzeba wyciac gdzies wczesniej, czyli u ISP.

----------

## lazy_bum

 *soban_ wrote:*   

> Wiec tak, znajomy wali w moja maszyne skryptem do syn-floodowania

 

[OffTopic] Gratuluję znajomych… [/OffTopic]

----------

## Belliash

To fakt. Ja msciwy raczej nie jestem, ale jesli nic by nie skutkowalo (ani pomoc ISP, ani slowne upomnienie) to zlozyl bym poprostu zawiadomienie do prokuratury.

Z godnie z obowiazujecym prawem, grozi mu za to do 8 lat...

----------

## soban_

E nie, zle troche zrozumieliscie. Walil na moja prosbe, boje sie tego ze ktos wpadnie tez na taki genialny pomysl... dlatego chce to wszystko wyprzedzic. A tak na przyszlosc od strony prawnej, ide na policje z tym i co oni zrobia? Skoro to sa fejkowe ipiki d-: na jakiej zasadzie dojda kto to?

----------

## Belliash

Kto by chcial szukac takiego sobana...   :Rolling Eyes: 

----------

## soban_

Oj @Belliash tsa chyba nie prowadziles i nie wiesz co tam sie dzieje, ale mimo wszystko chce Cie przeprosic za swoje poprzednie dzialanie (w dobrej wierze) pare lat temu i dziekuje za pomoc.

----------

## Jacekalex

Po  pierwsze - na Linuxie:

http://pl.wikipedia.org/wiki/SYN_cookies

U mnie działa dosyć grzecznie.   :Smile: 

Po drugie:

RTFM:

```
iptables -m hashlimit --help
```

Moim zdaniem najlepsza sprawa na dokuczliwych pacjentów z ich skryptami - dla Twojego przypadku.

Np na taką regułkę w mikroserwerku SMTP (NetQmail) nikt się nie skarżył:

```
iptables -A  SMTP ! -i lo -m connlimit --connlimit-upto 10 --connlimit-mask 0 --connlimit-saddr -m hashlimit --hashlimit 1/min --hashlimit-burst 1 --hashlimit-mode srcip --hashlimit-name smtp -j ACCEPT

```

Ejabberd s2s na taką też się nie skarżył, ze wszystkimi kolegami gadał prawidłowo:

```
iptables -A INPUT  ! -i lo -p tcp --dport 5269  -m connlimit --connlimit-upto 10 --connlimit-mask 0 --connlimit-saddr -m hashlimit --hashlimit 5/min --hashlimit-burst 5 --hashlimit-mode srcip --hashlimit-name xmpp -j ACCEPT

```

O zapychaniu rurki gadaj z Adminem serwerowni, OVH swego czasu wprowadzało limity per/srcIP na udp i icmp, więc może na syn-flood też coś zrobią (mogą na pewno),

Albo zaśpiewają chyba z  80 dych/mies za ochronę firewalla - mieli coś podobnego w cenniku.

Co do podstawowego testowania, to bierzesz darmową wersję Nessusa albo OpenVASa i jedziesz, na serwerze klient, w domu serwer Nessusa/Openvas, i jazda.

Uważaj tylko na najnowsze wersje Nessusa, 2.x był wolny, od wersji 4.x ma jakąś dziwną licencję,chyba darmowy do prywatnych pacjentów, firmowy $99/mies, czy coś w tym rodzaju.

Pozdrawiam

 :Cool: Last edited by Jacekalex on Thu Aug 30, 2012 9:25 am; edited 1 time in total

----------

## SlashBeast

@jacekalex: Te regulki w ogole dzialaja tak jak chciales? Wydaje mi sie, ze match connlimit i hashlimit sie wykluczaja, dodatkowo --connlimit-mask 0 mowi, ze ograniczasz do 10 polaczen lacznie, z dowolnych ip, a chyba chciales dac tutaj 32.

----------

## soban_

A sluchajcie chlopaki, to tez jest niezla mysl. Skoro mam 1024 slotowego tsa (kupilem licencje komercyjna) no wiadomo ze mozna tam wysylac na inny port pliki itp to moze rzeczywiscie oslone zbudowac ktora pozwala osiagnac max 1024 polaczenia z roznych adresow ip i nie wiecej? Tylko teraz pytanie jak zrobic - zeby stare ipiki nie byly wycinane? Bo tutaj dochodzi na port 9987 atak po UDP ze spoofem. Ale glownie po querry walili 10011 - po zmianie portu tego i zablokowaniu polaczen przychodzacych z tcp na gametrackera tylko jest znacznie lepiej. Mysle ze tez mocno podratowaloby sytulacje ograniczenie mozliwosci polaczen z jednego ip na konkretny port - bo np z portem 80 chcialbym zostawic bez ograniczen.

----------

## Jacekalex

 *SlashBeast wrote:*   

> @jacekalex: Te regulki w ogole dzialaja tak jak chciales? Wydaje mi sie, ze match connlimit i hashlimit sie wykluczaja, dodatkowo --connlimit-mask 0 mowi, ze ograniczasz do 10 polaczen lacznie, z dowolnych ip, a chyba chciales dac tutaj 32.

 

Dzialają idealnie.

Te wersje testowałem w domu, parametry hashlimit i connlimit mogą być dowolne, byle miały sens..

natomiast cel:

connlimit - limt połączeń równoczesnych z całego świata (blokada ataku DDOS - usługa ma przetrwać i sama powrócić do życia po zakończeniu ataku).

hashlimit - 1, 2 lub 5 połączeń na minutę z pojedynczego IP.

Szczególnie się to przydało w domu , bo w okolicznej sieci jest pełno trojanów, które,jak znajdą port 25, to chcą pchać 5000 maili na sekundę, i w ogóle nie przyjmują do wiadomości odpowiedzi 55x serwera.

W robocie mam limit 100 polączeń i trochę wyższy pułap hashlimit.

Przy Ejabberd - empirycznie, zapewnial bezproblemową komunikację realtime z serwerami typu Gmail, Tlen, jabber.org czy jabster, jeśli do  domeny przychodzą rownocześnie 2 polączenia, przy większym serwerze trzeba  to pomnożyć przez XX.

W dodatku zawsze istnieje ryzyko ataku DOS/DDOS na Ejabberd, a erlang nie budzi mojego zaufania

Wszystkie cyfry opracowane empirycznie.

Do tego taki mały drobiazg:

```
iptables -N SMTP

iptables -A SMTP ! -i lo  -m state --state NEW  -m set --match-set spamhaus src -j STEAL

iptables -A SMTP ! -i lo  -m state --state NEW -m set --match-set sblamdrop src -j STEAL

iptables -A  SMTP ! -i lo -m connlimit --connlimit-upto 10 --connlimit-mask 0 --connlimit-saddr -m hashlimit --hashlimit-upto 1/min --hashlimit-burst 1 --hashlimit-mode srcip --hashlimit-name smtp -j ACCEPT

iptables -A INPUT ! -i lo -p tcp -m multiport --dports 25,465,587 -j SMTP

```

Spamhaus i Sblam wrzucone do ipseta, to też okazał się całkiem fajny pomysł.

Pozdrawiam

 :Cool: 

----------

## soban_

Znalazlem pewne zmniejszenie ze tak to nazwe problemu w ten sposob. Z tego pliku http://www.ipdeny.com/ipblocks/data/countries/all-zones.tar.gz biore wszystkie kraje poza pl (rm pl && cat * >> all_country), nastepnie lacze to wszystko w jeden plik i nakodzilem sobie taki skrypt ktory wciaga pozostale kraje i je blokuje:

```
a=0

while read line

do a=$(($a+1));

LINES=`awk NR==$a all_country`

echo "$a - iptables -A INPUT -s $LINES -j DROP"

iptables -A INPUT -s $LINES -j DROP

done < "all_country"

echo "Final line count is: $a";
```

To tak na szybko, nie dosc ze to musi wczytywac n-godzin (bo jest tego az 363150 gam adresow IP) to w dodatku nie wiem jak sie w praktyce iptables zachowa przy takiej dawce adresow. Jednak idac za pomyslem, chcialbym ograniczyc sie do polaczen z Polski, jakbym musial to zrobic? W sensie zamiast wypisywac IP wszystkich pozostalych kraja (gdzie zawsze przeciez moze dojsc nowa gama adresow) to pozwalac TYLKO na polaczenia z Polski. Moge to w jakis szybszy/prostrzy/skuteczniejszy sposob zrobic? No i problem pojawi sie z fejkowymi ipkami bo przeciez moga byc wymyslne i nie zawierac sie w jakims kraju...

----------

## SlashBeast

Gdybym mial sobie zrobic takie cos, to pewnie bym uzyl geoip i:

```
iptables -I INPUT -m geoip ! --src-cc PL -j DROP
```

Z tym, ze jak to np. w hetznerze, to raczej chcesz tam sobie dac accept na sieci hetznera.

----------

## Jacekalex

 *soban_ wrote:*   

> Znalazlem pewne zmniejszenie ze tak to nazwe problemu w ten sposob. Z tego pliku http://www.ipdeny.com/ipblocks/data/countries/all-zones.tar.gz biore wszystkie kraje poza pl (rm pl && cat * >> all_country), nastepnie lacze to wszystko w jeden plik i nakodzilem sobie taki skrypt ktory wciaga pozostale kraje i je blokuje:
> 
> ```
> a=0
> 
> ...

 

W ogóle się nie zachowa.

Kiedyś spróbowałem do firewalla wrzucić listę adresów sblamu, wtedy odkryłem, że iptables nie obsługuje liczby reguł  większej niż około  19500 , a działanie sieci drastycznie zwolniło, całość transferu wyglądała tak, jakby ktoś pchał słonia przez dziurkę od klucza.

Jak koniecznie chcesz z tych plików, to nie dropujesz ze wszystkich krajów, ale blokujesz politykę domyślną, a pozwalasz z wybranych krajów.

Firewall powinien blokować wszystko, a zezwalać na wyjątki, a nie odwrotnie.

W dodatku do takich list nie używa się iptables, bo to raczej nie ma sensu, używa sie natomiast ipset, który tworzy litę adresów w tablicy (umieszczonej w ramie, maksymalna wilekość jednej tablicy 2^16 wpisów) a do firewalla dodajesz jedną regułką całą tablicę, np:

```
iptables -A SMTP ! -i lo  -m state --state NEW  -m set --match-set spamhaus src -j STEAL
```

I do tego tworzysz tablicę, jak w tym przykładzie.

Lepszym sposobem jest moduł geoip  (dostępny w pakiecie xtables-addons).

Oba rozwiązania jednak mają tą wadę, ze nie da się w nich przewidzeć wszystkich możliwych sytuacji, przykładowo nie można listy spamhausa użyć do ochrony http czy serwera tibii, bo tam np kiedyś wylądowała cała klasa adresów neozdrady  :Smile: 

W przypadku geoip, też niby wszystko ok, o ile ktoś z twoich klientów nie pojedzie do roboty na wyspy czy do żabojadów, a potem będzie kwas.  :Wink: 

Także każdy system jest na tyle bezpieczny, na ile adminstrator kumaty.  :Wink: 

Pozdrawiam

 :Cool: Last edited by Jacekalex on Fri Jul 13, 2012 4:21 pm; edited 2 times in total

----------

## soban_

@SlashBeast A musze cala hetznerownie, czy tylko IP swojego serwera? No i drugie pytanie, boty z google do pozycjonowania tez musze dodac, aby mialy dostep do witryny -czy one wchodza na Polskim ajpiku? 

No i czy cos wiecej Wam przychodzi do glowy co powinienem dodac w regulach? W sensie kogo raczej nie powinienem blokowac? : )

----------

## Jacekalex

 *soban_ wrote:*   

> @SlashBeast A musze cala hetznerownie, czy tylko IP swojego serwera? No i drugie pytanie, boty z google do pozycjonowania tez musze dodac, aby mialy dostep do witryny -czy one wchodza na Polskim ajpiku? 
> 
> 

 

Całą hetznerownię ma np Internet  :Very Happy: 

Sznurek: http://bgp.he.net/AS24940

A tu conieco z ostatniej chwili...   :Wink: 

----------

## soban_

 *Jacekalex wrote:*   

> Lepszym sposobem jest moduł geoip  (dostępny w pakiecie xtables-addons).

 Dobra z tym mam maly problem, zanim posadze to na hetznerze chce przetestowac na VPSie jak smiga, aby nie robic OT zalozylem nowy temat tutaj https://forums.gentoo.org/viewtopic-t-930006.html

//EDIT

[OT]W sprawie osob ktore naduzywaly DDoSow sprawa zostala przez mojego znajomego skierowana na droge sadowa - http://ts-poland.pl jest to osoba ktora dorwala sie do platnego botnetu i uniemozliwiala dostarczanie uslugi przez tydzien miedzy innymi na ts-poland. Wiec sprawa jest czesciowo zalatwiona, jednak narzedzia pozostaly - w skrocie znajomy nadal jest w stanie wylozyc moj serwer (to nie jest osoba atakujaca wymieniona tutaj) - dlatego dalej z tym walcze. Mysle o zwiekszeniu tez przepustowosci lacza serwera, tak jak zostalo to rozwiazane po czescie na ts-poland. Dziekujemy rowniez tutaj za wszelkiego rodzaju porady, ktore pomogly naszemu zaprzyjaznionemu ts-owi za pozbycie sie atakow.[/OT]

Po moich przebojach i pomocy @Jacekalex udalo mi sie posadzic geoip i rewelacyjnie smiga. Za co Wam jestem niezmiernie wdzieczny za rozwiazanie po czesci problemu. Pytanie teraz mam, czy cos jeszcze powinienem dodac do regulek iptables (pomijajac to wyzej z czym bede teraz kombinowac - o czym wspomnieliscie) co moze pomoc w tej sprawie na przyszlosc. Ewentualnie jakie adresy IP o czym juz wspomnialem powinienem dodac do wyjatkow (jakas moze strona pomocna np z IP google botow?).

Pytanko jeszcze mam:

```
iptables -I INPUT -m geoip ! --src-cc PL -j DROP
```

jesli chce dodac z zagranicy z wyjatkami to jak to moge zrobic poprawnie, jesli moge?

//EDIT

OK juz wszystko jasne:

```
iptables -A INPUT -m geoip ! --src-cc PL -j DROP

iptables -I INPUT -s XXX.XXX.XXX.XXX -j ACCEPT
```

----------

