Thiết lập Tor Onion Service với Nginx: ‘Tàng hình’ Website trên Linux

Security tutorial - IT technology blog
Security tutorial - IT technology blog

Bối cảnh: Khi SSL truyền thống là chưa đủ

Cách đây không lâu, mình xử lý một ca khó: Triển khai cổng thông tin nội bộ cho một tổ chức yêu cầu ẩn danh tuyệt đối. Ngay cả nhà cung cấp hạ tầng (ISP) cũng không được phép biết server tồn tại. Với HTTPS thông thường, ISP vẫn thấy bạn kết nối tới IP nào. Để giải quyết triệt để, Tor Onion Service (website .onion) là lựa chọn duy nhất mình tin dùng.

Sau khi audit hơn 10 hệ thống bảo mật, mình thấy lỗi phổ biến nhất là để lộ IP thật do cấu hình Nginx hớ hênh. Chạy một website .onion thì dễ, nhưng chạy sao cho không bị “lộ căn cước” mới là nghệ thuật. Bài viết này sẽ đi thẳng vào kỹ thuật thiết lập chuẩn trên Linux.

Bước 1: Cài đặt Nginx và Tor

Đầu tiên, chúng ta cần một web server (Nginx) và dịch vụ Tor để tạo tunnel. Mình khuyến khích dùng Ubuntu hoặc Debian vì các gói package được cập nhật rất ổn định.

sudo apt update
sudo apt install nginx tor -y

Cài xong, hãy kiểm tra trạng thái dịch vụ. Tor lúc này chỉ mới chạy như một client thông thường, chưa có Hidden Service nào được kích hoạt.

sudo systemctl status tor

Bước 2: Cấu hình Nginx – Chặn đứng rò rỉ IP

Đây là tử huyệt của nhiều sysadmin. Mặc định, Nginx lắng nghe trên 0.0.0.0 (tất cả interface). Nếu giữ nguyên, kẻ tấn công dùng công cụ như Shodan có thể quét thấy server của bạn qua IP public. Từ đó, họ đối chiếu nội dung và khẳng định bạn chính là chủ nhân của trang .onion đó.

Hãy ép Nginx chỉ được phép lắng nghe trên localhost (127.0.0.1).

sudo nano /etc/nginx/sites-available/default

Chỉnh sửa block server như sau:

server {
    listen 127.0.0.1:8080;
    server_name localhost;

    root /var/www/html;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }

    # Giấu phiên bản Nginx để tránh bị exploit theo CVE
    server_tokens off;
}

Mình dùng port 8080 để tách biệt hoàn toàn với traffic web thông thường. Khởi động lại Nginx để áp dụng thay đổi:

sudo systemctl restart nginx

Bước 3: Kích hoạt Tor Onion Service

Bây giờ, chúng ta sẽ mở cánh cửa để thế giới Tor tìm thấy server. Bạn cần can thiệp vào file torrc.

sudo nano /etc/tor/torrc

Tìm phần “Hidden Services” và thêm hai dòng sau:

HiddenServiceDir /var/lib/tor/my_onion_site/
HiddenServicePort 80 127.0.0.1:8080

Lưu ý quan trọng:

  • HiddenServiceDir: Nơi lưu private key. Mất file này là mất vĩnh viễn địa chỉ .onion.
  • HiddenServicePort: Tor nhận traffic từ cổng 80 của mạng ẩn danh rồi đẩy về cổng 8080 nội bộ.

Khởi động lại Tor để hệ thống tự sinh địa chỉ định danh:

sudo systemctl restart tor

Bước 4: Lấy địa chỉ .onion

Tor sẽ tự tạo một thư mục riêng với quyền hạn cực kỳ khắt khe. Bạn cần quyền root để đọc file chứa tên miền.

sudo cat /var/lib/tor/my_onion_site/hostname

Kết quả sẽ là một chuỗi ký tự dài như vww6ybal4bd7szmgncyruucpgfkqahzddiqe.onion. Hãy copy nó vào Tor Browser. Nếu trang Nginx hiện ra, bạn đã thành công.

Bước 5: Hardening – Gia cố pháo đài

Online được là một chuyện, trụ vững trước các đợt scan hay không lại là chuyện khác. Nhiều server bị “lật mặt” qua các HTTP header thừa thãi.

Xóa sạch dấu vết Header

Nginx thường gửi kèm X-Powered-By hoặc các thông tin backend. Hãy dùng các chỉ thị sau để xóa chúng:

# Thêm vào block server của Nginx
add_header X-Content-Type-Options nosniff;
add_header X-Frame-Options "SAMEORIGIN";
proxy_hide_header X-Powered-By;

Cấu hình Log ẩn danh

Để bảo vệ người dùng, tốt nhất là không lưu log truy cập. Nếu server bị chiếm quyền kiểm soát, kẻ tấn công sẽ không có dữ liệu để phân tích hành vi user.

access_log off;
error_log /var/log/nginx/error.log crit;

Giám sát bằng Nyx

Muốn biết server đang tải bao nhiêu bandwidth hay có bao nhiêu circuit đang kết nối? Hãy dùng nyx.

sudo apt install nyx
sudo -u debian-tor nyx

Nguyên tắc sống còn (OPSEC)

Kỹ thuật đúng mới chỉ đạt 50% yêu cầu. 50% còn lại nằm ở tư duy vận hành:

  1. Cách ly dịch vụ: Tuyệt đối không chạy Mail server hay Database có kết nối ra ngoài trên cùng máy chủ này. Một sơ hở nhỏ từ dịch vụ khác sẽ khiến IP thật bị lộ ngay lập tức.
  2. Metadata là kẻ thù: Ảnh bạn upload lên web thường chứa tọa độ GPS hoặc thông tin thiết bị (EXIF). Hãy dùng công cụ xóa sạch metadata trước khi đăng tải.
  3. Ưu tiên Static Content: JavaScript là con dao hai lưỡi. Nó có thể bị khai thác để ép trình duyệt người dùng thực hiện truy vấn ngoài ý muốn nhằm tìm ra danh tính thực.

Triển khai Tor Onion Service không chỉ dành cho những mục đích nhạy cảm. Đây là công cụ mạnh mẽ để bảo vệ quyền riêng tư trong một thế giới mà dữ liệu cá nhân đang bị khai thác quá mức. Hy vọng hướng dẫn này giúp bạn xây dựng được một không gian số an toàn và bảo mật.

Share: