فتح الويبينار: "SSH / NC / Socat: نصائح وحيل"

يوم جيد للجميع!

في الأسبوع القادم ، نطلق مجموعة Linux Administrator التالية ، التي عقدنا معها عددًا من الأحداث. أحدهما درس مفتوح حول موضوع "SSH / NC / Socat: نصائح وحيل". على ذلك تذكرنا ما هو ssh ، تاريخها ورسالتها. درسنا خيارات مختلفة لاستخدامه: بعيد ، إعادة توجيه المنفذ المحلي ، نسخة آمنة ، وكيل الجوارب ، الوكيل العكسي. لقد جربنا بالفعل المرافق nc و socat في معمل افتراضي.

تم إجراء الندوة عبر الويب بواسطة مسؤول النظام ذي الخبرة فلاديمير دروزديتسكي ، وهو مطور للبنية التحتية في letundra.com ، exposcan.ru ، crispmessenger.com.

نلفت انتباهكم إلى وصف مفصل للحدث الماضي.


أذكر ما هو SSH

SSH (Secure Shell) عبارة عن "shell آمن" ، وهو بروتوكول شبكة على مستوى التطبيق. يسمح لك بالتحكم عن بعد في نظام التشغيل واتصالات TCP عبر النفق (على سبيل المثال ، لنقل الملفات). يشبه SSH في وظيفته بروتوكولي Telnet و rlogin ، إلا أنه يختلف عنهما لأنه يشفر كل حركة المرور ، بما في ذلك كلمات المرور المنقولة. مواصفات بروتوكول SSH-2 موجودة في RFC 4251.

لنلقِ نظرة على الاستخدامات المختلفة لـ SSH ، القياسية وغير القياسية. الموقف التالي سوف يساعدنا في هذا:



يقدم الحامل أربعة أجهزة افتراضية خلف جدار الحماية. سنقوم بتنفيذ جميع الإجراءات من الجهاز Node-1.

إنشاء مفتاح SSH

لاستخدام مفتاح SSH ، يجب عليك أولاً إنشاؤه. لهذا الغرض ، تعتبر الأداة المساعدة الخاصة مناسبة تمامًا في أي توزيع لنظام Linux:

ssh-keygen -t RSA -N otuslinux -f ~/.ssh/otus 

  • -t - التي خوارزمية التشفير للاستخدام ؛
  • -N - مفتاح التشفير (وسيطة مريحة إذا كنت بحاجة إلى إنشاء مفتاح بدون تشفير وردود على مختلف طلبات ssh-keygen) ؛
  • -f - في أي ملف لحفظ المفتاح.

إعدادات SSH خادم SSH

لمزيد من العمل ، ستحتاج إلى تعديل الملف / etc / ssh / sshd_config وإعادة تشغيل خادم ssh. هنا يجب الانتباه إلى الخيارات التالية:

مصادقة RSA RSAAuthentication yes (ما إذا كانت مصادقة RSA مسموح بها) ؛
PubkeyAuthentication yes (ما إذا كان المصادقة حسب المفتاح مسموحًا) ؛
AuthorizedKeysFile %h/.ssh/authorized_keys (المسار إلى الجزء العمومي من المفتاح) ؛
PasswordAuthentication yes (سواء كانت المصادقة مسموح بها).

لنسخ المفتاح إلى الخادم ، تابع ما يلي:

ssh-copy-id -i /path/to/pub/key user@server (نسخ الجزء العام من المفتاح إلى الخادم البعيد ، سيتم نسخ المفتاح العمومي على طول المسار إلى الملف٪ h / .ssh / Author_keys)

من أجل عدم إدخال مفتاح التشفير مرة أخرى في كل مرة عند الاتصال بخادم بعيد ، يمكننا استخدام ssh-agent. للقيام بذلك:

eval $(ssh-agent -s) (eval جزء من POSIX. يمكن أن تكون واجهته أيضًا عبارة عن صدفة. سيتم تخزين المفتاح في الوكيل في صورة غير مشفرة).

ssh-add ~/.ssh/our_private_key (إضافة مفتاح خاص).

في هذه الحالة:

  • -i - تحديد موقع المفتاح العمومي ؛
  • اسم المستخدم - المستخدم على الخادم البعيد؛
  • الخادم - الملكية الفكرية أو نظام أسماء النطاقات للخادم الهدف.

لسهولة الاتصال بخادم بعيد ، يمكننا وصف معلمات الاتصال في ملف التكوين ssh ، والذي يقع على المسار ~ / .ssh / config

وبالتالي ، نحصل على ملف التكوين SSH التالي:

 Host myserver HostName ip/hostname Port 22/??? User username IdentityFile ~/.ssh/id_rsa 

كل شيء بسيط هنا:

  • المضيف - اسم اتصالنا.
  • اسم المضيف - اسم الخادم ؛
  • ميناء - ميناء سه
  • اسم المستخدم
  • IdentityFile - مفتاح ssh.

SSH SCP

دعنا ننتقل. أسهل طريقة لاستخدام SSH هي نسخ الملف من جهاز واحد إلى جهاز التحكم عن بُعد. للقيام بذلك ، استخدم الأداة المساعدة SCP (بروتوكول النسخ الآمن). باستخدامه ، يمكنك نسخ دليل أو ملف من خادم محلي إلى خادم بعيد ، أو العكس:

scp test.txt username@server:/some/directory (نسخ ملف من الخادم المحلي إلى الخادم البعيد).
scp username@server:test.txt /some/directory (نسخ ملف من خادم بعيد إلى خادم محلي).
scp -r dir_name username@server:/some/directory (نسخ مجلد من الخادم المحلي إلى جهاز التحكم عن بُعد).

هنا:

  • اسم المستخدم - اسم المستخدم ؛
  • الخادم - عنوان الخادم ؛
  • / some / server - الدليل الذي نقوم بنسخه ؛
  • dir_name - اسم المجلد ؛
  • -r - استخدام متكرر.

SSH نفق ، وكيل

الآن دعونا نلقي نظرة على خيار إعادة توجيه منفذ بجهاز تحكم عن بعد إلى الجهاز المحلي. خذ الحالة الكلاسيكية كمثال ، أي مجموعة عندما يكون لدينا "حارس أمن شرير" وخادم واحد مع تطبيق ويب ، ومنافذ ssh و https يبحثان في العالم ، ونريد حقًا الاتصال بخادم MySQL.

لذلك:

ssh -f -N -L 9906:127.0.0.1:3306 user@server (فقط حالتنا مع MySQL)

نتيجة لذلك ، يمكننا الاتصال بالمنفذ المحلي 9906 مع عميل mysql والوصول إلى خادم "الأمان" الخاص بنا.

ssh -D 8080 -q -C -N -f servername (بروكسيينج المرور عبر SOCKS عبر المنفذ 8080)

باستخدام هذا الأمر ، نقوم بإنشاء خادم وكيل socks5 باستخدام ssh. للتحقق من أدائها ، يمكننا استخدام الأمر التالي:

 curl -x socks5h://server-with-proxy:8080 https://test.domain 

مثال كلاسيكي لإعادة توجيه المنافذ باستخدام ssh هو عندما يكون الخادم الذي تريد الاتصال به خلف التطبيق. سيساعدنا الأمر التالي على الاتصال بمثل هذا الخادم:

ssh -f -N -R 2255:localhost:22 username@servername المحلي ssh -f -N -R 2255:localhost:22 username@servername (إعادة التوجيه من خادم بعيد إلى خادم محلي).

على الخادم البعيد ، سيتم فتح المنفذ 2255 ، والذي سيتم إعادة توجيهه إلى المنفذ 22 من خادمنا للنات. للاتصال بمثل هذا الخادم ، يمكننا استخدام الأمر:

 ssh -p 2255 username@localhost 

يرجى ملاحظة أن:

  • -f - إرسال ssh إلى الخلفية.
  • -N - عدم تنفيذ الأمر على المضيف البعيد ؛
  • -L - إعادة توجيه المنفذ المحلي (المنفذ المحلي: الجهاز المحلي: المنفذ البعيد) ؛
  • -R - منفذ على الجهاز البعيد ؛
  • -q - الوضع الصامت ؛
  • -D - يحدد التوجيه الديناميكي المحلي لمنافذ مستوى التطبيق ؛
  • -C - طلب ضغط البيانات.

Netcat (nc)

محطتنا التالية هي Netcat ، وهي أداة مساعدة Unix تتيح لك إنشاء اتصالات TCP و UDP ، واستقبال البيانات من هناك ، ونقلها. على الرغم من فائدته وبساطته ، لا يتم تضمين هذه الأداة في أي معيار ولا يتم توفيرها مع أي مجموعة توزيع. وفقا لذلك ، يجب أن يتم تثبيتها باليد.

تتمثل إحدى ميزات Netcat (nc) المثيرة للاهتمام في إمكانية فحص المنافذ:

nc -vn ipaddress 22 (فحص منفذ واحد) ؛
nc -v ipaddress 10-55 (فحص نطاق المنفذ) ؛
nc -l 4444 (فتح والاستماع إلى منفذ 4444) ؛
nc servername 4444 ( nc servername 4444 بالخادم على المنفذ المطلوب).

بعد فتح المنفذ والاتصال به ، نحصل على غرفة محادثة شبكة صغيرة =).

بعد ذلك ، ندرس إمكانية نقل الملفات باستخدام الأداة المساعدة nc. للقيام بذلك ، سوف يساعدنا الأمر التالي:

cat test_file | pv -b | nc -l 4444 cat test_file | pv -b | nc -l 4444 (افتح المنفذ ونقل الملف إليه من خلال توجيه الإخراج ، يتم استخدام الأداة المساعدة pv مع مفتاح التبديل -b لعرض تقدم نقل الملفات بالبايت).

nc servername 4444 | pv -b > filename nc servername 4444 | pv -b > filename ( nc servername 4444 | pv -b > filename بالخادم لاستلام الملف ، يتم استخدام pv -b بنفس الطريقة).

يمكننا تعقيد توجيه الإخراج من خلال إضافة أرشفة الملفات أثناء الطيران:

tar -czf - /path/to/ | pv -b | nc -l 4444 tar -czf - /path/to/ | pv -b | nc -l 4444 (أرشفة المجلدات أثناء التنقل والإرسال) ؛
n c servername 4444 | pv -b > file.tar.gz c servername 4444 | pv -b > file.tar.gz (الحصول على الأرشيف المرسل).

ميزة غير واضحة للغاية في nc هي إنشاء خادم http فقط.

 while true; do nc -lp 80 < index.html; done 

يرجى ملاحظة أنه لاستخدام المنفذ 80 ، يجب أن يكون لديك امتيازات الجذر.

لاحظ أيضًا أن:

  • -l - تشير إلى وضع التشغيل للاستماع ؛
  • -n - لا تستخدم استعلامات DNS ؛
  • -v - إخراج مطوّل.

سقراط

إنها أيضًا أداة مفيدة تتيح لك إنشاء اتصالات TCP بين الأجهزة والمنافذ الأمامية ، وما إلى ذلك. تعمل وفقًا لمبدأ Netcat: فهي تفتح اتصالين ثنائي الاتجاه ، ويمكنها نقل البيانات ، والتدفقات ، وما إلى ذلك. على سبيل المثال ، باستخدام Socat ، يمكننا تعيين منافذ COM لمنافذ TCP ، إلخ.

أمثلة سوكات العمل:

socat -u FILE:file_name TCP-LISTEN:5778,reuseaddr # # send file؛
socat -u TCP:192.168.1.48:5778 STDOUT | pv -r > file_name socat -u TCP:192.168.1.48:5778 STDOUT | pv -r > file_name # get file ؛
socat TCP-LISTEN:80,fork TCP:ubuntunode-4:80 # إعادة توجيه منفذ الخادم البعيد إلى المنفذ المحلي ؛
socat TCP-LISTEN:1234,reuseaddr EXEC:/bin/bash # Open remote shell =)؛
socat - TCP:server_with_remote_shell:1234 # الاتصال socat - TCP:server_with_remote_shell:1234 البعيدة للخادم البعيد.

فك التشفير الصغيرة:

  • -u - استخدام الوضع أحادي الاتجاه ؛
  • ملف - تشير إلى أننا نستخدم الملف ؛
  • TCP-LISTEN - الاستماع إلى منفذ TCP.
  • reuseaddr - يسمح لمآخذ التوصيل الأخرى بالتواصل مع نفس العنوان ، حتى لو تم استخدامه ؛
  • شوكة - بعد إنشاء الاتصال ، تتم معالجة القناة في العملية الفرعية ؛
  • TCP هو نوع الاتصال.

هل يجب أن أشاهد نسخة الفيديو الآن؟

بالطبع ، نعم ، لأنه في الوصف يتم تقديم كل شيء بشكل تجريدي. بالإضافة إلى ذلك ، يتم وصف المواضيع في الندوة عبر الإنترنت بمزيد من التفصيل ، بالإضافة إلى أن بعضها يوفر أمثلة إضافية وخيارات التنفيذ. وبالتالي ، إذا كنت مهتمًا بهذا الموضوع ، فابحث في الدرس المفتوح بالكامل وكرر جميع الخطوات الخاصة بـ Vladimir Drozdetsky للحصول على أقصى قدر من استيعاب المادة. ولا تنسى أن تترك تعليقاتك.

نحن ، بدورنا ، لا نقول وداعًا وندعوك إلى دورة مسؤول Linux !

Source: https://habr.com/ru/post/ar437114/


All Articles