Как защитить сервер от эксплойтов
1. Подготовка и обновление базовой системы (Ubuntu)
Перед настройкой защиты Minecraft-сервера приведите хост-систему в актуальное состояние. Выполняйте команды под пользователем с sudo (обычно root или созданный при заказе пользователь).
- Обновите списки пакетов и систему:
apt update && apt upgrade -y - Установите базовые утилиты для безопасности и мониторинга:
apt install -y ufw fail2ban unattended-upgrades auditd logrotate curl wget gnupg2 software-properties-common - Настройте автоматические обновления безопасности:
В диалоге выберите Yes. Отредактируйтеdpkg-reconfigure --priority=low unattended-upgrades/etc/apt/apt.conf.d/50unattended-upgrades, раскомментируйте строку"${distro_id}:${distro_codename}-security";.
2. Настройка SSH и доступа к панели proxify.cloud
Панель proxify.cloud (Proxmox) предоставляет KVM-консоль (VNC/NoVNC). Используйте её, если потеряете SSH-доступ после настройки фаервола.
- Создайте отдельного пользователя для управления сервером (не root):
adduser mcadmin usermod -aG sudo mcadmin - Настройте SSH-ключи для
mcadmin(на локальной машине:ssh-keygen -t ed25519, затемssh-copy-id mcadmin@<IP_СЕРВЕРА>). - Жестко настройте
/etc/ssh/sshd_config:Port 2222 # Смените стандартный порт PermitRootLogin no # Запрет входа root PubkeyAuthentication yes # Только ключи PasswordAuthentication no # Запрет паролей AuthenticationMethods publickey # Только публичный ключ AllowUsers mcadmin # Только конкретный пользователь MaxAuthTries 3 ClientAliveInterval 300 ClientAliveCountMax 2 - Проверьте конфиг и перезапустите:
Важно: Не закрывайте текущую сессию. Откройте новую вкладку и проверьте вход по ключу на порту 2222.sshd -t && systemctl reload sshd
3. Настройка UFW (Uncomplicated Firewall)
Блокируйте всё входящее, кроме явно разрешенного. Панель proxify.cloud не требует открытых портов на Ubuntu для своей работы (управление идет через Proxmox API/панель).
- Политика по умолчанию:
ufw default deny incoming ufw default allow outgoing ufw default deny routed - Разрешите SSH (новый порт), Minecraft (игровой порт) и RCON (если используется, только для локальной сети/VPN):
ufw allow 2222/tcp comment 'SSH Admin Access' ufw allow 25565/tcp comment 'Minecraft Game Port' # ufw allow from 10.0.0.0/8 to any port 25575 proto tcp comment 'RCON Internal/VPN Only' - Включите логирование и фаервол:
ufw logging medium ufw enable ufw status verbose
4. Жесткая настройка ядра и сети (sysctl)
Создайте файл /etc/sysctl.d/99-minecraft-hardening.conf для защиты от сетевых атак (SYN flood, IP spoofing, ICMP redirect):
cat << 'EOF' > /etc/sysctl.d/99-minecraft-hardening.conf
# IPv4 Hardening
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.default.secure_redirects = 0
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.default.log_martians = 1
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.icmp_ignore_bogus_error_responses = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 4096
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_rfc1337 = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
# IPv6 Hardening (если не используется — отключите полностью через grub, иначе настройте аналогично)
net.ipv6.conf.all.accept_redirects = 0
net.ipv6.conf.default.accept_redirects = 0
net.ipv6.conf.all.accept_source_route = 0
net.ipv6.conf.default.accept_source_route = 0
# Kernel Hardening
kernel.kptr_restrict = 2
kernel.dmesg_restrict = 1
kernel.yama.ptrace_scope = 1
vm.mmap_rnd_bits = 32
vm.mmap_rnd_compat_bits = 16
fs.protected_hardlinks = 1
fs.protected_symlinks = 1
EOF
Примените настройки:
sysctl --system
5. Настройка Fail2Ban для защиты SSH и Minecraft
Fail2Ban блокирует IP после неудачных попыток. Настраиваем под Minecraft (логи Paper/Spigot/Purpur).
- Создайте
/etc/fail2ban/jail.local:cat << 'EOF' > /etc/fail2ban/jail.local [DEFAULT] bantime = 1h findtime = 10m maxretry = 3 backend = systemd action = %(action_mwl)s ignoreip = 127.0.0.1/8 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16 <ВАШ_СТАТИЧЕСКИЙ_IP> [sshd] enabled = true port = 2222 filter = sshd logpath = %(sshd_log)s maxretry = 3 [minecraft-auth] enabled = true port = 25565 protocol = tcp filter = minecraft-auth logpath = /opt/minecraft/server/logs/latest.log maxretry = 5 bantime = 30m [minecraft-exploit] enabled = true port = 25565 protocol = tcp filter = minecraft-exploit logpath = /opt/minecraft/server/logs/latest.log maxretry = 1 bantime = 1d EOF - Создайте фильтр для брутфорса авторизации
/etc/fail2ban/filter.d/minecraft-auth.conf:[Definition] failregex = ^.*\[User Authenticator #\d+/INFO\]: UUID of player .* is .* \(.*\)$ ^.*\[Netty Server IO #\d+/ERROR\]: Failed to verify username.*<HOST>.* ^.*\[Server thread/WARN\]: Failed to handle packet for .*: .*<HOST>.* ignoreregex = - Создайте фильтр для эксплойтов (логирование плагинами типа NoCheatPlus, AAC, Matrix или патчами Paper)
/etc/fail2ban/filter.d/minecraft-exploit.conf:[Definition] failregex = ^.*\[(WARN|ERROR)\].*(Illegal|Invalid|Exploit|Crash|Overflow|Malformed|Cheat|Hack|Suspicious).*<HOST>.* ^.*\[AntiCheat\].*Violation.*<HOST>.* ignoreregex = - Перезапустите и проверьте:
systemctl enable --now fail2ban fail2ban-client status fail2ban-client status minecraft-auth
6. Изоляция Minecraft-сервера через systemd (Sandboxing)
Запускайте сервер от отдельного пользователя mcuser без прав sudo с жесткими ограничениями systemd.
- Создайте пользователя и директории:
adduser --system --group --home /opt/minecraft --shell /bin/false mcuser mkdir -p /opt/minecraft/server/{world,plugins,mods,logs,backups} chown -R mcuser:mcuser /opt/minecraft chmod 750 /opt/minecraft/server - Создайте юнит
/etc/systemd/system/minecraft.service:
*Замените флаги Java и версию jar-файла на актуальные. Путь к Java:[Unit] Description=Minecraft Paper Server After=network.target StartLimitIntervalSec=60 StartLimitBurst=3 [Service] Type=simple User=mcuser Group=mcuser WorkingDirectory=/opt/minecraft/server 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 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true -jar paper-1.21.1.jar nogui Restart=on-failure RestartSec=10 TimeoutStopSec=60 # === SECURITY HARDENING === NoNewPrivileges=yes PrivateTmp=yes PrivateDevices=yes ProtectSystem=strict ProtectHome=yes ProtectKernelTunables=yes ProtectKernelModules=yes ProtectControlGroups=yes RestrictNamespaces=yes RestrictRealtime=yes RestrictSUIDSGID=yes LockPersonality=yes MemoryDenyWriteExecute=yes SystemCallFilter=@system-service SystemCallErrorNumber=EPERM CapabilityBoundingSet=CAP_DAC_OVERRIDE CAP_SETGID CAP_SETUID AmbientCapabilities= ReadWritePaths=/opt/minecraft/server ReadOnlyPaths=/opt/minecraft/server/plugins /opt/minecraft/server/mods # Ограничение ресурсов (DoS protection) LimitNOFILE=65535 LimitNPROC=1024 MemoryMax=6G CPUQuota=300% [Install] WantedBy=multi-user.target/usr/bin/java(провер
Комментарии (0)