Защита от DDoS Своими силами. Часть 4, настраиваем шлюз.

16.04.2017 04:25

Мы приступаем к самому интересному, настраиваем anti ddos шлюз. Нашим главным инструментом будет nginx. Но в этом случае нельзя его просто взять и поставить из репозитория, придётся его собрать самим.

Подготовка к сборке nginx

Коннектимся к нашему шлюзу, и в домашней папке создаём директорию "nginx_install". Скачиваем следующие проекты:

  1. http://luajit.org/download.html
  2. https://github.com/openresty/lua-nginx-module
  3. https://nginx.org/ru/download.html
  4. https://github.com/yaoweibin/nginx_limit_speed_module
  5. https://github.com/simpl/ngx_devel_kit

Для nginx есть особенность, не каждая версия совместима с lua-nginx-module, посмотрите раздел https://github.com/openresty/lua-nginx-module#nginx-compatibility "Совместимость". На момент написания статьи, последняя протестированная версия - 1.11.2. У меня получилось собрать с самой свежей - 1.12.0.

Распаковываем все архивы:

Компиляция nginx

Ставим дополнительные пакеты

apt install libssl-dev lua5.1 gcc make libpcre3 libpcre3-dev luarocks

Компилируем LuaJit

make && make install

Компилируем nginx

Переходим в папку с nginx и экспортируем пути до LuaJit:

export LUAJIT_LIB=/usr/local/lib
export LUAJIT_INC=/usr/local/include/luajit-2.0

Запускаем конфигуратор:

 ./configure --prefix=/opt/nginx 
    --with-http_ssl_module 
    --with-http_addition_module 
    --with-file-aio 
    --with-ld-opt="-Wl,-rpath,/usr/local/lib" 
    --add-module=/root/nginx_install/ngx_devel_kit-master 
    --add-module=/root/nginx_install/nginx_limit_speed_module-master 
    --add-module=/root/nginx_install/lua-nginx-module-master

Директивой --prefix=/opt/nginx мы задали папку куда nginx будет установлен. Там же будут и все конфиги.

Инсталлируем:

make -j2
make install

И пробуем запустить:

cd /opt/nginx/sbin/
./nginx

Если всё ок, то по http адресу нашего шлюза должна открыться страница приветствия nginx:

Переписываем конфиг nginx

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

Итак, главный конфиг nginx.conf

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;

events {
    worker_connections  1024;
}

http {
  gzip on;
  gzip_disable "msie6";
  sendfile on;
  tcp_nopush on;
  tcp_nodelay on;
  keepalive_timeout 65;
  types_hash_max_size 2048;
 
  include /opt/nginx/conf/mime.types;
  default_type application/octet-stream;
  
  access_log /opt/nginx/logs/access.log;
  error_log /opt/nginx/logs/error.log;
  
  include /opt/nginx/conf/clients/*;
}

Создаём папку clients внутри /opt/nginx/conf, сюда мы будем складывать клиентские конфиги. И сразу добавляем первый тестовый конфиг: default.conf

server {
  server_name default:80;
  
  location / {
    proxy_set_header HOST $host;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://ЛОКАЛЬНЫЙ_IP_ВАШЕГО_ВЕБ-СЕРВЕРА:80;
  }
}

Перезапускаем nginx:

cd /opt/nginx/sbin/
./nginx -s reload

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

На этом этап предварительной настройки шлюза закончен. Переходим к созданию lua модуля для nginx.



Защита от DDoS Своими силами. Часть 3, настраиваем веб-сервер

На этом этапе нам нужно установить стандартный набор приложений: php, mysql, nginx. Но при этом нужно заблокировать для всех коннект к серверу по http/https портам, а разрешить его только с нашего шлюза.

Защита от DDoS Своими силами. Часть 5, Lua модуль для nginx.

Вообще-то уже есть готовый модуль testcookie-nginx. Он решит большинство Ваших проблем. Но он достаточно ограничен в функционале, а ещё я люблю писать велосипеды. Поэтому мы сделаем свой модуль, с блекджеком и шлюхами.


(0) Комментариев