Инструкция Усиление безопасности и производительности: Проксирование Pterodactyl через Cloudflare с NGINX

Усиление безопасности и производительности: Проксирование Pterodactyl через Cloudflare с NGINX
Краткое описание:
Настройка проксирования для повышения безопасности и производительности.
2 090
  • Лайк 0
  • Ниндзя
  • Gold love
Реакции:8 пользователей
Почему это важно?
Этот "гайд" если его можно таковым называть, более предназначен для "домашнего" использования, по крайне мере информация которую я здесь излагаю, открыта, и доступна всем желающим. Если вы делаете установку в первые, нужно лишь удосужится потратить время на более детальное изучение вопроса. Я не пуп земли и не претендую на звание гуру, я лишь возможно кого-то спасаю от допущенных ошибок.
Причина создания инструкции очень проста. Я, заметил что многие попросту этого не делают, цепляя на панель A запись, хуже того, многие устанавливают на панель pterodactyl домен, который используют для сервера Minecraft, что является тотальной ошибкой. В статье я объясню почему так делать не стоит, к чему это может привести, и зачем проводить эти манипуляции с бубном вокруг сервера.
Давайте сначала разберемся, зачем нам нужно это всё. NGINX - это как тот чел, который стоит на входе и решает, кого впустить, а кого нет. Он помогает контролировать трафик и защищать сервер от разных видов атак. Cloudflare - это еще один "Блюститель", который помогает обрабатывать запросы к серверу быстрее и защищает его от DDoS-атак.

Почему не просто использовать A запись?
Тут дело в том, что простая A запись домена на IP-адрес Pterodactyl может быть уязвимой для атак и не обеспечить такую защиту, как NGINX и Cloudflare. NGINX добавляет еще один уровень безопасности, а Cloudflare помогает ускорить работу сервера и защитить его от DDoS-атак. На моей практике был не один случай, когда домен проекта без дополнительного лоад балансера, сканили открытыми публичными сервисами по типу S**dan и находили все поддомены основного домена, что уж говорить, когда-то так делал и я... И всё же, этого бы не случилось, поставь админ для сервера другой домен, или хотя бы использовавший сторонние CDN/Проксирование.
Выполняйте все строго по инструкции, пункт за пунктом, в ином случае причина неработоспособности будет сидеть за монитором. Приступим к костяку статьи.

Что мы делаем с NGINX?
Создаем и настраиваем файл конфигурации NGINX для обработки запросов к нашему серверу. SSL сертификаты мы пока что не трогаем, но вернёмся к этому позже.
Для начала, мы создаем специальный файл конфигурации, где указываем NGINX, как вести себя с запросами к нашему серверу. Мы говорим ему, что если кто-то заходит по-обычному http, то его нужно перенаправить на защищенный https. А если кто-то уже идет по защищенному каналу, то просто пусть остается на месте и продолжает свой путь к серверу.

Переходим:
/etc/nginx/sites-enabled (Если его нет в вашей системе, установите)

Прописываем в терминале:
rm /etc/nginx/sites-enabled/default

Далее в директории в которую мы зашли, удаляем файл default. Создаем файл с названием "pterodactyl.conf" Вставляем в него следующее:
NGINX:
server_tokens off;

server {
    listen 80;
    server_name <domain>;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    server_name <domain>;

    root /var/www/pterodactyl/public;
    index index.php;

    access_log /var/log/nginx/pterodactyl.app-access.log;
    error_log  /var/log/nginx/pterodactyl.app-error.log error;

    # allow larger file uploads and longer script runtimes
    client_max_body_size 100m;
    client_body_timeout 120s;

    sendfile off;

    # SSL Configuration - Replace the example <domain> with your domain
    ssl_certificate /etc/ssl/cert.pem;
    ssl_certificate_key /etc/ssl/key.pem;
    ssl_session_cache shared:SSL:10m;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384";
    ssl_prefer_server_ciphers on;

    # See https://hstspreload.org/ before uncommenting the line below.
    # add_header Strict-Transport-Security "max-age=15768000; preload;";
    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Robots-Tag none;
    add_header Content-Security-Policy "frame-ancestors 'self'";
    add_header X-Frame-Options DENY;
    add_header Referrer-Policy same-origin;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/run/php/php8.1-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param PHP_VALUE "upload_max_filesize = 100M \n post_max_size=100M";
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param HTTP_PROXY "";
        fastcgi_intercept_errors off;
        fastcgi_buffer_size 16k;
        fastcgi_buffers 4 16k;
        fastcgi_connect_timeout 300;
        fastcgi_send_timeout 300;
        fastcgi_read_timeout 300;
        include /etc/nginx/fastcgi_params;
    }

    location ~ /\.ht {
        deny all;
    }
}

ВАЖНО: Замените <domain> на ваш доменный адрес. К примеру: panel.вашдомен (устанавливайте тот который у вас добавлен в Cloudflare)

Прописываем следующее в терминале:
sudo ln -s /etc/nginx/sites-available/pterodactyl.conf /etc/nginx/sites-enabled/pterodactyl.conf

Создание SSL сертификатов
  1. Настраиваем DNS записи, чтобы указать, что наш домен ведет на IP-адрес нашего сервера Pterodactyl. Создаете A запись в строке "Name (required)" указываете к примеру: panel
  2. Переходим в левой боковой панели во вкладку: SSL/TLS
  3. Выбираем режим "Full (strict)" в настройках Cloudflare. В ином случае не будет работать. При режиме "Full" будет постоянный редирект, поэтому выбираем strick.
Не будьте лохами, не используйте certbot'a для генерации само подписанных сертификатов. Поступим иначе, и будем использовать сертификаты от цфа. Переходим во вкладку SSL/TLS в левой боковой панели cloudflare, кликаем на "Origin Certificate". Перед вами будет синяя кнопка для создания сертификата домену. Создаем. Тип сертификата с RSA (2048) мы не меняем! Не трогайте там ничего, просто нажмите "Create". Теперь на вашем экране появилось два поля с названиями Origin Certificate & Private Key внутри которых непонятные символы. Это и есть наши ключи.

Chrome E3l7COY1GC


Переходим по пути: /etc/ssl/. Создаем 2 файла, а именно: cert.pem и key.pem
Содержимое "Origin Certificate" мы копируем на сайте, и вставляем в файл cert.pem.
Содержимое "Private Key" мы копируем на сайте, и вставляем в файл key.pem.

В конфигурации pterodactyl.conf вы должны поменять путь к сертификатам в двух строках, но за вас это уже сделал я, выше. ВНИМАНИЕ: Это так же необходимо проделать в /etc/pterodactyl/config.yml. Там у вас будет параметр ssl, измените значения вот так:

Код:
  ssl:
    enabled: true
    cert: /etc/ssl/cert.pem
    key: /etc/ssl/key.pem

Изменение сертификатов для wings, необходимо чтобы он работал через него. В этом же файле, что не мало важно, измените ваш порт 8080 на 8443. Бесплатный Cloudflare проксирует только определенные "вэб" порты, sftp на порту 2022 у вас работать не будет, в прочем это возможно сделать, но думаю это никому не нужно, да и нет необходимости. Используйте обычный sftp клиент.

После этого можете проверить конфигурацию:

sudo systemctl restart nginx
nginx -t

Если с конфигурацией все хорошо — получите вывод: OK
Если нет, NGINX выдаст лог и укажет на ошибку. Читайте внимательно.

На этом настройка почти завершена, остается перейти по пути: /var/www/pterodactyl

Далее откройте файл .env
На 6 по счету строке найдите параметр "APP_URL=" в нем укажите вместо http:// --> https://
Это важно! Без этого ничего работать не будет.

После всего этого отправляйте машину на перезагрузку, далее либо создаете, либо проверяете работоспособность ноды. Cердце в разделе Nodes рядом с самой нодой должно гореть зеленым, если горит красным --> F12 и смотрите консоль, в ней будет написана причина неработоспособности.

Ну вот и всё, спасибо за прочтение.
  • 1710866398980.png
    1710866398980.png
    110,9 КБ · Просмотры: 96

Автор

Yatochka

Еще ресурсы от Yatochka

GrimAC
GrimAC
Скомпилированная версия античита грим.
Illegal Stack
Illegal Stack
Предоставлены исправления нескольких ошибок ванилы, позволяющих игрокам дублироваться на вашем серве
GrimVoid
GrimVoid
Телепортация игроков на спавн, если они падают в бездну.
160 Ресурспаков
160 Ресурспаков
Набор из 160 ресурспаков для 1.20
Эксплоиты Minecraft и как их исправить
Эксплоиты Minecraft и как их исправить
Как предотвратить большинство эксплоитов
ВерхНиз