
أتمتة إيقاف الروبوتات الضارة من الوصول إلى خادمك
واجهة مستخدم نصية (TUI)، ووحدة تحكم ويب، وواجهة سطر أوامر (CLI) تساعدك على تهيئة خادمك لإيقاف الروبوتات الضارة دون الاختباء خلف شبكة توصيل المحتوى (CDN).
يعمل جنبًا إلى جنب مع NGINX وجدار الحماية الحالي لديك (nftables أو iptables):

يبذل التطبيق قصارى جهده لعدم إقصائك من الخادم، لكنك تستخدمه على مسؤوليتك الخاصة. ولاحظ أنه مرخّص بموجب AGPL، لذا إذا كنت تستخدمه تجاريًا، فتأكد من التزامك بالترخيص.
على Debian أو Ubuntu، من مستودع APT:
curl -fsSL https://ivankovic.github.io/stop-bots/key.gpg \
| sudo tee /usr/share/keyrings/stop-bots.gpg > /dev/null
echo "deb [signed-by=/usr/share/keyrings/stop-bots.gpg] \
https://ivankovic.github.io/stop-bots stable main" \
| sudo tee /etc/apt/sources.list.d/stop-bots.list
sudo apt update && sudo apt install stop-bots
الحزمة توفر man stop-bots (وصفحة لكل فعل، مثل man stop-bots-batch) وإكمالات bash وzsh وfish. لا تثبّت أي خدمة ولا تبدأ أي شيء.
أو من crates.io، مع Rust 1.88 أو أحدث:
cargo install stop-bots
أو نزّل ملفاً ثنائياً ثابتاً لـ x86_64 أو aarch64 Linux من إصدارات GitHub
releases.
install
مضيفاً ليس Debian أو مشتقاً منها.nft، أو iptables-restore وip6tables-restore، لجدار
الحماية؛ nginx للباقي. يعمل NGINX داخل حاوية أيضاً — انظر
تشغيل NGINX في حاوية.sudo stop-bots يبدأ واجهة TUI. يحتاج صلاحيات root: فهو يعيد كتابة /etc/nginx ويحمّل قواعد
جدار الحماية.u ينزّل كل القوائم: قوائم البوتات، ونطاقات IP الخاصة بالزاحفات، وأي تغذية أو دولة
قمت بتفعيلها.1) تحتوي على السياسة على مستوى المضيف: فئات البوتات المحظورة،
والدول، والكاشفات التي تقرأ سجلاتك. في شاشة NGINX (4)، يجد r مواقعك.
تسرد شاشة الحظر (5) كل قاعدة أضافها الكاشفات أو أضفتها أنت، والسبب.a يطبّق كل شيء. يعرض أولاً ما سيتغير — الملفات، والقواعد المضافة
والمحذوفة، وحكم فحص القفل (d للفرق) — ثم يسأل.sudo stop-bots install firewall يجعل القواعد المطبقة تنجو من إعادة التشغيل. بدونها،
تعود إعادة التشغيل بدون أي قواعد على الإطلاق.sudo stop-bots status يفحص النواة، والوحدات والملفات، ويقول ما هو
مفقود.sudo stop-bots status
sudo stop-bots batch --dry-run --diff
sudo stop-bots batch --apply
sudo stop-bots install firewall
sudo stop-bots status
batch --dry-run لا يقوم بتنزيل أو فحص أي شيء: عند تثبيت جديد تمامًا، يعرض كتل NGINX من قائمة البوتات المدمجة في الملف التنفيذي، ولا توجد قواعد جدار حماية بعد، لأنه لم يتم قراءة أي شيء من سجلاتك. sudo stop-bots batch بدون --apply يقوم بالتنزيلات والفحوصات ويكتب الملفات للمراجعة دون تطبيقها. راجع Unattended, from cron لمعرفة ما يفعله batch.
sudo stop-bots uninstall all --dry-run
sudo stop-bots uninstall all
القائمة الأولى تسرد كل خطوة، والثانية تنفذها. انظر الترقية وإلغاء التثبيت.
الروبوتات المعروفة، حسب الفئة (ماسح ضوئي / محرك بحث / زاحف ذكاء اصطناعي)، مصدرها
ArcJet's Well-Known Bots،
ai.robots.txt و
NGINX Ultimate Bad Bot Blocker
قائمة. حجب فئة يحقن قاعدة if ($http_user_agent ...) في إعداد NGINX لكل موقع.
طلبات كثيرة جدًا، عبر تحديد معدل NGINX نفسه.
بلطف، أولًا — ملف robots.txt مُولَّد يسرد كل روبوت تحجبه، للزاحفات التي تحترمه،
بالإضافة إلى مسار honeypot أدناه.
إلا حيث تقول خلاف ذلك — إعفاءات المسار لكل موقع، والعناوين الموثوقة ووكلاء
المستخدم (trust)، التي لا ينطبق عليها أي حجب أو قائمة أو حد معدل.
الطلبات التي لا تبدو كمتصفح، لكل موقع. ست قواعد مستقلة، لكل منها مفتاح تشغيل خاص وكلها معطلة افتراضيًا — مفتاح واحد لكل قاعدة بحيث إذا توقف شيء يخصك عن العمل، يمكنك معرفة أي قاعدة فعلت ذلك:
| القاعدة | تصد، إلى جانب الروبوتات |
|---|---|
| HTTP/1.0 و HTTP/1.1 | الزاحفات وعملاء API الذين لا يتحدثون HTTP/2 |
لا يوجد ترويسة Accept | بعض عملاء API لا يرسلون أي منها |
لا يوجد Accept-Language | أدوات الخصوصية تحذفها |
User-Agent فارغ/غائب | النصوص البرمجية وفحوصات الصحة غالبًا ما تحذفه |
Host عنوان IP مجرد | يكسر الوصول إلى الموقع عبر IP |
| TLS 1.0 / 1.1 | العملاء القديمة جدًا فقط |
هناك سبعة خيارات:
| الخيار | الغرض منه |
|---|---|
403 Forbidden (افتراضي) | يقول إن الحجب كان متعمدًا؛ الوحيد الذي يمكن لإنسان أُمسك به خطأً التصرف بناءً عليه |
404 Not Found | يخفي أن أي شيء قد حُجب على الإطلاق |
410 Gone | يطلب من الزاحفات حسنة السلوك إسقاط الرابط نهائيًا — فضّل هذا على 403 عندما تصد الزاحفات بدلًا من المهاجمين |
429 Too Many Requests | يخبر عميلًا مهذبًا بالتراجع وإعادة المحاولة |
418 I'm a teapot | مزحة RFC 2324. إنها تعمل؛ لكنها غير مسجلة لدى IANA، و NGINX يرسلها بجسم فارغ |
444 close connection | لا رد على الإطلاق؛ الأرخص، لكن لا يمكن تمييزه عن تعطل الخادم |
Tarpit | يجيب بـ 403 لكن يقطر الجسم بمعدل بايت واحد في الثانية، فينتظر العميل بدلًا من المضي قدمًا |
الـ tarpit هو الخيار الألطف لحالة إيجابية خاطئة — العميل المُمسك به خطأً يُبطأ، لا يُرفض —
والأقسى من حيث التكلفة على روبوت، الذي يبقى اتصاله خاملًا. شيء واحد يجب معرفته قبل اختياره:
إنه يحتفظ بأحد اتصالات عاملك طوال المدة أيضًا، فطوفان من عملاء tarpit يتنافس مع الزوار
الحقيقيين على worker_connections.
كل من هذه مفتاح مستقل في لوحة "الحجب التلقائي" في لوحة التحكم، أو
set-detector في CLI. كل منها يضيف حجب جدار ناري مؤقت. مع nftables يرفعه النواة عند
انتهاء صلاحيته؛ مع iptables يبقى حتى يتم تطبيق النص البرمجي في المرة التالية.
الكشف مُنوَّب: يكشف الكاشف فقط ما تُظهره السجلات داخل نافذته (يوم،
أو ساعة للثلاثة السلوكية أدناه؛ set-detector --window-hours يغيّرها)،
والحجب يستهلك الدليل الذي أنشأه. لذا حجب منتهي الصلاحية يعود فقط لجريمة جديدة،
ومسح أولي لا يحجب أبدًا لأسطر سجل قديمة. list-detectors يُظهر مفتاح كل واحد،
طول الحجب، العتبة والنافذة.
تعمل على مؤقت داخلي يعيد قراءة سجلات وصول SSH و NGINX كل دقيقة — لكن فقط بينما TUI أو واجهة الويب قيد التشغيل. أي منهما يحافظ على نفس الجدول، في نفس قاعدة البيانات، لذا ترك واجهة الويب مفتوحة كافٍ؛ لا شيء يُكتشف عندما لا يعمل أي منهما. لخادم ليس عليه عملية stop-bots على الإطلاق، انظر بدون إشراف، من cron أدناه.
الخمسة الأولى مفعّلة في قاعدة بيانات جديدة: