Jump to content

Переключаем Redis-server в режим работы через socket

Featured Replies

Posted
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 :)

Будут вопросы - пишите.

 

  • Author
comment_182198

Работает уже сутки, из плюсов - в соединениях больше не висят отмирающие коннекты к 127.0.0.1, при атаках перестал отваливаться redis-server.
Из минусов - для запуска redis-cli надо указывать путь к сокету.. (ну так себе минус :) )

root@comp:~# redis-cli -s /var/run/redis/redis.sock

comment_182211
6 часов назад, Desti сказал:

при атаках

Одно время я замечал сильную нагрузку на процессор. Виной всему оказались атаки на get запросы. Их еще инъекциями называют.

Это когда бот в запросах подсовывает данные не того типа который ожидает скрипт.

Например если ?appid=int то он делает ?appid=string или подсовывает числа не из диапазона итп.

А разрабы  IPS  почти нигде не реализовали проверку входных данных а тупо завернули всё в try catch, который во всех языках программирования является ресурсоемким решением. И за этого процессор и закипел. Некоторые багованные запросы могут сгенерировать неимоверно большое количество eception`ов, бот по ним и долбил.

В логах системы форума погляди внимательно на адреса вызвавшие исключения.

И еще один видов атак это досрочный разрыв коннекта + инъекция. Там уже вебсервер что то типа 499 ошибки выдает.

Причем во всех случаях цель ботов была не sql инъекция, а именно замедление работы сервера. sql запросы туда не пихали.

  • Author
comment_182213
1 час назад, aplayer сказал:

В логах системы форума погляди внимательно

Меня атакуют тупо на "GET / HTTP/1.1", но с нескольких сотен адресов. При этом (по непонятным причинам) засыпает redis и перестает отдавать шаблоны, форум останавливается. Никаких кривых запросов нет ни в логах nginx, ни в ошибках форума (ну кроме redis not responding). Так что ничего необычного, атака на исчерпание ресурсов. 

 

comment_182219

Desti 

вот еще чем можно воспользоваться. Блокировка стран в nginx

 https://github.com/makhomed/nginx-geo

этот способ хорош тем что блочит страну на вебсервере. Тоесть до загрузки ядра форума. А так же не требует пересборки nginx с модулем geoip2

Если не получается зарегистрироваться из России на maxmind, можно глянуть как тут выкручиваются из ситуации. https://qna.habr.com/q/1142870

Большинство атак сразу отвалится если заблочить доступ из Китая CN а так же Тайваня Индии Бразилии и прочих стран Азии и Южной америки.

comment_182222
6 минут назад, aplayer сказал:

Большинство атак сразу отвалится если заблочить доступ из Китая CN а так же Тайваня Индии Бразилии и прочих стран Азии и Южной америки.

Думаю мафии можно блочить весь бугор)

  • Author
comment_182224

aplayer я делаю то же самое, но не на уровне nginx, а на уровне ядра - через iptables/ipset, блокирую целые сети, с которых идут атаки. Для полноценного GeoIP надо держать огромные таблицы, это тоже не проблема для ipset, но администрирование начнет напрягать. Где найти списки - вопрос вторичный, сейчас много источников, полнота их не очень важна, основной трафик идет с крупных провайдеров. За ссылки спасибо, посмотрю. 

В общем не очень важно, где давить атаку, проблема в том, что канал эти запросы все равно забивают, а это может не понравится провайдеру и начнутся проблемы. 

  • 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

 

comment_182239

Мне кажется уже не стоит с головой погружаться в ipset`ы. Дело в том что создатели iptables прекратили поддержку этой программы и создали новую nftables. В ближайшем обозримом будущем iptables с обновлением операционных систем будет вытесняться.

Если есть желание заморочиться блокировкой на системном файерволе, то лучше смотреть в сторону nftables и писать скрипты для нее. Как я понял у nftables можно делать большие таблицы и у них будет высокая производительность как у ipset.

  • Author
comment_182240

Уже есть конвертеры правил ipset в сеты nft, так что это не очень большая проблема. Да и iptables под Debian 11 работает так же хорошо, как и раньше, так что паника преждевременна :)

comment_182250

Почитал, поудивлялся, как люди из сервера делают танк. Пошел дальше настраивать фаервол по странам и ip на Cloudflare. Благо он там пока бесплатный. Да и защита от примитивного DDOS включается одной кнопкой.

nBkSUhL2gFMmncazPqzZvc62gYT28pj20yPFnuWR9mOBdDebBizCnTY8qdJf6ReJ58vU9meMMok3Ee2nhSR6ISeO9G1N_wjJ=EICU0k2waVBp7LvrbI1IKg.jpg

Edited by Zero108

comment_182256
3 часа назад, Zero108 сказал:

Да и защита от примитивного DDOS включается одной кнопкой.

Насколько я знаю DDOS защиты начинают работать когда трафик на сервер начинает исчисляться гигабайтами множественных запросов за короткие промежутки времени. Это явление довольно редкое.

Большинство же китайских ботов бьют по больному месту движка не создавая много запросов. Где-то я уже выше говорил. У движка хватает уязвимостей вызывающих большую нагрузку на серверное железо. Это не является DDOS атакой. И справиться с этим можно только либо своими руками. Либо у разрабов движка руки дойдут.

  • Author
comment_182257

Ой, да не нужно никаких уязвимостей, просто долбить в главную страницу, 200к ответа на каждый запрос, пусть даже из кеша, всё равно сервер начнет тупить. 

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.


Guest
Ответить в этой теме...

Последние посетители 0

  • No registered users viewing this page.