Cấu hình Dante SOCKS5 Proxy trên Linux: 6 tháng ‘thực chiến’ và những bài học xương máu

Network tutorial - IT technology blog
Network tutorial - IT technology blog

Tại sao mình chọn SOCKS5 thay vì VPN hay HTTP Proxy?

Sau nửa năm lăn lộn quản lý hạ tầng cho văn phòng 50 nhân sự, mình nhận ra VPN không phải lúc nào cũng là “thuốc giải” duy nhất. Có những lúc anh em chỉ cần một IP cố định để vào dashboard AWS hoặc bypass firewall nhà mạng mà không muốn làm chậm cả máy. Lúc đó, định tuyến toàn bộ traffic qua VPN chỉ khiến máy lag thêm và gây ức chế khi họp Meet hay Zoom.

Mình đã cân nhắc 3 phương án trước khi chốt:

  • HTTP Proxy (như Squid): Chạy web thì ổn nhưng đụng tới FTP, DNS hay các app đặc thù là tịt ngóm.
  • SSH Tunneling (ssh -D): Cực hay cho cá nhân. Tuy nhiên, quản lý truy cập (ACL) và log cho cả team 50 người là một cơn ác mộng thực sự.
  • SOCKS5 Proxy (Dante): Đây là chân ái. Nó cân hết TCP/UDP, xác thực user linh hoạt và cho phép phân quyền chi tiết đến từng IP nguồn/đích.

Soi ưu và nhược điểm của Dante Server

Điểm cộng

Dante là tượng đài về sự ổn định trong thế giới mã nguồn mở. Điều mình khoái nhất là tính minh bạch trong cấu hình. Bạn có thể quy định cứng: “Ông A chỉ được kết nối từ IP nhà riêng và chỉ được truy cập server nội bộ qua port 80”. Những công cụ như gost hay shadowsocks khó lòng làm được việc này một cách bài bản.

Điểm trừ

Thú thật, file config của Dante trông hơi “hù” người mới. Nó dài dòng và yêu cầu bạn hiểu về interface mạng. Cấu hình sai một dòng pass, hoặc là anh em kêu oai oái vì không vào được, hoặc là bạn đang “mời” cả Internet dùng chùa.

Triển khai Dante trên Ubuntu/Debian trong 3 bước

Kinh nghiệm của mình là cứ táng Debian/Ubuntu cho lành. Package dante-server ở đây cực kỳ chuẩn chỉnh.

Bước 1: Cài đặt nhanh

sudo apt update && sudo apt install dante-server -y

Bước 2: Soi Interface mạng

Dùng lệnh ip add để check xem server đang chạy interface nào (thường là eth0 hoặc ens3). Bạn phải phân biệt rõ cái nào nhận kết nối vào, cái nào đẩy dữ liệu ra internet.

Bước 3: “Thay máu” file /etc/danted.conf

Mình thường xóa sạch file gốc rồi tạo mới để tránh rối mắt. Đây là mẫu cấu hình mình đang chạy production, bắt buộc xác thực bằng user Linux.

logoutput: /var/log/danted.log

# Lắng nghe tại port 1080 cho mọi IP
internal: 0.0.0.0 port = 1080

# Interface đẩy traffic ra ngoài
external: eth0

socksmethod: username

user.privileged: root
user.unprivileged: proxy

# Giai đoạn 1: Cho phép client bắt tay với server
client pass {
    from: 0.0.0.0/0 to: 0.0.0.0/0
    log: connect disconnect error
}

# Giai đoạn 2: Cho phép traffic đã login đi ra ngoài
socks pass {
    from: 0.0.0.0/0 to: 0.0.0.0/0
    command: bind connect udpassociate
    log: connect disconnect error
    socksmethod: username
}

Lưu ý: Nhiều bạn quên client pass nên proxy không bao giờ chạy. Dante tách biệt việc kết nối đến proxy và việc chuyển tiếp dữ liệu, thiếu một cái là tạch.

Quản lý user: Đừng dại mà dùng root!

Cho user dùng account SSH để log proxy là tự sát về bảo mật. Mình luôn tạo user “câm”, không có quyền shell, không có thư mục home:

# Tạo user 'dev_team' chỉ để dùng proxy
sudo useradd -M -s /usr/sbin/nologin dev_team
sudo passwd dev_team

Cách này giúp bảo vệ server. Ngay cả khi lộ pass proxy, kẻ xấu cũng không thể SSH vào chiếm quyền điều khiển.

Những lỗi “xương máu” sau 6 tháng vận hành

  1. IP External bị nhảy: Nếu server có nhiều IP, hãy ghi đích danh IP ở dòng external. Đừng chỉ ghi tên interface, traffic sẽ đi lung tung và làm hỏng mục đích dùng proxy.
  2. Bom nổ chậm từ Log: Bật log: connect disconnect sẽ khiến file log phình lên vài GB mỗi tuần. Hãy cài ngay logrotate cho /var/log/danted.log nếu không muốn treo server vì hết ổ cứng.
  3. Thảm họa DNS Leak: SOCKS5 có thể xử lý DNS nhưng trình duyệt (Chrome/Firefox) thường mặc định bỏ qua. Hãy luôn nhắc team tick vào ô “Proxy DNS when using SOCKS v5” trong phần cài đặt.
  4. Giới hạn kết nối: Với trên 100 người dùng, hãy điều chỉnh max_connections. Mặc định thấp quá sẽ khiến những người vào sau bị từ chối thẳng thừng.

Check hàng lần cuối

Mở terminal máy cá nhân và gõ lệnh curl thần thánh để test:

curl -v --socks5-hostname dev_team:password@YOUR_IP:1080 https://ifconfig.me

Kết quả trả về đúng IP server là bạn đã thành công.

Vận hành Dante không khó, quan trọng là tư duy phân quyền. Nếu làm cho hệ thống lớn, hãy tận dụng các block fromto để siết chặt bảo mật. Chúc anh em triển khai mượt mà!

Share: