\# .TH gs-netcat 1 "08 October 2020" "1.0" "gs-netcat man page" .Dd October 08, 2020 .Dt GS-NETCAT 1 .Os .Sh "نام (NAME)" .Nm gs-netcat .Nd انتقال داده، هدایت ترافیک و اجرای دستورات روی میزبان راه دور به‌صورت امن .Sh "خلاصه دستور (SYNOPSIS)" .Nm gs-netcat .Op Fl rlgvqwCTSDiu .Op Fl s Ar secret .Op Fl k Ar keyfile .Op Fl L Ar logfile .Op Fl d Ar IP .Op Fl p Ar port .Op Fl e Ar cmd .Sh "توضیحات (DESCRIPTION)" ابزار .Nm یک پیاده‌سازی مجدد از netcat است. این ابزار به دو یا چند کاربر اجازه می‌دهد تا در سناریویی که تمامی کاربران پشت NAT یا فایروال قرار دارند و نمی‌توانند به‌صورت مستقیم به یکدیگر متصل شوند، یک اتصال امن TCP برقرار کنند؛ به‌ویژه در سناریوی برقراری اتصال میان یک ایستگاه کاری و ایستگاه کاری دیگر در یک شبکه محلی (LAN) متفاوت. .Pp این ابزار به جای اتصالات مستقیم TCP، از شبکه رله سوکت سراسری (GSRN) استفاده می‌کند. هیچ‌کدام از ایستگاه‌های کاری نیازی به باز کردن پورت در فایروال خود یا پذیرش اتصالات TCP ورودی ندارند. .Pp اتصال با استفاده از پروتکل SRP (مطابق با RFC 5054) همراه با الگوریتم AES-256 و عدد اول ۴۰۹۶ بیتی به‌صورت سرتاسری (End-to-End) رمزگذاری می‌شود. شبکه GSRN تنها ترافیک رمزگذاری‌شده را مشاهده می‌کند. .Pp کاربردهای متداول شامل موارد زیر است: .Pp .Bl -bullet -offset indent -compact .It پروکسی‌های ساده TCP .It پوسته PTY .It انتقال فایل .It دستور ProxyCommand سوکس (SOCKS) برای .Xr ssh 1 .It و کاربردهای بسیار دیگر. .El .Pp .Sh "گزینه‌ها (OPTIONS)" .Bl -tag -width Ds .It Fl C غیرفعال کردن رمزگذاری و استفاده از متن ساده (clear-text). با احتیاط استفاده شود. .It Fl d Ar ip آدرس IPv4 مقصد برای هدایت پورت (port forwarding). .It Fl D حالت دیمن و ناظر (Daemon & Watchdog). اجرای .Nm به عنوان یک پردازه پس‌زمینه و راه‌اندازی مجدد در صورت متوقف شدن. .It Fl e Ar cmd اجرای دستور و ارسال خروجی به کلاینت متصل‌شده. نیازمند گزینه l- است. .It Fl g تولید یک گذرواژه تصادفی امن و چاپ آن در خروجی استاندارد. .It Fl i پوسته تعاملی ورود به سیستم (Interactive login shell). سرور یک شل ورودی PTY واقعی ایجاد می‌کند و کلاینت به عنوان یک کلاینت PTY واقعی عمل می‌کند (با پشتیبانی از Ctrl-C و غیره). کلاینت می‌تواند نشست را در هر زمان با فشردن 'Ctrl-e q' یا وارد کردن 'exit' خاتمه دهد. سرور از چندین کلاینت همزمان پشتیبانی می‌کند. .It Fl k Ar file فایل حاوی گذرواژه. .It Fl l حالت شنود/سرور. حالت پیش‌فرض، کلاینت است. .It Fl L Ar file فایل ثبت گزارش (لاگ) [پیش‌فرض: خروجی استاندارد]. .It Fl p Ar port پورت مورد نظر برای شنود یا هدایت ترافیک به آن [۱-۶۵۵۳۵]. .It Fl q حالت بی‌صدا (Quiet). هیچ هشدار یا خطایی را چاپ نمی‌کند. .It Fl r فقط دریافت داده (Receive-only). داده‌ای ارسال نمی‌شود. هنگامی که داده دیگری برای خواندن در دسترس نباشد، پردازه متوقف می‌شود. .It Fl s Ar secret یک گذرواژه برگزیده توسط کاربر. هر دو کاربر برای اتصال باید از گذرواژه یکسانی استفاده کنند. .It Fl S عملکرد به عنوان سرور SOCKS4/4a/5. سرور به عنوان پروکسی SOCKS4/4a/5 عمل می‌کند و به چندین کلاینت .Nm اجازه می‌دهد تا ترافیک را (به‌صورت امن) از طریق سرور رله کنند. نیازمند گزینه l- است. .It Fl T استفاده از شبکه تور (TOR). ابزار .Nm از طریق شبکه TOR به GSRN متصل خواهد شد. این گزینه نیازمند نصب و فعال بودن TOR است. آدرس IP و پورت سرور TOR با متغیرهای محیطی قابل تنظیم است. .It Fl t تنها اتصال به GSRN و بررسی وضعیت شنود طرف مقابل. به طرف مقابل متصل نمی‌شود. .It Fl u استفاده از UDP به جای TCP برای هدایت پورت. نیازمند گزینه p- است. .It Fl v چاپ پیام‌های وضعیت. از vv- برای جزئیات بیشتر و vvv- برای جزئیات بسیار کامل استفاده کنید. .It Fl w انتظار کلاینت برای در دسترس قرار گرفتن سرور در حال شنود. .El .Sh "کنسول دستورات (CONSOLE)" پوسته تعاملی ورود (گزینه .Ar \-i ) دارای یک کنسول دستورات است. فشردن 'Ctrl-e c' کنسول دستورات را باز می‌کند. کنسول دستورات اطلاعات زیر را نمایش می‌دهد: .Pp .Bl -bullet -offset indent -compact .It زمان تأخیر (به میلی‌ثانیه) تا میزبان راه دور .It هشدار هنگام ورود یا فعال شدن یک کاربر در سیستم .It نرخ انتقال داده (throughput) .It گزارش‌های انتقال فایل .El برای مشاهده فهرست دستورات در دسترس، عبارت 'help' را تایپ کنید. .Sh "انتقال فایل (FILETRANSFER)" انتقال فایل از طریق کنسول دستورات در دسترس است. فایل‌ها با حفظ دسترسی‌ها و برچسب زمانی تغییر، منتقل می‌شوند. فایل‌هایی که انتقال آنها ناتمام مانده است، از همان نقطه توقف از سر گرفته می‌شوند. دستور 'put' برای بارگذاری (آپلود) استفاده می‌شود: .Dl put foobar.txt .Dl put $HOME/foobar.txt .Dl put /tmp/*.log .Dl put $(find . -type f -name '*.c') (مثال بالا جایگزینی متغیرهای شل و بسط کلمات را نشان می‌دهد) امکان محدود کردن اطلاعات مسیر ارسالی به عنوان دایرکتوری‌های ضمنی برای هر مسیر مشخص‌شده وجود دارد. می‌توانید یک نقطه و اسلش در مسیر مبدا درج کنید، مانند: .Dl put /foo/./bar/baz.c این کار فایل ‎/tmp/bar/baz.c‎ را روی رایانه راه دور ایجاد خواهد کرد. دستور 'get' برای بارگیری (دانلود) استفاده می‌شود: .Dl get foobar.txt .Dl get $(find /var/./ -name '*.log') انتقال یک دایرکتوری به‌طور خودکار تمام فایل‌ها و زیردایرکتوری‌های درون آن را منتقل می‌کند (به‌صورت بازگشتی): .Dl get /var/log .Dl get / دستور اول تمام فایل‌ها و دایرکتوری‌های موجود در ‎/var/log/*‎ را انتقال می‌دهد. دستور دوم کل سیستم فایل را منتقل می‌کند. می‌توان چندین دستور get/put را به‌صورت همزمان زمان‌بندی و اجرا کرد. .Sh "مثال‌ها (EXAMPLES)" .Nm مثال ۱ \- شنود برای دریافت اتصال جدید با استفاده از گذرواژه 'MySecret': .Dl $ gs-netcat -s MySecret -l .Pp اتصال کلاینت با استفاده از همان گذرواژه: .Dl $ gs-netcat -s MySecret .Pp .Nm مثال ۲ \- ایجاد یک شل لاگین PTY هنگام اتصال کلاینت: .Dl $ gs-netcat -s MySecret -l -i .Pp ورود به شل تعاملی سرور: .Dl $ gs-netcat -s MySecret -i .Pp ورود از طریق شبکه TOR: .Dl $ gs-netcat -s MySecret -i -T .Pp ورود از طریق یک پروکسی Socks5: .Dl $ export GSOCKET_SOCKS_IP=127.0.0.1 .Dl $ export GSOCKET_SOCKS_PORT=1080 .Dl $ gs-netcat -s MySecret -i -T .Pp .Nm مثال ۳ \- اجرای یک دستور هنگام اتصال کلاینت: .Dl $ gs-netcat -s MySecret -l -e 'echo hello world; id; exit' .Pp اتصال کلاینت به سرور: .Dl $ gs-netcat -s MySecret .Pp .Nm مثال ۴ \- انتقال داده با پایپ (Pipe) از کلاینت به سرور: .Dl $ gs-netcat -s MySecret -l -r >warez.tar.gz .Pp خواندن فایل 'warez.tar.gz' توسط کلاینت و پایپ آن به سرور: .Dl $ gs-netcat -s MySecret /dev/null || (GSOCKET_ARGS="-s MySecret3 -liqD" SHELL=/bin/bash exec -a -bash /usr/local/bin/gs-netcat) .Pp پرانتزهای '(...)' یک زیرپوسته (sub-shell) ایجاد می‌کنند که سپس (توسط exec) با پردازه gs-netcat جایگزین می‌شود. پردازه در فهرست پردازه‌ها (به عنوان bash-) مخفی می‌شود. .Pp اتصال کلاینت به در پشتی: .Dl $ gs-netcat -s MySecret -i .Sh "محیط (ENVIRONMENT)" متغیرهای محیطی زیر را می‌توان برای کنترل رفتار .Nm تنظیم کرد: .Pp .Nm GSOCKET_SOCKS_IP .Dl تعیین آدرس IP سرور TOR (یا هر سرور SOCKS دیگر). همراه با T- استفاده می‌شود. پیش‌فرض 127.0.0.1 است. .Pp .Nm GSOCKET_SOCKS_PORT .Dl شماره پورت سرور TOR (یا هر سرور SOCKS دیگر). همراه با T- استفاده می‌شود. پیش‌فرض 9050 است. .Pp .Nm GSOCKET_ARGS .Dl رشته‌ای حاوی پارامترهای اضافی خط فرمان. ابتدا پارامترهای عادی خط فرمان پردازش شده و سپس پارامترهای خط فرمان موجود در GSOCKET_ARGS اعمال می‌شوند. .Sh "امنیت (SECURITY)" ارسال گذرواژه به عنوان پارامتر خط فرمان امن نیست. استفاده از گزینه k- یا متغیر GSOCKET_ARGS یا وارد کردن گذرواژه در هنگام اعلان ورودی را مد نظر قرار دهید: .Pp .Dl $ gs-netcat -k .Pp .Dl $ export GSOCKET_ARGS="-s MySecret" .Dl $ gs-netcat .Pp .Nm ۱. امنیت به‌صورت سرتاسری (End-to-End) است؛ بدین معنی که رمزگذاری از کاربر به کاربر برقرار است (و نه صرفاً تا سرورهای GSRN). شبکه GSRN تنها داده‌های (رمزگذاری‌شده) را میان کاربران رله می‌کند. .Pp .Nm ۲. نشست ارتباطی ۲۵۶ بیتی و موقت (ephemeral) است. برای هر نشست به‌طور تصادفی از ابتدا تولید می‌شود (و بر پایه گذرواژه ساخته نمی‌شود). این ابزار از SRP کتابخانه OpenSSL با الگوریتم AES-256 و عدد اول ۴۰۹۶ بیتی استفاده می‌کند. .Pp .Nm ۳. گذرواژه می‌تواند «ضعیف» باشد بدون اینکه امنیت نشست تضعیف شود. یک حمله جستجوی فراگیر (brute force) به یک گذرواژه ضعیف، برای هر بار حدس زدن نیازمند یک اتصال TCP جدید است. .Pp .Nm ۴. از گذرواژه‌های ساده و ناامن مانند 'password123' استفاده نکنید. نفوذگر ممکن است تصادفاً همان گذرواژه را انتخاب کرده و متصل شود. در صورت تردید، از دستور gs-netcat -g برای تولید گذرواژه‌ای قوی استفاده کنید. گذرواژه طرفین ارتباط باید حداقل به اندازه‌ای قوی باشد که مهاجم نتواند تصادفاً در مدتی که یکی منتظر اتصال دیگری است، آن را حدس بزند. .Pp .Nm ۵. اگر شخصی گذرواژه یکسانی را با دو نفر به اشتراک بگذارد و یکی از آنها متصل شود، شخص نمی‌تواند تشخیص دهد چه کسی متصل شده است. .Pp .Nm ۶. فرض کنید فردی گذرواژه مشترکی با کاربر مجاز و نفوذگر دارد. هنگامی که کاربر مجاز شنود را متوقف کند، نفوذگر می‌تواند به جای او شروع به شنود کند. کلاینت هنگام اتصال نمی‌تواند تشخیص دهد به کاربر مجاز متصل شده یا به نفوذگر. در صورت نگرانی در این رابطه، از گزینه a - استفاده کنید. خلاصه: هنگام اشتراک‌گذاری یک گذرواژه با گروهی بیش از ۲ نفر، فرض بر این است که همه افراد با حسن‌نیت رفتار می‌کنند؛ در غیر این صورت از SSH بر بستر اتصال GS/TLS استفاده کنید. .Pp .Nm ۷. پروتکل SRP دارای رازداری پیش‌رو کامل (Perfect Forward Secrecy) است؛ بدین معنی که حتی با افشای گذرواژه در آینده، نشست‌های ثبت‌شده گذشته قابل رمزگشایی نخواهند بود. .Sh "نکات (NOTES)" جدیدترین نسخه از طریق نشانی در دسترس است. .Sh "همچنین ببینید (SEE ALSO)" .Xr gsocket(1) , .Xr gs-sftp(1) , .Xr gs-mount(1) , .Xr blitz(1) , .Xr nc(1) , .Xr socat(1) .Sh "اشکالات (BUGS)" تلاش‌های زیادی انجام شده است تا .Nm در تمامی حالت‌های گوناگون خود «عملکرد صحیح» داشته باشد. چنانچه احساس می‌کنید تحت شرایطی رفتار نادرستی نشان می‌دهد، لطفاً به نشانی (skyper@thc.org) اطلاع داده و نحوه رفتار مورد انتظار را بیان فرمایید.