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









