Как защитить сервер от ботов
Подготовка и доступ к серверу
- Войдите в панель proxify.cloud и выберите нужный выделенный сервер.
- Откройте консоль (VNC/NoVNC) или подключитесь по SSH к Ubuntu:
ssh root@<IP_ВАШЕГО_СЕРВЕРА> - Обновите систему и установите базовые утилиты:
При установкеapt update && apt upgrade -y apt install -y ufw fail2ban curl wget jq iptables-persistentiptables-persistentсогласитесь на сохранение текущих правил IPv4 и IPv6.
Настройка файрвола (UFW)
- Настройте политику по умолчанию и разрешите необходимые порты:
ufw default deny incoming ufw default allow outgoing ufw allow 22/tcp comment 'SSH' ufw allow 25565/tcp comment 'Minecraft Java' ufw allow 19132/udp comment 'Minecraft Bedrock' # Если используете RCON или панель управления (например, Pterodactyl wings): ufw allow 8080/tcp comment 'Panel/Wings' ufw allow 25575/tcp comment 'RCON' - Включите файрвол:
ufw enable - Проверьте статус:
ufw status numbered
Защита SSH (вектор входа для ботов)
- Отредактируйте конфиг SSH:
Примените следующие параметры (раскомментируйте и измените):nano /etc/ssh/sshd_configPort 2222 # Смените стандартный порт PermitRootLogin prohibit-password # Запрет входа по паролю для root PubkeyAuthentication yes PasswordAuthentication no # Только ключи MaxAuthTries 3 LoginGraceTime 30 ClientAliveInterval 300 ClientAliveCountMax 2 AllowUsers minecraft admin # Явно укажите разрешенных пользователей - Создайте пользователя для управления сервером (если нет) и настройте SSH-ключи:
adduser minecraft --disabled-password --gecos "" usermod -aG sudo minecraft # На локальной машине: ssh-copy-id -p 2222 minecraft@<IP_СЕРВЕРА> - Перезапустите SSH и проверьте подключение в новом терминале перед закрытием текущего:
systemctl restart sshd ufw allow 2222/tcp comment 'SSH Custom' ufw delete allow 22/tcp
Установка и настройка Fail2Ban
Создайте локальную конфигурацию:
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local nano /etc/fail2ban/jail.localНастройте базовые параметры в секции
[DEFAULT]:[DEFAULT] ignoreip = 127.0.0.1/8 ::1 <ВАШ_ДОМАШНИЙ_IP>/32 bantime = 1h findtime = 10m maxretry = 3 backend = systemd action = %(action_mwl)saction_mwlотправляет письмо с логами (настройтеdestemailиsendernameвыше в файле) и банит через iptables.Включите джейлы для SSH и рецидивов:
[sshd] enabled = true port = 2222 filter = sshd logpath = %(sshd_log)s maxretry = 3 [recidive] enabled = true filter = recidive logpath = /var/log/fail2ban.log action = %(action_mwl)s bantime = 1w findtime = 1d maxretry = 5Создайте фильтр для защиты Minecraft от бот-атак (флуд соединений/логинами). Создайте файл:
nano /etc/fail2ban/filter.d/minecraft-bot.confВставьте содержимое (под логи Paper/Spigot/Purpur):
[Definition] # Паттерны атак: слишком частые соединения, невалидные пакеты, брутфорс логина failregex = ^.*Connection request from .* <HOST>.*$ ^.*Failed to verify username.*<HOST>.*$ ^.*Disconnecting .*: Protocol mismatch.*<HOST>.*$ ^.*Kicking .*: You are sending packets too fast.*<HOST>.*$ ^.*/.*: lost connection: Disconnected.*<HOST>.*$ ignoreregex =Добавьте джейл в
jail.local:[minecraft-bot] enabled = true filter = minecraft-bot logpath = /home/minecraft/server/logs/latest.log # Если используете Docker/Pterodactyl, путь может быть: /var/lib/docker/containers/*/*-json.log port = 25565,19132 protocol = tcp maxretry = 10 findtime = 60 bantime = 30m action = iptables-allports[name=minecraft-bot]Убедитесь, что путь
logpathверен для вашей установки. В панели proxify.cloud при использовании Pterodactyl логи обычно в/var/lib/pterodactyl/volumes/<UUID>/logs/latest.log.Перезапустите и проверьте:
systemctl enable --now fail2ban fail2ban-client status fail2ban-client status minecraft-bot
Защита на уровне ядра и сети (sysctl / iptables)
Жестко настройте стек TCP/IP против SYN-флуда и сканирования:
cat << 'EOF' > /etc/sysctl.d/99-minecraft-hardening.conf # SYN Flood Protection net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_max_syn_backlog = 8192 net.ipv4.tcp_synack_retries = 2 net.ipv4.tcp_syn_retries = 3 # ICMP / Ping ограничения net.ipv4.icmp_echo_ignore_broadcasts = 1 net.ipv4.icmp_ignore_bogus_error_responses = 1 net.ipv4.icmp_ratelimit = 100 net.ipv4.icmp_ratemask = 88089 # Маршрутизация и безопасность net.ipv4.conf.all.rp_filter = 1 net.ipv4.conf.default.rp_filter = 1 net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.default.accept_redirects = 0 net.ipv4.conf.all.send_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 # IPv6 (если не используется — отключите или настройте аналогично) net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1 net.ipv6.conf.lo.disable_ipv6 = 1 EOF sysctl --systemДобавьте правила
iptablesдля ограничения скорости новых соединений на порт Minecraft (защита от ботнетов, забивающих слот листьями):# Ограничение: макс 20 новых коннектов в секунду с одного IP на порт 25565 iptables -A INPUT -p tcp --dport 25565 -m conntrack --ctstate NEW -m recent --name MC_CONN --set iptables -A INPUT -p tcp --dport 25565 -m conntrack --ctstate NEW -m recent --name MC_CONN --update --seconds 1 --hitcount 20 -j DROP # Ограничение RCON (если открыт миру — лучше закрыть в UFW и юзать VPN) iptables -A INPUT -p tcp --dport 25575 -m recent --name RCON_ATT --set iptables -A INPUT -p tcp --dport 25575 -m recent --name RCON_ATT --update --seconds 60 --hitcount 5 -j DROP # Защита от невалидных пакетов iptables -A INPUT -m conntrack --ctstate INVALID -j DROP # Сохранение правил netfilter-persistent saveПравила применяются сразу. Проверьте:
iptables -L -n -v | head -30.
Настройка самого сервера Minecraft (Paper/Purpur)
Остановите сервер и отредактируйте
server.properties:nano /home/minecraft/server/server.propertiesКлючевые параметры:
online-mode=true # ОБЯЗАТЕЛЬНО: проверка скинов/аккаунтов Mojang/Microsoft enforce-whitelist=true # Кикает не в вайтлисте при перезагрузке списка white-list=false # Включите true, если сервер приватный max-players=100 # Реалистичный лимит view-distance=6 # Меньше = меньше нагрузка от ботов-летчиков simulation-distance=4 network-compression-threshold=256 # Скрытие версии (не панацея, но мешает сканерам) server-name=MyServer motd=§aWelcome§rНастройте
paper-global.yml(илиpurpur.yml) для анти-чита/бот защиты:nano /home/minecraft/server/paper-global.ymlНайдите или добавьте секции:
# Анти-бот: ограничение действий новых игроков player-auto-save-rate: -1 use-faster-eigencraft-redstone: true # Запрет спавна сущностей ботами spawn-limits: ambient: 1 axolotls: 2 creature: 10 monster: 20 underground_water_creature: 2 water_ambient: 2 water_creature: 2 misc: 1 # Анти-чит настройки (базовые) anti-xray: enabled: true engine-mode: 2 hide-blocks: - diamond_ore - deepslate_diamond_ore - ancient_debris replace-blocks: - stone - deepslate # Логирование подозрительной активности log-player-ip-addresses: true verbose-gc-logging: falseУстановите плагины для защиты (через
Комментарии (0)