Bạn đã mua proxy, nhận được chuỗi dạng login:password@host:port, nhưng chương trình chỉ yêu cầu "địa chỉ và cổng". Tình huống quen thuộc: Chrome với cờ --proxy-server, cài đặt hệ thống Windows và Android, trình phân tích cũ, Selenium-grid, tiện ích không có trường cho mật khẩu. Giải pháp vẫn giống như nhiều năm qua — cổng địa phương: một proxy nhỏ trên máy của bạn, nhận kết nối mà không cần mật khẩu và tự động chèn tên đăng nhập khi kết nối với proxy thực sự. Chúng ta sẽ phân tích bốn công cụ đã được kiểm chứng, lệnh cho từng công cụ và những lỗi mà người dùng thường mất thời gian và tiền bạc.
Tại sao các chương trình "không hiểu" proxy có mật khẩu
Có hai cách để xác thực với nhà cung cấp proxy: bằng tên đăng nhập và mật khẩu (Basic Auth) hoặc bằng danh sách trắng IP. Tùy chọn thứ hai loại bỏ vấn đề, nhưng chỉ hoạt động nếu bạn có IP bên ngoài cố định — với internet gia đình và mạng di động, thường không có, và với các chức năng đám mây, nó thay đổi mỗi khi khởi động. Chúng tôi đã so sánh chi tiết cả hai cách trong hướng dẫn về xác thực proxy.
Với tên đăng nhập và mật khẩu, chúng ta gặp phải những hạn chế của chính các chương trình:
- Chrome và Chromium. Cờ
--proxy-servertheo tài liệu của Chromium nhận định dạng, máy chủ và cổng (ví dụ,--proxy-server="foopy:8080") — không có trường cho thông tin đăng nhập trong cú pháp này. Trong cửa sổ trình duyệt thông thường, nó sẽ hiển thị hộp thoại với mật khẩu, nhưng trong chế độ headless và trong các bài kiểm tra tự động, không ai có thể điền vào. - Cài đặt hệ thống. Trong cài đặt proxy thủ công của Windows và trong cài đặt Wi-Fi trên hầu hết các bản ROM Android, chỉ có máy chủ và cổng. Mật khẩu sẽ được hỏi bởi một ứng dụng cụ thể, hoặc bạn không thể nhập ở đâu cả.
- Phần mềm cũ và tự viết. Nhiều tiện ích và thư viện hỗ trợ proxy, nhưng không có xác thực, hoặc bị hỏng với các ký tự đặc biệt trong mật khẩu.
- Các chương trình không hỗ trợ proxy. Các tiện ích dòng lệnh, không đọc được biến môi trường hay cài đặt.
Cổng địa phương giải quyết cả bốn trường hợp: chương trình thấy proxy 127.0.0.1:8080 mà không cần mật khẩu, và cổng chuyển tiếp lưu lượng đến nhà cung cấp với tên đăng nhập.
Cách hoạt động của sơ đồ
- Trên máy của bạn (hoặc VPS, nơi chạy trình phân tích) khởi động một máy chủ proxy nhẹ và lắng nghe cổng địa phương, ví dụ
127.0.0.1:8080. - Trong cấu hình của cổng, đã được chỉ định proxy "cha" (upstream) — địa chỉ của nhà cung cấp, tên đăng nhập và mật khẩu.
- Chương trình kết nối đến cổng địa phương mà không cần xác thực.
- Cổng mở kết nối đến nhà cung cấp, thực hiện xác thực và chuyển tiếp lưu lượng đi tiếp. Đối với trang web, bạn sẽ xuất hiện với địa chỉ IP của nhà cung cấp, chứ không phải của riêng bạn.
HTTPS không được giải mã: thông qua proxy HTTP, trình duyệt thiết lập một đường hầm bằng phương pháp CONNECT, và cổng chỉ chuyển tiếp các byte đã được mã hóa.
Phương án 1: gost — một lệnh, không cần cấu hình
gost (GO Simple Tunnel) — một tệp thực thi trên Go cho Windows, macOS và Linux. Đây là cách nhanh nhất để thiết lập cổng. Trong gost, cờ -L chỉ định dịch vụ địa phương, -F — nút mà qua đó lưu lượng sẽ được chuyển tiếp. Thông tin đăng nhập được chỉ định ngay trong địa chỉ của nút:
gost -L http://127.0.0.1:8080 -F socks5://LOGIN:PASSWORD@HOST:PORT
Bây giờ bất kỳ chương trình nào cũng có thể sử dụng HTTP-proxy 127.0.0.1:8080 mà không cần mật khẩu. Nếu mật khẩu có ký tự đặc biệt (@, :, #), tài liệu của gost đề xuất truyền chúng qua tham số auth trong base64:
echo -n LOGIN:PASSWORD | base64
gost -L http://127.0.0.1:8080 -F socks5://HOST:PORT?auth=<kết_quả_base64>
Lưu ý: nếu đã chỉ định auth, tên đăng nhập và mật khẩu được ghi trực tiếp trong địa chỉ, gost sẽ bỏ qua. Nhiều cờ -F liên tiếp tạo thành một chuỗi các proxy.
Khi nào sử dụng: cần nhanh chóng "kết nối" một trình duyệt hoặc script với proxy, mà không cần cài đặt gói và chỉnh sửa cấu hình.
Phương án 2: 3proxy — nhiều cổng trên một máy
3proxy — máy chủ proxy nhỏ gọn với cấu hình trong một tệp. Chỉ thị chính là parent; theo tài liệu, cú pháp của nó là: parent <weight> <type> <ip> <port> <username> <password>, và nó phải đứng sau quy tắc allow. Cấu hình tối thiểu của cổng:
auth iponly
allow * 127.0.0.1
parent 1000 http HOST PORT LOGIN PASSWORD
proxy -p8080 -i127.0.0.1
Điều quan trọng ở đây:
auth iponly— không cần mật khẩu, nhưng có kiểm tra theo ACL; quy tắcallow * 127.0.0.1chỉ cho phép các kết nối nội bộ.- Trọng số
1000có nghĩa là "luôn qua cha này". Trọng số dưới 1000 được 3proxy sử dụng để tạo ra các chuỗi ngẫu nhiên. - Loại cha:
http,connect,socks4,socks5và các loại khác — hãy chọn giao thức mà nhà cung cấp đã cung cấp. -i127.0.0.1liên kết dịch vụ với giao diện nội bộ. Theo mặc định, 3proxy chấp nhận các kết nối trên tất cả các giao diện.
Một mẹo hữu ích: lặp lại khối allow / parent / proxy nhiều lần với các cổng khác nhau và các tài khoản khác nhau của nhà cung cấp. Như vậy, bạn có thể có "cổng = proxy riêng biệt": 127.0.0.1:8081 — Mỹ, :8082 — Đức và vân vân. Định dạng này được hầu hết các phần mềm hiểu, bao gồm cả những phần mềm mà proxy được nhập theo danh sách "host:port".
Khi nào sử dụng: hàng chục hồ sơ hoặc luồng, mỗi hồ sơ cần một đầu ra riêng.
Phương án 3: Squid — nếu cần bộ nhớ đệm và nhật ký
Squid nặng hơn, nhưng cung cấp khả năng lưu trữ, nhật ký chi tiết và ACL linh hoạt. Nhà cung cấp được chỉ định như một nút cha thông qua cache_peer, và chỉ thị never_direct allow all cấm Squid truy cập internet trực tiếp mà không qua cha:
http_port 127.0.0.1:3128
cache_peer HOST parent PORT 0 no-query default login=LOGIN:PASSWORD
never_direct allow all
Các điểm cần lưu ý từ tài liệu của Squid:
- Cổng ICP được đặt
0nếu cha không hỗ trợ — các proxy thương mại thường không có. - Trong
login=cho phép các chuỗi URL-escape (ví dụ,%20cho khoảng trắng), vì vậy ký tự%trong mật khẩu cần được viết là%%. - Nếu không có
never_direct, Squid có thể quyết định rằng tốt hơn là truy cập trang web trực tiếp — và yêu cầu sẽ được gửi với IP thực của bạn. Đối với việc phân tích và đa tài khoản, đây là kịch bản tồi tệ nhất.
Khi nào sử dụng: văn phòng hoặc nhóm, nơi cần nhật ký về ai đã truy cập đâu, hoặc các yêu cầu lặp lại đến cùng một nguồn tài nguyên.
Phương án 4: proxychains-ng — cho các chương trình không hỗ trợ proxy
Nếu chương trình không hỗ trợ proxy, proxychains-ng (Linux và macOS) sẽ giúp. Nó chặn các gọi mạng của chương trình và bọc các kết nối TCP của nó trong proxy. Hỗ trợ SOCKS4a, SOCKS5 và HTTP, xác thực — tên đăng nhập và mật khẩu cho SOCKS và Basic cho HTTP. Dòng trong phần [ProxyList] có định dạng loại ip cổng [tên đăng nhập mật khẩu]:
strict_chain
proxy_dns
tcp_read_time_out 15000
tcp_connect_time_out 8000
[ProxyList]
http HOST PORT LOGIN PASSWORD
Khởi động: proxychains4 curl https://api.ipify.org — trong phản hồi sẽ là IP của nhà cung cấp, chứ không phải của bạn.
strict_chain— tất cả các proxy trong danh sách được sử dụng theo thứ tự, và nếu một cái không khả dụng, sẽ không có kết nối. An toàn hơn so vớidynamic_chain, cho phép bỏ qua các nút chết.proxy_dns— các yêu cầu DNS cũng đi qua proxy. Nếu không, nhà cung cấp internet của bạn sẽ thấy các miền mà bạn yêu cầu, và trang web có thể nhận thấy sự không khớp giữa địa điểm địa lý DNS và IP.- Cấu hình được tìm theo thứ tự: tệp từ
-fhoặc biếnPROXYCHAINS_CONF_FILE, sau đó./proxychains.conf,~/.proxychains/proxychains.confvà/etc/proxychains.conf.
Giới hạn, mà chính các tác giả đã đề cập: chỉ TCP (UDP và ICMP không được proxy), có thể gặp sự cố với các chương trình tạo ra nhiều tiến trình, và trên macOS, bảo vệ SIP không cho phép chặn các chương trình hệ thống.
Công cụ nào để chọn: bảng tóm tắt ngắn gọn
- Một trình duyệt hoặc script, cần "ngay bây giờ" — gost.
- Nhiều hồ sơ, mỗi hồ sơ có IP hoặc quốc gia riêng — 3proxy với cổng riêng cho mỗi tài khoản.
- Nhóm, nhật ký yêu cầu, bộ nhớ đệm — Squid.
- Chương trình hoàn toàn không có cài đặt proxy — proxychains-ng.
Năm lỗi tốn kém nhất
- Cổng lắng nghe tất cả các giao diện. Đã khởi động gost với
-L http://:8080trên VPS — và nhận được proxy mở cho toàn bộ internet trên các gigabyte của bạn. Các scanner proxy mở tìm thấy nhanh chóng. Luôn chỉ định127.0.0.1, và nếu cổng được sử dụng bởi các máy khác — hãy đóng cổng bằng tường lửa. Về cách mà các botnet nhanh chóng tìm thấy các cổng mở trên các máy chủ với trình phân tích, chúng tôi đã viết trong phân tích sâu về worm CARBONATO. - Rò rỉ qua cổng. Squid không có
never_direct, proxychains không cóproxy_dns, trình duyệt đi qua WebRTC/UDP trực tiếp — tất cả đều tiết lộ IP thực. Kiểm tra kết quả trên dịch vụ xác định IP và kiểm tra rò rỉ DNS. - Một cổng cho tất cả các tài khoản. Nếu 30 hồ sơ chống phát hiện nhìn vào một cổng với một phiên sticky, tất cả sẽ có một IP — đây là con đường trực tiếp đến việc liên kết các tài khoản. Phân tán các hồ sơ qua các cổng hoặc sử dụng các tham số phiên của nhà cung cấp.
- Ký tự đặc biệt trong mật khẩu.
@và:làm hỏng việc phân tích các địa chỉ dạnglogin:pass@host. Sử dụng tham số base64 trong gost, thoát ký tự trong Squid hoặc tạo mật khẩu không có ký tự đặc biệt. - Cổng — một bước nhảy thừa và điểm từ chối. Trên máy địa phương, độ trễ gần như bằng không, nhưng nếu cổng nằm ở trung tâm dữ liệu khác, độ trễ mạng sẽ được thêm vào mỗi yêu cầu. Giữ cổng gần với chương trình và thiết lập tự khởi động (systemd, dịch vụ Windows), nếu không sau khi khởi động lại máy chủ, trình phân tích sẽ lặng lẽ đi vào hư vô.
Các proxy nào nên đặt sau cổng
Cổng không quan tâm loại proxy nào đứng sau nó — sự lựa chọn phụ thuộc vào nhiệm vụ:
- Proxy cư trú — cho việc phân tích các trang web bảo mật, thị trường và hồ sơ chống phát hiện: IP của người dùng gia đình ít bị nghi ngờ hơn bởi các bot chống.
- Proxy di động — cho mạng xã hội và ứng dụng, nơi kiểm tra nghiêm ngặt nhất: một IP của nhà mạng di động (thông qua CGNAT) thường được nhiều thuê bao thực tế sử dụng để truy cập internet, và việc chặn nó sẽ rủi ro cho chính nền tảng.
- Proxy trung tâm dữ liệu — cho các nhiệm vụ lớn mà không có bảo vệ nghiêm ngặt: kiểm tra tính khả dụng, API, kiểm tra. Rẻ nhất cho mỗi gigabyte.
Nếu proxy có sự thay đổi, logic thay đổi IP thường được nhà cung cấp xác định — thông qua các tham số trong tên đăng nhập hoặc cài đặt trong tài khoản. Cổng không làm hỏng điều đó: nó truyền tên đăng nhập như nó là. Vì vậy, thật tiện lợi khi thiết lập nhiều cổng với các tham số phiên khác nhau — một cổng với IP mới cho mỗi yêu cầu, cổng khác với IP cố định trong 30 phút.
Kết luận
Proxy với tên đăng nhập và mật khẩu phù hợp với bất kỳ chương trình nào, nếu đặt một cổng địa phương giữa chúng. gost giải quyết vấn đề bằng một lệnh, 3proxy tiện lợi cho "cổng = hồ sơ", Squid — cho các nhóm với nhật ký, và proxychains-ng kết nối với proxy ngay cả phần mềm không biết gì về proxy. Các quy tắc chính: chỉ lắng nghe 127.0.0.1, cấm các kết nối trực tiếp vượt qua cha và kiểm tra rằng trang web thấy IP của nhà cung cấp, chứ không phải của bạn.
