Защита игровых серверов от DDoS-атак

0 Акции
0
0
0
0

Введение

В этом руководстве объясняется, как защитить игровой сервер от DDoS-атак, настроив простейший брандмауэр и ограничив скорость. Обратите внимание, что даже с этими настройками ваш сервер не будет застрахован от DDoS-атак. Однако надёжный брандмауэр может минимизировать поверхность атаки, а правила ограничения скорости помогут предотвратить перегрузку сервера.

Предпосылки:
  • Сервер с Ubuntu (Это руководство было протестировано на Ubuntu 22.04, но должно работать и на других версиях.)

Шаг 1 – Брандмауэр

В целях безопасности вам следует настроить брандмауэр, который по умолчанию блокирует весь входящий трафик. Вы можете добавить исключения, чтобы разрешить доступ к протоколам/портам, необходимым для входа на сервер (SSH) и подключения к игре (TCP/UDP). Для ещё большей надёжности брандмауэра можно также указать IP-адреса, которым будет разрешён доступ. Запросы с любых других IP-адресов будут автоматически отклоняться. В этом руководстве объясняется, как заблокировать весь входящий трафик, а также:

  • Разрешить всем доступ к игровому порту.
  • Доступ к игровому порту имеют только избранные IP-адреса.

В Ubuntu брандмауэр по умолчанию — UFW. В этом руководстве используются iptables. Убедитесь, что вы используете только один брандмауэр. Использование нескольких разных брандмауэров не рекомендуется, так как их правила могут конфликтовать друг с другом и приводить к путанице.

Чтобы проверить, есть ли у вас уже какие-либо правила, вы можете использовать следующее:

sudo iptables -L

اگر فایروال هنوز قوانینی ندارد، اکنون می‌توانید آن‌ها را اضافه کنید. وقتی خط مشی پیش‌فرض برای ترافیک ورودی را روی «DROP» تنظیم می‌کنید، بلافاصله تمام اتصالات پایان می‌یابد. به همین دلیل، ابتدا باید مطمئن شوید که اتصالات SSH را مجاز کرده اید تا همچنان بتوانید به سرور خود دسترسی داشته باشید.

اگر از پورت پیش‌فرض SSH استفاده نمی‌کنید، حتماً در دستورات زیر 22 را جایگزین کنید.

sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT 
sudo ip6tables -A INPUT -p tcp --dport 22 -j ACCEPT

اکنون که فایروال راه اندازی شده است، می توانید پورت بازی خود را باز کنید.فقط IP های انتخاب شده به پورت بازی دسترسی داشته باشند.اگر آی‌پی بازیکنانی که به بازی ملحق می‌شوند را می‌دانید و آی‌پی‌ها تغییر نمی‌کنند، می‌توانید فقط به آن IP‌ها دسترسی داشته باشید:

sudo iptables -A INPUT -s <203.0.113.1>,<198.51.100.1> -p tcp --dport <your_game_port> -j ACCEPT
sudo iptables -A INPUT -s <203.0.113.1>,<198.51.100.1> -p udp --dport <your_game_port> -j ACCEPT
 

Разрешите всем доступ к игровому порту. С помощью этого правила каждый сможет получить доступ к вашей игре:

sudo iptables -A INPUT -p tcp --dport <your_game_port> -j ACCEPT
sudo iptables -A INPUT -p udp --dport <your_game_port> -j ACCEPT

Теперь новые правила должны быть добавлены. Вы можете просмотреть их с помощью команды sudo iptables -L. По умолчанию правила не сохраняются и исчезнут после следующей перезагрузки. Чтобы сделать их постоянными, установите:

sudo apt update && sudo apt install iptables-persistent

حالا قوانین خود را ذخیره کنید:

sudo iptables-save | sudo tee /etc/iptables/rules.v4
sudo ip6tables-save | sudo tee /etc/iptables/rules.v6

دفعه بعد که سرور خود را راه اندازی مجدد می کنید، قوانین ذخیره شده در فایل دوباره اعمال خواهند شد. هنگامی که قوانین جدید iptables را اضافه می کنید، باید دوباره دستور iptables-save را برای به روز رسانی فایل ها اجرا کنید.

sudo iptables -L --line-numbers # Вывести список всех правил с номерами sudo iptables -D INPUT # Удалить правило INPUT, указав номер

مرحله 2 – محدود کردن نرخ

Настройка брандмауэра, описанная в шаге 1, уже способствует повышению безопасности. Однако предоставление доступа к игровому порту для всех пользователей открывает потенциальную поверхность для атаки. Iptables и Fail2Ban позволяют ограничить количество разрешённых запросов. Вот как это сделать:

  • Ограничьте количество запросов на один IP-адрес.
  • Ограничьте количество запросов со всех IP-адресов одновременно.
Шаг 2.1 — Ограничьте количество запросов на один IP-адрес.

На этом этапе используется Fail2Ban для ограничения запросов и iptables для регистрации запросов.

Прежде чем начать, убедитесь, что доступны iptables и Fail2Ban. Вы можете использовать команду systemctl status fail2ban, чтобы проверить, запущен ли Fail2Ban. Установка в Ubuntu:

apt install fail2ban
systemctl enable --now fail2ban

به iptables بگویید تلاش های دسترسی را ثبت کنند

sudo iptables -I INPUT -p tcp --dport <your_game_port> -m conntrack --ctstate NEW -j LOG --log-level 6 --log-prefix "GameServerAccess: "

اکنون Iptables تمام تلاش‌ها برای دسترسی به پورت TCP <your_game_port> را در فایل /var/log/syslog ثبت می‌کند. وقتی فایل را مشاهده می کنید، خواهید دید که تمام تلاش ها برای دسترسی به پورت بازی پیشوند GameServerAccess داده می شود. قاعده را پایدار کنید:

sudo iptables-save | sudo tee /etc/iptables/rules.v4

یک فیلتر اضافه کنید در فایل /var/log/syslog، فقط ورودی‌های با پیشوند GameServerAccess: مرتبط هستند. فایل زیر را ایجاد کنید تا به Fail2Ban بگویید آن ورودی ها را فیلتر کند:

sudo nano /etc/fail2ban/filter.d/gameserveraccess.conf

اضافه کردن محتوا:

[Definition]
failregex = GameServerAccess: .* SRC=<HOST>
ignoreregex =

به Fail2Ban بگویید تعداد درخواست‌های هر IP را محدود کند و برای IPهایی که از حد مجاز فراتر می‌روند، زمان ممنوعیت تعیین کنید. logpath به Fail2Ban می گوید که IP ها را از کجا دریافت کنید. فیلتری که ما ایجاد کردیم به Fail2Ban می‌گوید فقط IPهایی را که با پیشوند GameServerAccess ثبت شده‌اند نظارت کند.

sudo nano /etc/fail2ban/jail.local

Добавить контент:

[game-server]
enabled = true
filter = gameserveraccess
logpath = /var/log/syslog
maxretry = 7
findtime = 30
bantime = 120

Приведённые выше настройки позволяют каждому IP-адресу отправлять 7 запросов за 30 секунд. Если IP-адрес превысит этот лимит, он будет заблокирован на 120 секунд. Если вы хотите установить другой лимит, замените значения 7, 30 и 120 соответственно.

После того, как все настроено, перезапустите Fail2Ban:

sudo systemctl restart fail2ban
Шаг 2.2 — Ограничьте количество запросов со всех IP-адресов одновременно

В iptables вы можете использовать модуль limit для ограничения общего количества новых подключений за определённый период времени. При использовании модуля limit параметры –limit и –limit-burst задают временной период и параметр limit.

Удалите старое правило брандмауэра. Если вы уже открыли игровой порт для всех на шаге 1, вы можете удалить это правило сейчас. С учётом правил ограничения скорости, описанных ниже, это правило вам больше не понадобится.

sudo iptables -L --line-numbers # Get the line number of "ACCEPT anywhere tcp dpt:<your_game_port>"
sudo iptables -D INPUT <line-number> # Delete the rule that accepts all incoming requests to your game port

Выполните следующие команды, чтобы добавить новые правила, установив параметр ограничения 100 и время цикла полминуты (30 секунд). Если вы хотите установить другие ограничения, вы можете заменить значения 100 и 2/мин соответственно.

sudo iptables -A INPUT -p tcp --dport <your_game_port> -m conntrack --ctstate NEW -m limit --limit 2/min --limit-burst 100 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport <your_game_port> -m conntrack --ctstate NEW -j DROP
Первое правило разрешает доступ к серверу. Оно применяется ко всем запросам, попадающим в указанный диапазон. При достижении лимита это правило перестает работать. Второе правило запрещает доступ к серверу. Это правило применяется, когда первое правило перестает работать.
Правила iptables по умолчанию не являются постоянными. Чтобы сделать их постоянными, необходимо обновить файл /etc/iptables/rules.v4:
sudo iptables-save | sudo tee /etc/iptables/rules.v4

При следующем перезапуске сервера правила, сохраненные в файле, будут применены повторно.

Шаг 3 – Правила блокировки

После достижения ограничения скорости, указанного на шаге 2, доступ к TCP-порту your_game_port будет закрыт для всех запросов. Однако, пока количество запросов не превышает лимита, доступ предоставляется всем. Это касается как легитимных, так и нелегитимных запросов. Следующее правило отбрасывает новые соединения без флага SYN:

sudo iptables -I INPUT -p tcp ! --syn -m conntrack --ctstate NEW -j DROP

Когда все будет сделано, вам нужно снова сохранить ваши правила:

sudo iptables-save | sudo tee /etc/iptables/rules.v4

Результат

Обратите внимание, что этих настроек недостаточно для полного предотвращения DDoS-атак, и всегда есть возможность повысить безопасность, используя дополнительные настройки для предотвращения DDoS-атак. Однако, благодаря настройкам, представленным в этом руководстве, у вас теперь есть первая линия защиты от DDoS-атак и основа для дальнейшей работы.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может понравиться

Как установить IBSng на CentOS 6/7

Руководство по установке IBSng на CentOS 6/7 В этой статье приведено руководство по установке IBSng на CentOS 6/7, которое поможет вам…

Как войти на сервер Windows через удаленный рабочий стол

Как подключиться к серверу Windows через удалённый рабочий стол. Программное обеспечение для подключения к удалённому рабочему столу предоставляется бесплатно во всех версиях…