این مطلب بعنوان یک راهنمای فنی با محوریت نصب و استفاده از داکر و سایر سرویس هایی که از این طرف یا آن طرف فیلتر هستند برای لینوکسی ها نوشته شده و مثل هر چیز دیگری استفاده و خواندن آن با مسئولیت خود خواننده است.
ایرانی بودن این روزها کارآسانی نیست. از اینطرف دسترسی به بسیاری از سرویس های مفید و سالم مثل یوتیوب بسته است و از آنطرف هم همینطور امکان دسترسی به بسیاری از منابع و سایت های فنی برای آدرس های ایرانی میسر نیست و حتی اگر بفهمند ایرانی هستی احتمال اینکه دسترسی جاری را محدود یا کلاً اکانت را بلاک کنند هست.
استفاده از انواع VPNها و پروکسی ها و فیلترشکن ها از جمله مهارت هایی است که یک ایرانی از عنفوان نوجوانی یاد می گیرد. اگر VPN یا پروکسی شخصی دارید که اولویت دارد. اما اگر ندارید استفاده از شبکه Tor شاید بهتر از استفاده از انواع VPNهای ناشناس یا نصب انواع نرم افزارهای فیلترشکنی باشد که ممکن است بدافزار یا تبلیغ افزار یا جاسوس افزار باشند. در این مدل استفاده از فیلترشکن های عمومی و رایگان باید این را قبول کنید که بسیاری از آن ها برای مقاصد جاسوسی، تحقیقاتی، آماری، تبلیغاتی و ... استفاده می شوند. حتی بسیاری از سرویس های VPN و پروکسی حرفه ای و پولی هم چنین شرایطی را دارند.
البته وقتی مثلاً در داخل یکی از این تونل ها gmail خود را چک می کنید ترافیک شما تا سرور جی میل بوسیله TLS رمزنگاری شده و در صورت استراق سمع امکان دسترسی و خواندن مستقیم آن نیست. امروزه اکثر وب سایت ها https فعال و معتبر دارند و ترافیک ابزارهایی مثل تلگرام نیز رمزنگاری قابل قبولی دارد. هر چند هم اکنون هم راه های مختلفی برای فریب این رمزها و/یا جعل گواهینامه ها و ... هست اما بالاخره عموم موارد استفاده، نیاز به سخت گیری خیلی زیاد ندارد و اگر از نرم افزارها و ابزارهای بروز و استاندارد به همراه یک آنتی ویروس/فایروال روی سیستم خود استفاده می کنید و چیزهای نامربوط روی سیستم خود نصب نمی کنید و جاهای نامربوط نمی روید می توانید تا حد زیادی برای امنیت یک سیستم شخصی که حتماً بک آپ دارد خیال راحت داشته باشید.
تور یک ابزار رایگان و سورس باز است که روی میلیون ها سیستم در سراسر دنیا نصب شده و فعال است و یک زیرساخت anonymity network ایجاد می کند. محتوی ، مبداء و مقصد ترافیک در شبکه تور برای hopها و نودهای بین راه و دریافت کننده مقصد قابل شناسایی نیست.
بسیاری از کاربران Tor را فقط برای دسترسی به اینترنت بدون فیلتر و هویت استفاده می کنند.
برخی دیگر انواع حالت relay را هم روی Tor خود فعال می کنند تا در شبکه انتقال ترافیک هم همکاری کنند.
برخی دیگر هم روی شبکه Tor سایت هایی با پسوند .onion راه اندازی می کنند که رهگیری و پیدا کردن محل و مالک این سایت ها از نظر فنی در شرایط نرمال ممکن نیست. به همین دلیل بخشی از dark web و deep web که اطلاعات و محتوی غیراستاندارد و معمولاً غیرقانونی را منتشر می کنند روی شبکه Tor است. معاملات غیرقانونی نیز روی این شبکه با استفاده از انواع پول ها و اعتبارهای اینترنتی و ارزرمزها و ... انجام می شود. Deep Web سایت هایی هستند که از طریق خط ارتباطی معمولی اینترنت قابل دسترس هستند اما برای ورود و دسترسی باید اطلاعات محرمانه ای مثل آدرسی خاص ، نام کاربری و پسورد و ... داشته باشید. Dark Web بخشی از وب است که برای دسترسی به آن حتماً باید نرم افزارهای کلاینتی مانند Tor یا I2P را نصب نمایید.
در اینجا بحث ما بیشتر روی استفاده آزاد بدون فیلتر و هویت از اینترنت است. برای دسترسی به شبکه Tor باید آن را روی سیستم خود نصب کنید. پس از آن می توانید به داخل شبکه Tor و همچنین اینترنتی که در نهایت از یکی از نودهای این شبکه به بیرون وصل می شود دسترسی داشته باشید. در شبکه های مشابهی مثل i2p پس از اتصال، فقط به همان شبکه البته بصورت امن و غیر قابل ردیابی (در تئوری) متصل هستید و معمولاً امکان اتصال از اینترنت به درون شبکه هست اما از درون شبکه به بیرون نیست.
تور (TOR) ، برآمده از سرواژه های The Onion Router ، یک شبکه ارتباط امن و غیرقابل ردیابی و شناسایی است که از روش Onion Routing استفاده می کند. مسیریابی و انتقال ترافیک این شبکه از هزاران کاربر داوطلب که نقش relay ها را در کلاینت tor خود فعال کرده اند استفاده می نماید.
کلاینت tor با رمزنگاری جداگانه و چندلایه کل ترافیک، از جمله مشخصات مقصد و مبداء ، و انتخاب یک مسیر از relayهای تصادفی ، ترافیک رمزشده ای که محتوی و مقصد و منبع آن رمزنگاری شده است و حتی برای hopها ی بین راه مشخص نیست را منتقل می کند. برای hopها تنها آدرس next hop قابل شناسایی است و ترافیک در نهایت از hop آخر که به exit node معروف است خارج می شود و یک لینک ارتباطی رمزنگاری شده با مسیر تصادفی بین کاربر و مقصد ایجاد می گردد.
3 نود ورودی - میانی و خروجی در ایجاد یک مدار Tor نیاز است.
کلاینت Tor پس از اتصال یک Socks5 Proxy در اختیار ما می گذارد تا بتوانیم ترافیک خود را از آن عبور دهیم. برای کلاینت Tor پورت پیش فرض این پروکسی 9050 است. بنابراین وقتی مدار Tor روی سیستم ما تشکیل شد براحتی می توان سایر ابزارها و نرم افزارها را برای استفاده از socks proxy به آدرس 127.0.0.1:9050 (یا localhost:9050) تنظیم کرد. دسترسی دیگران به این پروکسی نیز قابل تنظیم در تنظیمات Tor است.
مرورگر آماده تور یا Tor Browser یک نسخه فایرفاکس کمی تغییر یافته و ایمن شده برای حفظ محرمانگی حریم شخصی است که کلاینت Tor داخلی دارد و پس از اجرا به شبکه Tor متصل شده و مرور اینترنت در آن از مجرای شبکه Tor انجام می شود. Tor Browser نیز یک socks5 proxy در اختیار ما قرار می دهد (پورت 9150) تا برای سایر ابزارها و نرم افزارها استفاده کنیم. معمولاً تنظیمات Tor Browser بهینه و قابل قبول هستند و براساس تجربه bridgeهایی که از طریق آن می گیریم کیفیت بهتری دارند. به همین دلیل بسیاری که تنها دنبال عبور از انواع فیلترینگ و محدودیت هستند مستقیماً از Tor Browser استفاده می کنند اما طبیعتاً امکان نصب و راه اندازی آن روی مثلاً یک سرور لینوکس که رابط گرافیکی ندارد نیست.
بدلیل اینکه relayهای Tor اشخاص داوطلب و متغییر در کل اینترنت هستند و ترافیک کاربر بصورت رمزنگاری شده و براساس قرعه تصادفی به یکی از اینها ارسال می شود و بعد از طریق شبکه به بیرون می رسد ، و همچنین وجود relayهای مخفی که در دایرکتوری لیست نشده اند و بصورت دستی دریافت و اضافه می شوند (Bridges)، امکان پیدا کردن و فیلتر کردن تمام این relayها نیست یا بسیار سخت و مداوم است.
برای شناسایی و بستن ترافیک شبکه tor از تکنیک های Deep Packet Inspection استفاده می شود که در ادامه توضیح داده خواهد شد.
محتوی ترافیک از کاربر تا entry node و از entry node تا نودها بعدی و در نهایت exit node رمزنگاری شده و امکان بررسی و خواندن آن درصورت استراق سمع ممکن نیست. بنابراین روش های فیلترینگ متداول قادر به شناسایی و فیلتر کردن این ترافیک نیستند. مقصد نیز که می تواند مثلاً یک وب سایت باشد ، ترافیک را از آدرس مبداء exit node دریافت می کند که آدرس خروجی مسیر تصادفی انتخاب شده است. بنابراین مقصد قادر به شناسایی مبداء اصلی ترافیک نیست و مبداء اصلی را همان exit node می بیند. بدین ترتیب ناشناسی و anonymity برای دسترسی به سرویس های اینترنت بدست می آید.
3 نوع نود یا relay در شبکه Tor وجود دارند:
نودهای ابتدایی و میانی ؛ Guard/middle (aka non-exit) relay : گاردها نود ورودی هستند که اولین نود مدار را تشکیل می دهند. middle relayها نودهای میانی بین یک guard و exit node هستند. این relayها در دایرکتوری اصلی Tor لیست می شوند و بنابراین برای بستن شبکه Tor معمولاً از فیلتر کردن این نودها استفاده می شود. اینها تاثیری در آدرس IP نهایی خروجی از شبکه ندارند و تنها برای ایجاد مدار تا قبل از نقطه خروج استفاده می شوند.
نودهای خروجی ؛ Exit relay : این نود نهایی خروج از یک مدار Tor است که مقصد آدرس IP آن را می بیند. به همین دلیل راه اندازی یک exit node ممکن است برای راه انداز آن مشکل حقوقی ایجاد کند. اعمالی که کاربران Torی که از یک exit node خارج می شوند انجام می دهند بنام آدرس آن نود ثبت می شود و بعضاً ممکن است فعالیت های غیرقانونی ایشان برای راه انداز exit node مشکل قانونی ایجاد کند.
پل ها ؛ Bridge : پل ها نودهایی هستند که در public Tor directory بصورت عمومی لیست نمی شوند و بنابراین برای جلوگیری از بستن دسترسی به شبکه Tor استفاده می شوند و پیدا کردن و بستن همه آن ها برای فیلتر کردن شبکه Tor سخت است.
ایران و چین جزو کشورهایی هستند که امکان بستن ارتباط با bridgeها را براساس نوع ترافیک و شناسایی bridgeها پیدا کرده اند. برای گذر از این قضیه از Pluggable transports ها که نوعی ابزار رمزنگاری ارتباطات با قابلیت استفاده از obfuscation (درهم ریختگی-رمزنگاری) اضافی هستند استفاده می شود.
برای دریافت bridge ها هم میتوان در اینترنت جستجو نمود ، هم میتوان از آدرس https://bridges.torproject.org استفاده کرد و هم میتوان به bridges@torproject.org با فرمت ذیل ایمیل داد.
افزونه های Pluggable transports : همانطور که ذکر شد امکان فیلتر کردن شبکه Tor براساس نوع ترافیک بجای آدرس نودها با استفاده از Deep Packet Inspection هست. برای جلوگیری از این اقدام از پلاگین هایی که ترافیک را در 2 طرف بصورت درهم ریخته در آورده و منتقل می کنند استفاده می شود.
البته مقالات و روش های متعددی نیز به مرور برای شناسایی این روش ها ارائه می شوند و به همین دلیل بعد از مدتی نیاز است تا Pluggable transports جدیدی معرفی و استفاده شود. معروفترین Pluggable transports هایی که در Torاستفاده می شوند شامل obfs3, scramblesuit, fte, obfs4 هستند. از این میان obfs4 کاربرد بیشتری دارد.
این ابزارها بصورت کلاینت/سرور روی 2طرف نصب می شوند و با درهم ریختگی و رمزنگاری افزونه ترافیک، قابلیت تشخیص آن را از بین می برند. ترافیک در سمت کلاینت رمزنگاری و درهم ریخته شده و در سمت سرور باز می شود و به ابزار نهایی تحویل می گردد.
برای مثال obfs4 از رمزنگاری کلید عمومی و ECC (Elliptic-Curve Cryptography) برای رمز کردن ارتباطات بین کلاینت و سرور خود استفاده می کند. برای برقراری ارتباط بین کلاینت و سرور obfs4 باید یک handshake و تبادل کلیدعمومی بین دوطرف انجام شود. علاوه بر رمزنگاری، obfs4، از random padding of data نیز برای ایجاد بسته هایی با سایز تصادفی و randomization of time sequence نیز استفاده می کند تا سخت تر شناسایی گردد. تکنیک دیگری که برای سخت کردن شناسایی ترافیک استفاده می شود به IAT-mode(Inter-Arrival Timing) معروف است که می تواند بدون دخالت سایر لایه های شبکه بسته های بزرگ را به اندازه MTU یا اندازه ای متغییر در آورده و منتقل کند.
مقدار 0 آن به معنای عدم استفاده و ارجاع موضوع اندازه کردن بسته های بزرگ IP به network driver است که شناسایی و reassemble ترافیک را ساده تر می کند ، مقدار 1 به معنای اندازه کردن بسته ها براساس MTU-size اما قبل از network driver است که باعث سخت تر شدن reassemble بسته ها توسط سیستم های شناسایی می شود و مقدار 2 آن به معنای اندازه کردن متغییر بسته ها که در کد obfs4 قبلاً تعیین شده است هستند. استفاده از MTUهای متغییر reassemble کردن ترافیک را برای سیستم های شناسایی سخت می کند.
برای اطلاعات بیشتر در زمینه شناسایی ترافیک Pluggable Transport ها مقاله Dissecting Tor Bridges and Pluggable Transport را از fortinet ذیل همین مقاله ببینید.
وارد مباحث تخصصی تر نمی شویم ، تا اینجا برای جمع بندی ؛
1-تور (tor) یک ابزار است که با ایجاد یک شبکه بین کاربران اینترنتی و برقراری یک مدار از حداقل 3 نود ورودی، میانی و خروجی و رمزنگاری ارتباطات، قابلیت انتقال ترافیک را از طریق شبکه خود فراهم می آورد و بنابراین قابلیت عبور از فیلتر داخلی را میسر می کند و همچنین کاربری که از tor استفاده می کند از آدرس IP نود خروجی خارج خواهد شد و آدرس اصلی وی قابل شناسایی نیست.
2- مرورگر tor Browser یک فایرفاکس تغییر یافته با Tor داخلی است.
3- نودهای tor بجز bridgeها در دایرکتوری tor لیست شده و قابل فیلتر هستند. bridgeها نیز به تدریج شناسایی و فیلتر می شوند. همچنین ترافیک tor (و سایر ترافیک ها) از طریق روش های deep packet inspection (DPI) قابل شناسایی و فیلترکردن است که اکنون در ایران و چین انجام می شود.
4- برای عبور از شناسایی ترافیک شبکه tor (یا سایر ترافیک ها) از ابزارهایی با عنوان Pluggable transports که وظیفه رمزنگاری افزونه و در هم ریختگی ترافیک را برعهده دارند استفاده می شود.
مرور بسیار کوتاهی نیز روی روش مورد استفاده در tor داشته باشیم.
مسیریابی پیازی یا Onion Routing همانطور که از نامش پیداست براساس رمزنگاری چندلایه کار می کند. در این روش پیام از مبداء در لایه های متعدد که هر لایه براساس کلید رمزنگاری یکی از نودها (روترها)ی بین راه است رمزنگاری می شود و هر نود (روتر onion) یک لایه از رمزنگاری را باز می کند و براساس آن ترافیک را به نود بعدی می فرستد.
این روش اولین بار در اواسط دهه 90 در U.S. Naval Research Laboratory برای حفاظت از ارتباطات اطلاعاتی-امنیتی توسعه داده شد و بعدها DARPA توسعه و تحقیق بیشتری روی آن انجام داد و در 1998 بعنوان یک patent توسط نیروی دریایی آمریکا ثبت شد. بعدها نیروی دریایی آمریکا کد و اطلاعات و لایسنس آن را بصورت free license منتشر کرد و Roger Dingledine و Nick Mathewson در 2002 اولین نسخ tor را براساس آن توسعه دادند. در حال حاضر The Onion Routing project (TOR project) تحت یک موسسه غیرانتفاعی که توسط این 2 و پنج نفر دیگر ثبت شده حمایت و توسعه می شود و بودجه آن را Electronic Frontier Foundation (EFF) و چند موسسه دیگر تامین می کنند.
اونیون یعنی پیاز ، Onion نوعی ساختار داده است که در آن داده اصلی در لایه های متعدد رمزنگاری پیچیده شده است و برای برداشتن هر کدام از این لایه ها نیاز به یک کلید مشخص و منحصر است. در مسیریابی Onion یا Onion Routing کل بسته پیام با کلید عمومی روترها (نودها)ی بین راه در لایه هایی به همین تعداد رمزنگاری می شود و هر روتر وقتی پیام را از روتر قبلی خود دریافت می کند یک لایه از رمزنگاری را با کلید خصوصی خود باز کرده و با دریافتن آدرس روتر بعدی، بسته را به وی ارسال می کند.
نود آخر یا exit node آخرین لایه رمزنگاری را برداشته و با دیدن آدرس مقصد آن را به مقصد ارسال می نماید و پاسخ نیز از همین مسیر پیازی و با همین روش بصورت معکوس باز می گردد. به همین دلیل این روش در برابر Exit node eavesdropping آسیب پذیر است. exit node هر چند آدرس مبداء اصلی را ندارد و مثل هر روتر دیگری تنها روتر قبل و بعد خود در آن جریان ترافیک را می شناسد اما بدلیل اینکه آخرین لایه رمزنگاری شبکه را برداشته و ترافیک اصلی و رمزگشایی شده را به مقصد می فرستد می تواند اقدام به استراق سمع آن نماید. هر چند همانطور که قبلاً ذکر شد اکنون اکثر نرم افزارها و ابزارها خودشان روی ترافیک رمزنگاری شده دارند و در نهایت exit node نیز ترافیک رمز شده بین مبداء و مقصد اصلی را می بیند.
مدار یا مسیر یا "chain" یا "circuit" همان مسیری از Onion Routerها است که برای یک جریان ترافیک توسط کلاینت بصورت تصادفی انتخاب می شود. هیچ کدام از نودها بجز exit node از اینکه در کجای مدار قرار گرفته و hop قبلی مبداء اصلی بوده یا یک روتر دیگر اطلاعی ندارد.
مسیر یابی سیری (garlic routeing) هم داریم که در حوزه این مقاله نیست!
تور نیز مثل هر سامانه و نرم افزار دیگری آسیب پذیری ها و ضعف های امنیتی هم دارد که تحقیق آن با خود شما، اما اگر برای دسترسی به بانک های نرم افزاری و مقالات و ویدیوها و محتوی آموزشی نیاز به رفع فیلتر و هویت دارید خیلی لازم نیست نگران باشید.
برای راهنمای نصب Tor روی ویندوز و اندروید جستجو کنید :D ، البته ظاهرا فایل نصبی دارد و Tor Browser را هم میتوانید دانلود و Setup کنید و تنظیم خاصی هم نمی خواهد. پس از قضیه نصب، استفاده از آن با همین روش هایی که در ادامه ذکر می شود است و تفاوت خاصی بین نسخه ویندوزی و لینوکسی نباید باشد.
نصب Tor روی Centos , Fedora , Ubuntu و ...
معمولاً tor روی repositoryهای اصلی توزیع ها هست و بسادگی با package manager آن لینوکس نصب می شود.در توزیع های مختلف لینوکس ممکن است مجبور باشید ابتدا repository اضافه کنید و ... . من از فدورا و CentOs استفاده می کنم و چنین مشکلی ندارم!
به هر حال پیدا کردن و نصب یک بسته نصبی بسیار ساده برای یک لینوکسی خیلی سخت نیست و بسته به توزیع مورد استفاده خود می توانید با یک جستجوی ساده به نتیجه برسید. دقت کنید معمولاً tor را با root نصب و اجرا نمی کنند.
برای نصب tor در Centos باید epel-release را فعال کرد. (yum install epel-release) ، سپس با yum install tor بسادگی نصب می شود. در Fedora نیز می توان بسادگی با dnf install tor آن را نصب نمود.
در دبیان و Ubuntu نیز میتوان با apt install tor آن را نصب کرد. (ممکن است در نسخ مختلف مستقیم و بدون اضافه کردن repository کار نکند.)
عنوان بسته نصبی tor browser نیز torbrowser-launcher است که همه چیز را خودش نصب می کند و با فرمان torbrowser-launcher نیز اجرا می شود.
پس از نصب، tor بصورت یکی از سرویس ها اجرا می شود و بوسیله
systemctl start|stop|status tor
می توانید سرویس آن را کنترل نمایید.
برای اجرای دستی و دیدن لاگ زنده نیز کافیست دستور tor -f /etc/tor/torrc را اجرا نمایید. اگر فایل تنظیمات را با سوییچ f مشخص نکنید و تنها دستور tor را بزنید از همان تنظیمات پیش فرض فایل
/etc/tor/torrc
استفاده خواهد کرد.
لاگ ها و وضعیت زنده tor را نیز درصورت عدم اجرای مستقیم با دستور tor از خط فرمان و اجرا بصورت یک سرویس روی لینوکس (دارای systemd) می توانید با
journalctl -exfu tor
ببینید.
آخرین لاگ ها را نیز با systemctl status tor ببینید.
لاگ های tor نیز در صورتیکه ثبت لاگ ها را در فایل تنظیمات torrc فعال کرده باشید بصورت پیش فرض در /var/log/tor/ نگه داری می شوند. Tor Browser نیز بصورت پیش فرض هیچ on-disk logی ندارد.
ممکن است بسته به توزیع مورد استفاده در هنگام اجرا با خطاهایی درخصوص عدم دسترسی tor به برخی پوشه ها ببینید که در لاگ ها مشخص است و با تنظیم مجوزها یا یکدفعه chwon میتوانید مشکل را حل کنید.
عبارت Bootstrapped 100%: Done در لاگ ها یعنی مدار tor برقرار شده است.
معمولاً نیازی نیست اما 2 مورد را بخاطر داشته باشید :
torsocks ssh username @ some.ssh.com
با اجرا تحت torsocks کل درخواست های نرم افزار اجرا شده SOCKS-friendly به همراه درخواست های DNS از شبکه tor رد می شوند. ابزارهای دیگری مثل proxy Chain نیز می توانند کل ترافیک شبکه یک نرم افزار را در کنترل بگیرند و روی یک پروکسی هدایت کنند.
نصب obfs4
آدرس و دستورات اصلی را از اینجا ببینید : https://github.com/Yawning/obfs4 .
در برخی توزیع ها مثل فدورا امکان نصب مستقیم با dnf install obfs4 هست. برای centos نیز پس از فعالسازی epel-release ابتدا باید go و git نصب شوند و سپس آن را build کنید برای دبیان و اوبونتو اگر روی repositoryهای apt نبود می توانید نسخه deb آن را از مثلاً https://pkgs.org/download/obfs4proxy دریافت نمایید.
من البته فایل اجرایی obfsproxy را معمولاً از سایر لینوکس ها و نصب هایی که دارم به /usr/local/bin/ سیستم جدید کپی می کنم و هربار آن را بیلد نمی کنم.:D .
یک نسخه elf بیلد شده را نیز از http://block0.ir/tor/obfs4proxy می توانید دریافت کنید که البته اصلا تایید شده و بروز نیست و اصولاً دریافت فایل های اجرایی آماده و بیلد و کامپایل شده کار امنی نیست.
تنظیم torrc
فایل torrc حاوی تنظیماتی است که tor در هنگام اجرا براساس آن عمل می کند و آن را می توانید در مسیر /etc/tor/torrc پیدا کرده و ویرایش نمایید. پس از ویرایش باید یکبار سرویس tor را reload یا restart کنید. دستورات بسیار متعددی در این فایل قابل تنظیم هستند. توضیحات و کامنت های نسبتاً خوبی نیز در خود این فایل درج شده است. بجز بخش relayها و hidden serviceها و exit node ها باید socks proxy و استفاده از bridge و Pluggable transports را بشرح ذیل در آن تنظیم نمایید.
این موارد را در خطی جدید اضافه کنید یا از حالت کامنت درآورید.
عبارت SOCKSPort 9050:
برای تعیین پورت Socks Proxyی است که tor به شما می دهد.
## Tor opens a SOCKS proxy on port 9050 by default -- even if you don't ## configure one below. Set "SOCKSPort 0" if you plan to run Tor only ## as a relay, and not make any local application connections yourself.
SOCKSPort 9050 # Default: Bind to localhost:9050 for local connections. #SOCKSPort 192.168.0.1:9100 # Bind to this address:port too.
عبارت SOCKSPolicy accept 192.168.5.0/24 :
برای اینکه مبداء هایی که اجازه استفاده از Socks Proxy فراهم شده توسط tor را دارند مشخص کنیم این گزینه باید مقداردهی شود. برای آدرس های IPv6 بجای accept باید از accept6 استفاده کنید. در نهایت نیز می توانید پس از اجازه دادن به آدرس های مجاز در پایان با SOCKSPolicy reject * (مثل ترتیب قوانین فایروال ها) دسترسی سایرین به ساکس پروکسی tor را ببندید.
## Entry policies to allow/deny SOCKS requests based on IP address. ## First entry that matches wins. If no SOCKSPolicy is set, we accept ## all (and only) requests that reach a SOCKSPort. Untrusted users who ## can access your SOCKSPort may be able to learn about the connections ## you make.
SOCKSPolicy accept 192.168.5.0/24 #SOCKSPolicy accept6 FC00::/7 #SOCKSPolicy reject *
برای تعیین استفاده از Bridge برای برقراری مدارو تعیین Pluggable transports مورد استفاده و محل فایل اجرایی آن، این خطوط باید فعال و با این مقادیر باشند.
UseBridges 1 ClientTransportPlugin obfs4 exec /usr/bin/obfs4proxy
همچنین پس از آنکه به یکی از روش های ذکر شده در بالا آدرس های bridge را گرفتید بصورت ذیل باید زیر 2خط فوق آن ها را اضافه کنید. (آدرس های درج شده واقعی اما نمونه هستند و باید با آدرس و مشخصاتی که می گیرید تغییر دهید.)
Bridge obfs4 73.180.47.84:48235 D9B79AC4D8A4E8F0992EE234B6AF42ACCD925018 cert=+qVKhYSPb9VFcqvjf6HdRWBUP+L8aHxW+GSD4WIU2+FL9dgEqUVfut+ozYnhK7M9RpTpGw iat-mode=0 Bridge obfs4 87.151.6.164:8443 4F597FFA9BB6DF73C8948A7A37AFE68270553E9A cert=y1sRF/zn37gk88jAVBebJSP4xEGKQ0QjKacFFMLv52K9b+6X1MX8J2fjmvWcPOyuDJ2XVA iat-mode=0 Bridge obfs4 81.174.147.57:53677 3AF500006A1637D21B1F5D3E64F63882A9623717 cert=4MKPza4o09lrOiAB+/xcDqUx/b51YbDj3mbnRA8eKlmqFIK/jCyh4PesG3kBvjN4UukrRg iat-mode=0
خلاصه ای از دیگر تنظیماتی که باید بدانید :
گزینه های ControlPort و ControlSocket و مرتبط با آن ها : درصورت فعال بودن اجازه اتصال و استفاده و کنترل پروسس tor و اجرای دستورات tor را روی آن را می دهد. برای امور برنامه نویسی یا استفاده برخی برنامه ها که صراحتاً ذکر می کنند کاربرد دارد. برای استفاده در محدوده موضوع این راهنما بهتر است کامنت کنید.
گزینه CookieAuthentication : درصورت 1 بودن اجازه اتصال به control port را براساس control_auth_cookie می دهد. مطابق قبلی بهتر است 0 یا کلاً غیرفعال باشد.
گزینه HashedControlPassword : براساس پسورد هش شده اجازه اتصال به control port را می دهد. این هم بهتر است غیرفعال باشد.
برای اینکه تنظیم کنید همیشه از exit node با آدرس کشورهای مشخص خارج شوید می توانید در انتها از
ExitNodes {contry code}
استفاده کنید. مثلاً
ExitNodes {us},{gb}
برای استفاده از فقط آدرس های انگلیسی و آمریکایی.
یا برعکس آن از ExcludeNodes و تنظیم StrictNodes روی 1 برای الزاماً عدم استفاده از آدرس های یک کشور استفاده نمایید.
همه تنظیماتی که می توانید استفاده کنید را در https://2019.www.torproject.org/docs/tor-manual.html.en ببینید. فایل پیش فرض torrc هم گزینه های پرکاربرد را بصورت کامنت توضیح داده است.
بصورت خلاصه این نمونه تمام تنظیمات فعال روی یک torrc برای عبور از فیلترینگ و شناسایی مبداء است که بخوبی کار می کند. یک نسخه آماده torrc را نیز می توانید از https://block0.ir/tor/torrc دریافت کنید :
SocksPolicy accept 192.168.0.0/16 SocksPort 127.0.0.1:9050 UseBridges 1 ClientTransportPlugin obfs4 exec /usr/bin/obfs4proxy Bridge obfs4 185.120.77.129:443 3218F7484BD3456A44351F61ED6F71164605EFE3 cert=r78FCpxq/CZIiWQ0k4gnv9J1sBly5vAxOCUHW+I8m9rA8s73lgGHTYFVHaB5f+p1pH6DWg iat-mode=0 Bridge obfs4 94.242.249.4:9904 E25A95F1DADB739F0A83EB0223A37C02FD519306 cert=j530B23jE9LX81BOl/cqdjaTVMOXSjPDxevcwq6jKVvnDgvQk/4Gsqfmnc8/wAFzAqtRWg iat-mode=0 Bridge obfs4 50.3.72.238:443 EF870A94B09A90C3C5E3BD6115C33635CDE5D100 cert=u/Q/4VXrf6SbGbBMyApndlDdRh8DWa4HYM6ijjeEI60ZZbfFzcpULJ/VlXxM0o/elsfxEg iat-mode=0
تنظیم پروکسی بصورت Global Environment value برای لینوکس ها
لینوکس ها مقدارهای محیطی مثل http_proxy و https_proxy دارند که با تنظیم آن دستورات در خط فرمان یا سایر ابزارهایی که از متغییرهای محیطی استفاده می کنند از این پروکسی ها استفاده خواهند کرد.
مثل بقیه متغییرهای محیطی راحت ترین روش برای تنظیم آن ها استفاده از export است.
export NO_PROXY=localhost,::1,.xyz.com export http_proxy=protocol://server-ip:port export https_proxy= protocol://server-ip:port export ftp_proxy= protocol://server-ip:port export all_proxy= protocol://server-ip:port
که در موضوع ما به شکل ذیل می شود :
export NO_PROXY=localhost,::1,.xyz.com export http_proxy=socks5://127.0.0.1:9050 export https_proxy= socks5://127.0.0.1:9050 export ftp_proxy= socks5://127.0.0.1:9050 export all_proxy= socks5://127.0.0.1:9050
برای دیدن مقدار متغییر تنظیم شده می توان از echo استفاده کرد. مثلاً:
#echo $http_proxy
برای پاک کردن مقدار داده شده به متغییر محیطی می توان از unset استفاده کرد. مثلاً:
#unset $http_proxy
این روش موقتی است و با خروج از نشست کاربری و ورود دوباره مقادیر متغییرها پاک می شوند. برای عمومی و دائم کردن آن با هر بار ورود به سیستم کافیست در یک خط جدید همین دستورات export را در
/etc/profile
اضافه نمایید تا با هر بار لاگین اجرا شوند.
برای اینکه تنظیمات هر بار برای bash یک کاربر مشخص اعمال شوند نیز می توانید exportها را در
$HOME/.bash_profile
درج نمایید.
تنظیم پروکسی برای YUM : فایل
/etc/yum.conf
را بازکنید و این خط را اضافه نمایید یا از حالت کامنت درآورید. proxy=socks5://ip:port ، که در اینجا مثلا ً:
proxy=socks5://127.0.0.1:9050
می شود.
تنظیم پروکسی برای dnf : فایل
/etc/dnf/dnf.conf
را باز کنید و این خط را اضافه نمایید یا از حالت کامنت در آورید. proxy=socks5://ip:port ،که در اینجا مثلا ً:
proxy=socks5://127.0.0.1:9050
می شود.
تنظیم پروکسی برای apt : در فایل
/etc/apt/apt.conf
این خط را اضافه نمایید یا از حالت کامنت در آورید. Acquire::socks::proxy "socks5://server:port"; که در اینجا مثلاً:
Acquire::socks::proxy "socks5://127.0.0.1:9050";
می شود.
تنظیم پروکسی tor برای docker : همانطور که می دانید امکان دسترسی به repositoryهای داکر و docker hub برای آدرس های ip ایرانی نیست. حتی با yum install نیز امکان نصب داکر یا اضافه کردن repositoryهای آن نیست و خطای 403 می گیرید.
برای حل این مشکل می توان از socks پروکسی tor استفاده کرد. برای نصب داکر و استفاده از yum install docker-ce باید قبلاً پروکسی را برای yum که بالاتر توضیح داده شد تنظیم کرده باشید.
برای تنظیم socks5 proxy برای Docker Client در Docker 17.06 به پایین باید environment variables ها را تنظیم کنید که ذکر شد. از نسخه 17.07 به بالا باید docker client را برای استفاده از پروکسی تنظیم کنید و به روش ذیل عمل نمایید:
فایل
~/.docker/config.json
را باز کرده و عبارت ذیل را اضافه نمایید :
{ "proxies": { "default": { "httpProxy": "socks5://127.0.0.1:9050", "httpsProxy": "socks5://127.0.0.1:9050", "noProxy": "*.xyz.com,.xyz.com" } } }
برای تنظیم socks5 proxy روی Docker Daemon، فایل
/etc/systemd/system/docker.service.d/http-proxy.conf
را ویرایش کنید یا بسازید و عبارت ذیل را در آن بنویسید :
[Service] Environment="HTTP_PROXY=socks5://127.0.0.1:9050" Environment="HTTPS_PROXY= socks5://127.0.0.1:9050" Environment="NO_PROXY=localhost,127.0.0.1"
سپس systemctl daemon-reload و systemctl restart docker را بزنید.
برای چک کردن فعال شدن آن از systemctl show --property=Environment docker استفاده کنید.
در هنگام اجرای دستورات داکر مثل docker run یا در docker fileها نیز می توانید از سوییچ --env استفاده نمایید. مثلاً:
--env HTTPS_PROXY="socks5://127.0.0.1:9050"
برای استفاده از CRI داکر در Kubernetes و عبور از سد بلاک شدن آدرس های ایرانی نیز همین کفایت می کند.
تنظیم برای Telegram : در تنظیمات connection آن را روی استفاده از socks proxy با آدرس 127.0.0.1 و پورت 9050 تنظیم نمایید.
مرورگرها : اگر از tor browser استفاده کنید که خودش آماده و تنظیم است و نیاز به چیزی ندارد. اما برای استفاده در مرورگرهای متداول ، علاوه بر تنظیم برای استفاده از Socks proxy ، تیک proxy dns when using socks v5 را نیز بزنید. از گزینه dns over https نیز می توانید استفاده کنید. با اینکار درخواست های dns برای پیدا کردن IP سایت ها و ... نیز از طریق شبکه tor انجام می شود و اصطلاحاً در anonymity خود dns leak ندارید.
سرویس های Hidden Service/Onion Service/.Onion ها
وقتی به شبکه tor متصل شده باشید می توانید وب سایت هایی با پسوند .onion را که اصطلاحاً hidden service یا onion service نام دارند و همانطور که در بالا گفته شده پیدا کردن مبداء و منشاء آن ها در تئوری ممکن نیست را ببینید. دامنه هایی با پسوند .tor و .exit هم در این شبکه هستند که موضوع فعلی بحث ما نیست.
هر کاربر متصل به شبکه tor می تواند به روش ذیل یک سرویس (مثلاً وب سایت) ناشناس که سایر کاربران می توانند در شبکه tor ببینند ایجاد کند. میزبانی آن سرویس می تواند روی همان سیستم یا سیستم دیگری باشد. آدرس این وب سایت (دسترسی به این سرویس) چیزی شبیه
nxqoim3t63pru53a6xr5j4nnnnmowfqaan4dpyvcatjvjyf5b5sga3yd.onion
خواهد بود. این آدرس برخلاف نسخ قبل که از RSA استفاده می شد در نسخ جدید V3 Onion Address از ECC استفاده می کند و طولانی تر است که می توان از همان نسخه قبل نیز استفاده کرد(V2 Onion Address). این آدرس ها بوسیله الگوریتم های رمزنگاری و بصورت تصادفی ساخته می شوند اما ابزارهایی مثل scallion, shallot و eschalot هم برای بدست آوردن یک آدرس انتخابی .onion می توانند کمک کنند.
تنها کافیست در فایل torrc خود مقادیر ذیل را اضافه کنید یا از حالت کامنت در آورید.
گزینه HiddenServiceDir که مثلاً می تواند /var/lib/tor/hidden_service/ باشد. برای ذخیره فایل های دیتا سرویس استفاده می شود و در نهایت آدرس onionی که می گیرید را باید در فایل hostname داخل این پوشه ببینید.
فایل secret_key (یا private_key) داخل این پوشه آدرس .onion شما را تعیین می کند و برای اینکه همیشه بتوانید از همین آدرس استفاده کنید باید آن را نگه دارید. (بسته به نسخه در صورت وجود فایل public_key را نیز نگه دارید.)
می توانید با گزینه HiddenServiceVersion 2 بعد از HiddenServiceDir به حالت قدیمی و آدرس های کوتاه و مد قدیمی که فقط فایل private_key داشت برگردید. مثلاً در این حالت آدرس مثل
ztz6q6a6vv6jd7fm.onion
می شود.
گزینه HiddenServicePort که مثلاً می تواند HiddenServicePort 80 127.0.0.1:80 باشد و می گوید درخواست های دریافت شده در چه پورتی روی چه آدرس و پورتی فوروارد شوند و در این حالت مثال زده شده درخواست های پورت 80 آدرس .onion شما را روی پورت 80 همین سیستم فوروارد می شوند.
مثلاً می توانید یک وب سرور راه بیاندازید و از این طریق تعیین کنید وب سایت هاست شده روی پورت 80 آن به این روش از طریق آدرس .onionی که در فایل hostname دیده اید در دسترس باشد. با استفاده از پورت مشابه تداخلی ایجاد نمی شود. tor فقط روی شبکه خود و آدرس .onion به این پورت گوش می کند و با آدرس مستقیم نیز می توان وصل شد. اما معمولاً پورت وب سرور و hidden service را متفاوت انتخاب می کنند.
برای اطلاعات بیشتر https://2019.www.torproject.org/docs/tor-onion-service.html را ببینید.
توضیحات فایل torrc گویا هستند :
## Once you have configured a hidden service, you can look at the ## contents of the file ".../hidden_service/hostname" for the address to tell people. ## HiddenServicePort x y:z says to redirect requests on port x to the address y:z. HiddenServiceDir /var/lib/tor/hidden_service/ HiddenServicePort 80 127.0.0.1:80 #HiddenServiceDir /var/lib/tor/other_hidden_service/ #HiddenServiceVersion 2 (or 3) #HiddenServicePort [onion address listen port] [server ip]:[listening port]
با چند بار اضافه کردن این 2 مقدار می توانید چند سرویس .onion راه اندازی کنید.
همچنین دقت کنید از http بجای https استفاده می کنیم. برای یک آدرس .onion نمی توان گواهینامه معتبر گرفت و اساساً گرفتن آن برای یک سرویس مخفی چندان موضوعیت ندارد. ترافیک انتقالی tor بوسیله همان فایل secret_key و استفاده از آن بعنوان private TLS key رمزنگاری می شود.
اتوماسیون فرآیند نصب و تنظیم tor و داکر بوسیله Ansible
انسیبل (Ansible) دقیقاً یک زبان برنامه نویسی نیست، یک ابزار برنامه ریزی است که می تواند یک فرآیند اتوماسیون شده را روی سیستم های متعدد و متنوع اجرا کند. Ansible برای اکثر تجهیزات و محیط ها ماژول آماده دارد ، بسیار ساده و قابل فهم است و Agentless است و برای ارتباط و اجرای دستور روی سیستم remote تنها نیاز به یک اتصال ssh (در ویندوز WinRM) دارد.
فایده اینکار مثلاً زمانی است که در دفعات متعدد می خواهید تعدادی سیستم را deploy کرده و روی آن ها مثلاً داکر نصب کنید و کلاستر کنید و نیاز دارید همزمان روی تعدادی سیستم متنوع، همه کارها را انجام دهید. و چون این سناریو ممکن است بارها تکرار شود اتوماسیون آن منطقی است.
من از این playbook انسیبل برای نصب و تنظیم tor و داکر روی centos7 ها استفاده می کنم. دقت کنید در اینجا ممکن است فواصل درست نیفتاده باشند بنابراین از آدرس
https://block0.ir/tor/torDockerInstall.yaml
میتوانید فایل yaml را برای اجرا با ansible-playbook دانلود بفرمایید:
--- - hosts: all remote_user: root tasks: - name: 1.Disable SELinux selinux: state: disabled - name: 2.Install epel-release & Tor yum: name: "{{ item }}" loop: - epel-release - tor - name: 3.Download configed torrc get_url: url: http://block0.ir/tor/torrc dest: /etc/tor/torrc mode: '0755' - name: 4.Download obfs4proxy's ELF get_url: url: http://block0.ir/tor/obfs4proxy dest: /usr/bin/obfs4proxy mode: '0755' - name: 5.Tor service restart systemd: state: restarted daemon_reload: yes name: tor - name: 6.sleep for 60 seconds to let tor circuit established and continue with play wait_for: timeout: 60 delegate_to: localhost - name: 7.Config proxy for YUM lineinfile: path: /etc/yum.conf backup: yes insertafter: EOF line: proxy=socks5://127.0.0.1:9050 - name: 8.install docker yum: name: "{{ item }}" state: latest loop: - yum-utils - device-mapper-persistent-data - lvm2 - docker - name: 9.Enable using tor's default socks proxy for docker client blockinfile: path: ~/.docker/config.json backup: yes create: yes marker: "" mode: '0755' insertafter: EOF block: | {"proxies":{"default":{ "httpProxy": "socks5://127.0.0.1:9050", "httpsProxy": "socks5://127.0.0.1:9050" }}} - name: 10.Enable using tor's default socks proxy for docker deamon blockinfile: path: /etc/systemd/system/docker.service.d/http-proxy.conf backup: yes create: yes marker: "" mode: '0755' insertafter: EOF block: | [Service] Environment="HTTP_PROXY=socks5://127.0.0.1:9050" Environment="HTTPS_PROXY=socks5://127.0.0.1:9050" Environment="NO_PROXY=localhost,127.0.0.1,172.17.0.1" - name: 11.docker service restart systemd: state: restarted daemon_reload: yes name: docker
منابع مفید برای مطالعه تکمیلی :