حماية خوادم الألعاب ضد هجمات الحرمان من الخدمة الموزعة (DDoS)

0 الأسهم
0
0
0
0

مقدمة

يشرح هذا البرنامج التعليمي كيفية حماية خادم لعبتك من هجمات DDoS من خلال إعداد جدار حماية أساسي وتحديد سرعة التحميل. يرجى العلم أنه حتى مع هذه الإعدادات، لن يكون خادمك بمنأى عن هجمات DDoS. مع ذلك، يمكن لجدار الحماية الآمن تقليل مساحة الهجوم، كما أن قواعد تحديد سرعة التحميل تساعد في منع التحميل الزائد على خادمك.

المتطلبات الأساسية:
  • الخادم مع Ubuntu (تم اختبار هذا البرنامج التعليمي مع Ubuntu 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 # عرض جميع القواعد بالأرقام sudo iptables -D INPUT # حذف قاعدة الإدخال عن طريق تحديد الرقم

مرحله 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 فترة زمنية ومعلمة حد.

احذف قاعدة جدار الحماية القديمة. إذا كنت قد فتحت منفذ اللعبة للجميع في "الخطوة ١"، يمكنك حذف القاعدة الآن. باستخدام قواعد تحديد السرعة أدناه، لن تحتاج إليها بعد الآن.

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

شغّل الأوامر التالية لإضافة قواعد جديدة لتعيين حدّ أقصى بقيمة ١٠٠ وزمن دورة نصف دقيقة (٣٠ ثانية). إذا كنت ترغب في تعيين حدود مختلفة، يمكنك استبدال القيمتين ١٠٠ و٢/دقيقة وفقًا لذلك.

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 – قواعد الحظر

بمجرد الوصول إلى حد السرعة المذكور في "الخطوة ٢"، لن يتمكن أي شخص من الوصول إلى منفذ 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، وأساس يمكنك البناء عليه.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

قد يعجبك أيضاً