Khi kết nối VPN đứt đột ngột, hệ điều hành Linux sẽ tự động chuyển hướng gói tin sang card mạng vật lý. Kết quả là toàn bộ địa chỉ IP thật lẫn truy vấn DNS bị lộ ra ngoài internet mà bạn không hề hay biết. Tình huống này diễn ra trong tích tắc, đủ để lộ danh tính khi bạn đang làm việc từ xa hoặc duyệt web riêng tư.
Kill Switch sinh ra để giải quyết đúng bài toán này. Nó hoạt động như một rơ-le ngắt mạch tự động: hễ mất kết nối VPN, mọi luồng dữ liệu ra ngoài lập tức bị khóa chặt.
Các phương án làm VPN Kill Switch trên Linux
Hiện nay có 4 cách chính để triển khai cơ chế này:
- Tính năng có sẵn trong VPN client: Dùng nút bật Kill Switch trên app thương mại hoặc hook up/down script trong file cấu hình.
- Tường lửa UFW (Uncomplicated Firewall): Dễ dùng nhờ cú pháp rút gọn, bản chất vẫn sinh rule cho iptables.
- iptables truyền thống: Giải pháp lâu đời nhất của Linux, thao tác trực tiếp với packet filtering table.
- nftables: Framework lọc gói tin hiện đại, thay thế hoàn toàn iptables từ nhân Linux 3.13 và trở thành mặc định trên Debian 10, Ubuntu 20.04 trở về sau.
So sánh thực tế giữa các giải pháp
Mỗi phương án đều có điểm đánh đổi riêng khi đưa vào vận hành:
1. Kill Switch tích hợp của VPN client
- Ưu điểm: Bật nhanh chỉ với một thao tác click hoặc lệnh đơn giản.
- Rủi ro: Không an toàn khi tiến trình VPN bị crash đột ngột hoặc bị hệ thống kill vì thiếu RAM (OOM killer). Khi tiến trình biến mất bất thường, các script dọn dẹp không kịp chạy. Hệ điều hành lại tiếp tục gửi dữ liệu qua card Wi-Fi hoặc mạng dây bình thường.
2. Tường lửa UFW
- Ưu điểm: Cú pháp trực quan, dễ nhớ với người mới làm quen Linux.
- Rủi ro: Kém linh hoạt khi card mạng ảo (như
wg0,tun0) liên tục bật tắt. Khi router cấp lại IP qua DHCP, rule tĩnh của UFW rất dễ khiến máy mất kết nối mạng cục bộ.
3. iptables cổ điển
- Ưu điểm: Phổ biến, tài liệu phong phú trên các bản phân phối cũ như CentOS 7.
- Rủi ro: Phải viết và bảo trì 2 file riêng biệt cho IPv4 (
iptables) và IPv6 (ip6tables). Mỗi lần thay đổi một dòng, kernel phải nạp lại toàn bộ bảng rule. Quá trình này gây lãng phí CPU và có thể drop kết nối hiện có.
4. nftables hiện đại
- Ưu điểm: Gom IPv4 và IPv6 vào chung một bảng (
family inet). Áp dụng quy tắc theo cơ chế atomic transaction—nạp tức thì trong vài microsecond mà không ngắt kết nối đang chạy. Hiệu năng lọc gói tin vượt trội nhờ bytecode engine chạy trực tiếp trong kernel. - Nhược điểm: Cú pháp dạng khối (block-based) khác lạ, cần thời gian làm quen nếu bạn đã quen gõ lệnh iptables một dòng.
Vì sao nftables là chốt chặn đáng tin cậy nhất?
Nguyên tắc cốt lõi của an toàn mạng: Chốt chặn bảo vệ phải độc lập với ứng dụng đầu cuối. Nếu phần mềm VPN gặp lỗi, lớp phòng thủ ở tầng kernel vẫn phải giữ nguyên hiệu lực.
Thực tế khi làm việc với mạng Wi-Fi quán cafe hay 4G chập chờn, kết nối VPN thường xuyên rớt rồi tự kết nối lại trong 1 đến 3 giây. Khoảng trống vài giây đó là lúc hệ thống âm thầm bắn hàng chục truy vấn DNS và gói tin TCP qua card mạng thường. Với nftables, bạn thiết lập chính sách mặc định: Chặn toàn bộ lưu lượng ra ngoài, trừ duy nhất cổng kết nối tới server VPN. Nhờ vậy, nguy cơ rò rỉ dữ liệu được loại bỏ hoàn toàn.
Quy trình triển khai nftables Kill Switch
Bước 1: Xác định thông số mạng
Mở terminal và kiểm tra danh sách card mạng hiện có:
ip -brief link
# enp3s0 UP 52:54:00:12:34:56 <BROADCAST,MULTICAST,UP,LOWER_UP>
# wg0 UNKNOWN
Thu thập các thông số thực tế của bạn theo mẫu sau:
- Card mạng vật lý kết nối internet:
enp3s0(hoặcwlan0nếu dùng Wi-Fi) - Card mạng VPN ảo:
wg0(WireGuard) hoặctun0(OpenVPN) - IP máy chủ VPN:
203.0.113.50 - Cổng và giao thức VPN:
51820 UDP(WireGuard) hoặc1194 UDP(OpenVPN) - Dải mạng LAN nội bộ:
192.168.1.0/24(để in ấn, truy cập NAS, router)
Bước 2: Cài đặt nftables
Trên Debian, Ubuntu hoặc Linux Mint, chạy lệnh:
sudo apt update && sudo apt install -y nftables
sudo systemctl enable nftables
Bước 3: Viết bộ quy tắc khóa mạng
Mở file cấu hình nftables:
sudo nano /etc/nftables.conf
Thay toàn bộ nội dung file bằng tập luật chuẩn sau:
#!/usr/sbin/nft -f
flush ruleset
table inet vpn_killswitch {
chain output {
# Chặn toàn bộ lưu lượng ra ngoài theo mặc định
type filter hook output priority filter; policy drop;
# 1. Cho phép loopback nội bộ máy
oifname "lo" accept
# 2. Duy trì kết nối hợp lệ đã thiết lập trước đó
ct state established,related accept
# 3. Cho phép xin cấp phát IP nội bộ qua DHCP
udp dport { 67, 68 } oifname "enp3s0" accept
# 4. Cho phép truy cập tài nguyên mạng nội bộ (máy in, router, NAS)
ip daddr 192.168.1.0/24 oifname "enp3s0" accept
# 5. Mở duy nhất kết nối bắt tay tới máy chủ VPN qua cổng vật lý
ip daddr 203.0.113.50 udp dport 51820 oifname "enp3s0" accept
# 6. Cho phép toàn bộ dữ liệu đi qua đường hầm VPN
oifname "wg0" accept
}
chain input {
# Chặn lưu lượng vào không được phép
type filter hook input priority filter; policy drop;
# Cho phép loopback và phản hồi từ các kết nối hợp lệ
iifname "lo" accept
ct state established,related accept
# Cho phép DHCP phản hồi từ router cục bộ
udp sport { 67, 68 } iifname "enp3s0" accept
# Cho phép gói tin từ dải LAN
ip saddr 192.168.1.0/24 iifname "enp3s0" accept
}
}
Bước 4: Nạp và kích hoạt cấu hình
Áp dụng ngay bộ quy tắc mà không cần khởi động lại máy:
sudo nft -f /etc/nftables.conf
Kiểm tra danh sách rule đang chạy trong kernel:
sudo nft list ruleset
Bước 5: Thử nghiệm thực tế chống rò rỉ
Đừng tin tưởng cấu hình khi chưa kiểm thử. Hãy giả lập tình huống mất mạng theo 3 bước:
- Kiểm tra khi VPN đang hoạt động bình thường:
curl -4 ifconfig.me # Kết quả phải trả về đúng IP của máy chủ VPN: 203.0.113.50 - Mô phỏng sự cố sập VPN:
sudo wg-quick down wg0 curl --connect-timeout 5 https://ifconfig.meNếu terminal trả về
Connection timed outhoặcCould not resolve hostsau 5 giây, Kill Switch đã hoạt động chuẩn xác. Gói tin ra ngoài quaenp3s0đã bị kernel hủy bỏ hoàn toàn. - Kiểm tra chống rò rỉ IPv6:
Nhiều nhà mạng viễn thông tự động cấp phát IPv6 kèm theo IPv4. Vì bảng cấu hình dùng
table inetvới chính sáchpolicy drop, mọi yêu cầu phân giải hoặc truyền tải dữ liệu qua IPv6 ngoài VPN đều bị chặn đứng, triệt tiêu nguy cơ lộ danh tính qua IPv6.
Chỉ với một file cấu hình duy nhất, bạn đã có một cơ chế bảo vệ chắc chắn ở tầng kernel. Dữ liệu chỉ có thể rời máy tính khi đường truyền bảo mật VPN đang hoạt động.

