А так же о всякой фигне
Мы приступаем к самому интересному, настраиваем anti ddos шлюз. Нашим главным инструментом будет nginx. Но в этом случае нельзя его просто взять и поставить из репозитория, придётся его собрать самим.
Коннектимся к нашему шлюзу, и в домашней папке создаём директорию "nginx_install". Скачиваем следующие проекты:
Для nginx есть особенность, не каждая версия совместима с lua-nginx-module, посмотрите раздел https://github.com/openresty/lua-nginx-module#nginx-compatibility "Совместимость". На момент написания статьи, последняя протестированная версия - 1.11.2. У меня получилось собрать с самой свежей - 1.12.0.
Распаковываем все архивы:
apt install libssl-dev lua5.1 gcc make libpcre3 libpcre3-dev luarocks
make && make install
Переходим в папку с 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.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. Он решит большинство Ваших проблем. Но он достаточно ограничен в функционале, а ещё я люблю писать велосипеды. Поэтому мы сделаем свой модуль, с блекджеком и шлюхами.