Sử dụng Tor để làm proxy server miễn phí cho crawler

Nội dung

Tạo proxy server với Tor và Privoxy để crawl website mà không lo bị chặn

Mở đầu

Cuộc chiến giữa những người quản trị website và những web crawler là những cuộc chiến không hồi kết. Một website chặn web crawler bằng cách chặn địa chỉ IP của nó. Vậy thì nếu crawler có thật nhiều IP là sẽ không lo bị chặn rồi đúng không? Thực tế mỗi mạng chỉ được cấp một public IP mà thôi nên muốn đổi địa chỉ IP thì chúng ta phải tìm tới proxy hoặc VPN. Có rất nhiều website cung cấp proxy miễn phí nhưng thường các proxy này có giới hạn và có thể dừng hoạt động giữa chừng. Trong bài viết này mình chọn Tor để tạo một proxy server.

Tại sao lại là Tor?

Tor hoạt động qua nhiều máy chủ trung gian, sau đó “đi ra” tại một exit node (ra từ exit node nào thì IP của bạn sẽ là IP của exit node đó) và thay đổi liên tục các máy chủ này nên chúng ta có thể thay đổi được địa chỉ IP liên tục. Chúng ta sẽ sử dụng thêm Privoxy để tạo web proxy và sử dụng Docker để việc cài đặt diễn ra nhanh nhất.

Tạo proxy server

Đã có sẵn nhiều docker image của tor và privoxy. Trong bài mình sẽ sử dụng image dockage/tor-privoxy.

Mở terminal và chạy câu lệnh sau:

docker run –name='tor-privoxy' -d \
-p 9050:9050 \
-p 9051:9051 \
-p 8118:8118 \
dockage/tor-privoxy:latest

Như vậy là bạn có đã có một proxy server, chỉ cần truy cập qua port 8118 (Privoxy – HTTP Proxy) hoặc port 9050 (Tor proxy – SOCKS5).

Tối ưu Tor khi sử dụng ở Việt Nam

Tuy nhiên vì muốn cải thiện tốc độ mạng của proxy server nên mình sẽ chỉnh sửa một chút để chỉ đi qua các entry node và đi ra từ các exit node của Việt Nam và các nước lận cận. Nếu bạn cần crawl rất nhiều dữ liệu thì tốc độ mạng là điều cần chú ý, do đặc điểm của mạng Tor là chậm do đi qua các node trung gian. Để làm điều đó thì. hãy tạo một Dockerfile với nội dung như sau:

FROM dockage/tor-privoxy:latest
LABEL maintainer="trandatdt"
RUN echo "EntryNodes {vn},{jp},{sg},{tw},{hk},{kr},{th}" >> /etc/tor/torrc \
&& echo "ExitNodes {vn},{jp},{sg},{tw},{hk},{kr},{th}" >> /etc/tor/torrc \
&& echo "MaxCircuitDirtiness 30" >> /etc/tor/torrc

Mở terminal tại thư mục lưu Dockerfile và build image bằng lệnh sau (chú ý dấu chấm ở cuối):

docker build -t my-tor-proxy .

trong đó:

  • EntryNodes {vn},{jp},{sg},{tw},{hk},{kr},{th}: chỉ sử dụng entry node tại Việt Nam (vn), Nhật Bản (jp), Singapore (sg), Đài Loan (tw), Hồng Kông (hk), Hàn Quốc (kr) và Thái Lan (th).
  • ExitNodes {vn},{jp},{sg},{tw},{hk},{kr},{th}: chỉ sử dụng các exit node tại các nước giống bên trên.
  • MaxCircuitDirtiness 30: thay đổi IP sau 30 giây. Bạn có thể set giá trị nhỏ hơn nhưng tối thiểu là 10 giây.

Bạn có thể tự thêm các config khác, đọc thêm tại đây.

  • Lưu ý là sử dụng config bên trên có thể làm mất anonymity (sự ẩn danh) của mạng Tor nhưng vấn đề mà bài viết này giải quyết là tạo một proxy server để crawler không bị chặn.

Chạy một docker container bằng lệnh sau:

docker run –name='my-tor-proxy-server' -d \
 -p 9050:9050 \
 -p 9051:9051 \
 -p 8118:8118 \
my-tor-proxy:latest

Như vậy chúng ta đã có 1 proxy server với các config như trên. Thử xem proxy server hoạt động hay chưa bằng lệnh sau (nhớ thay 192.168.1.45 bằng IP của bạn, không phải 127.0.0.1 nếu chạy trên local vì chúng ta đang chạy proxy server thông qua Docker):

curl -Lx http://192.168.1.45:8118 http://jsonip.com/

Kết quả sẽ giống như sau:

với 103.208.220.226 chính là IP sau khi bạn đi qua proxy server.

Kết luận

Qua bài các bạn đã có thể tạo được 1 proxy server sử dụng Tor + Privoxy + Docker. Hãy crawl văn minh, không nên request quá nhanh tránh ảnh hưởng tới server người ta.

Anthony Nguyễn

Cây bút chính tại VietnamTutor

Bài viết cùng chuyên mục

Nâng Cấp Laravel 13: Checklist 10 Bước Không Thể Bỏ Qua 2026

Hướng dẫn nâng cấp Laravel 13 chi tiết với checklist 10 bước. Từ kiểm tra PHP 8.3, cập nhật dependencies, đến xử lý lỗi thường gặp

Hardening Laravel Production: Checklist Bảo Mật Toàn Diện 2026

Checklist hardening Laravel production toàn diện. Từ cấu hình server, database, SSL đến security headers, rate limiting và monitoring.

Authentication & Authorization Trong Laravel: Hướng Dẫn A-Z 2026

Hướng dẫn chi tiết cách xây dựng hệ thống Authentication (xác thực) và Authorization (phân quyền) trong Laravel với Breeze, Fortify, Sanctum, Policies và Gates.

Bảo Mật Laravel: 10 Lỗi Phổ Biến & Cách Phòng 2026

Hướng dẫn 10 lỗi bảo mật phổ biến nhất trong Laravel và cách phòng tránh hiệu quả. Từ XSS, SQL injection đến authentication vulnerabilities.

Migration PHP Attributes Laravel 13: Hướng Dẫn Chi Tiết

Cách chuyển đổi từ protected properties sang PHP Attributes trong Laravel 13 với hướng dẫn từng bước và code examples chi tiết.

Laravel 13 Có Gì Mới? Tổng Hợp Tính Năng Mới 2026

Laravel 13 ra mắt ngày 17/3/2026 với PHP 8.3, PHP Attributes, AI SDK và nhiều cải tiến. Khám phá chi tiết các tính năng mới của

Kubernetes for Beginners 2026: Hướng Dẫn Từ A-Z

Kubernetes (K8s) là nền tảng container orchestration phổ biến nhất hiện nay. Bài hướng dẫn này sẽ giúp bạn hiểu Kubernetes là gì, kiến trúc cơ

Docker Compose Best Practices 2026: 10 Tips Quan Trọng

Docker Compose giúp bạn quản lý multi-container applications dễ dàng hơn. Bài viết này tổng hợp 10 best practices quan trọng nhất để sử dụng Docker

Lỗ hổng RCE (CVE-2025-55182) trên React, Next.js?

Cảnh báo khẩn cấp: React2Shell (CVE-2025-55182) gây RCE nghiêm trọng cho React/Next.js. Nắm cơ chế, dấu hiệu & phòng thủ cấp bách để bảo vệ ứng

Dead-Letter Queue: Giải pháp cứu cánh cho tin nhắn lỗi hệ thống

DLQ là chìa khóa quản lý tin nhắn lỗi hiệu quả trong hệ thống phân tán. Đảm bảo tin nhắn không bị mất, tăng độ tin

Lập trình viên: Xây doanh nghiệp một người, kiếm 10.000 USD/tháng

Lập trình viên: Khám phá khung làm việc để xây dựng doanh nghiệp một người, kiếm 10.000 USD/tháng. Biến kỹ năng code thành cỗ máy tiền,