حماية خادم Arma 3 من هجمات DDoS

نُشر في مدة القراءة: 19 دقيقة

أي المنافذ الخمسة من 2302 حتى 2306 UDP يحتاجه خادم Arma 3 فعلاً، وكيف تؤمّنون استعلام Steam وBattlEye RCon وHeadless Client، ومن أي معدل حزم لا تفيد إلا التصفية في الشبكة الواقعة قبل الخادم.

من يريد حماية خادم Arma 3 من هجمات DDoS فهو يتعامل مع خمسة منافذ UDP بالضبط: من 2302 حتى 2306. والخادم المخصص الذي ينقطع مساءً في وسط المهمة عن جميع اللاعبين في وقت واحد نادراً ما تكون مشكلته في العتاد. ففي الغالب يجري هجوم على كتلة المنافذ هذه بالتحديد، وذلك في اللحظة التي تُظهر فيها قائمة الخوادم أعلى عدد من اللاعبين. يعرض هذا المقال أولاً ما تستطيعون تأمينه بأنفسكم دون تكاليف إضافية، ثم أين تنتهي هذه الإجراءات تقنياً، وفي الختام ما يجب أن يحدث في الشبكة الواقعة قبل الخادم.

جميع المعطيات تتعلق بخادم Arma 3 مخصص (تطبيق SteamCMD رقم 233780) يعمل بنظام Debian 12 أو Debian 13 أو Ubuntu 22.04 LTS أو Ubuntu 24.04 LTS. والأوامر مكتوبة للمستخدم root، وكمستخدم عادي تضعون sudo قبلها. وإذا كان الهجوم جارياً الآن: لا تغيّروا شيئاً في الإعدادات ولا تعيدوا تشغيل الخادم، بل احفظوا أولاً القياسات الواردة في قسم «التسجيل». فهي تختفي بعد انتهاء الهجوم.

لماذا تُهاجَم خوادم Arma 3 ومتى تصبح الحماية من DDoS ضرورية

يجمع Arma 3 عدة خصائص تجعل الخادم هدفاً مريحاً. أولاً، ينشر الخادم عنوانه بنفسه: فهو يسجّل نفسه عبر المنفذ 2304 UDP لدى خادم Steam الرئيسي، ويجيب على المنفذ 2303 UDP عن الاستعلامات بالاسم والخريطة وعدد اللاعبين وقائمة الإضافات. فبدون هذين المنفذين لا يجدكم أحد، ومعهما يظهر عنوان IP الخاص بكم في كل متصفح خوادم وفي كل صفحة حالة تستعلم من متصفح الخوادم.

ثانياً، جمهور اللاعبين مرتبط بأوقات ثابتة. فمشاريع لعب الأدوار الحياتية على Altis وTanoa، وكذلك Exile وAntistasi وKing of the Hill، تمتلئ مساءً وفي نهاية الأسبوع، وبذلك يكون الانقطاع في الثامنة مساءً مرئياً إلى أقصى حد. ثالثاً، هناك منافسة بين المشاريع، ولاعبون محظورون، وخلافات داخلية، والهجوم لا يكلّف من يطلقه مهارةً ولا مالاً يُذكر.

وتقنياً تُضاف النقطة الحاسمة: يعمل Arma 3 بالكامل عبر UDP، ولا تحتاج اللعبة إلى TCP لتشغيل اللعب. ولا يعرف UDP أي إنشاء اتصال يمكن اشتراطه، وعناوين المرسل قابلة للتزييف. لذلك لا يحتاج المهاجم إلى الدخول إلى خادمكم ولا إلى مخاطبته بشكل صحيح لكي يولّد حِملاً. يُضاف إلى ذلك أن حلقة المحاكاة في خادم Arma 3 تعمل في جوهرها على نواة معالجة واحدة: فمن يرسل ما يكفي من الحزم يستهلك وقت المعالجة في هذه النواة الواحدة، بصرف النظر عن عدد النوى الأخرى في الجهاز. وما هو هجوم DDoS بالتفصيل يشرحه المقال ما هو هجوم DDoS؟.

المنافذ التي يتعلق بها الأمر فعلاً

يحتل خادم Arma 3 افتراضياً الكتلة من 2302 حتى 2306 UDP. ويحدد معامل التشغيل -port=2302 المنفذ الأول وحده، أما الأربعة الباقية فتنتج عنه بشكل ثابت، أي منفذ اللعبة زائد 1 حتى زائد 4. ولهذا يترك من يشغّل عدة نسخ على الجهاز نفسه مسافة 100 منفذ على الأقل (2302 و2402 و2502)، وإلا سلبت النسخ بعضها المنافذ التالية.

المنفذ البروتوكول الوظيفة ينتمي إلى الشبكة المفتوحة
2302 (منفذ اللعبة) UDP حركة اللعب وVON، أي نقل الصوت المدمج نعم
2303 (منفذ اللعبة زائد 1) UDP استعلام Steam: يجيب عن استعلامات A2S بالاسم والخريطة وعدد اللاعبين وقائمة الإضافات والتوقيعات نعم، وإلا غاب الإدراج في متصفح الخوادم
2304 (منفذ اللعبة زائد 2) UDP Steam-Master: تسجيل الخادم لدى خادم Steam الرئيسي نعم
2305 (منفذ اللعبة زائد 3) UDP VON، محفوظ وفق Bohemia وغير مستخدم حالياً لا
2306 (منفذ اللعبة زائد 4) UDP حركة BattlEye، ومنها واجهة RCon (RConPort في beserver_x64.cfg) لا، عناوين الإدارة الخاصة بكم فقط
2344 و2345 (صادر) TCP وUDP اتصال BattlEye من الخادم إلى arma31.battleye.com يُسمح به صادراً، ولا يُفتح شيء وارداً
3306 TCP MySQL لأجل extDB3، أي ربط قاعدة البيانات في كل إطار عمل حياتي لا، يُربط على 127.0.0.1
22 TCP وصول SSH لا، عناوينكم الخاصة فقط

من هذه الصفوف الثمانية تنتمي ثلاثة بالضبط إلى الإنترنت المفتوح: 2302 و2303 و2304 UDP. وكل ما عدا ذلك إدارة، ومنافذ الإدارة المفتوحة هي أكثر الأخطاء القابلة للتجنب شيوعاً على خوادم Arma 3.

ما تستطيعون فعله بأنفسكم قبل أن تدفعوا مالاً

هذا القسم هو الأطول، وذلك بقصد. فخادم Arma 3 المُعَدّ إعداداً نظيفاً يتحمل الهجمات الصغيرة والمتوسطة بقوته الذاتية، بصرف النظر عن الجهة التي يقف عندها.

1. الجرد: ما الذي يستمع على الخادم؟

قبل أن تكتبوا قاعدة واحدة، انظروا ما الذي يعرضه خادمكم إلى الخارج. لا تخمّنوا، بل انظروا:

ss -lntup

المهم هو العمود الذي يحمل العنوان المحلي. فـ 0.0.0.0:2302 يعني «قابل للوصول من الإنترنت بأكمله»، و127.0.0.1:3306 يعني «محلياً فقط» ولا يحتاج إلى قاعدة في جدار الحماية. وإلى جانب اللعبة تظهر هناك على خادم حياتي بانتظام MariaDB، وخادم ويب لصفحة الفصائل، وخدمة صوت مثل TeamSpeak، ولوحة تحكم منسية. أما رؤية المهاجم فيوفرها فحص المنافذ من الخارج:

nmap -Pn -sU -p 2300-2320 YOUR.SERVER.IP.ADDRESS
nmap -Pn -p- --min-rate 1000 YOUR.SERVER.IP.ADDRESS

يُظهر الأمر الأول كتلة UDP الخاصة باللعبة، ويُظهر الثاني كل ما هو مفتوح على TCP. ولا يحتاج خادم Arma 3 إلى منفذ TCP مفتوح واحد لتشغيل اللعب.

2. إبقاء المنافذ التي يحتاجها Arma 3 فعلاً وحدها مفتوحة

ثلاثة منافذ UDP نحو الخارج تكفي، وكل ما عداها يُقيَّد. ومع UFW يبدو ذلك على النحو التالي، وبهذا الترتيب بالضبط حتى لا تحجبوا أنفسكم:

ufw allow from 203.0.113.10 to any port 22 proto tcp comment 'SSH'
ufw allow 2302:2304/udp comment 'لعبة Arma 3، استعلام Steam، ماستر Steam'
ufw allow from 203.0.113.10 to any port 2306 proto udp comment 'BattlEye RCon'
ufw default deny incoming
ufw default allow outgoing
ufw --force enable
ufw status verbose

استبدلوا 203.0.113.10 بعنوانكم الخاص. ويبقى المنفذ 2305 مغلقاً، لأن Bohemia تُدرجه كمحفوظ وغير مستخدم حالياً. والمهم هو السطر ufw default allow outgoing: فـ BattlEye يبني من الخادم اتصالاً إلى arma31.battleye.com، ويحتاج لذلك صادراً إلى المنفذ 2344 على TCP وUDP وإلى 2345 على TCP. ومن يحجب الصادر جملةً يحجب نظام مكافحة الغش الخاص به. تحقّقوا بعد التعديل، بانضمام حقيقي، من أن BattlEye ما زال يسمح بمرور لاعبيكم. والدليل الكامل مع طريق النجاة موجود في إعداد جدار حماية UFW دون حجب نفسكم.

ولا تنتمي قاعدة البيانات إلى الشبكة المفتوحة بأي حال. فـ Altis Life وبقية أطر العمل الحياتية تتحدث عبر الامتداد extDB3 مع قاعدة بيانات MySQL، وبيانات الدخول مكتوبة بنص صريح في @extDB3/extdb3-conf.ini. تحقّقوا في /etc/mysql/mariadb.conf.d/50-server.cnf من وجود هذا السطر:

bind-address = 127.0.0.1

3. تهدئة منفذ استعلام Steam دون السقوط من متصفح الخوادم

المنفذ 2303 UDP هو أكثر نقطة حساسية في خادم Arma 3 عام. فهو يجيب عن استعلامات A2S، أي الاستعلام القياسي لمتصفح خوادم Steam: يقدّم A2S_INFO الاسم والخريطة وعدد اللاعبين، ويقدّم A2S_PLAYERS قائمة اللاعبين، ويقدّم A2S_RULES قائمة الإضافات والتوقيعات. والاستعلام حزمة UDP صغيرة، أما الجواب فهو أضعاف ذلك. ويُدرج US-CERT بروتوكول Steam في التحذير TA14-017A بمعامل تضخيم للنطاق الترددي يبلغ 5.5، وفي Arma 3 يكون الجواب كبيراً بشكل خاص، لأن قائمة الإضافات الكاملة تُرسَل معه.

ويترتب على ذلك أمران. أولاً، يمكن إساءة استخدام خادمكم كمُضخِّم ضد أطراف ثالثة، إذا أرسل مهاجم استعلامات بعنوان مرسل مزيف. وثانياً، وهو الأهم لكم، يستهلك كل استعلام وقت معالجة في النواة الواحدة التي تحمل المحاكاة. وتحتفظ Bohemia منذ عام 2015 بتذكرة في هذا الشأن (T83469): حزم UDP مزيفة موجَّهة إلى منفذ اللعبة أو إلى منفذ استعلام Steam دفعت المعالج إلى 100 بالمئة وجمّدت الخادم، وقد كفى 4 Mbit/s لهجوم ناجح عبر منفذ الاستعلام. وهذا هو السبب في أن معدل الحزم في Arma 3 أخطر من النطاق الترددي.

أول أداة بين يديكم هي حجم الجواب. فالإعداد steamProtocolMaxDataSize في server.cfg يحدد عدد البايتات التي يحق للخادم أن يحزمها في جواب الاستعلام. ويرفعه مشغّلو قوائم الإضافات الكبيرة إلى 2048 أو أكثر، لأن التحذير «Query data overflow, Mods/Signatures will not be correctly received by clients» يظهر في السجل خلاف ذلك. لكن كل زيادة تُكبّر بالضبط ذلك الجواب الذي يضخّمه المهاجم. لذلك اجعلوا القيمة منخفضة بالقدر الذي تسمح به قائمة إضافاتكم بالكاد، وأزيلوا الإضافات غير المستخدمة من أمر التشغيل:

steamProtocolMaxDataSize = 2048;

والأداة الثانية هي تحديد المعدل لكل عنوان مصدر، بحيث يصيب منفذ الاستعلام وحده. لا تحجبوا 2303 UDP جملةً: فبدون جواب الاستعلام يختفي خادمكم من متصفح الخوادم ومن كل صفحة حالة، ولن يجده اللاعبون الجدد بعد ذلك. ومتصفح الخوادم المشروع يستعلم بضع مرات في الدقيقة، لا مئات المرات في الثانية.

4. إخراج BattlEye RCon من الشبكة المفتوحة

BattlEye هو نظام مكافحة الغش في Arma 3، ويُشغَّل في server.cfg بالسطر BattlEye = 1;. أما أداة التحكم عن بعد المرافقة له، أي BattlEye RCon، فهي بروتوكول UDP مستقل ويُعَد في BattlEye/beserver_x64.cfg (والملف الذي يحمل اللاحقة _x64 يسري على arma3server_x64، أي الخادم الشائع اليوم):

RConPassword YourAlphanumericPassword
RConPort 2306
RConIP 127.0.0.1
MaxPing 350
RestrictRCon 0

ثلاث نقاط حاسمة هنا. يجب أن تكون كلمة مرور RCon أبجدية رقمية بحتة، فالرموز الخاصة تُخرج محلّل بروتوكول BattlEye عن مساره بصمت، ووصول RCon الذي يفشل بصمت هو وصول لا تملكونه عند الجدّ. ويحدد RConIP العنوان الذي يستمع عليه RCon: فإذا كان 127.0.0.1، صارت الواجهة قابلة للوصول محلياً فقط، وتصل إليها أداة RCon لديكم عبر تمرير SSH. ويجب أن يكون RConPort فوق كتلة اللعبة، والمعتاد هو منفذ اللعبة زائد 4، أي 2306. ومن كان مضطراً إلى فتح RCon نحو الخارج يفتح المنفذ للعنوان الثابت الخاص بفريق إدارته فقط.

وشيء واحد يجب أن يكون واضحاً: BattlEye نظام لمكافحة الغش، وليس حماية من DDoS. فهو يفحص اللاعبين المتصلين. أما المهاجم الذي يُغرق خادمكم فهو لا يريد الانضمام أصلاً.

5. تثبيت Headless Client على عنوان محدد

الـ Headless Client هو نسخة ثانية من Arma 3 بدون رسوميات، تتصل بالخادم مثل أي لاعب وتتولى عنه حساب الذكاء الاصطناعي للمهمة. وهذا هو أكبر مكسب أداء على الإطلاق في المهام الكبيرة، لأن الذكاء الاصطناعي يقع خلاف ذلك على النواة نفسها التي تحمل المحاكاة. ويُسمح به في server.cfg:

headlessClients[] = {"127.0.0.1"};
localClient[] = {"127.0.0.1"};

الخبر الجيد أن الخادم لا يقبل أي اتصال من Headless Client بدون هذين السطرين. والخبر السيئ أن localClient[] يمنح العنوان المُدرَج نطاقاً ترددياً غير محدود وعملياً بلا فحص لزمن الاستجابة. لذلك أدرجوا هناك 127.0.0.1 حصراً أو العنوان الثابت لخادم Headless Client الخاص بكم، ولا تدرجوا مجالاً كاملاً من العناوين أبداً. ويُشغَّل العميل بالأمر -client -connect=127.0.0.1 -port=2302 -password=...، وهو يحتل خانة من maxPlayers. لذا خططوا لذلك، وإلا وقف لاعبوكم أمام خادم ممتلئ.

6. تحصين الانضمام والتوقيعات والتصويتات

هذه الإعدادات لا تحمي وصلتكم، لكنها تُغلق كل ما يأتي عبر طريق الانضمام النظامي: العملاء المعدَّلون، وتنفيذ السكربتات داخل اللعبة، وإساءة استخدام التصويت. والأسطر التالية تنتمي إلى كل server.cfg لخادم عام:

verifySignatures = 2;
BattlEye = 1;
kickDuplicate = 1;
allowedFilePatching = 0;
maxPlayers = 64;
disconnectTimeout = 30;
maxPing = 200;
maxDesync = 150;
maxPacketLoss = 50;
kickClientsOnSlowNetwork[] = {1, 1, 1, 1};
voteThreshold = 1.5;
voteMissionPlayers = 100;
onUnsignedData = "kick (_this select 0)";
onHackedData = "kick (_this select 0)";

يفرض verifySignatures = 2 التحقق من التوقيعات بالإصدار 2 على جميع الإضافات، وهو الحد الأدنى المطلوب لأي خادم عام يعمل بإضافات. ويرفض allowedFilePatching = 0 انضمام العملاء الذين شُغّلوا بالمعامل -filePatching (والقيمة 1 تسمح بذلك لعملاء Headless فقط، والقيمة 2 تسمح للجميع). ويطرد kickDuplicate = 1 الاتصال الثاني القادم من المُعرّف نفسه. ويحدد kickClientsOnSlowNetwork[] لكل مُدخَل ما إذا كانت العتبات الأربع المأخوذة من maxPing وmaxPacketLoss وmaxDesync وdisconnectTimeout تُسجَّل فقط (0) أم تُطبَّق فعلاً (1). ويقبل disconnectTimeout قيماً من 5 حتى 90 ثانية. أما voteThreshold الأعلى من 1 فيجعل التصويتات غير قابلة للتحقق، ويُنهي بذلك أشهر طريقة لتعطيل خادم دون حزمة هجوم واحدة: تغيير المهمة بالتصويت.

7. تحديد معدل الحزم والاتصالات لكل عنوان مصدر

يفيد وضع حد أعلى لكل عنوان مصدر ضد الهجمات الصغيرة والبوتات غير النظيفة. ولأن Arma 3 يعمل بـ UDP خالص، يُستخدم hashlimit، ويحصل منفذ الاستعلام على حد أضيق بكثير من منفذ اللعبة:

iptables -I INPUT -p udp --dport 2303 -m hashlimit --hashlimit-name a3_query --hashlimit-mode srcip --hashlimit-above 10/sec --hashlimit-burst 20 -j DROP
iptables -I INPUT -p udp --dport 2302 -m hashlimit --hashlimit-name a3_game --hashlimit-mode srcip --hashlimit-above 900/sec --hashlimit-burst 1200 -j DROP
iptables -I INPUT -p udp --dport 2302:2306 -m length --length 0:27 -j DROP

تُسقط القاعدة الأولى استعلامات المصدر نفسه بدءاً من أكثر من عشرة في الثانية بشكل دائم، وتُسقط الثانية حزم اللعب بدءاً من أكثر من 900 في الثانية بشكل دائم، وتُسقط الثالثة حزم UDP التي لا تحمل حمولة مفيدة. والأرقام الثلاثة كلها قيم بداية، لا حقائق: فخادم حياتي ممتلئ بـ 80 لاعباً يولّد حزماً أكثر بكثير من جولة Antistasi بستة لاعبين، ومن يضبط الحد بضيق شديد يطرد لاعبيه. لذلك قيسوا أولاً أسبوعاً في التشغيل الطبيعي.

وملاحظتان في هذا الصدد. قواعد iptables المجردة تختفي بعد إعادة التشغيل، وتُحفظ على Debian وUbuntu على النحو التالي:

apt-get install -y iptables-persistent
netfilter-persistent save

ومع UFW تنتمي هذه القواعد إلى /etc/ufw/before.rules، لأنها تختفي خلاف ذلك عند ufw reload التالي. وهناك عنق زجاجة يُغفَل عنه كثيراً، وهو تتبّع الاتصالات في نواة النظام: فـ UDP أيضاً يُنشئ مُدخلات هناك، وإغراق الاستعلامات القادم من عناوين مزيفة كثيرة يملأ الجدول في ثوانٍ. وعندما يمتلئ، يُسقط الخادم الحزم المشروعة أيضاً، ويظهر في السجل «nf_conntrack: table full». والوضع الحالي والحد الأعلى يُظهرهما الأمر:

sysctl net.netfilter.nf_conntrack_count net.netfilter.nf_conntrack_max

8. ملف basic.cfg: النطاق الترددي وأحجام الحزم والملفات الإضافية

ملف الإعداد الثاني لخادم Arma 3 اسمه basic.cfg ويُحمَّل بالمعامل -cfg=، بينما يحمّل -config= ملف server.cfg. وهو يتحكم في سلوك الشبكة ويحتوي على قيمة واحدة بالضبط ذات أثر أمني مباشر:

MaxMsgSend = 1024;
MaxSizeGuaranteed = 512;
MaxSizeNonguaranteed = 256;
MinBandwidth = 15000000;
MaxBandwidth = 100000000;
MinErrorToSend = 0.001;
MinErrorToSendNear = 0.01;
MaxCustomFileSize = 0;
class sockets { maxPacketSize = 1400; };

الإعداد MaxCustomFileSize هو الحجم الأقصى بالبايت لملفات الوجوه والأصوات التي يجلبها اللاعبون ويوزّعها الخادم على الآخرين جميعاً. والقيمة 0 تُعطّل هذا التوزيع. وبذلك يسقط طريق يستطيع عميل واحد من خلاله أن يحتل النطاق الترددي لخادمكم دون أي بنية هجوم. والإعداد MinBandwidth هو النطاق الترددي الذي يفترضه الخادم مضموناً، والقيمة الاستدلالية هي عدد اللاعبين مضروباً بـ 256 kbit/s، أي نحو 16 Mbit/s لأجل 64 خانة. والقيم المتفائلة جداً ترفع الحِمل وفقدان التزامن، لأن الخادم يولّد رسائل يُسقطها بعد ذلك. ويحدد MaxMsgSend عدد الحزم في كل خطوة محاكاة، وهو أول أداة ضد فقدان التزامن، والقيمة الافتراضية 128 منخفضة جداً بمقاييس الخوادم الحديثة.

9. التسجيل، حتى لا تخمّنوا أثناء الهجوم

أهم خطوة هي تلك التي لا يفعلها أحد تقريباً مسبقاً: إنشاء خط أساس للمقارنة ما دام كل شيء يعمل بشكل طبيعي. فبدون قيمة طبيعية لا تستطيعون القول بعد الحادث إن 40,000 حزمة في الثانية كانت كثيرة أم كانت مجرد مساء سبت عادي. وبالأمر apt-get install -y vnstat sysstat يستمر القياس دائماً، ويمنحكم السطر logFile = "arma3server.log"; في server.cfg رؤية الخادم إلى جانب ذلك. وأثناء الحادث تكفي أربعة أوامر:

sar -n DEV 1 10
ip -s link show eth0
dmesg -T | tail -50
tcpdump -ni eth0 udp portrange 2302-2306 -c 200 -q

والمقارنة بين المنافذ هي ما يكشف الصورة. فإذا كان الحِمل واقعاً كله تقريباً على 2303، فهو إغراق استعلامات، وهو يصيب وقت المعالجة. وإذا توزّع بالتساوي على 2302 حتى 2306 مع عناوين مرسل جديدة دائماً، فهو إغراق UDP مزيف، وهو يصيب الوصلة. وفي tcpdump تسري قاعدة ثابتة: قيّدوا دائماً بالمعامل -c، فالتسجيل تحت الحِمل الكامل يُثقل خادماً مُثقلاً أصلاً. وكيف تحلّلون القيم يوضحه المقال كشف هجوم DDoS. وكيف يُثبَّت الخادم ويُحدَّث بشكل نظيف من الأساس يوضحه المقال تثبيت خادم لعب بواسطة SteamCMD.

أين تنتهي هذه الإجراءات

وهنا يأتي الجزء الذي لا يحلّه أي ملف إعداد. فكل الإجراءات السابقة تعمل على خادمكم، أي في نهاية الوصلة. وقاعدة جدار الحماية تبتّ في حزمة سارت فعلاً عبر الكابل. تستطيعون إسقاطها، لكن لا تستطيعون جعلها غير مُرسَلة.

احسبوا معنا مرة. خادم اللعب النموذجي معلّق على 1 Gbit/s، أي 125 ميغابايت في الثانية، والوصلة تمتلئ بمجرد أن يرسل أحد أكثر من ذلك. والمقدار الثاني هو معدل الحزم، وهو في Arma 3 يضرب أولاً في كل الأحوال تقريباً. ومع الحزم الصغيرة بحجم 64 بايت تتسع وصلة بسرعة 1 Gbit/s لنحو 1.49 مليون حزمة في الثانية. أما نواة النظام العادية فتعالج، حسب المعالج وبطاقة الشبكة، بعض مئات الآلاف منها قبل أن تبدأ بالإسقاط، ومحاكاة Arma 3 معلّقة فوق ذلك على نواة معالجة واحدة.

المؤشر القيمة
كتلة المنافذ الافتراضية من 2302 حتى 2306 UDP، ولا TCP لتشغيل اللعب
منفذ الاستعلام منفذ اللعبة زائد 1، والافتراضي 2303 UDP
منفذ RCon (BattlEye) قابل للاختيار عبر RConPort، والمعتاد منفذ اللعبة زائد 4، أي 2306 UDP
المسافة بين المنافذ عند تشغيل عدة نسخ 100 على الأقل (2302 و2402 و2502)
القيمة الاستدلالية للنطاق الترددي في التشغيل الطبيعي عدد اللاعبين مضروباً بـ 256 kbit/s، أي نحو 16 Mbit/s عند 64 خانة
معامل تضخيم بروتوكول Steam 5.5 وفق تحذير US-CERT رقم TA14-017A
الحد الأدنى الموثّق لهجوم فعّال كفى 4 Mbit/s على منفذ الاستعلام لتجميد خادم Arma 3 (تذكرة Bohemia رقم T83469)
1 Gbit/s محسوبةً بالحزم نحو 1.49 مليون حزمة في الثانية عند حجم حزمة 64 بايت
الذُرى التي صُفّيت لدى KernelHost 473.4 Gbit/s بمعدل 41.5 مليون حزمة في الثانية، وبشكل منفصل إغراق UDP بسرعة 112.2 Gbit/s

والصف الذي يذكر 4 Mbit/s هو الأكثر إزعاجاً. فالهجوم على Arma 3 لا يحتاج أن يكون كبيراً ليكون فعّالاً: يكفي أن يرسل ما يكفي من الحزم إلى المنفذ الصحيح. ويعيش المشغّلون ذلك على شكل «الاستخدام لم يكن مرتفعاً أصلاً، ومع ذلك ضاع كل شيء». وفي المقابل تسري على الهجمات الحجمية فيزياء بسيطة: عند 473.4 Gbit/s تصبح كل إعداد محلي بلا معنى، لأن حزم لاعبيكم لم تعد تمر من قبل ذلك. فالهجمات الحجمية يجب أن تنتهي في الشبكة الواقعة قبل الخادم.

ما تضعه KernelHost في المقابل

الحماية الدائمة المشمولة في كل خادم

الحماية من DDoS لدى KernelHost مبنية على مستويين وفعّالة بشكل دائم، دون أن تحتاجوا إلى تشغيل شيء أو طلبه أو إعداده:

  • المستوى 1: سعة تخفيف تبلغ 17 Tbps في شبكة التنقية العالمية. تُنقّى الهجمات الحجمية قريباً من مصدرها، قبل أن تصل إلى مركز البيانات.
  • المستوى 2: تصفية Arbor في الوقت الفعلي بسعة 3.2 Tbps في فرانكفورت أم ماين. وقبل الخادم مباشرةً تُكشَف الأنماط الخاصة بكل بروتوكول وتُسقَط، حزمةً حزمة.

وخاصّتان هنا حاسمتان. الحماية تعمل بشكل دائم ولا تحتاج إلى الاستجابة لهجوم أولاً، فلا توجد دقائق في البداية يكون الخادم فيها غائباً. ولا يُستخدم التوجيه إلى العدم (Nullrouting): فعنوان IP الخاص بكم يبقى في الشبكة، وتُسقَط الحزم الضارة وحدها. ومن يسحب عنوان IP من الشبكة يصل بكم إلى النتيجة نفسها التي يريدها المهاجم. أما الألعاب والبروتوكولات المشمولة فيسردها المقال حماية خوادم اللعب من DDoS في الوقت الفعلي.

Advanced DDoS Protection للمشاريع التي تتعرض للقصف باستمرار

بعض المشاريع لا تُهاجَم من حين إلى آخر، بل تُهاجَم بشكل مقصود وعلى مدى أسابيع. والخادم الحياتي الذي يملك جمهوراً ثابتاً ومشهداً تنافسياً هو الحالة القاعدة في ذلك، لا الاستثناء. ولهذا توجد Advanced DDoS Protection ابتداءً من 50.00 EUR في الشهر، بنظام PrePaid، دون حد أدنى لمدة الالتزام ودون رسوم إعداد. والفرق ليس في سعة أكبر، بل في التحكم:

  • عنوان IP مخصص للحماية من النواة الفرانكفورتية، يُحوَّل خادمكم إليه داخل شبكتنا. ولا يلزم أي تغيير في جهتكم.
  • قواعد حماية تديرونها بأنفسكم لكل منفذ وبروتوكول في منطقة العملاء: تضبطون بشكل منفصل ما المسموح على 2302 UDP وما المسموح على 2303 UDP، وبذلك يمكنكم تشغيل منفذ الاستعلام بحدود أضيق بكثير من منفذ اللعبة.
  • التغييرات تسري في الوقت الفعلي، أي تستطيعون التعديل أثناء هجوم جارٍ بدلاً من انتظار نافذة صيانة.
  • ملف حماية مناسب لكل لعبة، وكذلك للتطبيقات المعدَّلة والخاصة على أي منفذ TCP أو UDP.

مقارنة بين المستويين

الخاصية الحماية الدائمة المشمولة من DDoS Advanced DDoS Protection
السعر مشمولة في كل حزمة خادم دون زيادة في السعر ابتداءً من 50.00 EUR في الشهر، بنظام PrePaid
سعة التصفية 17 Tbps تنقية عالمية إضافةً إلى تصفية Arbor في الوقت الفعلي بسعة 3.2 Tbps في فرانكفورت أم ماين التصفية نفسها ذات المستويين
عنوان IP عنوان IP الخاص بخادمكم عنوان IP إضافي مخصص للحماية
مجموعة القواعد ملفات آلية، ولا حاجة إلى أي إعداد قواعد خاصة بكم لكل منفذ وبروتوكول في منطقة العملاء، مثلاً 2302 و2303 بشكل منفصل
التغييرات تسري آلياً مع النظام تسري في الوقت الفعلي، وأثناء الهجوم أيضاً
ملف اللعبة ملفات محسّنة للألعاب الشائعة ملف مناسب للعبة، وللتطبيقات المعدَّلة أيضاً
التوجيه إلى العدم لا لا
مدة الالتزام مرتبطة بحزمة الخادم بنظام PrePaid، دون حد أدنى لمدة الالتزام، ودون مهلة إشعار للإلغاء، ودون رسوم إعداد

ولمعظم مشاريع Arma 3 تكفي الحماية الدائمة المشمولة مع إعداد نظيف للخادم. أما Advanced DDoS Protection فهي الجواب على أن يأخذ أحدهم الأمر على المستوى الشخصي.

أخطاء شائعة وحلولها

«نقلت المنفذ من 2302 إلى 2402، والهجوم استمر»: هذا هو المتوقع. فالخادم يسجّل منفذه الجديد بنفسه لدى خادم Steam الرئيسي، وتنشره قائمة الخوادم فوراً من جديد. وتغيير المنفذ لا يفيد إلا ضد شخص يستخدم عنواناً قديماً من لقطة شاشة قديمة.

«حجبت 2303 بالكامل، والآن لا يجدنا أحد»: هذا بالضبط ما يحدث. فبدون جواب على منفذ استعلام Steam يغيب الإدراج في متصفح الخوادم، وتُظهر كل صفحة حالة وكل بوت Discord الخادم على أنه غير متصل. والصحيح هو تحديد المعدل لكل عنوان مصدر، لا الحجب.

«في السجل مكتوب NetServer::SendMsg: cannot find channel»: تظهر هذه الرسالة عندما يريد الخادم الكتابة إلى اتصال لم يعد موجوداً. وهي ترافق في العادة انقطاع اتصالات اللاعبين وتراجع الأداء (وتُدرجها Bohemia تحت T83936)، ولا تعني بالضرورة وجود هجوم. تحقّقوا أولاً مما إذا كان معدل الحزم على الواجهة ملحوظاً أصلاً.

«قواعد iptables لدي لا تعمل»: ثلاثة أسباب شائعة. القواعد موضوعة بعد سلاسل UFW ولا يُوصَل إليها أبداً، أو أنها اختفت بعد إعادة التشغيل الأخيرة (وهنا يفيد netfilter-persistent save أو مُدخَل في /etc/ufw/before.rules)، أو أن الهجوم حجمي والقاعدة تعمل بشكل صحيح على وصلة ممتلئة أصلاً. تحقّقوا بالأمر iptables -L INPUT -n -v مما إذا كانت عدّادات المطابقات ترتفع. فإذا بقيت عند الصفر، فالقاعدة لا يُوصَل إليها.

«BattlEye يطرد جميع اللاعبين منذ جدار الحماية الجديد»: الخادم لم يعد يصل إلى arma31.battleye.com. فالمنافذ الصادرة 2344 على TCP وUDP و2345 على TCP يجب أن تبقى مفتوحة، وإلا انقطع اتصال مكافحة الغش الخاص بالخادم.

«مزودي السابق حجب عنوان IP الخاص بي»: هذا هو التوجيه إلى العدم. فالمزود يحمي بذلك شبكته الخاصة، أما بالنسبة لكم فالنتيجة مطابقة لهجوم ناجح، وغالباً لساعات بعده أيضاً. اسألوا عند الشك عمّا إذا كانت الحركة تُصفّى أم تُوجَّه إلى العدم. فالجواب يقرر في جهوزيتكم أكثر من أي معطى عن العتاد.

«لا أرى في tcpdump شيئاً ملحوظاً»: إذا كانت الحركة تُصفّى في الشبكة الواقعة قبل الخادم، فلا يصل إلى الخادم شيء كما هو متوقع. وهذه هي الحالة الطبيعية عند عمل التصفية. وفي المقابل: إذا كانت الوصلة مشبعة، فقد لا تصلكم حتى جلسة SSH التي أردتم القياس بها. استخدموا في هذه الحالة وحدة تحكم VNC في منطقة العملاء، فهي تعمل بشكل مستقل عن شبكة النظام الضيف.

باختصار

  • يحتاج خادم Arma 3 نحو الخارج إلى ثلاثة منافذ UDP بالضبط: 2302 لحركة اللعب والصوت، و2303 لاستعلام Steam، و2304 للتسجيل لدى خادم Steam الرئيسي. أما TCP فلا تحتاجه اللعبة.
  • يحمل المنفذ 2306 UDP حركة BattlEye وواجهة RCon، وينتمي حصراً إلى عناوين الإدارة الخاصة بكم، وتُضبط عبر RConPort وRConIP في beserver_x64.cfg.
  • منفذ استعلام Steam رقم 2303 هو النقطة الأكثر حساسية: فبروتوكول Steam يملك وفق US-CERT TA14-017A معامل تضخيم يبلغ 5.5، وكل استعلام يستهلك وقت معالجة في النواة التي تحمل المحاكاة. حدّدوا المعدل بدلاً من الحجب.
  • أبقوا steamProtocolMaxDataSize صغيراً بالقدر الذي تسمح به قائمة الإضافات، واضبطوا MaxCustomFileSize = 0; في basic.cfg: فكلاهما يُصغّر كمية البيانات التي يسلّمها خادمكم دون طلب.
  • في Arma 3 يحسم معدل الحزم، لا النطاق الترددي. وتوثّق Bohemia منذ عام 2015 تحت T83469 أن 4 Mbit/s على منفذ الاستعلام كفت لتجميد خادم.
  • الإجراءات المحلية تنتهي عند الوصلة. فمن حجم هجوم يبلغ 1 Gbit/s أو بعض مئات الآلاف من الحزم في الثانية، تحسم التصفية في الشبكة الواقعة قبل الخادم وحدها.
  • لدى KernelHost تكون الحماية الدائمة ذات المستويين مشمولة في كل حزمة خادم دون زيادة في السعر وفعّالة من لحظة التسليم، دون توجيه إلى العدم. وتُكمّلها Advanced DDoS Protection ابتداءً من 50.00 EUR في الشهر بعنوان IP مخصص للحماية وقواعد لكل منفذ تديرونها بأنفسكم.

إذا كان مشروعكم يعمل لدى KernelHost أصلاً، فالتصفية فعّالة دون أن تفعلوا شيئاً. وإذا لاحظتم مع ذلك أموراً غير معتادة، افتحوا تذكرة دعم ليُعاد ضبط قواعد التصفية لعنوان IP الخاص بكم. وأثناء هجوم جارٍ تستطيعون الوصول إلينا إضافةً إلى ذلك عبر محادثة الطوارئ على WhatsApp على الرقم ‎+43 650 8209883.

الأسئلة الشائعة

خادم Arma 3 الخاص بي غير متصل الآن. كيف أعرف إن كان الأمر هجوم DDoS؟
انظروا إلى معدل الحزم على الواجهة، لا إلى حِمل المعالج. فبالأمر sar -n DEV 1 10 ترون الحزم والبايتات في الثانية، وبالأمر ip -s link show eth0 ترون عدّادات الحزم المُسقَطة. والكاشف هو التوزيع على المنافذ: فإذا كان كل شيء تقريباً على 2303 UDP، فهو إغراق استعلامات Steam ويصيب وقت المعالجة. وإذا توزّع مع عناوين مرسل جديدة دائماً على 2302 حتى 2306، فهو إغراق UDP مزيف ويصيب الوصلة. وإذا بقيت القيمتان عاديتين وتقطّع الخادم مع ذلك، فالسبب في الغالب هو المهمة أو حِمل الذكاء الاصطناعي.
ما المنافذ التي يحتاجها خادم Arma 3 فعلاً؟
نحو الخارج ثلاثة منافذ UDP بالضبط: 2302 لحركة اللعب ونقل الصوت المدمج VON، و2303 لاستعلام Steam، و2304 للتسجيل لدى خادم Steam الرئيسي. أما المنفذ 2305 فتُدرجه Bohemia كمحفوظ وغير مستخدم حالياً، والمنفذ 2306 يحمل حركة BattlEye مع RCon وينتمي إلى عناوين الإدارة الخاصة بكم فقط. ولا يحتاج Arma 3 إلى TCP لتشغيل اللعب. ويحدد معامل التشغيل -port المنفذ الأول وحده، أما الأربعة الباقية فتنتج عنه بشكل ثابت كمنفذ اللعبة زائد 1 حتى زائد 4.
هل أستطيع ببساطة حجب منفذ استعلام Steam رقم 2303؟
لا. فبدون جواب على 2303 UDP يختفي خادمكم من متصفح خوادم Steam، وتُبلغ كل صفحة حالة وكل بوت Discord عنه على أنه غير متصل. وعندها لن يجده اللاعبون الجدد. والصحيح هو تحديد المعدل لكل عنوان مصدر: فمتصفح الخوادم الحقيقي يستعلم بضع مرات في الدقيقة، أما المهاجم فمئات المرات في الثانية. ويفيد إضافةً إلى ذلك إبقاء steamProtocolMaxDataSize صغيراً بالقدر الذي تسمح به قائمة إضافاتكم بالكاد، لأن هذه القيمة تحدد حجم الجواب مباشرةً.
ما هو انعكاس استعلام Steam ولماذا يصيب خوادم Arma 3؟
انعكاس استعلام Steam يعني أن المهاجم يرسل استعلامات بعنوان مرسل مزيف إلى خوادم لعب كثيرة، لكي تصل أجوبتها إلى الضحية الحقيقية. ويحدد US-CERT معامل تضخيم النطاق الترددي لبروتوكول Steam في التحذير TA14-017A بـ 5.5. وفي Arma 3 يكون الجواب كبيراً بشكل خاص، لأن قائمة الإضافات والتوقيعات الكاملة تُرسَل معه. وخادمكم متأثر مرتين: فهو قد يخدم كمُضخِّم ضد أطراف ثالثة، وكل استعلام يستهلك وقت معالجة في النواة الواحدة التي تحمل المحاكاة.
هل يحمي BattlEye خادم Arma 3 من هجمات DDoS؟
لا. فـ BattlEye نظام لمكافحة الغش ويفحص اللاعبين المتصلين أصلاً. والمهاجم الذي يُغرق خادمكم بحزم UDP لا يريد الانضمام أبداً، وحزمه قد وصلت منذ وقت طويل قبل أن يكون لدى BattlEye ما يفحصه. ومع ذلك فهو واجب على أي خادم عام. والانتباه الخاص يحتاجه واجهة RCon: فهي تعمل عبر UDP على المنفذ المضبوط في beserver_x64.cfg باسم RConPort، والمعتاد 2306، وينبغي تقييدها عبر RConIP على 127.0.0.1 أو على عنوان إدارة ثابت.
هل يفيد تغيير عنوان IP أو المنفذ بسرعة الآن؟
لفترة قصيرة فقط. فالخادم يسجّل العنوان والمنفذ بنفسه لدى خادم Steam الرئيسي، وتنشرهما قائمة الخوادم خلال دقائق من جديد. ولهذا لا يفيد تغيير المنفذ من 2302 إلى 2402 إلا ضد شخص يستخدم معطىً قديماً من لقطة شاشة قديمة. وتغيير العنوان يمنحكم وقتاً، لكنه لا يحل المشكلة ما دام العنوان الجديد يظهر علناً في قائمة الخوادم من جديد. وفكّروا إضافةً إلى ذلك في مُدخلات DNS القديمة: فمُدخَل A منسي يشير إلى العنوان السابق يُبطل أثر أي تغيير.
هل أستطيع الدفاع عن نفسي بـ iptables أو UFW ضد هجوم DDoS؟
ضد الهجمات الصغيرة والبوتات غير النظيفة نعم، وضد الهجمات الحجمية لا. فقاعدة جدار الحماية على الخادم تبتّ في حزم سارت فعلاً عبر وصلتكم. وإذا كانت الوصلة مشبعة، فحزم لاعبيكم لم تعد تمر من قبل ذلك، بصرف النظر عن جودة مجموعة قواعدكم. والمفيد هو قواعد hashlimit لكل عنوان مصدر، ضيقة على 2303 UDP وأوسع بكثير على 2302 UDP. أما الهجمات الحجمية فيجب أن تنتهي في الشبكة الواقعة قبل الخادم.
من أي حجم لا يعود خادم Arma 3 قادراً على التحمل وحده؟
أبكر مما يتوقعه معظم المشغّلين. فتوثّق Bohemia منذ عام 2015 تحت التذكرة T83469 أن 4 Mbit/s من الاستعلامات المزيفة على منفذ استعلام Steam كفت لتجميد خادم Arma 3، لأن المحاكاة تعمل في جوهرها على نواة معالجة واحدة. وفي الهجمات الحجمية تسري الفيزياء: خادم اللعب النموذجي معلّق على 1 Gbit/s، أي 125 ميغابايت في الثانية، وعند حزم بحجم 64 بايت نحو 1.49 مليون حزمة في الثانية. أما نواة النظام العادية فتعالج بعض مئات الآلاف منها فقط.
كيف أؤمّن Headless Client بشكل صحيح؟
عبر سطرين في server.cfg: headlessClients[] وlocalClient[]. فبدون هذين المُدخَلين لا يقبل الخادم أي اتصال من Headless Client على الإطلاق. وأدرجوا هناك 127.0.0.1 حصراً أو العنوان الثابت لجهاز Headless Client الخاص بكم، ولا تدرجوا مجالاً كاملاً من العناوين أبداً، لأن localClient[] يمنح العنوان المُدرَج نطاقاً ترددياً غير محدود وعملياً بلا فحص لزمن الاستجابة. وراعوا إضافةً إلى ذلك أن كل Headless Client يحتل خانة من maxPlayers.
هل يصبح خادمي لدى KernelHost غير متصل أثناء الهجوم؟
لا. فلا يُستخدم التوجيه إلى العدم. عنوان IP الخاص بكم يبقى في الشبكة، وتُسقَط الحزم الضارة وحدها. والحماية على مستويين: سعة تخفيف تبلغ 17 Tbps في شبكة التنقية العالمية، وتصفية Arbor في الوقت الفعلي بسعة 3.2 Tbps في فرانكفورت أم ماين. وهي تعمل بشكل دائم ولا تحتاج إلى الاستجابة لهجوم أولاً، فلا توجد دقائق في البداية يكون الخادم فيها غائباً.
هل تكلّف الحماية من DDoS لدى KernelHost مبلغاً إضافياً ومتى أحتاج إلى Advanced DDoS Protection؟
الحماية الدائمة ذات المستويين مشمولة في كل حزمة خادم دون زيادة في السعر وفعّالة من لحظة التسليم، ولا تحتاجون إلى طلبها ولا إلى تشغيلها. أما Advanced DDoS Protection فتحتاجونها إذا كان مشروعكم يُهاجَم بشكل مقصود وعلى مدى أسابيع لا من حين إلى آخر، وأردتم التحكم في التصفية بأنفسكم. فتحصلون على عنوان IP مخصص للحماية وتديرون قواعد الحماية لكل منفذ وبروتوكول بأنفسكم في منطقة العملاء، مثلاً 2302 و2303 UDP بشكل منفصل. والتغييرات تسري في الوقت الفعلي. ويبدأ السعر من 50.00 EUR في الشهر، بنظام PrePaid، دون حد أدنى لمدة الالتزام ودون رسوم إعداد.

Arma 3 حماية Arma 3 من DDoS Altis Life حماية خوادم اللعب BattlEye Headless Client المنفذ 2302 Advanced DDoS Protection