Прежде чем применять настройки - внимательно читаем. От этого зависит работоспособность системы


Данная страница посвящена настройке безопасности системы, все приведённые здесь примеры являются примером настроек, полную безопасность обеспечиваете Вы и только Вы!

Настройки безопасности на стороне самой ОС

  1. Всегда держите в актуальном состоянии приложения, которые позволяют получать удалённый доступ к системе (OpenSSH)
  2. Закройте SSH доступ извне. Разрешите доступ только определённым IP
  3. Никогда не используйте вход на сервер по сертификату. Вариант утечек очень велик
  4. Используйте сложные пароли, от 12 символов, буквенно-цифровые-спецсимволы
  5. Закройте вход под рутом через SSH
  6. Настройте Firewall и fail2ban
  7. Разрешите только те порты, которые необходимы для работы системы
  8. Пересмотрите все процессы, может какой висит в памяти, но он не используется

Настройка безопасности на стороне Nginx

На стороне nginx можно настроить гибкую систему безопасности:

Файл основного конфига nginx.conf

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)
# Примеры конфигурации для почтового прокси

Общие замечания:

  1. Конфигурация оптимизирована для работы с Cloudflare (настройки реального IP)

  2. Включены базовые меры безопасности (блокировка сканеров, защита cookies)

  3. Используются современные настройки производительности (epoll, sendfile, tcp_nopush)

  4. SSL настроен с поддержкой TLS 1.3 и отключением устаревших протоколов

  5. Gzip настроен для сжатия текстовых форматов с исключением мелких файлов

  6. Конфигурация модульная - основные настройки в этом файле, сайты подключаются отдельно

Файл основного конфига acp_kazna_39.conf

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;															# Запретить все остальное
    }
}


 Ключевые особенности конфигурации:

  1. Безопасность:

    • Строгая политика CSP (Content Security Policy)

    • Заголовки XSS и clickjacking защиты

    • Редирект HTTP → HTTPS

    • Ограничения доступа к изображениям

  2. Производительность:

    • Отключение буферизации для FastCGI

    • Настройки таймаутов

    • Раздельная обработка статических и динамических файлов

  3. ACP Казна-39 - специфичные настройки:

    • Обработка CGI-скриптов через fcgiwrap

    • Специальные location для админки и API

    • Кастомные страницы ошибок

  4. Организация:

    • Раздельные корневые директории для разных типов контента

    • Логирование в отдельные файлы

    • Четкое разделение прав доступа

Настройка безопасности на стороне MySQL/MariaDB

  1. Разрешить доступ только с самого сервера
  2. Установить пароль root mysql, по умолчанию разрешён вход без пароля
  3. Использовать сложные пароли, не менее 12 символов

Настройка безопасности на стороне биллинга

На стороне биллинга создана своя, превентивная, система безопасности, но она эффективна ТОЛЬКО в связки с настройками общей безопасности системы

Ключевые особенности:

  1. Личный кабинет абонента - настроен максимально возможный уровень защиты

  2. Админ панель имеет 10 уровней безопасности

  3. Доступ в админ панель нужно ограничивать определёнными IP

  4. Пароли, однозначно сложные, не менее 12 символов

  5. Раз в 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 могут давать ложные срабатывания

Описания параметров файла config.pl

ПараметрПримерОписание
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
    }
};
Для параноиков создан вариант переопределения любого уровня

Дополнительная информация

Все вышеприведённые примеры являются именно примерами. В боевой среде нужно использовать собственные меры безопасности.

Это только направление и частичная информация что и где настраивать

Будте предельно внимательны и относитесь ответственно к своей среде!