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!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
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
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:
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:
iptables -m hashlimit --help iptables -m set --help iptables -j SET --help
Użycie ipseta?
Taka mała pułapka na skanery portów.
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
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.
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)
Offline
Time (s) | Query |
---|---|
0.00007 | SET CHARSET latin2 |
0.00003 | SET NAMES latin2 |
0.00069 | 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.226.226.158' WHERE u.id=1 |
0.00060 | REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '18.226.226.158', 1732747101) |
0.00049 | SELECT * FROM punbb_online WHERE logged<1732746801 |
0.00055 | 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.00009 | SELECT search_for, replace_with FROM punbb_censoring |
0.00089 | 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.00077 | UPDATE punbb_topics SET num_views=num_views+1 WHERE id=28459 |
Total query time: 0.00418 s |