وهنا بعض اللقطات.

PiAlert في العمل

الجهاز مغلق ، منظر أمامي

جهاز معطل ، منظر جانبي ،
يجب أن أقول إن ما حصلت عليه ، في أحسن الأحوال ، يمكن أن يطلق عليه نسخة ألفا من الجهاز. شاركت رمز المشروع ونموذج الطباعة ثلاثية الأبعاد للحالة في المجال العام على أمل أنه إذا كان مشروعي يهم شخصًا ما ، فسيساعدني في تحسينه من أجل الصالح العام.
ملخص المشروع
بعد حادثة وقعت مؤخرًا مع أحد خوادمي ، أدركت أنني أحب حقًا البحث في السجلات ومعرفة ما حدث. عادة ما أستخدم الأوامر التالية:
tail -n 80 -f /var/log/apache2/error.log
tail -n 80 -f /var/log/apache2/access.log
tail -n 80 -f /var/log/auth.log
من المثير للاهتمام معرفة الصفحات التي تحاول الروبوتات الوصول إليها من أي مكان ، أو الحسابات التي تحاول تسجيل الدخول إليها عبر SSH. يبدو أيضًا مثل أفلام القراصنة. ثم اعتقدت أنه يمكنني إنشاء شيء يبدو أكثر جاذبية من نافذة طرفية. في هذه اللحظة ولد المشروع الذي أتحدث عنه هنا.
تغيرت نتائج مراقبة محاولات تسجيل الدخول مؤخرًا. حدث هذا بعد أن نفذت إجراء تسجيل دخول أكثر صرامة. وبالتحديد ، انخفض عدد محاولات تسجيل الدخول إلى النظام بشكل كبير. أصبح هذا واضحًا بعد تشغيل نظام مراقبة الخادم الذي أنشأته لمدة 24 ساعة. أدناه سأتحدث عن هذا.
هذه المادة مقسمة إلى ثلاثة أقسام. الأول يتعلق بالأجهزة ، والثاني يتعلق بإعداد الخوادم ، والثالث حول برامج Raspberry Pi.
المعدات
تم تجميع جهازي من المكونات التالية:
- التوت بي زيرو W المجلس .
- لوحة Pimoroni Blinkt LED ! ...
- رخيصة 7 أجزاء 4 أرقام العرض (أبيض) من AliExpress.
هنا مخطط الاتصال.

رسم تخطيطي لتوصيل المكونات
باللوحة لتوصيل لوحة Blinkt LED بـ Raspberry Pi! تم استخدام أسلاك توصيل DuPont . من ناحية ، قمت بقصها ولحامها بالمسامير المقابلة لمنفذ GPIO ذو 40 سنًا باللوحة. لم أتمكن من توصيله مباشرة باللوحة لأنني ما زلت بحاجة إلى توصيل شاشة به.
لقد استغرق الأمر وقتًا طويلاً لتشغيل اللوحة. في البداية اعتقدت أن المثيل الخاص بي يعاني من اتصالات سيئة في الموصل. ولإيجاد ذلك ، كان علي أن أخوض التجربة والخطأ ، وأقضي وقتًا أطول بكثير مما أود أن أقضيه في ذلك. بعد أن تواصلت مع Pimoroni عبر Twitter، اتضح أن الإصدارات المبكرة من Blinkt! استخدم الدبوس رقم 2 لـ 5V ، وليس الدبوس رقم 4 كما هو موضح في pinout.xyz . ومع ذلك ، حتى اكتشفت ذلك ، طلبت على عجل لوحة Blinkt! LED أخرى في حالة عدم عمل المنجم. والآن ، بعد أن تمكنت من إطلاق المشروع الأول ، أحتاج إلى التفكير في مشروع جديد يمكنني فيه استخدام المشروع الثاني.
لقد وضعت كل هذه المكونات في علبة صممتها في Tinkercad... تمت طباعة الجسم على طابعة Ender 3 Pro 3D الخاصة بي. حصلت على الحالة ، لكنني ما زلت لا أستطيع التفكير في كيفية صنع أجزائها بحيث تتلاءم بإحكام مع بعضها البعض ، أو يتم تثبيتها مع بعضها البعض بمزالج. نتيجة لذلك ، قمت بتشكيل بضع وظائف على أحد أجزاء الجسم ، مصممة لمسامير M5 ، والتي استخدمتها لتجميع الجهاز النهائي. يتم وضع هذه المنشورات على طول الحواف بحيث توجد مساحة كافية في علبة Raspberry Pi.
لطباعة الجسم ، استخدمت بلاستيك PLA من مصنع غير معروف (درجة حرارة الطباعة - 217 درجة مئوية ، معدل التعبئة - 10٪). لقد قمت بتطبيق الإعدادات المعتادة التي تم التقاطها بعد مشاهدة مقاطع فيديو مختلفة على YouTube .

نتائج عدة محاولات لطباعة مجموعة

تجميع الجسم
لقد تمكنت فقط من إنشاء لوحة أمامية ذات مظهر لائق في المحاولة التاسعة. في كل مرة أقوم بطباعتها ، اتضح أن هناك حاجة إلى نقل شيء ما قليلاً ، أو في مكان ما ، وإن كان قليلاً ، يجب تصحيح شيء ما. لقد استخدمت Tinkercad بضع مرات فقط أثناء تحرير النموذج ، وكان علي أن أبدأ العمل عليه تقريبًا من البداية. كنت أرغب في إصلاح شريط Blinkt LED! باستخدام اللقطات ، ولكن بعد بضع محاولات فاشلة تخلت عن هذه الفكرة وحل المشكلة بمسدس الغراء (أحب هذا الشيء!). نتيجة لذلك ، قمت بإصلاح كل من الشاشة ولوحة Raspberry Pi معها. بعد الانتهاء من العمل في القضية ، كنت أقوم بحل مشكلة وضع السبورة فيها. في البداية ، لم أقم بإصلاح اللوحة في العلبة بأي شكل من الأشكال ، ولكن بسبب هذا ، تحول توصيل كابل USB به إلى مغامرة حقيقية.في الإصدار الأخير من العلبة (إذا كان بإمكاننا القول على الإطلاق أن بعض إصداراتها ستكون "نهائية") أود التخلص من المسامير ، من الفتحات الخاصة بها ومن المنشورات الموجودة داخل العلبة ، وإيجاد طريقة لربط أجزاء العلبة ، على سبيل المثال ، بـ باستخدام المزالج. إذا أراد شخص ما المشاركة في العمل على المجموعة وتغيير كل شيء فيها - فنحن نرحب بك! وأريد أيضًا تغطية اللوحة الأمامية للحالة بشيء مثل الزجاج الشفاف أو قطعة من الأكريليك. سيعطي هذا الجهاز نظرة نهائية ، ويخفي أيضًا التفاصيل "التقنية".إذا أراد شخص ما المشاركة في العمل على المجموعة وتغيير كل شيء فيها - فنحن نرحب بك! وأريد أيضًا إغلاق اللوحة الأمامية للحالة بشيء مثل الزجاج الشفاف أو قطعة من الأكريليك. سيعطي هذا الجهاز نظرة نهائية ، ويخفي أيضًا التفاصيل "التقنية".إذا أراد شخص ما المشاركة في العمل على المجموعة وتغيير كل شيء فيها - فنحن نرحب بك! وأريد أيضًا تغطية اللوحة الأمامية للحالة بشيء مثل الزجاج الشفاف أو قطعة من الأكريليك. سيعطي هذا الجهاز نظرة نهائية ، ويخفي أيضًا التفاصيل "التقنية".
تم بالفعل استخدام لوحة Raspberry Pi التي يعتمد عليها هذا المشروع في مشروع آخر يحتاج إلى منفذ GPIO ذو 40 سنًا ليتم تثبيته على الجزء الخلفي من اللوحة. اتضح أن يكون زائد. تم إصلاح اللوحة بحزم في الحالة ، في مشاريع أخرى ربما لن أستخدمها. لذلك ، قمت بثني بعض الدبابيس من أجل وضع كل شيء في العلبة بشكل أفضل.

كل شيء مناسب!
في النهاية ، خطرت لي فكرة أخرى ، وهي أنني يجب أن أجهز الجهاز بزرين على الأقل. ربما لا تخرجهم ، لكن ببساطة تخفيهم في مكان ما في العلبة. واحد مطلوب للتبديل بين أنواع مختلفة من الهجمات الثابتة وعرض عددها. والثاني يجب ، بضغطة قصيرة ، إيقاف تشغيل الشاشة ، وبضغطة طويلة ، قم بإغلاق Raspberry Pi برفق. إذا احتجت إلى ذلك ، يمكنني دائمًا الاتصال بجهازي عبر SSH ، وإذا كنت بحاجة إليه حقًا ، يمكنني إنشاء مسار URL يستدعي الأمر
sudo halt.
تكوين الخادم
عندما ، بعد الحادثة المذكورة أعلاه ، كنت أقوم بتعزيز حماية الخوادم وإعداد المراقبة ، تحققت من تثبيت برنامج fail2ban عليها . هذا رائع البرمجيات الحرة مفتوحة المصدر-مشروع. يراقب Fail2ban السجلات على الخادم ويسجل معلومات حول شيء لا ينبغي أن يحدث ، في ظل الظروف العادية ، مثل عدة محاولات فاشلة لتسجيل الدخول إلى الخادم عبر SSH. بعد ذلك ، يحظر البرنامج عنوان IP الذي تنشأ منه الطلبات المشبوهة ، وذلك في حالة ما إذا كانت مشكلة خطيرة محتملة ، أو في حالة تكرار أحداث معينة خلال فترة زمنية محددة مسبقًا. بشكل افتراضي ، يراقب fail2ban حركة مرور SSH ، ولكن يمكن تكوين البرنامج لمراقبة شيء آخر ، مثل عدد أخطاء 404 أو عدد المحاولات الفاشلة لتسجيل الدخول إلى لوحة إدارة مشروع WordPress .
يسمح لك Fail2ban بإنشاء أفعالك الخاصة التي يتم استدعاؤها عند وقوع أحداث مختلفة. اتضح أن الأمر أكثر تعقيدًا من القيام بشيء مثل طلب تجعيد بسيط ، لذلك انتهى بي الأمر باللجوء إلى GitHub للحصول على المساعدة. بغض النظر عما فعلته ، لم أستطع جعل النظام يعمل بالطريقة التي ينبغي أن يعمل بها. من أجل تسهيل حل مشكلة مماثلة عليك ، سأخبرك كيف تمكنت ، في النهاية ، من إعداد كل شيء. أي أننا نتحدث عن استخدام fail2ban على خادم يعتمد على دبيان.
لنقم بإنشاء ملف
jail.localوإضافة ما يلي إليه:
[sshd]
enabled = true
port = ssh
banaction = pinotifyred[myhost="SCRIPTHOSTSERVER"]
هنا
SCRIPTHOSTSERVERتحتاج إلى استبداله بعنوان URL مناسب (على سبيل المثال - على dev.testing:8080). لاحظ أنه لا توجد معلومات بروتوكول في بداية عنوان URL هذا ، ولا يوجد مسار في النهاية ، ويجب ألا ينتهي العنوان بشرطة مائلة.
نتيجة لذلك ، اتضح أنه سيكون لدينا الإجراءات المعتادة المرتبطة بـ SSHD ، سيستمر البرنامج في حظر عناوين IP المشبوهة ، لكننا سنكون أيضًا قادرين على إنشاء إجراءات إضافية. لسوء الحظ ، لا يمكنك ببساطة وصف الأمر الذي سيتم تنفيذه هنا (كانت هذه مشكلتي). بدلاً من ذلك ، تحتاج إلى إخبار النظام بالضبط بالإجراء الذي يجب اتخاذه. يتم استدعاء الإجراء من ملف مخزن في مجلد
action.d. تتوافق أسماء ملفات .conf في هذا المجلد مع أسماء الإجراءات (في حالتنا ، هذا pinotifyred.conf). هذا ما تبدو عليه هذه الملفات:
[Definition]
# get- "http://example.com/red"
actionban = curl --fail "http://<my-host>/red" >> /dev/null
[Init]
# jail- :
my-host = SCRIPTHOSTSERVER
هنا ، مرة أخرى ، تحتاج إلى التغيير
SCRIPTHOSTSERVERإلى عنوان URL مناسب (نوعًا ما dev.testing:8080) ، مع الالتزام بنفس القواعد التي تمت مناقشتها أعلاه في وصف الملف jail.local.
الرمز يستدعي الإجراء ويغير المتغير
my-host. لم أستطع جعل كل شيء يعمل بدون هذا المتغير.
هذا الرمز ينفذ الأمر المطلوب. يصرح عن بعض المتغيرات المطلوبة لكي يعمل fail2ban. بالإضافة إلى ذلك ، فإن طريقة تكوين هذا تعني أن لدينا القدرة على إرسال طلبات curl أو wget بمعلمات مختلفة. من بين هذه المعلمات ، على سبيل المثال ، قد تكون هناك معلومات حول عنوان IP الذي تم حظره ومتى حدث ذلك بالضبط. لذلك ، إذا كنت ترغب في الحصول على معلومات أكثر تفصيلاً حول الهجمات من ، كما في حالتي ، بيانات عن رقمهم فقط ، يمكنك استخدام هذا. وهي ، للقيام بذلك ، يمكنك وضع
action.dملف بالمحتوى التالي في المجلد :
[Definition]
# get- "http://example.com/ban.php?jail=sshd&ip=192.0.2.100":
actionban = curl -G --data-urlencode "jail=%(name)s" --data-urlencode "ip=" --fail "http://<my-host>/ban.php"
[Init]
# jail- :
my-host = SCRIPTHOSTSERVER
أود أن أشير إلى أنه ربما يكون هناك خطأ هنا ، حيث يتم استدعاء الإجراء مرتين - عندما يتم حظر IP وعندما يتم إلغاء حظره. أخطط للتعامل مع هذا لاحقًا ، ربما يؤدي ذلك إلى مضاعفة عدد الهجمات.
برنامج Raspberry Pi
لأكون صادقًا ، فإن الكود الخاص بي عبارة عن فوضى كاملة. تمت كتابته في Python 3 بواسطة شخص (أنا) لا يعرف Python ، ولكنه قادر على البحث عن إجابات للأسئلة على الإنترنت. هذا ، إلى جانب المعرفة العامة بالبرمجة ، سمح لي بكتابة برنامج بلغة بايثون.
لن أتحدث هنا عن إعداد Raspberry Pi لعمل SSH ، حيث تحدث الكثير من الناس عن هذا بالفعل . الكود المعني مستضاف على GitHub . يتم تمثيله بواسطة ملفين. الملف الأول هو هذا
pialert.py، يبدأ عند تمهيد النظام. الملف الثاني ، tm1637.pyعبارة عن مكتبة أخذتها من هذه المواد من موقع RaspberryTips .
يعمل برنامج My Python كخادم HTTP (أعلم أنه ليس للإنتاج ، لكنه لا يزال مشروعًا منزليًا بسيطًا) يستمع إلى جميع الطلبات. هذا برنامج مترابط واحد ، لذلك إذا كان هناك الكثير من الطلبات ، فمن المرجح أن يفشل. ينتظر البرنامج وصول عنوان URL ، وإذا تم تسجيله معه ، فإنه ينفذ الإجراء. يتمثل الإجراء في تشغيل مؤشر LED على Blinkt! ، بأسلوب Larson Scanner ، وزيادة العداد. يعتمد اختيار لون LED على عنوان URL.
أنا أستخدم 4 ألوان:
- أزرق - يشير إلى حدوث هجوم على موقع WordPress الخاص بي .
- أحمر - هجوم SSH على الخادم A.
- هجوم أرجواني - SSH على الخادم B.
- أخضر - هجوم URL على الخادم C.
ربما ، بمرور الوقت ، سأقوم بتوسيع مجموعة الهجمات التي سجلها الجهاز. ولكن حتى ما هو الآن يسمح لك بمواكبة الأحداث دون الاتصال بالخوادم.
في التعليمات البرمجية الخاصة بي ، لا يتم التعامل مع الأخطاء ، ولا تتم مراقبة تجاوز العداد المحتمل. يوضح لي البرنامج ، من بين أشياء أخرى ، أنه حتى شبكتي المنزلية تتعرض للهجوم باستمرار في شكل طلبات لعناوين URL خاصة. يحاول المهاجمون الوصول إلى الشبكة من خلال أي ثغرة يكتشفونها (وهذا يؤدي إلى استثناءات ، لكن هذا لا يوقف البرنامج).
كانت إحدى المهام الأخيرة التي كان علي حلها أثناء العمل في المشروع هي إعداد Raspberry Pi. وبالتحديد ، كنت بحاجة إلى اللوحة لبدء تشغيل البرنامج النصي فورًا بعد التحميل ، وبعد ذلك يعمل كل شيء. يتم حل هذه المهمة عن طريق تحرير الملف
/etc/rc.locaل. لقد استخدمت محرر vi لإضافة أمر إلى الملف الذي يستخدم عادةً لبدء البرامج:
python3 /home/pi/PiAlert/pialert.py &
بعد ذلك ، لم يتبق لي سوى مهمة واحدة لحلها. كان الغرض منه هو توفير وصول غير منقطع لخادم VPS الخاص بي إلى Raspberry Pi ، والذي كان على الشبكة المنزلية ، خلف جدار حماية ، ولديه عنوان IP ديناميكي. يمكنني استخدام DNS الديناميكي ، أو أي من الخدمات التي لا تعد ولا تحصى. ومع ذلك ، قام شخص ما من مجتمع Reddit المستقل بإنشاء خدمة مجانية freemyip.com، والذي يحل بالضبط المشكلة التي كنت بحاجة لحلها. وهو يحلها جيدًا. الخدمة لا تحظى بشعبية كبيرة بعد ، وأنا متأكد من أنها ، بسبب تكلفتها المجانية ، لن تبقى على ما هي عليه لفترة طويلة. لكن بالنظر إلى مدى سهولة العمل معه ، سأكون سعيدًا بالدفع مقابل ذلك. لقد وجدت خدمة أخرى مثيرة للاهتمام في نفس المجتمع ، sliceport.com . سأحاول ذلك يومًا ما أيضًا.
النتيجة
يعد
PiAlert Demonstration جهازًا لا يمكن مقارنته ببعض من أروع عمليات القرصنة في الأفلام. والغرض منه هو تذكيرك بأن آلاف الروبوتات تحاول كل يوم الوصول إلى شيء لا ينبغي أن يكون لديهم إمكانية الوصول إليه. الجهاز الذي أنشأته ينقل ببساطة المعلومات حول مثل هذه المحاولات إلى العالم الحقيقي ، ويذكرنا بها. كما جاء لطيف جدا.
ما الأشياء الجيدة الأخرى التي يمكنني قولها عن PiAlert؟ يبدو الجهاز محايدًا ومرنًا للغاية. إذا قررت أنني لم أعد بحاجة إليه كما هو ، يمكنني إعادة كتابة الكود وتحويله إلى ساعة. أو يمكنني تحويله إلى عداد زيارات لصفحات موقعي. في الواقع - هناك الكثير من الخيارات لاستخدام RGB LEDs وشاشة من 4 أرقام. بالإضافة إلى ذلك ، تبين أن الجهاز مضغوط. يقف أمامي على مكتبي عندما أكتب رمزًا ويذكرني أن هناك أشخاصًا في العالم يفعلون أشياء سيئة. يتطلب PiAlert طاقة قليلة جدًا لتشغيله ، لذا يمكن تشغيله بالبطاريات. يمكن وضعه في أي مكان بالمنزل طالما يمكنه الاتصال بشبكة WiFi. هناك ستقوم بعملها ببساطة.وإذا كنت بحاجة إلى شبكة أخرى ، فسيكون ذلك كافيًا للاتصال بـ Raspberry Pi عبر SSH أو إنشاء ملف جديد
wpa_supplicant.confفي /boot.
نتيجة لذلك ، أود أن أشير إلى أن الكود الخاص بي ، بالطبع ، لا يبدو جيدًا جدًا. يمكن ويجب إعادة بنائه. إذا تعلمت بايثون من قبل ، فسأفعل ذلك هناك. يمكن أيضًا تحسين الحالة ، ومرة أخرى ، إذا أتقنت نوعًا من برنامج النمذجة ثلاثية الأبعاد ، فسأعمل على الحالة. لكن إذا لم تأخذ ذلك في الحسبان ، يمكنني القول إنني سعيد بما فعلته.
هل تخطط لصنع جهاز يشبه PiAlert؟