Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2016-03-27 21:13:50

  Gruchol - Nowy użytkownik

Gruchol
Nowy użytkownik
Zarejestrowany: 2016-03-27

Ataki na WWW - Blokowanie IP.

Witam,
Niestety na moją stronę od kilku godzin ktoś przeprowadza ataki.
Nie są to jednak typowe ataki DOS czy DDOS.
Po prostu ktoś ma ustawione boty aby wchodziły pod link i wykonywały różnie akcje w bardzo krótkich odstępach czasu.
Próbowałem blokować zakres w IPtables ale i tak ten zakres działał.
Później zauważyłem że adresów IP z których przeprowadzane są ataki jest jeszcze więcej.
Co mogę zrobić w takiej sytuacji?
Wpadłem na pomysł aby blokować wszystkie IP które wygenerują za duży ruch w krótkim odstępie czasu jednak nie mam zielonego pojęcia jak się za to zabrać.
System jaki mam zainstalowany to Debian 8 Jessie.
Pozdrawiam.

Ostatnio edytowany przez Gruchol (2016-03-27 21:17:21)

Offline

 

#2  2016-03-27 22:20:35

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
Zarejestrowany: 2008-01-07

Re: Ataki na WWW - Blokowanie IP.

Ipset  + moduł SET do Firewalla potrafi w jednej regule Firewalla blokować nawet 200 tys adresów.

Do tego Apache w modułach Evasive i Mod-Security mają możliwość odpalania skrypta, który będzie dorzucał adresy do ipseta.
Oryginalna wersja nazywa się [b]httpd-guardian[/b], i dodaje reguły firewalla, co jest o tyle głupie, że kiedy doda sobie 10 czy 20 tys reguł, to sieć na serwerze praktycznie przestanie działać, a opóźnienie każdego pakietu będzie wynosić kilka sekund przy 100% obciążenia procka.

Do jednej tablicy Ipseta można pakować tysiące adresów bez ryzyka, że sieć stanie.

Przy okazji schowaj lepiej Apacha za Nginxem, albo w ogóle zrób przesiadkę na Nginxa, ten jest dużo odporniejszy na różne typy ataków, bo po prostu nie otwiera nowego wątku czy procesu dla każdego żądania.


EDIT:
Jak booty młócą stronę w krótkich odstępach czasu z tych samych IP, to wybawieniem oprócz Nginxa może być moduł hashlimit netfiltera.
NP:

Kod:

iptables -A INPUT -p tcp --dport 80 -m hashlimit --hashlimit-upto 30/min \
    --hashlimit-burst 30 --hashlimit-mode srcip --hashlimit-name http -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j DROP

Musisz sobie tylko wartości ustawić empirycznie, żeby przeglądarki miały wystarczający limit.

RTFM:

Kod:

iptables -m hashlimit --help
iptables -m set --help
iptables -j SET --help

Użycie ipseta?
Taka mała pułapka na skanery portów.

Kod:

iptables -t raw -S | grep wypad
-A PREROUTING -m set --match-set wypad src -j SET --add-set wypad src --exist --timeout 86400
-A PREROUTING ! -i lo -p tcp -m multiport --dports 22,113,445,1433,1512,2175,2176,3306,5432 -j SET --add-set wypad src --timeout 3600
-A PREROUTING -m set --match-set wypad src -j DROP

Kod:

ipset list wypad
Name: wypad
Type: hash:net
Revision: 6
Header: family inet hashsize 1024 maxelem 65535 timeout 3600
Size in memory: 1696
References: 4
Members:
54.193.86.82 timeout 81534
222.186.160.35 timeout 19
183.60.48.25 timeout 74060
59.174.111.76 timeout 2271
59.174.111.179 timeout 3164
71.113.7.144 timeout 2294

Jak widać, działa grzecznie.

Zobacz też to:
https://forum.dug.net.pl/viewtopic.php?id=25919

Użycie hashlimita? malutki serwerek XMPP (w domu), wszystko działało.

Kod:

iptables -N XMPP
iptables -A XMPP ! -i lo  -p tcp -m set --match-set spamhaus src -j REJECT --reject-with tcp-reset
iptables -A XMPP ! -i lo  -p tcp -m set --match-set sblamdrop src -j REJECT --reject-with tcp-reset
iptables -A XMPP !  -i lo -p tcp -m multiport --dports 5222,5223 -m connlimit --connlimit-upto 10 --connlimit-mask 0 --connlimit-saddr -m hashlimit --hashlimit-upto 3/min --hashlimit-burst 3 --hashlimit-mode srcip --hashlimit-name xmpp -j ACCEPT
iptables -A XMPP  ! -i lo -p tcp -m multiport --dport 5269  -m connlimit --connlimit-upto 10 --connlimit-mask 0 --connlimit-saddr -m hashlimit --hashlimit-upto 5/min --hashlimit-burst 5 --hashlimit-mode srcip --hashlimit-name xmpp -j ACCEPT
iptables -A INPUT ! -i lo -p tcp -m multiport --dports 5222,5223,5269 -j XMPP

Pozdro

Ostatnio edytowany przez Jacekalex (2016-03-27 23:03:11)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
Nas ludzie lubią po prostu, a nie klikając w przyciski ;-)

[ Generated in 0.008 seconds, 11 queries executed ]

Informacje debugowania

Time (s) Query
0.00013 SET CHARSET latin2
0.00004 SET NAMES latin2
0.00131 SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='18.222.166.127' WHERE u.id=1
0.00102 REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '18.222.166.127', 1732746466)
0.00045 SELECT * FROM punbb_online WHERE logged<1732746166
0.00053 SELECT topic_id FROM punbb_posts WHERE id=299834
0.00045 SELECT id FROM punbb_posts WHERE topic_id=28459 ORDER BY posted
0.00059 SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=28459 AND t.moved_to IS NULL
0.00005 SELECT search_for, replace_with FROM punbb_censoring
0.00077 SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=28459 ORDER BY p.id LIMIT 0,25
0.00097 UPDATE punbb_topics SET num_views=num_views+1 WHERE id=28459
Total query time: 0.00631 s