← بازگشت به وبلاگ

پروکسی با نام کاربری و رمز عبور در برنامه بدون احراز هویت: دروازه محلی بر روی gost، 3proxy، Squid و proxychains

برنامه فقط آدرس و پورت را می‌خواهد، اما پروکسی دارای نام کاربری و رمز عبور است؟ دروازه محلی را بالا ببرید: gost با یک دستور، 3proxy با پورت برای هر پروفایل، Squid با لاگ یا proxychains-ng برای نرم‌افزار بدون پشتیبانی پروکسی. دستورات، پیکربندی‌ها و خطاهایی که باعث نشت IP واقعی می‌شوند.

📅۱۹ مهر ۱۴۰۵
پروکسی با نام کاربری و رمز عبور در برنامه بدون احراز هویت: دروازه محلی بر روی gost، 3proxy، Squid و proxychains

شما پروکسی خریدید، رشته‌ای به شکل login:password@host:port دریافت کردید، اما برنامه فقط «آدرس و پورت» را می‌خواهد. این یک وضعیت آشناست: Chrome با پرچم --proxy-server، تنظیمات سیستم ویندوز و اندروید، پارسر قدیمی، Selenium-grid، ابزاری بدون فیلد برای رمز عبور. راه‌حل یکسان است که سال‌هاست وجود دارد — دروازه محلی: پروکسی کوچک روی دستگاه خودتان که اتصالات را بدون رمز عبور می‌پذیرد و خود به هنگام اتصال به پروکسی واقعی، نام کاربری را وارد می‌کند. چهار ابزار معتبر را بررسی می‌کنیم، دستورات مربوط به هر کدام و اشتباهاتی که معمولاً زمان و پول را هدر می‌دهند.

چرا برنامه‌ها «پروکسی با رمز عبور» را نمی‌فهمند

دو روش برای احراز هویت در ارائه‌دهنده پروکسی وجود دارد: با نام کاربری و رمز عبور (Basic Auth) یا با لیست سفید IP. گزینه دوم مشکل را حل می‌کند، اما فقط در صورتی کار می‌کند که شما یک IP خارجی ثابت داشته باشید — اینترنت خانگی و شبکه‌های موبایل معمولاً این را ندارند و در عملکردهای ابری، با هر بار راه‌اندازی تغییر می‌کند. ما هر دو روش را به تفصیل در راهنمای احراز هویت پروکسی مقایسه کرده‌ایم.

با نام کاربری و رمز عبور به محدودیت‌های خود برنامه‌ها برخورد می‌کنیم:

  • Chrome و Chromium. پرچم --proxy-server طبق مستندات Chromium، طرح، میزبان و پورت را می‌پذیرد (برای مثال، --proxy-server="foopy:8080") — در این نحو هیچ فیلدی برای اعتبارنامه‌ها وجود ندارد. در پنجره عادی مرورگر، یک دیالوگ با رمز عبور نمایش داده می‌شود، اما در حالت headless و در تست‌های خودکار، کسی برای پر کردن آن وجود ندارد.
  • تنظیمات سیستم. در تنظیم دستی پروکسی ویندوز و در تنظیمات Wi-Fi در بیشتر نسخه‌های اندروید فقط میزبان و پورت وجود دارد. رمز عبور یا از یک برنامه خاص پرسیده می‌شود یا جایی نمی‌توان آن را وارد کرد.
  • نرم‌افزار قدیمی و خودنویس. بسیاری از ابزارها و کتابخانه‌ها از پروکسی پشتیبانی می‌کنند، اما بدون احراز هویت، یا در صورت وجود نشانه‌های خاص در رمز عبور خراب می‌شوند.
  • برنامه‌هایی که اصلاً از پروکسی پشتیبانی نمی‌کنند. ابزارهای کنسولی که نه متغیرهای محیطی و نه تنظیمات را می‌خوانند.

دروازه محلی همه چهار مورد را پوشش می‌دهد: برنامه پروکسی 127.0.0.1:8080 را بدون رمز عبور می‌بیند و دروازه ترافیک را به ارائه‌دهنده با نام کاربری ارسال می‌کند.

چگونه این طرح کار می‌کند

  1. روی دستگاه شما (یا VPS که پارسر در آن کار می‌کند) یک سرور پروکسی سبک راه‌اندازی می‌شود و به پورت محلی گوش می‌دهد، مثلاً 127.0.0.1:8080.
  2. در پیکربندی دروازه، پروکسی «والد» (upstream) — آدرس ارائه‌دهنده، نام کاربری و رمز عبور مشخص شده است.
  3. برنامه به پورت محلی بدون احراز هویت متصل می‌شود.
  4. دروازه یک اتصال به ارائه‌دهنده باز می‌کند، احراز هویت را انجام می‌دهد و ترافیک را به جلو منتقل می‌کند. برای سایت، شما با آدرس IP ارائه‌دهنده به نظر می‌رسید، نه آدرس خودتان.

HTTPS در اینجا رمزگشایی نمی‌شود: از طریق پروکسی HTTP، مرورگر با استفاده از روش CONNECT یک تونل ایجاد می‌کند و دروازه فقط بایت‌های رمزگذاری شده را منتقل می‌کند.

گزینه 1: gost — یک دستور، بدون پیکربندی

gost (GO Simple Tunnel) — یک فایل اجرایی برای ویندوز، macOS و لینوکس. این سریع‌ترین راه برای راه‌اندازی دروازه است. در gost پرچم -L سرویس محلی را تعیین می‌کند، -F — گره‌ای که ترافیک از طریق آن منتقل می‌شود. اعتبارنامه‌ها مستقیماً در آدرس گره مشخص می‌شوند:

gost -L http://127.0.0.1:8080 -F socks5://LOGIN:PASSWORD@HOST:PORT

اکنون هر برنامه‌ای می‌تواند از پروکسی HTTP 127.0.0.1:8080 بدون رمز عبور استفاده کند. اگر در رمز عبور نشانه‌های خاصی وجود دارد (@, :, #)، مستندات gost پیشنهاد می‌کند که آنها را از طریق پارامتر auth به base64 منتقل کنید:

echo -n LOGIN:PASSWORD | base64
gost -L http://127.0.0.1:8080 -F socks5://HOST:PORT?auth=<نتیجه_base64>

به خاطر داشته باشید: اگر auth تعیین شده باشد، نام کاربری و رمز عبور که مستقیماً در آدرس نوشته شده‌اند، توسط gost نادیده گرفته می‌شوند. چندین پرچم -F پشت سر هم زنجیره‌ای از چند پروکسی ایجاد می‌کند.

کی باید استفاده شود: وقتی نیاز دارید که به سرعت یک مرورگر یا اسکریپت را با پروکسی «دوست» کنید، بدون نصب بسته‌ها و ویرایش پیکربندی‌ها.

گزینه 2: 3proxy — چند پورت روی یک دستگاه

3proxy — یک سرور پروکسی جمع و جور با پیکربندی در یک فایل. دستور کلیدی — parent; طبق مستندات، نحو آن به شکل زیر است: parent <weight> <type> <ip> <port> <username> <password> و باید بعد از قانون allow قرار گیرد. حداقل پیکربندی دروازه:

auth iponly
allow * 127.0.0.1
parent 1000 http HOST PORT LOGIN PASSWORD
proxy -p8080 -i127.0.0.1

نکات مهم:

  • auth iponly — بدون رمز عبور، اما با بررسی بر اساس ACL; قانون allow * 127.0.0.1 فقط اتصالات محلی را مجاز می‌کند.
  • وزن 1000 به معنای «همیشه از این والد استفاده کن». وزن‌های کمتر از 1000 توسط 3proxy برای جمع‌آوری زنجیره‌های تصادفی استفاده می‌شوند.
  • نوع والد: http, connect, socks4, socks5 و دیگران — پروتکلی را انتخاب کنید که ارائه‌دهنده به شما داده است.
  • -i127.0.0.1 سرویس را به رابط محلی متصل می‌کند. به طور پیش‌فرض 3proxy اتصالات را در تمام رابط‌ها می‌پذیرد.

یک روش راحت: تکرار بلوک allow / parent / proxy چندین بار با پورت‌های مختلف و حساب‌های مختلف ارائه‌دهنده. اینگونه «پورت = پروکسی جداگانه» به دست می‌آید: 127.0.0.1:8081 — ایالات متحده، :8082 — آلمان و غیره. این فرمت تقریباً توسط هر نرم‌افزاری درک می‌شود، از جمله آنهایی که پروکسی‌ها را به صورت لیستی «میزبان:پورت» وارد می‌کنند.

کی باید استفاده شود: ده‌ها پروفایل یا جریان، که هر کدام به خروجی خاص خود نیاز دارند.

گزینه 3: Squid — اگر کش و گزارش نیاز دارید

Squid سنگین‌تر است، اما کش کردن، گزارش‌های دقیق و ACLهای انعطاف‌پذیر را ارائه می‌دهد. ارائه‌دهنده به عنوان گره والد از طریق cache_peer مشخص می‌شود و دستور never_direct allow all به Squid اجازه نمی‌دهد که به طور مستقیم به اینترنت برود و از والد عبور کند:

http_port 127.0.0.1:3128
cache_peer HOST parent PORT 0 no-query default login=LOGIN:PASSWORD
never_direct allow all

نکات از مستندات Squid:

  • پورت ICP را 0 قرار دهید، اگر والد آن را پشتیبانی نکند — در پروکسی‌های تجاری این وجود ندارد.
  • در login= توالی‌های URL-escape مجاز هستند (برای مثال، %20 برای فاصله)، بنابراین نشانه % در رمز عبور باید به صورت %% نوشته شود.
  • بدون never_direct، Squid ممکن است تصمیم بگیرد که بهتر است به سایت به طور مستقیم برود — و درخواست با IP واقعی شما ارسال می‌شود. این بدترین سناریو برای پارسینگ و چندحسابی است.

کی باید استفاده شود: دفتر یا تیمی که نیاز به گزارش دارد که چه کسی به کجا رفته است، یا درخواست‌های تکراری به منابع یکسان.

گزینه 4: proxychains-ng — برای برنامه‌هایی که از پروکسی پشتیبانی نمی‌کنند

اگر برنامه اصلاً از پروکسی پشتیبانی نمی‌کند، proxychains-ng (لینوکس و macOS) کمک می‌کند. این برنامه فراخوانی‌های شبکه‌ای برنامه را ضبط می‌کند و اتصالات TCP آن را در پروکسی می‌پیچد. SOCKS4a، SOCKS5 و HTTP پشتیبانی می‌شوند، احراز هویت — نام کاربری و رمز عبور برای SOCKS و Basic برای HTTP. رشته در بخش [ProxyList] به شکل نوع ip پورت [نام کاربری رمز عبور] است:

strict_chain
proxy_dns
tcp_read_time_out 15000
tcp_connect_time_out 8000

[ProxyList]
http HOST PORT LOGIN PASSWORD

اجرای آن: proxychains4 curl https://api.ipify.org — در پاسخ IP ارائه‌دهنده خواهد بود، نه IP شما.

  • strict_chain — همه پروکسی‌های لیست به ترتیب استفاده می‌شوند و اگر یکی در دسترس نباشد، اتصالی وجود نخواهد داشت. ایمن‌تر از dynamic_chain است که گره‌های مرده را رد می‌کند.
  • proxy_dns — درخواست‌های DNS نیز از طریق پروکسی ارسال می‌شوند. بدون این، ارائه‌دهنده اینترنت شما می‌بیند که شما به کدام دامنه‌ها درخواست می‌دهید و سایت ممکن است عدم تطابق جغرافیایی DNS و IP را متوجه شود.
  • پیکربندی به ترتیب جستجو می‌شود: فایل از -f یا متغیر PROXYCHAINS_CONF_FILE، سپس ./proxychains.conf، ~/.proxychains/proxychains.conf و /etc/proxychains.conf.

محدودیت‌ها که خود نویسندگان به آن اشاره می‌کنند: فقط TCP (UDP و ICMP پروکسی نمی‌شوند)، ممکن است در برنامه‌هایی که فرآیندهای زیادی تولید می‌کنند، اختلالاتی وجود داشته باشد و در macOS، حفاظت SIP اجازه نمی‌دهد برنامه‌های سیستمی را ضبط کنید.

کدام ابزار را انتخاب کنیم: یک یادداشت کوتاه

  • یک مرورگر یا اسکریپت، نیاز به «همین حالا» — gost.
  • بسیاری از پروفایل‌ها، هر کدام IP یا کشور خاص خود را دارند — 3proxy با پورت جداگانه برای هر حساب.
  • تیم، گزارش درخواست‌ها، کش — Squid.
  • برنامه‌ای که اصلاً تنظیمات پروکسی ندارد — proxychains-ng.

پنج اشتباهی که هزینه بیشتری دارند

  1. دروازه به همه رابط‌ها گوش می‌دهد. gost را با -L http://:8080 روی VPS راه‌اندازی کردید — و پروکسی باز برای تمام اینترنت روی گیگابایت‌های شما دریافت کردید. پروکسی‌های باز به سرعت توسط اسکنرها پیدا می‌شوند. همیشه 127.0.0.1 را مشخص کنید و اگر دروازه توسط ماشین‌های دیگر استفاده می‌شود — پورت را با فایروال ببندید. درباره اینکه چگونه بات‌نت‌ها به سرعت پورت‌های باز را در سرورهای دارای پارسر پیدا می‌کنند، ما در تحلیل کرم CARBONATO نوشته‌ایم.
  2. نشت اطلاعات به دور از دروازه. Squid بدون never_direct، proxychains بدون proxy_dns، مرورگری که به طور مستقیم از WebRTC/UDP استفاده می‌کند — همه اینها IP واقعی را فاش می‌کند. نتیجه را در سرویس تعیین IP و در تست نشت DNS بررسی کنید.
  3. یک دروازه برای همه حساب‌ها. اگر 30 پروفایل ضد شناسایی به یک پورت با یک جلسه sticky نگاه کنند، همه یک IP خواهند داشت — این راهی مستقیم به پیوند حساب‌ها است. پروفایل‌ها را بر اساس پورت‌ها جدا کنید یا از پارامترهای جلسه ارائه‌دهنده استفاده کنید.
  4. نشانه‌های خاص در رمز عبور. @ و : تجزیه آدرس‌هایی به شکل login:pass@host را خراب می‌کنند. از پارامتر base64 در gost، فرار در Squid یا تولید رمز عبور بدون نشانه‌های خاص استفاده کنید.
  5. دروازه — یک پرش اضافی و نقطه شکست. در دستگاه محلی تأخیر تقریباً صفر است، اما اگر دروازه در مرکز داده دیگری قرار داشته باشد، به هر درخواست تأخیر شبکه‌ای اضافه می‌شود. دروازه را نزدیک برنامه نگه‌دارید و راه‌اندازی خودکار (systemd، سرویس ویندوز) را تنظیم کنید، در غیر این صورت پس از راه‌اندازی مجدد سرور، پارسر به آرامی به سمت هیچ‌جا خواهد رفت.

کدام پروکسی‌ها را پشت دروازه قرار دهیم

دروازه به نوع پروکسی که پشت آن قرار دارد، اهمیتی نمی‌دهد — انتخاب بستگی به وظیفه دارد:

  • پروکسی‌های مسکونی — برای پارسینگ سایت‌های محافظت‌شده، بازارها و پروفایل‌های ضد شناسایی: IP کاربران خانگی کمتر مشکوک به نظر می‌رسد.
  • پروکسی‌های موبایل — برای شبکه‌های اجتماعی و برنامه‌هایی که در آن‌ها بررسی‌ها شدیدتر است: از یک IP اپراتور موبایل (از طریق CGNAT) معمولاً بسیاری از مشترکین واقعی به شبکه متصل می‌شوند و مسدود کردن آن برای خود پلتفرم ریسک دارد.
  • پروکسی‌های مراکز داده — برای وظایف حجیم بدون حفاظت سخت‌گیرانه: بررسی در دسترس بودن، API، تست‌ها. ارزان‌ترین برای هر گیگابایت.

اگر پروکسی با چرخش باشد، منطق تغییر IP معمولاً توسط ارائه‌دهنده تعیین می‌شود — از طریق پارامترها در نام کاربری یا تنظیمات در پنل. دروازه آن را خراب نمی‌کند: او نام کاربری را همان‌طور که هست منتقل می‌کند. بنابراین راحت است که چندین پورت با پارامترهای مختلف جلسه راه‌اندازی کنید — یکی با IP جدید برای هر درخواست، دیگری با IP ثابت به مدت 30 دقیقه.

نتیجه‌گیری

پروکسی با نام کاربری و رمز عبور برای هر برنامه‌ای مناسب است، اگر یک دروازه محلی بین آنها قرار دهید. gost این مشکل را با یک دستور حل می‌کند، 3proxy برای «پورت = پروفایل» مناسب است، Squid برای تیم‌ها با گزارش و proxychains-ng حتی نرم‌افزارهایی را که هیچ چیزی درباره پروکسی نمی‌دانند، به پروکسی متصل می‌کند. قوانین اصلی: فقط به 127.0.0.1 گوش دهید، اتصالات مستقیم به دور از والد را ممنوع کنید و بررسی کنید که سایت IP ارائه‌دهنده را می‌بیند، نه IP خودتان.