Posted 8 июня, 20222 yr comment_182180 Сокеты - это стильно, модно, молодежно, быстрее, чем tcp, не грузит сетевую подсистему и не нуждается в защите от доступа извне. Но есть проблема, IPS про сокеты не знает или, по каким-то причинам, не хочет их использовать, в настройках есть только TCP режим (IP и порт). Попробуем научить IPS работать с redis-сервером через сокеты. Первое - надо настроить redis-сервер, тут всё просто, редактируем /etc/redis/redis.conf и пишем следующее: # ставим 0 вместо стандартного 6379, после этого redis перестает слушать сетевой интерфейс. port 0 # раскомментариваем строки и редактируем (папка /var/run/redis/ уже существует, там живет pid файл, поэтому просто добавим туда файл сокета) unixsocket /var/run/redis/redis.sock #права на файл - должен быть доступен для чтения www-data или под чем вы там запускаете php.. Можно добавить этого пользователя в группу redis и поставить права 750, а я не заморачивался и поставил 777, всё равно на сервере только я. unixsocketperm 777 Сохраняем конфиг файл. Если сейчас перезапустить redis-server, то ничего не получится, IPS не может подключится к redis и ругается на странице настроек "Хранение данных". Учим IPS... Интерфейс к redis живет в system/Redis/Redis.php, там нам надо найти строчку if( @static::$connections[ $identifier ]->connect( $useConfig['server'], $useConfig['port'], 2 ) === FALSE ) и заменить ее на if( @static::$connections[ $identifier ]->connect( '/var/run/redis/redis.sock' ) === FALSE ) Сохраняем и рестартуем redis-server, всё должно заработать как раньше. На странице настроек redis в админке останется IP и порт, удалять их не надо, редактировать тоже. Сообщение о неработающем кеше появляться не должно. Сильные духом могут написать плагин, а я пойду дальше сражаться с ddos Будут вопросы - пишите.
9 июня, 20222 yr Author comment_182198 Работает уже сутки, из плюсов - в соединениях больше не висят отмирающие коннекты к 127.0.0.1, при атаках перестал отваливаться redis-server. Из минусов - для запуска redis-cli надо указывать путь к сокету.. (ну так себе минус ) root@comp:~# redis-cli -s /var/run/redis/redis.sock
9 июня, 20222 yr comment_182211 6 часов назад, Desti сказал: при атаках Одно время я замечал сильную нагрузку на процессор. Виной всему оказались атаки на get запросы. Их еще инъекциями называют. Это когда бот в запросах подсовывает данные не того типа который ожидает скрипт. Например если ?appid=int то он делает ?appid=string или подсовывает числа не из диапазона итп. А разрабы IPS почти нигде не реализовали проверку входных данных а тупо завернули всё в try catch, который во всех языках программирования является ресурсоемким решением. И за этого процессор и закипел. Некоторые багованные запросы могут сгенерировать неимоверно большое количество eception`ов, бот по ним и долбил. В логах системы форума погляди внимательно на адреса вызвавшие исключения. И еще один видов атак это досрочный разрыв коннекта + инъекция. Там уже вебсервер что то типа 499 ошибки выдает. Причем во всех случаях цель ботов была не sql инъекция, а именно замедление работы сервера. sql запросы туда не пихали.
9 июня, 20222 yr Author comment_182213 1 час назад, aplayer сказал: В логах системы форума погляди внимательно Меня атакуют тупо на "GET / HTTP/1.1", но с нескольких сотен адресов. При этом (по непонятным причинам) засыпает redis и перестает отдавать шаблоны, форум останавливается. Никаких кривых запросов нет ни в логах nginx, ни в ошибках форума (ну кроме redis not responding). Так что ничего необычного, атака на исчерпание ресурсов.
9 июня, 20222 yr comment_182219 Desti вот еще чем можно воспользоваться. Блокировка стран в nginx https://github.com/makhomed/nginx-geo этот способ хорош тем что блочит страну на вебсервере. Тоесть до загрузки ядра форума. А так же не требует пересборки nginx с модулем geoip2 Если не получается зарегистрироваться из России на maxmind, можно глянуть как тут выкручиваются из ситуации. https://qna.habr.com/q/1142870 Большинство атак сразу отвалится если заблочить доступ из Китая CN а так же Тайваня Индии Бразилии и прочих стран Азии и Южной америки.
9 июня, 20222 yr comment_182222 6 минут назад, aplayer сказал: Большинство атак сразу отвалится если заблочить доступ из Китая CN а так же Тайваня Индии Бразилии и прочих стран Азии и Южной америки. Думаю мафии можно блочить весь бугор)
9 июня, 20222 yr Author comment_182224 aplayer я делаю то же самое, но не на уровне nginx, а на уровне ядра - через iptables/ipset, блокирую целые сети, с которых идут атаки. Для полноценного GeoIP надо держать огромные таблицы, это тоже не проблема для ipset, но администрирование начнет напрягать. Где найти списки - вопрос вторичный, сейчас много источников, полнота их не очень важна, основной трафик идет с крупных провайдеров. За ссылки спасибо, посмотрю. В общем не очень важно, где давить атаку, проблема в том, что канал эти запросы все равно забивают, а это может не понравится провайдеру и начнутся проблемы.
10 июня, 20222 yr Author comment_182237 Полезный ресурс для настройки GeoIP блокировок - www.ipdeny.com/ipblocks/data/countries/[код страны].zone Код страны двухбуквенный, cn, kr, in и прочее, есть в инете как "двуxбуквенные коды стран ISO" Полученный список можно обработать скриптом и запихать в именованный сет ipset и потом просто добавлять или удалять правило iptables Все зоны можно получить по ссылке - www.ipdeny.com/ipblocks/data/countries/all-zones.tar.gz
10 июня, 20222 yr comment_182239 Мне кажется уже не стоит с головой погружаться в ipset`ы. Дело в том что создатели iptables прекратили поддержку этой программы и создали новую nftables. В ближайшем обозримом будущем iptables с обновлением операционных систем будет вытесняться. Если есть желание заморочиться блокировкой на системном файерволе, то лучше смотреть в сторону nftables и писать скрипты для нее. Как я понял у nftables можно делать большие таблицы и у них будет высокая производительность как у ipset.
10 июня, 20222 yr Author comment_182240 Уже есть конвертеры правил ipset в сеты nft, так что это не очень большая проблема. Да и iptables под Debian 11 работает так же хорошо, как и раньше, так что паника преждевременна
10 июня, 20222 yr comment_182250 Почитал, поудивлялся, как люди из сервера делают танк. Пошел дальше настраивать фаервол по странам и ip на Cloudflare. Благо он там пока бесплатный. Да и защита от примитивного DDOS включается одной кнопкой. Edited 10 июня, 20222 yr by Zero108
10 июня, 20222 yr comment_182256 3 часа назад, Zero108 сказал: Да и защита от примитивного DDOS включается одной кнопкой. Насколько я знаю DDOS защиты начинают работать когда трафик на сервер начинает исчисляться гигабайтами множественных запросов за короткие промежутки времени. Это явление довольно редкое. Большинство же китайских ботов бьют по больному месту движка не создавая много запросов. Где-то я уже выше говорил. У движка хватает уязвимостей вызывающих большую нагрузку на серверное железо. Это не является DDOS атакой. И справиться с этим можно только либо своими руками. Либо у разрабов движка руки дойдут.
10 июня, 20222 yr Author comment_182257 Ой, да не нужно никаких уязвимостей, просто долбить в главную страницу, 200к ответа на каждый запрос, пусть даже из кеша, всё равно сервер начнет тупить.
11 июня, 20222 yr comment_182258 Нe Cloudflare есть свой кеш. По поводу ботов также есть бесплатная опция.
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.