تعامل Secure Socket (SSF) هو أداة شبكة ومجموعة أدوات.
يوفر طرقًا بسيطة وفعالة لإعادة توجيه البيانات من مآخذ متعددة (TCP أو UDP) من خلال نفق TLS آمن واحد إلى جهاز كمبيوتر بعيد.
SSF هو Cross Platform (Windows ، Linux ، OSX) ويأتي كطالب تنفيذيات مستقلة.
سمات:
تنزيل الثنائيات المسبقة
الوثائق
بناء على النوافذ
بناء على UNIX/Linux
التجميع المتقاطع SSF (مثل Raspberry PI)
الاستخدام: ssf[.exe] [options] server_address
خيارات:
-v verbose_level : Verbosity: Critical | Error | Warning | info | debug | trace (الافتراضي: معلومات)
-q : وضع هادئ. لا تطبع السجلات
-p port : المنفذ البعيد (الافتراضي: 8011)
-c config_file_path : حدد ملف التكوين. إذا لم يتم تعيينه ، يتم تحميل "config.json" من دليل العمل الحالي
-m attempts : Max لمحاولات الاتصال غير الناجح قبل التوقف (الافتراضي: 1)
-t delay : حان الوقت للانتظار قبل محاولة إعادة الاتصال في ثوان (افتراضي: 60)
-n : لا تحاول إعادة توصيل العميل إذا تم مقاطعة الاتصال
-g : السماح لمنافذ البوابة. السماح للعميل بربط مآخذ محلية لخدمة ما لعنوان معين بدلاً من "المضيف المحلي"
-S : عرض حالة الخدمات المجهرية (ON/OFF)
خيارات الخدمات:
-D [[bind_address]:]port : قم بتشغيل وكيل Socks على الخادم يمكن الوصول إليه على [[bind_address]:]port على الجانب المحلي
-F [[bind_address]:]port : قم بتشغيل وكيل Socks على المضيف المحلي يمكن الوصول إليه من الخادم على [[bind_address]:]port
-X [[bind_address]:]port : Forward Server Shell I/O إلى المنفذ المحدد على الجانب المحلي. كل اتصال يخلق عملية شل جديدة
-Y [[bind_address]:]port : إعادة توجيه الإدخال/الإخراج المحلي إلى المنفذ المحدد على الخادم
-L [[bind_address]:]port:host:hostport : توصيلات TCP إلى الأمام [[bind_address]:]port على المضيف المحلي host:hostport على الخادم
-R [[bind_address]:]port:host:hostport : توصيلات TCP إلى الأمام [[bind_address]:]port على الخادم إلى host:hostport على الجانب المحلي
-U [[bind_address]:]port:host:hostport : إعادة توجيه حركة المرور المحلية UDP على [[bind_address]:]port إلى host:hostport على الخادم
-V [[bind_address]:]port:host:hostport : توجيه حركة المرور UDP على [[bind_address]:]port على الخادم host:hostport على الجانب المحلي
الاستخدام: ssfd[.exe] [options]
خيارات:
-v verbose_level : Verbosity: Critical | Error | Warning | info | debug | trace (الافتراضي: معلومات)
-q : وضع هادئ. لا تطبع السجلات
-c config_file_path : حدد ملف التكوين. إذا لم يتم تعيينه ، يتم تحميل "config.json" من دليل العمل الحالي
-p port : منفذ محلي (افتراضي: 8011)
-R : سيقوم الخادم فقط بتنقل الاتصالات
-l host : تعيين عنوان ربط الخادم
-g : السماح لمنافذ البوابة. السماح للعميل بربط مآخذ محلية لخدمة ما لعنوان معين بدلاً من "المضيف المحلي"
-S : عرض حالة الخدمات المجهرية (ON/OFF)
يجب تمكين ميزة النسخ على كل من ملف تكوين العميل والخادم:
{
"ssf" : {
"services" : {
"copy" : { "enable" : true }
}
}
} الاستخدام: ssfcp[.exe] [options] [host@]/absolute/path/file [[host@]/absolute/path/file]
خيارات:
-v verbose_level : Verbosity: Critical | Error | Warning | info | debug | trace (الافتراضي: معلومات)
-q : وضع هادئ. لا تطبع السجلات
-c config_file_path : حدد ملف التكوين. إذا لم يتم تعيينه ، يتم تحميل "config.json" من دليل العمل الحالي
-p port : المنفذ البعيد (الافتراضي: 8011)
-t : استخدم stdin كمدخلات
--resume : محاولة استئناف نقل الملف في حالة وجود ملف الوجهة
--check-integrity : تحقق من سلامة الملف في نهاية النقل
-r : نسخ الملفات بشكل متكرر
--max-transfers arg : Max Transfers بالتوازي (افتراضي: 1)
سيقوم العميل بتشغيل وكيل Socks على المنفذ 9000 ونقل طلبات الاتصال إلى الخادم 192.168.0.1:8000
ssf -D 9000 -c config.json -p 8000 192.168.0.1
سيكون الخادم ملزمًا بالمنفذ 8011 على جميع واجهات الشبكة
ssfd
سيكون الخادم مرتبطًا بـ 192.168.0.1:9000
ssfd -p 9000 -l 192.168.0.1
ssfcp [-c config_file] [-p port] path/to/file host@absolute/path/directory_destination
ssfcp [-c config_file] [-p port] path/to/file* host@absolute/path/directory_destination
ssfcp [-c config_file] [-p port] -r path/to/dir host@absolute/path/directory_destination
data_in_stdin | ssfcp [-c config_file] [-p port] -t host@path/to/destination/file_destination
ssfcp [-c config_file] [-p port] remote_host@path/to/file absolute/path/directory_destination
ssfcp [-c config_file] [-p port] remote_host@path/to/file* absolute/path/directory_destination
ssfcp [-c config_file] [-p port] -r remote_host@path/to/dir absolute/path/directory_destination
{
"ssf" : {
"arguments" : " " ,
"circuit" : [],
"http_proxy" : {
"host" : " " ,
"port" : " " ,
"user_agent" : " " ,
"credentials" : {
"username" : " " ,
"password" : " " ,
"domain" : " " ,
"reuse_ntlm" : true ,
"reuse_nego" : true
}
},
"socks_proxy" : {
"version" : 5 ,
"host" : " " ,
"port" : " 1080 "
},
"tls" : {
"ca_cert_path" : " ./certs/trusted/ca.crt " ,
"cert_path" : " ./certs/certificate.crt " ,
"key_path" : " ./certs/private.key " ,
"key_password" : " " ,
"dh_path" : " ./certs/dh4096.pem " ,
"cipher_alg" : " DHE-RSA-AES256-GCM-SHA384 "
},
"services" : {
"datagram_forwarder" : { "enable" : true },
"datagram_listener" : {
"enable" : true ,
"gateway_ports" : false
},
"stream_forwarder" : { "enable" : true },
"stream_listener" : {
"enable" : true ,
"gateway_ports" : false
},
"copy" : { "enable" : false },
"shell" : {
"enable" : false ,
"path" : " /bin/bash|C: \ windows \ system32 \ cmd.exe " ,
"args" : " "
},
"socks" : { "enable" : true }
}
}
}| مفتاح التكوين | وصف |
|---|---|
| الحجج | استخدم وسيطات التكوين بدلاً من وسيطات CLI المعطاة (باستثناء -c ) |
يتيح مفتاح arguments للمستخدم تخصيص وسيطات سطر الأوامر في ملف التكوين. هذه الميزة هي وسيلة مريحة لحفظ ملفات تعريف اتصال العميل المختلفة.
بالنظر إلى ملف التكوين التالي conf.json :
{
"ssf" : {
"arguments" : " 10.0.0.1 -p 443 -D 9000 -L 11000:localhost:12000 -v debug "
}
} سيقوم SSF باستخلاص الوسائط المحددة ويستخدمها كبديل للوسائط الأولية (باستثناء -c ).
على سبيل المثال ، سيكون ssf -c conf.json مكافئًا لـ ssf 10.0.0.1 -p 443 -D 9000 -L 11000:localhost:12000 -v debug :
10.0.0.1:443 ( 10.0.0.1 -p 443 )-D 9000 )-L 11000:localhost:12000 )-v debug ) | مفتاح التكوين | وصف |
|---|---|
| الدائرة | خوادم سلسلة الترحيل المستخدمة لإنشاء الاتصال بالخادم البعيد |
الدائرة عبارة عن مجموعة JSON التي تحتوي على خوادم ومنافذ الارتداد والتي سيتم استخدامها لإنشاء الاتصال. يتم إدراجها على النحو التالي:
{
"ssf" : {
"circuit" : [
{ "host" : " SERVER1 " , "port" : " PORT1 " },
{ "host" : " SERVER2 " , "port" : " PORT2 " },
{ "host" : " SERVER3 " , "port" : " PORT3 " }
]
}
}سيؤدي هذا التكوين إلى إنشاء سلسلة الاتصال التالية:
CLIENT -> SERVER1:PORT1 -> SERVER2:PORT2 -> SERVER3:PORT3 -> TARGET
يدعم SSF الاتصال من خلال:
CONNECT HTTP| مفتاح التكوين | وصف |
|---|---|
| http_proxy.host | HTTP Proxy Host |
| http_proxy.port | HTTP Proxy Port |
| http_proxy.user_agent | قيمة رأس وكالة المستخدم في طلب الاتصال HTTP |
| http_proxy.credentials.username | أوراق اعتماد اسم المستخدم بالوكالة (كل النظام الأساسي: Basic أو Digest ، Windows: NTLM والتفاوض إذا تم إعادة استخدامه = خطأ) |
| http_proxy.credentials.password | بيانات اعتماد كلمة مرور الوكيل (جميع النظام الأساسي: أساسي أو دايجست ، ويندوز: NTLM والتفاوض إذا إعادة الاستخدام = خطأ) |
| http_proxy.credentials.domain | مجال المستخدم (NTLM والتفاوض على Windows فقط) |
| http_proxy.credentials.reuse_ntlm | إعادة استخدام بيانات اعتماد مستخدم الكمبيوتر الحالية للمصادقة باستخدام Proxy NTLM Auth (SSO) |
| http_proxy.credentials.reuse_kerb | إعادة استخدام بيانات اعتماد مستخدم الكمبيوتر الحالية (تذكرة Kerberos) للمصادقة مع Proxy التفاوض على Auth (SSO) |
مخططات المصادقة المدعومة:
| مفتاح التكوين | وصف |
|---|---|
| socks_proxy.version | نسخة الجوارب (4 أو 5) |
| Socks_proxy.host | الجوارب الوكيل مضيف |
| socks_proxy.port | منفذ الوكيل الجوارب |
لا يوجد مخطط مصادقة مدعوم.
| مفتاح التكوين | وصف |
|---|---|
| tls.ca_cert_path | FilePath النسبي أو المطلق إلى ملف شهادة CA |
| tls.cert_path | FilePath النسبي أو المطلق إلى ملف شهادة المثيل |
| tls.key_path | FilePath النسبي أو المطلق إلى ملف المفتاح الخاص |
| tls.key_password | كلمة المرور الرئيسية |
| tls.dh_path | FilePath النسبي أو المطلق إلى ملف Diffie-Hellman (الخادم فقط) |
| tls.cipher_alg | خوارزمية الشفرات |
مع الخيارات الافتراضية ، يجب أن تكون الملفات والمجلدات التالية في دليل عمل العميل أو الخادم:
./certs/dh4096.pem./certs/certificate.crt./certs/private.key./certs/trusted/ca.crtأين:
إذا كنت تريد تلك الملفات في مسارات مختلفة ، فمن الممكن تخصيصها بفضل مفاتيح مسار TLS:
{
"ssf" : {
"tls" : {
"ca_cert_path" : " ./certs/trusted/ca.crt " ,
"cert_path" : " ./certs/certificate.crt " ,
"key_path" : " ./certs/private.key " ,
"key_password" : " " ,
"dh_path" : " ./certs/dh4096.pem " ,
"cipher_alg" : " DHE-RSA-AES256-GCM-SHA384 "
}
}
}| مفتاح التكوين | وصف |
|---|---|
| tls.ca_cert_buffer | محتوى ملف شهادة CA بتنسيق PEM (: تحذير: n بين البيانات و PEM header/footer) |
| tls.cert_buffer | محتوى ملف شهادة مثيل بتنسيق PEM (: تحذير: n بين البيانات و PEM header/footer) |
| tls.key_buffer | محتوى ملف المفتاح الخاص بتنسيق PEM (: تحذير: n بين البيانات و PEM header/footer) |
| tls.key_password | كلمة المرور الرئيسية |
| tls.dh_buffer | Diffie-Hellman Parameters محتوى ملف في تنسيق PEM (: تحذير: n بين البيانات و PEM header/footer ، الخادم فقط) |
| tls.cipher_alg | خوارزمية الشفرات |
يمكنك دمج معلمات TLS مباشرة في ملف التكوين باستخدام tls.ca_cert_buffer و tls.cert_buffer و tls.key_buffer ومفاتيح tls.dh_buffer .
{
"ssf" : {
"tls" : {
"ca_cert_buffer" : " -----BEGIN CERTIFICATE----- n ... n -----END CERTIFICATE----- " ,
"cert_buffer" : " -----BEGIN CERTIFICATE----- n ... n -----END CERTIFICATE----- " ,
"key_buffer" : " -----BEGIN RSA PRIVATE KEY----- n ... n -----END RSA PRIVATE KEY----- " ,
"key_password" : " " ,
"dh_buffer" : " -----BEGIN DH PARAMETERS----- n ... n -----END DH PARAMETERS----- " ,
"cipher_alg" : " DHE-RSA-AES256-GCM-SHA384 "
}
}
} يجب أن تكون الشهادات والمفاتيح الخاصة ومعلمات DH بتنسيق PEM.n بين البيانات و PEM رأس/تذييل إلزامي.
| مفتاح التكوين | وصف |
|---|---|
| الخدمات.*. تمكين | تمكين/تعطيل الخدمات المجهرية |
| الخدمات.*. gateway_ports | تمكين/تعطيل منافذ البوابة |
| Services.Shell.Path | المسار الثنائي المستخدم لإنشاء قذيفة |
| Services.shell.args | الحجج الثنائية المستخدمة لإنشاء شل |
تم تصميم ميزات SSF باستخدام الخدمات الصغيرة (إعادة توجيه TCP ، الجوارب عن بُعد ، ...)
هناك 7 خدمات microservices:
كل ميزة هي مزيج من الخدمات الدقيقة على جانب عميل واحد على الأقل وخدمة خادم واحد من جانب الخادم.
يلخص هذا الجدول كيفية تجميع كل ميزة:
| ميزة SSF | جانب العميل Microservice | جانب خادم الخدمات الدقيقة |
|---|---|---|
-L : إعادة توجيه TCP | Stream_Listener | Stream_Forwarder |
-R : إعادة توجيه TCP عن بعد | Stream_Forwarder | Stream_Listener |
-U : إعادة توجيه UDP | datagram_listener | datagram_forwarder |
-V : إعادة توجيه UDP عن بعد | datagram_forwarder | datagram_listener |
-D : الجوارب | Stream_Listener | الجوارب |
-F : الجوارب البعيدة | الجوارب | Stream_Listener |
-X : شل | Stream_Listener | صدَفَة |
-Y : قذيفة عن بعد | صدَفَة | Stream_Listener |
هذه الهندسة المعمارية تجعل من السهل إنشاء ميزات عن بُعد: فهي تستخدم نفس الخدمات المجهرية ولكن على الجانب الآخر.
يأتي ssf و ssfd مع الخدمات المجهرية الممكّنة مسبقًا. فيما يلي تكوين الخدمات المجهرية الافتراضية:
{
"ssf" : {
"services" : {
"datagram_forwarder" : { "enable" : true },
"datagram_listener" : { "enable" : true },
"stream_forwarder" : { "enable" : true },
"stream_listener" : { "enable" : true },
"socks" : { "enable" : true },
"copy" : { "enable" : false },
"shell" : { "enable" : false }
}
}
} لتمكين أو تعطيل الخدمات الدقيقة ، قم بتعيين مفتاح enable إلى true أو false .
إن محاولة استخدام ميزة تتطلب خدمة microservice المعوقة ستؤدي إلى رسالة خطأ.
openssl dhparam 4096 -outform PEM -out dh4096.pemبادئ ذي بدء ، قم بإنشاء ملف يسمى extfile.txt يحتوي على الأسطر التالية:
[ v3_req_p ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
بعد ذلك ، قم بإنشاء شهادة موقعة ذاتيًا (CA) CA.CRT ومفتاحها الخاص CA.Key الخاص بها:
openssl req -x509 -nodes -newkey rsa:4096 -keyout ca.key -out ca.crt -days 3650قم بإنشاء مفتاح خاص خاص. key وشهادة تسجيل الشهادة . csr :
openssl req -newkey rsa:4096 -nodes -keyout private.key -out certificate.csrقم بإنشاء الشهادة ( Certificate.pem ) عن طريق توقيع CSR مع CA ( CA.CRT ، CA.Key ):
openssl x509 -extfile extfile.txt -extensions v3_req_p -req -sha1 -days 3650 -CA ca.crt -CAkey ca.key -CAcreateserial -in certificate.csr -out certificate.pem