Как защитить сервер от гриферов

Подготовка окружения на proxify.cloud

  1. Войдите в панель proxify.cloud и выберите ваш выделенный сервер с Ubuntu.
  2. Откройте консоль (VNC/SSH) или подключитесь по SSH с локальной машины:
    ssh root@<IP_ВАШЕГО_СЕРВЕРА>
    
  3. Обновите систему и установите базовые утилиты:
    apt update && apt upgrade -y
    apt install -y ufw fail2ban curl wget git htop tmux
    

Настройка файрвола (UFW)

  1. Запретите всё входящее, разрешите исходящее и SSH (порт 22 или ваш кастомный):
    ufw default deny incoming
    ufw default allow outgoing
    ufw allow 22/tcp comment 'SSH'
    
  2. Откройте порт игрового сервера (по умолчанию 25565 для Java, 19132 UDP для Bedrock):
    ufw allow 25565/tcp comment 'Minecraft Java'
    ufw allow 19132/udp comment 'Minecraft Bedrock'
    
  3. Если используете RCON, откройте его только для локальной сети или VPN:
    ufw allow from 10.0.0.0/8 to any port 25575 proto tcp comment 'RCON internal'
    
  4. Включите файрвол:
    ufw enable
    ufw status verbose
    

Настройка Fail2Ban для защиты SSH и RCON

  1. Создайте локальную конфигурацию:
    cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
    
  2. Отредактируйте /etc/fail2ban/jail.local:
    [sshd]
    enabled = true
    port = ssh
    filter = sshd
    logpath = /var/log/auth.log
    maxretry = 3
    bantime = 3600
    findtime = 600
    
    [minecraft-rcon]
    enabled = true
    port = 25575
    filter = minecraft-rcon
    logpath = /opt/minecraft/logs/latest.log
    maxretry = 5
    bantime = 7200
    findtime = 300
    
  3. Создайте фильтр для RCON в /etc/fail2ban/filter.d/minecraft-rcon.conf:
    [Definition]
    failregex = ^.*RCON connection attempt from <HOST> failed.*$
                ^.*Invalid password from <HOST>.*$
    ignoreregex =
    
  4. Перезапустите Fail2Ban:
    systemctl restart fail2ban
    fail2ban-client status
    

Создание выделенного пользователя для сервера

  1. Создайте пользователя mc без sudo-прав:
    adduser --disabled-password --gecos "" mc
    
  2. Переключитесь на пользователя и настройте SSH-ключ (опционально, но рекомендуется):
    su - mc
    mkdir -p ~/.ssh
    chmod 700 ~/.ssh
    # Вставьте свой публичный ключ в authorized_keys
    nano ~/.ssh/authorized_keys
    chmod 600 ~/.ssh/authorized_keys
    exit
    

Установка Java и ядра сервера (Paper)

  1. Установите Java 21 (актуально для Minecraft 1.20+):
    apt install -y openjdk-21-jre-headless
    java -version
    
  2. Создайте директорию сервера и скачайте последнюю сборку Paper:
    mkdir -p /opt/minecraft
    chown mc:mc /opt/minecraft
    su - mc
    cd /opt/minecraft
    wget -O paper.jar "https://api.papermc.io/v2/projects/paper/versions/1.21.1/builds/123/downloads/paper-1.21.1-123.jar"
    # Замените версию и билд на актуальные с https://papermc.io/downloads
    

Базовая конфигурация server.properties

  1. Запустите сервер один раз для генерации файлов, затем остановите (Ctrl+C):
    java -Xms2G -Xmx2G -jar paper.jar --nogui
    
  2. Отредактируйте /opt/minecraft/server.properties:
    # Сеть
    server-ip=0.0.0.0
    server-port=25565
    enable-rcon=true
    rcon.port=25575
    rcon.password=SuperStrongPassword123!
    broadcast-rcon-to-ops=false
    
    # Безопасность
    online-mode=true
    enforce-whitelist=true
    white-list=true
    max-players=50
    view-distance=6
    simulation-distance=4
    
    # Античит/производительность
    spawn-protection=16
    max-tick-time=60000
    
  3. Создайте whitelist.json и ops.json через команды в консоли сервера или вручную:
    # В консоли сервера:
    whitelist add <ник>
    op <ник>
    

Установка и настройка плагинов защиты

  1. Создайте папку плагинов и скачайте ключевые плагины (через wget или загрузите через SFTP в панели proxify.cloud):
    cd /opt/minecraft/plugins
    # CoreProtect — логирование блоков/контейнеров
    wget -O CoreProtect.jar "https://ci.lucko.me/job/CoreProtect/lastSuccessfulBuild/artifact/coreprotect-bukkit/target/CoreProtect-22.2.jar"
    # LuckPerms — права доступа
    wget -O LuckPerms.jar "https://ci.lucko.me/job/LuckPerms/lastSuccessfulBuild/artifact/bukkit/loader/build/libs/LuckPerms-Bukkit-5.4.112.jar"
    # WorldGuard + WorldEdit — регионы
    wget -O WorldEdit.jar "https://dev.bukkit.org/projects/worldedit/files/latest"
    wget -O WorldGuard.jar "https://dev.bukkit.org/projects/worldguard/files/latest"
    # AntiCheat — NoCheatPlus или AAC
    wget -O NoCheatPlus.jar "https://ci.nocheatplus.com/job/NoCheatPlus/lastSuccessfulBuild/artifact/NoCheatPlus.jar"
    # LoginSecurity — 2FA для игроков
    wget -O LoginSecurity.jar "https://github.com/LoginSecurity/LoginSecurity/releases/latest/download/LoginSecurity.jar"
    
  2. Запустите сервер для генерации конфигов плагинов, затем настройте их.

Настройка CoreProtect (/opt/minecraft/plugins/CoreProtect/config.yml)

use-mysql: false
log-block-break: true
log-block-place: true
log-container-transactions: true
log-player-sessions: true
rollback-limit: 10000

Настройка WorldGuard — защита спавна

  1. В игре (как OP) создайте регион спавна:
    //wand
    # Выделите два угла кубоида вокруг спавна
    /rg define spawn
    /rg flag spawn build deny
    /rg flag spawn pvp deny
    /rg flag spawn chest-access deny
    /rg flag spawn interact deny
    /rg flag spawn block-break deny
    /rg flag spawn block-place deny
    /rg addmember spawn g:default
    

Настройка LuckPerms — минимальные права для default

  1. В консоли сервера:
    /lp creategroup default
    /lp group default permission set minecraft.command.spawn true
    /lp group default permission set minecraft.command.home true
    /lp group default permission set essentials.spawn true
    /lp group default permission set essentials.home true
    /lp group default permission set essentials.tpa true
    /lp group default permission set essentials.tpaccept true
    # Запрет опасных команд
    /lp group default permission set minecraft.command.op false
    /lp group default permission set minecraft.command.gamemode false
    /lp group default permission set worldguard.region.bypass false
    

Настройка LoginSecurity (2FA)

  1. В /opt/minecraft/plugins/LoginSecurity/config.yml:
    auth-type: "totp"
    force-registration: true
    session-timeout: 1440
    

Автозапуск через systemd

  1. Создайте unit-файл /etc/systemd/system/minecraft.service:
    [Unit]
    Description=Minecraft Paper Server
    After=network.target
    
    [Service]
    User=mc
    Group=mc
    WorkingDirectory=/opt/minecraft
    ExecStart=/usr/bin/java -Xms4G -Xmx4G -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true -jar paper.jar --nogui
    Restart=on-failure
    RestartSec=10
    LimitNOFILE=100000
    StandardOutput=journal
    StandardError=journal
    
    [Install]
    WantedBy=multi-user.target
    
  2. Включите и запустите:
    systemctl daemon-reload
    systemctl enable minecraft
    systemctl start minecraft
    journalctl -u minecraft -f
    

Бэкапы через systemd-таймер

  1. Скрипт бэкапа /opt/minecraft/backup.sh:
    #!/bin/bash
    set -e
    DATE=$(date +%F_%H-%M)
    BACKUP_DIR="/opt/backups/minecraft"
    mkdir -p "$BACKUP_DIR"
    cd /opt/minecraft
    tar --exclude='plugins/dynmap/web/tiles' -czf "$BACKUP_DIR/world_$DATE.tar.gz" world world_nether world_the_end plugins CoreProtect.db
    find "$BACKUP_DIR" -type f -mtime +7 -delete
    
    chmod +x /opt/minecraft/backup.sh
    chown mc:mc /opt/minecraft/backup.sh
    
  2. Сервис /etc/systemd/system/minecraft-backup.service:
    [Unit]
    Description=Minecraft Backup
    
    [Service]
    Type=oneshot
    User=mc
    ExecStart=/opt/minecraft/backup.sh
    
  3. Таймер /etc/systemd/system/minecraft-backup.timer:
    [Unit]
    Description=Daily Minecraft Backup
    
    [Timer] 03:00:00
    Persistent=true
    
    [Install]
    WantedBy=timers.target
    
  4. Активируйте:
    systemctl daemon-reload
    systemctl enable