Прежде чем применять настройки - внимательно читаем. От этого зависит работоспособность системы |
| Данная страница посвящена настройке безопасности системы, все приведённые здесь примеры являются примером настроек, полную безопасность обеспечиваете Вы и только Вы! |
На стороне nginx можно настроить гибкую систему безопасности:
user www-data; # Запускать рабочие процессы от пользователя www-data worker_processes auto; # Автоматически определять количество рабочих процессов #worker_rlimit_nofile 65535; # Максимальное количество открытых файлов (закомментировано) pid /run/nginx.pid; # Файл для хранения PID главного процесса error_log /var/log/nginx/error.log; # Путь к файлу ошибок include /etc/nginx/modules-enabled/*.conf; # Включение всех конфигов из директории modules-enabled |
events {
worker_connections 16384; # Максимальное количество соединений на один рабочий процесс
multi_accept on; # Разрешить принимать несколько соединений одновременно
accept_mutex on; # Включить мьютекс для распределения новых соединений
accept_mutex_delay 500ms; # Задержка перед повторной попыткой захвата мьютекса
use epoll; # Использовать эффективный метод epoll (для Linux)
epoll_events 2048; # Максимальное количество событий за один вызов epoll
} |
http {
## Блокировка плохих User-Agent
map $http_user_agent $bad_ua { # Создание переменной для плохих User-Agent
default 0; # По умолчанию 0 (не блокировать)
"~*wvs|nikto|sqlmap" 1; # Блокировать сканеры безопасности (wvs, nikto, sqlmap)
}
server {
if ($bad_ua) { # Если обнаружен плохой User-Agent
return 403; # Возвращать ошибку 403 (Forbidden)
}
}
## Основные настройки HTTP
fastcgi_cache_path /tmp/fcgi-cache/ levels=1:2 keys_zone=one:10m; # Настройки кеша FastCGI
output_buffers 32 512k; # Буферы вывода (32 буфера по 512KB)
sendfile on; # Использовать sendfile для передачи файлов
send_timeout 60s; # Таймаут передачи данных
tcp_nopush on; # Оптимизация передачи пакетов (включить TCP_CORK)
tcp_nodelay on; # Отключить алгоритм Nagle (меньше задержек)
types_hash_max_size 2048; # Максимальный размер хеш-таблицы MIME-типов
## Настройки безопасности cookies
proxy_cookie_flags one httponly; # Установить флаг HttpOnly для cookie "one"
proxy_cookie_flags ~ secure samesite=strict; # Установить Secure и SameSite=strict для всех cookies
include /etc/nginx/mime.types; # Включить файл с MIME-типами
default_type application/octet-stream; # MIME-тип по умолчанию
## Настройки реального IP (для работы за прокси/CDN)
real_ip_header X-Forwarded-For; # Использовать заголовок X-Forwarded-For для определения реального IP
real_ip_recursive on; # Рекурсивно проверять IP в X-Forwarded-For
# Список доверенных подсетей (в основном Cloudflare)
set_real_ip_from 103.21.244.0/22;
set_real_ip_from 103.22.200.0/22;
set_real_ip_from 103.31.4.0/22;
set_real_ip_from 104.16.0.0/13;
set_real_ip_from 104.24.0.0/14;
set_real_ip_from 108.162.192.0/18;
set_real_ip_from 131.0.72.0/22;
set_real_ip_from 141.101.64.0/18;
set_real_ip_from 162.158.0.0/15;
set_real_ip_from 172.64.0.0/13;
set_real_ip_from 173.245.48.0/20;
set_real_ip_from 188.114.96.0/20;
set_real_ip_from 190.93.240.0/20;
set_real_ip_from 197.234.240.0/22;
set_real_ip_from 198.41.128.0/17;
set_real_ip_from 2400:cb00::/32;
set_real_ip_from 2606:4700::/32;
set_real_ip_from 2803:f800::/32;
set_real_ip_from 2405:b500::/32;
set_real_ip_from 2405:8100::/32;
set_real_ip_from 2a06:98c0::/29;
set_real_ip_from 2c0f:f248::/32;
# ... (остальные IPv4 и IPv6 диапазоны Cloudflare)
## Настройки SSL
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Разрешенные версии TLS (SSLv3 отключен из-за уязвимости POODLE)
ssl_prefer_server_ciphers on; # Предпочитать серверные шифры клиентским
## Настройки логирования
access_log /var/log/nginx/access.log; # Файл доступа
## Настройки Gzip
gzip on; # Включить сжатие Gzip
gzip_min_length 10240; # Минимальный размер для сжатия (10KB)
gzip_proxied expired no-cache no-store private auth; # Когда сжимать проксированные ответы
gzip_types text/plain text/css text/xml text/javascript application/x-javascript application/xml; # Какие типы сжимать
gzip_disable "msie6"; # Отключить сжатие для IE6
## Включение дополнительных конфигураций
include /etc/nginx/conf.d/*.conf; # Включить все конфиги из conf.d
include /etc/nginx/sites-enabled/*; # Включить все сайты из sites-enabled
} |
# Настройки mail-прокси (POP3/IMAP) # Примеры конфигурации для почтового прокси |
Конфигурация оптимизирована для работы с Cloudflare (настройки реального IP)
Включены базовые меры безопасности (блокировка сканеров, защита cookies)
Используются современные настройки производительности (epoll, sendfile, tcp_nopush)
SSL настроен с поддержкой TLS 1.3 и отключением устаревших протоколов
Gzip настроен для сжатия текстовых форматов с исключением мелких файлов
Конфигурация модульная - основные настройки в этом файле, сайты подключаются отдельно
server {
# Редирект с HTTP на HTTPS для stat.acp_kazna_39.ru
if ($host = stat.acp_kazna_39.ru) {
return 301 https://$host$request_uri;
}
# managed by Certbot (автоматически добавлено Certbot)
listen 172.16.31.22:80; # Прослушивание на конкретном IP и порту 80
# listen [::]:80 default_server ipv6only=on; # Закомментирован IPv6
access_log off; # Отключение логов доступа
error_log off; # Отключение логов ошибок
# include letsencrypt; # Закомментировано включение letsencrypt
server_name stat.acp_kazna_39.ru; # Доменное имя сервера
location / {
# Заголовок безопасности Content-Security-Policy
add_header Content-Security-Policy "script-src 'self' 'unsafe-inline'";
try_files $uri $uri/ =404; # Попытка найти файл или директорию, иначе 404
return 301 https://$host$request_uri; # Редирект на HTTPS
}
} |
server {
listen 172.16.31.22:443 default_server ssl; # Прослушивание HTTPS
charset utf-8; # Кодировка UTF-8
### Усиленные заголовки безопасности ###
add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' https:; style-src 'self' 'unsafe-inline'; img-src 'self' data:;";
add_header X-Content-Type-Options "nosniff"; # Запрет MIME-sniffing
add_header X-Frame-Options "DENY"; # Запрет встраивания в iframe
add_header X-XSS-Protection "1; mode=block"; # Защита от XSS
### Страницы ошибок ###
error_page 403 /error/403.html; # Кастомная страница 403
error_page 404 /error/404.html; # Кастомная страница 404
location ^~ /error/ {
internal; # Только для внутренних редиректов
root /usr/ACP/cgi-bin; # Корневая директория для ошибок
add_header Content-Type text/html; # Установка типа контента
}
### Правила блокировки атак ###
# Блокировка подозрительных параметров (SQL-инъекции)
if ($args ~* "sid=[^a-zA-Z0-9_-]|%0D|%0A|\r|\n") {
return 403;
}
# Блокировка сканеров безопасности (Acunetix, Nikto и др.)
if ($http_user_agent ~* "(wvs|acunetix|nikto|sqlmap)") {
return 403;
}
### Основные настройки ###
root "/usr/ACP/cgi-bin"; # Корневая директория
index index.cgi; # Индексный файл
### SSL-сертификаты ###
ssl_certificate /etc/letsencrypt/live/stat.acp_kazna_39.ru/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/stat.acp_kazna_39.ru/privkey.pem;
### Логирование ###
access_log /var/log/billing/billing_access.log; # Лог доступа
error_log /var/log/billing/billing_error.log; # Лог ошибок
### Основное location (/) ###
location / {
# Расширенная политика безопасности
add_header Content-Security-Policy "...";
root "/usr/ACP/cgi-bin/";
index index.cgi;
}
### Обработка PHP-файлов ###
location ~* \.php$ {
# fastcgi_pass unix:/var/run/php/php8.3-fpm.sock; # Альтернативный вариант
fastcgi_pass 127.0.0.1:9000; # PHP-FPM на localhost:9000
fastcgi_param NO_BUFFERING 1; # Отключение буферизации
fastcgi_index index.php;
# Таймауты FastCGI
fastcgi_connect_timeout 30s;
fastcgi_read_timeout 60s;
fastcgi_send_timeout 60s;
include fastcgi_params; # Стандартные параметры FastCGI
fastcgi_buffering off; # Отключение буферизации
}
### Обработка CGI и Perl файлов ###
location ~* \.cgi|pm$ {
fastcgi_pass unix:/var/run/fcgiwrap.socket; # Использование fcgiwrap
# Параметры авторизации и безопасности
fastcgi_pass_header Authorization;
fastcgi_param HTTP_CGI_AUTHORIZATION $http_authorization;
# Указание полного пути к скрипту
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
# Таймауты
fastcgi_connect_timeout 30s;
fastcgi_read_timeout 60s;
fastcgi_send_timeout 60s;
include fastcgi_params;
fastcgi_buffering off;
}
### Статические файлы ###
location /styles/ {
root /usr/ACP/cgi-bin/; # Директория стилей
}
location /img/calculator/ {
root /usr/ACP/cgi-bin/; # Изображения калькулятора
}
### Админка ###
location /admin/ {
alias "/usr/ACP/cgi-bin/admin/"; # Алиас для админки
index index.cgi;
fastcgi_index index.cgi;
fastcgi_param NO_BUFFERING 1;
fastcgi_pass_header Authorization;
fastcgi_param HTTP_CGI_AUTHORIZATION $http_authorization;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_connect_timeout 30s;
fastcgi_read_timeout 60s;
fastcgi_send_timeout 60s;
include fastcgi_params;
fastcgi_buffering off;
}
### API ###
location ^~ /api.cgi {
add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' https:; style-src 'self' 'unsafe-inline'; img-src 'self' data:; connect-src 'self'; frame-src 'none'; object-src 'none'; base-uri 'self'; form-action 'self';";
try_files $uri /api.cgi$is_args$args;
allow 172.16.0.0/12; # Разрешаем только IP из подсети 172.16.0.0/12
deny all; # Запрещаем все остальные IP
gzip off;
fastcgi_param HTTPS on;
fastcgi_pass unix:/var/run/fcgiwrap.socket;
fastcgi_index index.cgi;
fastcgi_param NO_BUFFERING 1;
fastcgi_param HTTP_CGI_AUTHORIZATION $http_authorization;
fastcgi_param SCRIPT_FILENAME /usr/abills/cgi-bin$fastcgi_script_name;
fastcgi_connect_timeout 30s;
fastcgi_read_timeout 60s;
fastcgi_send_timeout 60s;
include fastcgi_params;
fastcgi_buffering off;
}
### Обработка изображений ###
location ^~ /img/ {
alias /usr/ACP/cgi-bin/img/;
# Разрешить только error.jpg
location = /img/error.jpg {
allow all;
try_files /error.jpg =404;
}
# Разрешить стандартные типы изображений
location ~* \.(ico|jpg|jpeg|gif|png|webp|css|js|JPG|GIF|PNG)$ {
allow all;
}
deny all; # Запретить все остальное
}
### Специальные разделы ###
location /viberktk/ {
root /usr/ACP/cgi-bin/;
allow all; # Разрешить доступ всем
}
location /usr/ACP/cgi-bin {
rewrite ^/upsale/v2 /get_pl.cgi last; # Редирект для upsale
}
### Изображения шаблонов ###
location ^~ /images/ {
alias /usr/acp_kazna_39.ru/ACP/templates/;
# Разрешить только изображения и CSS/JS
location ~* \.(jpg|gif|png|css|js|JPG|GIF)$ {
allow all;
}
deny all; # Запретить все остальное
}
} |
Безопасность:
Строгая политика CSP (Content Security Policy)
Заголовки XSS и clickjacking защиты
Редирект HTTP → HTTPS
Ограничения доступа к изображениям
Производительность:
Отключение буферизации для FastCGI
Настройки таймаутов
Раздельная обработка статических и динамических файлов
ACP Казна-39 - специфичные настройки:
Обработка CGI-скриптов через fcgiwrap
Специальные location для админки и API
Кастомные страницы ошибок
Организация:
Раздельные корневые директории для разных типов контента
Логирование в отдельные файлы
Четкое разделение прав доступа
На стороне биллинга создана своя, превентивная, система безопасности, но она эффективна ТОЛЬКО в связки с настройками общей безопасности системы
Личный кабинет абонента - настроен максимально возможный уровень защиты
Админ панель имеет 10 уровней безопасности
Пароли, однозначно сложные, не менее 12 символов
Раз в 2-3 месяца, полная смена паролей ввсех администраторов
Описание уровней безопасности:
Уровень Название Что блокирует
===============================================================================================
0 Отключено Ничего не проверяет
1 Минимальный Только теги <script>
2 Базовый Теги <script> и обработчики событий (onclick и т.д.)
3 Стандарт + угловые скобки < >
4 Усиленный + кавычки `" ' ``
5 Строгий + HTML-сущности (&, < и т.д.)
6 Агрессивный + javascript: в URL
7 Параноидальный + вызовы alert()
8 Экстремальный + любые HTML-теги и eval()
9 Полный + hex-последовательности (\x3c)
10 Максимальный + пустые скобки () и фигурные скобки {}
=============================================================================================== |
Для JSON API- уровень 1-2 Для обычных страниц- уровень 3-5 Для админ-панели- уровень 5-7 Уровни 8-10 могут давать ложные срабатывания |
| Параметр | Пример | Описание |
|---|---|---|
| XSS_FULL_ENABLE | $conf{XSS_FULL_ENABLE} = 1; | Включает глобальную проверку в админке, временно ломает контакты в карточке абона (не сохраняются изменения) |
| XSS_PROTECTION_LEVEL | $conf{XSS_PROTECTION_LEVEL} = 0...10; | Смотри выше, можно использовать только один уровень |
| XSS_LEVEL_SETTINGS | $conf{XSS_LEVEL_SETTINGS} = { 3 => { name => "Мой стандарт", pattern => qr/[<>]|<script\b[^>]*>.*?<\/script>/i } }; | Для параноиков создан вариант переопределения любого уровня |
Все вышеприведённые примеры являются именно примерами. В боевой среде нужно использовать собственные меры безопасности.
Это только направление и частичная информация что и где настраивать
Будте предельно внимательны и относитесь ответственно к своей среде!