محافظت از سرور های بازی در برابر DDos

مقدمه

این آموزش نحوه محافظت از سرور بازی خود را در برابر حملات DDoS با راه اندازی یک فایروال بسیار ابتدایی و محدود کردن نرخ توضیح می دهد. لطفا توجه داشته باشید که حتی با این تنظیمات، سرور شما از حملات DDoS نجات نخواهد یافت. با این حال، یک فایروال امن می تواند سطح حمله را به حداقل برساند و قوانین محدود کننده نرخ می تواند به جلوگیری از بارگذاری بیش از حد سرور شما کمک کند.

پیش نیازها:
  • سرور با اوبونتو (این آموزش با اوبونتو 22.04 تست شده است اما باید با نسخه های دیگر نیز کار کند.)

مرحله 1 – فایروال

به دلایل امنیتی، باید فایروالی داشته باشید که به طور پیش فرض تمام ترافیک ورودی را مسدود کند. سپس می‌توانید استثناهایی را اضافه کنید تا اجازه دسترسی به پروتکل‌ها/پورت‌های مورد نیاز برای ورود به سرور (SSH) و اتصال به بازی (TCP/UDP) را بدهید. اگر می‌خواهید فایروال خود را حتی بیشتر تقویت کنید، می‌توانید آدرس‌های IP را نیز مشخص کنید که باید تنها آدرس‌هایی باشند که به آنها اجازه دسترسی داده می‌شود. درخواست هایی که از هر آدرس IP دیگری می آیند به طور خودکار حذف می شوند. این آموزش نحوه مسدود کردن تمام ترافیک ورودی را توضیح می دهد و:

  • به همه اجازه دسترسی به پورت بازی را بدهید.
  • فقط IP های انتخاب شده به پورت بازی دسترسی داشته باشند.

فایروال پیش فرض در اوبونتو 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 # List all rules with numbers
sudo iptables -D INPUT <line-number> # Delete an INPUT rule by specifying the number

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

راه اندازی فایروال همانطور که در “مرحله 1” توضیح داده شد قبلاً به افزایش امنیت کمک می کند. با این حال، در معرض دید عموم قرار دادن پورت بازی، سطح حمله احتمالی را نشان می دهد. Iptables و Fail2Ban امکان محدود کردن تعداد درخواست‌های مجاز را فراهم می‌کنند توضیح داده شده است که چگونه:

  • تعداد درخواست در هر IP را محدود کنید.
  • تعداد درخواست تمام IP ها را با هم محدود کنید.
مرحله 2.1 – تعداد درخواست ها را در هر IP محدود کنید.

این مرحله از Fail2Ban برای محدود کردن درخواست ها و iptables برای ثبت درخواست ها استفاده می کند.

قبل از شروع، باید مطمئن شوید iptables و Fail2Ban هر دو در دسترس هستند. می توانید از systemctl status fail2ban برای بررسی اینکه آیا Fail2Ban در حال اجرا است استفاده کنید. نصب در اوبونتو:

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-burst یک چرخه زمانی و یک پارامتر حد را تنظیم می کنند.

قانون قدیمی فایروال را حذف کنید اگر قبلاً در “مرحله 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/min را متناسب با آن جایگزین کنید.

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 – قوانین مسدود کردن

وقتی به محدودیت نرخ از “Step 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 و چیزی برای ساختن دارید.

[تعداد: 3   میانگین: 5/5]
دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

شاید دوست داشته باشید