SMB - Bảo mật chia sẻ thư mục SMB trên Ubuntu với iptables và WireGuard

SMB (Samba) là giải pháp chia sẻ file phổ biến, nhưng khi mở cổng 445/139 trực tiếp ra internet, bạn đang tự đặt hệ thống vào tầm ngắm của tấn công mạng.

Bài viết này hướng dẫn bạn xây dựng một hệ thống an toàn trên Ubuntu: chỉ cho phép truy cập SMB qua WireGuard VPN và kiểm soát chặt chẽ bằng iptables – tường lửa mạnh mẽ tích hợp sẵn trong nhân Linux.


Mô hình triển khai

  • Ubuntu Server: chạy đồng thời Samba (SMB) và WireGuard VPN.

  • Client: kết nối VPN bằng WireGuard, nhận IP trong dải riêng (ví dụ 10.0.0.0/24).

  • iptables: chỉ cho phép truy cập đến cổng SMB (139, 445) từ các IP thuộc VPN. Mọi kết nối SMB từ mạng khác (kể cả internet) đều bị chặn.


1. Cài đặt Samba và tạo thư mục chia sẻ

1.1. Cập nhật hệ thống

bash

sudo apt update && sudo apt upgrade -y

1.2. Cài đặt Samba

bash

sudo apt install samba -y

1.3. Tạo thư mục chia sẻ

Giả sử người dùng là nqdev:

bash

1.4. Cấu hình Samba

Sao lưu file cấu hình gốc:

bash

Mở file cấu hình:

bash

Thêm vào cuối file:

ini

Lưu và thoát.

1.5. Thêm người dùng Samba

bash

1.6. Khởi động dịch vụ Samba

bash


2. Cấu hình tường lửa iptables

iptables là tường lửa mặc định của Ubuntu. Chúng ta sẽ xây dựng các rule để:

  • Chỉ cho phép kết nối đến cổng SMB từ dải VPN 10.0.0.0/24.

  • Mở các cổng cần thiết: SSH, WireGuard.

  • Đặt chính sách mặc định an toàn.

2.1. Xóa các rule cũ (nếu có)

bash

2.2. Xây dựng bộ rule

Giả sử giao diện mạng chính là eth0 (nếu dùng cloud có thể là ens3, ens5 – kiểm tra bằng ip a).

bash

Lưu ý quan trọng: Khi policy INPUT là DROP, nếu bạn chưa có rule cho SSH, bạn sẽ bị khóa mất kết nối. Hãy chắc chắn đã thêm rule SSH trước khi áp dụng policy DROP. Để an toàn, bạn có thể thực thi từng bước và kiểm tra.

2.3. Lưu rule iptables

Cài gói lưu trữ rule:

bash

Khi khởi động lại, các rule sẽ tự động được phục hồi.


3. Cài đặt WireGuard

3.1. Cài đặt gói WireGuard

bash

3.2. Tạo khóa cho server

bash

3.3. Tạo file cấu hình server /etc/wireguard/wg0.conf

bash

Nội dung:

ini

3.4. Bật chuyển tiếp IP (IP forwarding)

bash

3.5. Khởi động WireGuard

bash


4. Cấu hình client WireGuard

Trên máy client (Windows, macOS, Linux), cài đặt WireGuard và tạo cặp khóa.

Ví dụ trên Linux client:

bash

Tạo file cấu hình (ví dụ wg0.conf):

ini

  • AllowedIPs = 10.0.0.0/24: chỉ gửi lưu lượng đến dải VPN qua tunnel. Nếu muốn tất cả lưu lượng internet đều qua VPN, đặt 0.0.0.0/0 (nhưng cần NAT trên server).

Sau khi có file cấu hình, import vào ứng dụng WireGuard và kích hoạt.


5. Kiểm tra và sử dụng

5.1. Kiểm tra kết nối VPN

Từ client, ping địa chỉ VPN của server:

bash

Nếu ping thành công, WireGuard đã hoạt động.

5.2. Truy cập SMB qua VPN

Trên Windows:

  • Mở File Explorer, nhập \\10.0.0.1\MyShare

  • Đăng nhập với tài khoản Samba nqdev và mật khẩu đã đặt.

Trên Linux client:

  • Dùng smbclient:

bash

  • Hoặc mount:

bash

5.3. Kiểm tra tường lửa

Từ một máy không nằm trong VPN (hoặc từ chính server nhưng không qua wg0), thử telnet đến cổng 445:

bash


6. Một số lưu ý và xử lý sự cố

  • Mất kết nối SSH sau khi cấu hình iptables: hãy truy cập bằng console (nếu có) hoặc khởi động lại vào chế độ recovery để sửa rule. Luôn kiểm tra rule SSH trước khi đặt policy DROP.

  • Samba yêu cầu xác thực nhưng không thể kết nối: kiểm tra valid users trong smb.conf và đảm bảo người dùng Samba đã được kích hoạt.

  • WireGuard không khởi động: kiểm tra log bằng sudo journalctl -u wg-quick@wg0.

  • Để mở thêm cổng khác qua VPN: thêm các rule iptables tương tự với dải 10.0.0.0/24.


7. Kết luận

Bạn đã thiết lập thành công một hệ thống chia sẻ file SMB an toàn trên Ubuntu, sử dụng iptables để kiểm soát truy cập và WireGuard để mã hóa đường truyền. Giải pháp này phù hợp cho các tổ chức hoặc cá nhân cần truy cập dữ liệu từ xa với mức độ bảo mật cao.


Cẩm nang NQDEV – Kiến thức IT thực chiến, dễ hiểu và áp dụng ngay.

Last updated