Web Protector — это проект для защиты сайта с помощью DDoS-защиты и WAF, который можно быстро развернуть через Docker. Приложение использует FastAPI, Redis для ограничения запросов, и Nginx как обратный прокси-сервер с поддержкой SSL.
Проект предоставляет базовую защиту от распространённых веб-угроз, включая DDoS-атаки и уязвимости веб-приложений (SQL-инъекции, XSS и другие). Включает следующие компоненты:
- DDoS-защита: ограничивает количество запросов от одного IP за определённый период.
- WAF (Web Application Firewall): фильтрует вредоносные запросы на основе регулярных выражений.
- CORS и HTTPS: предоставляет защиту от CSRF и обеспечивает безопасное подключение.
project-root/
├── config/
│ └── config.yaml # Файл конфигурации с настройками пользователя
├── app/
│ ├── main.py # Основной файл приложения FastAPI
│ ├── middlewares.py # Модуль для WAF и защиты от DDoS
│ ├── security.py # Вспомогательные функции для безопасности
│ └── logger.py # Логирование заблокированных запросов
├── nginx/
│ └── nginx.conf # Конфигурация Nginx для SSL и проксирования
├── Dockerfile # Dockerfile для сборки FastAPI приложения
├── docker-compose.yml # Docker Compose для настройки контейнеров
├── requirements.txt # Зависимости Python для FastAPI приложения
└── README.md # Документация по установке и настройке
- Docker и Docker Compose
Сначала клонируйте репозиторий на свой сервер:
git clone <URL>
cd <project-name>Настройте параметры защиты в файле config/config.yaml:
rate_limit: Максимальное количество запросов от одного IP за указанный период (в секундах).time_window: Период времени (в секундах) для ограничения запросов.allowed_origins: Разрешённые домены для CORS.log_file: Путь к файлу, где будут храниться логи заблокированных запросов.
Пример:
rate_limit: 100
time_window: 60
allowed_origins:
- "https://example.com"
log_file: "/var/log/app/blocked_requests.log"- Создайте папку
sslвнутриnginxи добавьте свои файлы сертификатовexample.com.crtиexample.com.keyдля домена. - Обновите пути к сертификатам в файле
nginx/nginx.conf:
ssl_certificate /etc/nginx/ssl/example.com.crt;
ssl_certificate_key /etc/nginx/ssl/example.com.key;Используйте Docker Compose для сборки и запуска контейнеров:
docker-compose up -dПосле запуска приложения откройте браузер и перейдите по адресу https://example.com (замените example.com на ваш домен). Ваше приложение теперь защищено.
- DDoS-защита: Ограничивает количество запросов от одного IP за указанный период. Если лимит превышен, IP временно блокируется.
- WAF: Фильтрует вредоносные запросы, включая SQL-инъекции, XSS и попытки командной инъекции.
- CORS: Ограничивает доступ к API только с разрешённых доменов, чтобы защитить приложение от CSRF-атак.
Все заблокированные запросы будут логироваться в файл, указанный в config/config.yaml. По умолчанию файл логов располагается по пути /var/log/app/blocked_requests.log.
Для остановки проекта выполните:
docker-compose down- Параметры безопасности можно изменить в
config/config.yaml. - Конфигурацию прокси и SSL можно настроить в файле
nginx/nginx.conf.
rate_limit: 100 # Лимит запросов от одного IP за указанный период
time_window: 60 # Период в секундах для ограничения запросов
allowed_origins: # Разрешенные домены для CORS
- "https://example.com"
log_file: "/var/log/app/blocked_requests.log" # Путь к файлу логирования заблокированных запросовДля тестирования защиты можно воспользоваться инструментами типа curl или утилитами для нагрузочного тестирования, чтобы проверить, как приложение реагирует на запросы с превышением лимита или вредоносные данные.
# Пример вредоносного запроса
curl -X GET "https://example.com/?query=SELECT+*+FROM+users" -k
# Пример превышения лимита запросов
for i in {1..110}; do curl -X GET "https://example.com" -k; doneС помощью этих шагов и примеров пользователь может быстро развернуть защитное приложение для своего веб-сайта или API с минимальными настройками.