Я тут позакручивал гаек на фаерволе. Поставил, что с одного IP должно быть не более 30 одновременных коннектов ко всем доменам сайта. По идее браузер по стандарту имеет право открывать до 4 коннектов на домен. Если сильно подкрутить настройки - до 10. Ну плюс доменов два. Должно хватать. Оказалось - нет. Пока дрых - полочилось около 10 ip-шников. С настоящими юзерами. То ли провайдер у них жадный, то ли в гости толпой навалились. Увеличил предел до 100 коннектов, убрал блокировку, оставил только лог.
Если кто нарвется на результаты моих экспериментов, пугаться не надо 😃 . Работает примерно так: при срабатывании каких-то условий, IP-адрес полностью блокируется на 5 минут. Потом отлипает обратно, если активность пропала.
UPD.
Похоже, дело было в Opera Mini, которая пускает всех (регионами) через 1 прокси. Но ей давно пора провалиться в ад 😃 . Занес пока несколько оперных проксей в белый список. Еще посмотрю несколько дней, какие адреса засветятся, потом буду думать.
Надо бы еще организовать парсер логов ошибок nginx, но че-та-как-та готового не нашел 😃 . Самое правдоподобное тут, но мне не нравится, что все время подрезается лог ошибок. Если кто знает готовые удачные варианты - дайте знать.
Для оперы мини, кстати, можно тоже скрипт написать - ставить IP не сразу в бан, а в отдельную очередь. Потом по крону резолвить адреса, и перемещать либо в белый список, либо херить окончательно. Может кто будет для себя такое делать? Я в баше не очень, а на php как-то монструозно слишком.
Ну учитывая конец пространства IPV4, наты будут актуальнее и актуальнее, ибо V6 идет со скрипом.
У оперы вообще то есть режим “турбо”, когда трафик идеет через проксю сжатый, так что это не только Мини.
Похоже, дело было в Opera Mini, которая пускает всех (регионами) через 1 прокси. Но ей давно пора провалиться в ад …
хе хе +100500 😈
А еще у нас например все повально сидят на 3G модемах, там тоже все за натом.
Нат сам по себе не проблема. Нормальные провайдеры делают на выходе пул адресов, и динамически их тусуют. Проблема когда толпу народа через 1 адрес пуляют.
Кстати у меня есть парсер логов nginx самописный на питоне, подучишь питон )
Это не проблема. Можете кинуть на gist, pastebin или еще куда?
Я фильтровал “на коленке” вот такими командами: pastebin.com/NSjpiwMz . Но мне не нравится, что эта метода каждый раз зануляет лог. Если поставлю в крон - не смогу другие ошибки продакшена смотреть.
iptables тут: www.linux.org.ru/forum/admin/5884407 . Но оно бы проканало на последней атаке только частично. Там создавали не очень много http-коннектов (keep-alive), но но через них слали много запросов и забивали php. Поэтому пришлось именно логи парсить - лимиты на зоны там прописаны.
Я напишу тебе в личку.
Лучше на мыло, vitaly@самизнаетегде
ок
{"assets_hash":"a8b26fa7f6e768b07a72c8c9aadb9422","page_data":{"users":{"39c21abc3df9550077797d18":{"_id":"39c21abc3df9550077797d18","hid":349,"name":"Vitaly","nick":"Vitaly","avatar_id":null,"css":""},"49ee64553df955007776ef40":{"_id":"49ee64553df955007776ef40","hid":47203,"name":"AlcoNaft43","nick":"AlcoNaft43","avatar_id":null,"css":""},"4b9603423df95500777637a7":{"_id":"4b9603423df95500777637a7","hid":62450,"name":"evgenyl","nick":"evgenyl","avatar_id":null,"css":""}},"settings":{"blogs_can_create":false,"blogs_mod_can_delete":false,"blogs_mod_can_hard_delete":false,"blogs_mod_can_add_infractions":false,"can_report_abuse":false,"can_vote":false,"can_see_ip":false,"blogs_edit_comments_max_time":30,"blogs_show_ignored":false,"blogs_reply_old_comment_threshold":30,"votes_add_max_time":168},"entry":{"_id":"4d4db397997073007710188c","hid":11105,"title":"NAT-ы все еще живы","html":"<p>Я тут позакручивал гаек на фаерволе. Поставил, что с одного IP должно быть не более 30 одновременных коннектов ко всем доменам сайта. По идее браузер по стандарту имеет право открывать до 4 коннектов на домен. Если сильно подкрутить настройки - до 10. Ну плюс доменов два. Должно хватать. Оказалось - нет. Пока дрых - полочилось около 10 ip-шников. С настоящими юзерами. То ли провайдер у них жадный, то ли в гости толпой навалились. Увеличил предел до 100 коннектов, убрал блокировку, оставил только лог.</p>\n<p>Если кто нарвется на результаты моих экспериментов, пугаться не надо <span class=\"emoji emoji-smiley\" data-nd-emoji-src=\":smiley:\">😃</span> . Работает примерно так: при срабатывании каких-то условий, IP-адрес полностью блокируется на 5 минут. Потом отлипает обратно, если активность пропала.</p>\n<p>UPD.</p>\n<p>Похоже, дело было в Opera Mini, которая пускает всех (регионами) через 1 прокси. Но ей давно пора провалиться в ад <span class=\"emoji emoji-smiley\" data-nd-emoji-src=\":smiley:\">😃</span> . Занес пока несколько оперных проксей в белый список. Еще посмотрю несколько дней, какие адреса засветятся, потом буду думать.</p>\n<!--cut-->\n<p>Надо бы еще организовать парсер логов ошибок nginx, но че-та-как-та готового не нашел <span class=\"emoji emoji-smiley\" data-nd-emoji-src=\":smiley:\">😃</span> . Самое правдоподобное <a href=\"http://habrahabr.ru/blogs/infosecurity/84172/\" class=\"link link-ext\" data-nd-link-orig=\"http://habrahabr.ru/blogs/infosecurity/84172/\" target=\"_blank\" rel=\"nofollow noopener\">тут</a>, но мне не нравится, что все время подрезается лог ошибок. Если кто знает готовые удачные варианты - дайте знать.</p>\n<p>Для оперы мини, кстати, можно тоже скрипт написать - ставить IP не сразу в бан, а в отдельную очередь. Потом по крону резолвить адреса, и перемещать либо в белый список, либо херить окончательно. Может кто будет для себя такое делать? Я в баше не очень, а на php как-то монструозно слишком.</p>\n","user":"39c21abc3df9550077797d18","ts":"2011-02-05T20:31:19.000Z","st":1,"cache":{"comment_count":8,"last_comment":"4d50f5b69970730077169189","last_comment_hid":8,"last_ts":"2011-02-08T07:50:14.000Z","last_user":"4b9603423df95500777637a7"},"views":805,"bookmarks":0,"votes":0},"subscription":null},"locale":"en-US","user_id":"000000000000000000000000","user_hid":0,"user_name":"","user_nick":"","user_avatar":null,"is_member":false,"settings":{"can_access_acp":false,"can_use_dialogs":false,"hide_heavy_content":false},"unread_dialogs":false,"footer":{"rules":{"to":"common.rules"},"contacts":{"to":"rco-nodeca.contacts"}},"navbar":{"tracker":{"to":"users.tracker","autoselect":false,"priority":10},"forum":{"to":"forum.index"},"blogs":{"to":"blogs.index"},"clubs":{"to":"clubs.index"},"market":{"to":"market.index.buy"}},"recaptcha":{"public_key":"6LcyTs0dAAAAADW_1wxPfl0IHuXxBG7vMSSX26Z4"},"layout":"common.layout"}