• Уменьшение отступа

    Обратная связь

    (info@ru-sfera.pw)

Информация Как защитить сервер при помощи кук


X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 068
Репутация
8 176
Nginx-logo.png


Способ не нов, но я совсем недавно про это узнал !

Да есть ботнеты, которые могут моделировать поведение посетителя, но не у всех дудосеров такие ботнеты, также немногие стрессеры как понимаю могут обходить предложенной в этой теме способ ! :)

Итак смысл:

Мы проверяем всех посетителей на возможность принимать куки, если посетитель не может принять наш кук, то скорей-всего это бот и блокируем доступ к сайту ! :)

Как сделать это средствами nginx !

На самом деле ничего такого сложного нет, расписываю всё по шагам (Будем считать что вы поставили чистый nginx с офф. сайта):

1)Установка модуля . в nginx:

К сожалению, в офф. сборке нет этого модуля, поэтому сделаем всё как реальные пацаны, а именно соберём модуль из исходников и динамически подключим его !

Как это сделать:

Ставим Nginx из репозитория с офсайта.

Проверяем его версию:
Код:
nginx -V 2>&1|grep "nginx version"
nginx version: nginx/1.9.12
Потом там же берем опции компиляции:
Код:
nginx -V
Стягиваем модуль:
Код:
cd /usr/src
git clone https://github.com/kyprizel/testcookie-nginx-module.git
Ставим зависимости:
Код:
apt-get install -y libxml2-dev libxslt-dev libgd2-xpm-dev libgeoip-dev

Собираем модуль (Версия нужна nginx, та-которая установлена на нашем сервере, т.е. не-та которая в примере):
cd /usr/src
wget ' '
tar -xzvf nginx-1.9.12.tar.gz
cd nginx-1.9.12/

# configure параметры берем из выдачи nginx -V выше, не забудьте добавить
--add-dynamic-module=/usr/src/testcookie-nginx-module
(ХОТЯ МОЖНО И ЭТИ,ТО-ЧТО НИЖЕ, ЕСЛИ БУДЕТ ОШИБКА)

./configure --add-dynamic-module=/usr/src/testcookie-nginx-module --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/etc/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-http_auth_request_module --with-http_xslt_module=dynamic --with-http_image_filter_module=dynamic --with-http_geoip_module=dynamic --with-threads --with-stream --with-stream_ssl_module --with-http_slice_module --with-mail --with-mail_ssl_module --with-file-aio --with-http_v2_module --with-cc-opt='-g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-z,relro -Wl,--as-needed' --with-ipv6
Собираем:
Код:
make
Потом берем бинарик:
Код:
mkdir /etc/nginx/modules
cp ./objs/ngx_http_testcookie_access_module.so /etc/nginx/modules
И добавляем в nginx.conf в самом верху:
Код:
load_module "modules/ngx_http_testcookie_access_module.so";

Перезагружаем nginx и всё далее идём настраивать!

2)Настройка нашего модуля:

Основная настройка сводится к правке nginx.conf, где особое внимание уделяется параметрам testcookie_secret и testcookie_arg. Генерируем значения самостоятельно. Входные строки можно брать любые, главное получить на выходе славный набор символов.
Код:
# echo label |md5sum
41cc0e4945e162021cfdd993f4c1104d  -
# echo defcon |md5sum
15dbedaeabc7f0c09f0fe834e4a3b46a  -

Полученные значения подставляем в качестве аргументов для testcookie_secret и testcookie_arg.
значение для testcookie_name также можно установить произвольное.
Код:
# vi /etc/nginx/nginx.conf
http {
        ...
        testcookie off;
        testcookie_name XSAE;
        testcookie_secret 15dbedaeabc7f0c09f0fe834e4a3b46a;
        testcookie_session $remote_addr;
        testcookie_arg label_41cc0e4945e162021cfdd993f4c1104d;
        testcookie_max_attempts 3;
        testcookie_get_only on;
        testcookie_internal off;
        # используем белые списки
        include /etc/nginx/testcookie_whitelist.conf;
        ...
}


Создаем движок rewrite'ов в /etc/nginx/testcookie.conf
Cуть в следующем, необходимо делать реврайт конечного урла, но не делать это так чтобы светился параметр редиректа (?label_*)
Код:
# vi /etc/nginx/testcookie.conf
set $do_rewrite 0;
# проверяем наличие выданной куки
if ($http_cookie ~ "XSAE=[0-9a-f]+") {
        set $do_rewrite 1;
}
# если в аргументах присуствует метка выданная модулем, выкусываем её
if ($args ~ "^((.*)(label_41cc0e4945e162021cfdd993f4c1104d=1&|&label_41cc0e4945e162021cfdd993f4c1104d=1(.*))|label_41cc0e4945e162021cfdd993f4c1104d=1)$") {
        set $target "$2$4";
        set $do_rewrite "1${do_rewrite}";
}
# делаем правильный реврайт, подставляем только урл и другие возможные параметры (без метки)
if ($do_rewrite = 11) {
        set $args $target;
        rewrite ^.*$ http://$host$uri break;
}


Белый список (для краткости сократил до двух адресов)
Код:
# vi /etc/nginx/testcookie_whitelist.conf
testcookie_whitelist {
# Yandex
77.88.0.0/18;
87.250.224.0/19;
}

Изменения в /etc/nginx/proxy_headers.conf
Код:
# vi /etc/nginx/proxy_headers.conf
testcookie         on;
proxy_redirect     off;
proxy_set_header   Host             $host;
proxy_set_header   X-Real-IP        $remote_addr;
proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;

Затем в каждый из конфигурационных файлов виртуальных хостов прописываем в начало секции server. Таким образом в каждом виртуальном хосте мы подгружаем rewrite-движок, и белые списки. Сам механизм testcookie будет работать в случаях когда запросы проксируются на бэкенды и подгружается proxy_headers.conf
Код:
server {
        ...
        include /etc/nginx/testcookie.conf;
        include /etc/nginx/testcookie_whitelist.conf;
        ...
# пример локейшена
location / {
        include /etc/nginx/proxy_headers.conf;
        proxy_pass http://upstream;
}


Перезапускаем.
Код:
# nginx -t -c /etc/nginx/nginx.conf
# /etc/init.d/nginx restart

Также прилагаю во вложении конфиги + белый список поисковых систем (файл testcookie_whitelist.conf), рекомендую туда добавить также айпи своего сервера и монеторинг ! :)
 

Вложения

  • TstCookie.zip
    2.1 КБ · Просмотры: 32
Последнее редактирование:

X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 068
Репутация
8 176
Забыл сказать, вот собрал этот модуль для самой последней nginx 1.11.1, у кого возникнет сложности со сборкой, попробуйте просто закинуть в папку /usr/lib/nginx/modules и подключить в конфиге nginx.conf:
Код:
load_module "modules/ngx_http_testcookie_access_module.so";
Может и попрёт, если-же нет, то придётся собирать ! :(
 

Вложения

  • ngx_http_testcookie_access_module.zip
    82 КБ · Просмотры: 28

X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 068
Репутация
8 176
Обновленный белый список, мой...:)

Также тут можно найти списки ботов с их айпишниками:Информация - Диапазоны IP-адресов поисковых ботов и сервисов
 

Вложения

  • testcookie_whitelist.zip
    27 КБ · Просмотры: 26

X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 068
Репутация
8 176
И ещё всем на заметку минуса такой защиты, также в той теме и про CloudFlare сказано:
 

X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 068
Репутация
8 176
После подключения этого модуля, яндекс выкинул более половины страниц и обнулил ТИЦ, а не прошло и двух недель !

Написал им в ТП, предварительно отключив модуль, вот-что ответили:

Здравствуйте, Олег!

Приведенные Вами страницы были исключены из поиска, поскольку ранее на запросы робота они отвечали HTTP-кодом 307. Для выяснения причин появления проблемы Вы можете обратиться к администратору Вашего сайта. Сейчас ошибка не возникает, страницы будут беспрепятственно индексироваться роботом и смогут вернуться в поиск с последующими обновлениями поисковой базы по мере их переобхода роботом.

Вы можете ускорить индексацию наиболее важных страниц Вашего сайта с помощью инструмента «Переобход страниц» в Яндекс.Вебмастере ( ). Добавленные через этот сервис страницы смогут появиться в поиске через 1-2 недели.
 

markusgod

Пользователь
Форумчанин
Регистрация
28.05.2015
Сообщения
2
Заранее прошу прощения за поднятие старой темы.
Все очень хорошо расписано! Но может вы знаете, как связать этот модуль с fail2ban? Просто я не увидел каких-либо признаков срабатывания данного модуля в логах (кроме редиректа на @fallback).
 

X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 068
Репутация
8 176
Просто я не увидел каких-либо признаков срабатывания данного модуля в логах (кроме редиректа на @fallback).
Что-бы проверить защиту, отключите принятие кук в своем браузере, если все работает, то не должны попасть на сайт...

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

Хотя повторюсь в этой защите это лишнее и вредно !
 
Верх Низ