Tại sao bạn cần một DNS Firewall?
Dân quản trị mạng thường mải mê với Firewall Layer 4 hay WAF mà quên mất một “tử huyệt”: Tầng DNS. Theo báo cáo từ Cisco, gần 92% mã độc sử dụng DNS để nhận lệnh từ máy chủ điều khiển (C2) hoặc đánh cắp dữ liệu.
Hãy tưởng tượng một máy tính trong mạng bị dính Ransomware. Việc đầu tiên nó làm là “gọi điện về nhà” qua một tên miền lạ để lấy khóa mã hóa. Nếu bạn chặn đứng truy vấn này ngay tại DNS Server nội bộ, mã độc sẽ bị tê liệt hoàn toàn trước khi kịp gây hại.
BIND9 RPZ (Response Policy Zones) chính là công cụ giúp bạn thực hiện điều này. Thay vì trả về IP thật của trang web lừa đảo, DNS Server sẽ trả về lỗi NXDOMAIN hoặc trỏ về một Sinkhole IP (trang cảnh báo nội bộ). Đây là cách bảo vệ chủ động, nhẹ nhàng và cực kỳ hiệu quả.
Cài đặt BIND9
Ubuntu Server là lựa chọn tốt nhất nhờ kho package ổn định. Bạn chỉ cần vài lệnh cơ bản để bắt đầu:
sudo apt update
sudo apt install bind9 bind9utils bind9-doc -y
Kiểm tra trạng thái để chắc chắn dịch vụ đã sẵn sàng:
sudo systemctl enable bind9
sudo systemctl start bind9
Cấu hình DNS Firewall với RPZ
Quy trình triển khai gồm hai phần: Khai báo chính sách và định nghĩa danh sách đen.
Bước 1: Khai báo trong named.conf.options
Mở file /etc/bind/named.conf.options. Bạn cần thêm khối response-policy vào trong block options để kích hoạt tính năng lọc.
options {
directory "/var/cache/bind";
# Chỉ cho phép dải IP nội bộ truy vấn
allow-query { localhost; 192.168.1.0/24; };
forwarders {
8.8.8.8;
1.1.1.1;
};
# Kích hoạt RPZ
response-policy {
zone "rpz.blacklist";
};
};
Bước 2: Khai báo Zone trong named.conf.local
Tiếp theo, hãy định nghĩa zone rpz.blacklist. Lưu ý: đây là zone chính sách, không phải zone phân giải tên miền thông thường.
zone "rpz.blacklist" {
type master;
file "/etc/bind/db.rpz.blacklist";
allow-query { none; };
};
Bước 3: Tạo file dữ liệu danh sách đen
Đây là nơi bạn liệt kê các domain độc hại. Tạo file /etc/bind/db.rpz.blacklist với nội dung sau:
$TTL 60
@ IN SOA localhost. root.localhost. (
2023102701 ; serial
3H ; refresh
1H ; retry
1W ; expire
1H ) ; minimum
IN NS localhost.
; --- CHẶN TÊN MIỀN ---
; Trả về NXDOMAIN (Domain không tồn tại)
evil-malware.com IN CNAME .
*.evil-malware.com IN CNAME .
; Trỏ về trang cảnh báo (Sinkhole)
phishing-site.net IN A 192.168.1.100
*.phishing-site.net IN A 192.168.1.100
Dùng CNAME . là cách xử lý thông minh nhất. Nó khiến trình duyệt ngắt kết nối ngay lập tức thay vì bắt người dùng chờ đợi timeout đến 30 giây.
Kiểm tra và Giám sát
Trước khi khởi động lại, hãy kiểm tra lỗi cú pháp để tránh làm gián đoạn mạng:
sudo named-checkconf
sudo systemctl restart bind9
Xác nhận kết quả
Sử dụng lệnh dig từ một máy trạm để kiểm tra xem rule đã ăn khớp chưa:
dig @192.168.1.10 evil-malware.com
Nếu dòng status hiển thị NXDOMAIN, hệ thống của bạn đã được bảo vệ.
Truy tìm dấu vết mã độc
Điểm hay nhất của RPZ là khả năng phát hiện máy bị nhiễm. Khi một client truy cập web bẩn, BIND9 sẽ ghi lại log chi tiết. Bạn có thể theo dõi thời gian thực bằng lệnh:
tail -f /var/log/syslog | grep "rpz"
Nếu thấy một IP liên tục query đến domain malware, đó là lúc bạn cần cầm USB boot đi “cấp cứu” máy tính đó ngay.
Tự động hóa danh sách chặn
Việc nhập tay hàng nghìn domain là bất khả thi. Bạn nên sử dụng script Bash để crawl dữ liệu từ URLHaus hoặc Spamhaus định kỳ mỗi 24 giờ. Sau khi cập nhật file zone, chỉ cần chạy rndc reload để áp dụng cấu hình mới mà không làm gián đoạn dịch vụ.
Nhiều doanh nghiệp hiện nay còn cấu hình BIND9 làm Slave Zone để tự động đồng bộ danh sách RPZ từ các nhà cung cấp bảo mật chuyên nghiệp. Cách này giúp hệ thống luôn cập nhật các mẫu malware mới nhất chỉ sau vài phút xuất hiện.
Tổng kết
Triển khai DNS Firewall với BIND9 RPZ là phương án “ngon – bổ – rẻ” cho mọi hệ thống mạng. Nó không đòi hỏi phần cứng khủng như Proxy nhưng vẫn mang lại lớp phòng thủ chiều sâu cực kỳ tin cậy. Hãy dành 15 phút cấu hình hôm nay để giảm bớt rủi ro bị Ransomware tấn công vào ngày mai.

