Bảo mật bản đồ định tuyến của Internet
Hãy coi DNS như hệ thống bản đồ của internet: bạn nhập một tên miền và nó trả về một địa chỉ IP. Vấn đề là gì? Giao thức ban đầu có từ năm 1983 và hoàn toàn dựa trên sự tin tưởng mù quáng. Vì sử dụng UDP—một giao thức nhanh nhưng theo kiểu ‘gửi và quên’—kẻ tấn công có thể dễ dàng giả mạo phản hồi và chuyển hướng lưu lượng của bạn trước khi bạn kịp nhận ra.
Tôi nhớ cảm giác hoảng loạn khi thấy 5.000 lượt đăng nhập SSH thất bại chỉ trong một giờ trên máy chủ production đầu tiên của mình. Đó là một hồi chuông cảnh tỉnh. Trong khi hầu hết các quản trị viên dành nhiều ngày để thắt chặt tường lửa, họ thường để ngỏ cửa trước bằng cách bỏ qua hạ tầng DNS. Nếu tin tặc đầu độc bộ đệm (poison) DNS, chúng có thể gửi người dùng đến một trang web giả mạo, thu thập thông tin đăng nhập hoặc chặn các email nhạy cảm mà không cần chạm vào các lớp bảo mật cục bộ của máy chủ.
DNSSEC (Domain Name System Security Extensions) khắc phục điều này bằng cách thêm chữ ký số vào các bản ghi của bạn. Nó không mã hóa lưu lượng truy cập, nhưng nó cung cấp một đảm bảo bằng mật mã rằng dữ liệu mà người dùng nhận được chính xác là những gì bạn đã xuất bản.
Bắt đầu nhanh: Kiểm tra xác thực trong 60 giây
Trước khi bắt tay vào ký các vùng của riêng mình, hãy xem cách xác thực hoạt động trong thực tế. Hầu hết các trình phân giải (resolver) lớn, bao gồm Google (8.8.8.8), Cloudflare (1.1.1.1) và Quad9 (9.9.9.9), đã thực hiện kiểm tra DNSSEC. Bạn có thể xác minh xem một tên miền có được bảo vệ hay không bằng công cụ dig.
# Kiểm tra cờ 'ad' (Authenticated Data) trong header
dig +dnssec ietf.org
# So sánh với một tên miền không có DNSSEC
dig +dnssec example.com
Kiểm tra đầu ra để tìm flags: qr rd ra ad. Cờ ad đó là tín hiệu ‘đèn xanh’; nó có nghĩa là trình phân giải đã xác thực thành công các chữ ký. Bạn cũng sẽ thấy các bản ghi RRSIG trong phần trả lời—đây chính là các bằng chứng mật mã thực sự bảo vệ bản ghi.
Bản chất bên dưới: Chuỗi tin cậy hoạt động như thế nào
DNSSEC không chỉ ký các bản ghi riêng lẻ một cách rời rạc; nó xây dựng một “Chuỗi tin cậy” (Chain of Trust) theo thứ bậc. Để nắm vững việc triển khai, bạn cần hiểu ba yếu tố cốt lõi:
- DNSKEY: Khóa công khai nằm trong vùng của bạn để xác thực chữ ký.
- RRSIG (Resource Record Signature): Chữ ký số đính kèm với các bản ghi của bạn (như A, AAAA hoặc MX).
- DS (Delegation Signer): Một bản băm (hash) của khóa công khai mà bạn tải lên registry cấp cha (như .com hoặc .org). Liên kết này kết nối bảo mật cục bộ của bạn với DNS root toàn cầu.
Cơ chế của một cuộc tấn công Spoofing
Trong một cuộc tấn công DNS Cache Poisoning tiêu chuẩn, tin tặc sẽ làm tràn ngập trình phân giải bằng hàng nghìn phản hồi giả mạo. Nếu chúng đoán đúng ID giao dịch 16-bit, trình phân giải sẽ chấp nhận IP độc hại. Ngay lập tức, mọi người dùng trên mạng đó sẽ bị chuyển hướng đến một trang web lừa đảo. DNSSEC loại bỏ vectơ tấn công này vì trình phân giải sẽ từ chối bất kỳ phản hồi nào không có RRSIG hợp lệ khớp với khóa riêng tư của vùng.
Cách làm thủ công: Ký một vùng BIND
Nhiều nhà cung cấp dịch vụ quản lý cung cấp DNSSEC chỉ với một cú nhấp chuột, nhưng việc tự chạy máy chủ BIND sẽ giúp bạn có quyền kiểm soát chi tiết. Trong thiết lập này, chúng ta sử dụng thuật toán ECDSA 256-bit. Chúng ta tạo ra hai khóa: Khóa ký vùng (ZSK – Zone Signing Key) cho các hoạt động hàng ngày và Khóa ký khóa (KSK – Key Signing Key) dùng để ký chính bản thân ZSK.
1. Tạo các khóa mật mã
Di chuyển đến thư mục BIND của bạn (thường là /etc/bind/) và tạo các khóa. Chúng ta sử dụng thuật toán ECDSAP256SHA256 vì nó mang lại tính bảo mật cao với kích thước bản ghi rất nhỏ.
# Tạo ZSK (Zone Signing Key)
dnssec-keygen -a ECDSAP256SHA256 -n ZONE itfromzero.com
# Tạo KSK (Key Signing Key)
dnssec-keygen -a ECDSAP256SHA256 -f KSK -n ZONE itfromzero.com
Lệnh này tạo ra bốn tệp. Các tệp .key là công khai, trong khi các tệp .private là tài sản quý giá nhất của bạn—hãy giữ chúng tránh xa môi trường web công cộng.
2. Nhúng khóa vào tệp vùng (Zone File)
Thêm các khóa công khai vào tệp vùng của bạn (ví dụ: db.itfromzero.com) bằng cách sử dụng chỉ thị include:
$INCLUDE "Kitfromzero.com.+013+12345.key"
$INCLUDE "Kitfromzero.com.+013+67890.key"
3. Thực hiện việc ký
Chạy công cụ dnssec-signzone. Tôi khuyên bạn nên để thời hạn hiệu lực của chữ ký là 30 ngày để cân bằng giữa tính bảo mật và công sức bảo trì.
dnssec-signzone -A -3 $(head -c 1000 /dev/urandom | sha1sum | cut -b 1-16) \
-N INCREMENT -o itfromzero.com -t db.itfromzero.com
Lệnh này tạo ra tệp db.itfromzero.com.signed. Hãy cập nhật named.conf.local của bạn để trỏ đến phiên bản đã ký này để BIND có thể bắt đầu cung cấp các bản ghi đã được bảo mật.
4. Liên kết với Root toàn cầu
Ký cục bộ mới chỉ là một nửa chặng đường. Bạn phải cho cả thế giới biết rằng hãy tin tưởng các khóa của mình. Mở tệp dsset-itfromzero.com. được tạo ở bước trước, sao chép các bản ghi DS và dán chúng vào bảng điều khiển DNSSEC của nhà đăng ký tên miền (Namecheap, Cloudflare, v.v.). Điều này hoàn thiện chuỗi tin cậy.
Bài học thực tế từ kinh nghiệm thực chiến
DNSSEC thường là một nhiệm vụ kiểu ‘thiết lập rồi quên đi’, nhưng nếu bạn thực sự quên nó, trang web của bạn sẽ biến mất khỏi internet khi chữ ký hết hạn. Dưới đây là cách để mọi thứ hoạt động trơn tru:
Dựa vào tự động hóa
Đừng ký các vùng một cách thủ công vào năm 2026. BIND hiện đại (9.16+) có khối dnssec-policy giúp xử lý việc xoay vòng khóa và ký tự động. Một cấu hình đơn giản sẽ trông như thế này:
dnssec-policy "standard" {
keys {
ksk key-directory lifetime unlimited algorithm ecdsap256sha256;
zsk key-directory lifetime 60d algorithm ecdsap256sha256;
};
nsec3param iterations 0 salt-length 16;
};
Tôn trọng độ trễ lan truyền
Khi thực hiện chuyển đổi (rollover) KSK, đừng bao giờ xóa khóa cũ ngay lập tức. Hãy đợi ít nhất 72 giờ để các bản ghi DS mới lan truyền trên toàn cầu. Nếu bạn chuyển đổi quá nhanh, các trình phân giải sẽ thấy sự không khớp chữ ký và coi tên miền của bạn như một trang web bị chiếm quyền điều khiển, dẫn đến tình trạng mất kết nối hoàn toàn.
Trực quan hóa chuỗi tin cậy
Tôi không bao giờ coi một thiết lập là hoàn tất cho đến khi kiểm tra nó trên dnsviz.net. Nó cung cấp một bản đồ trực quan về sức khỏe DNSSEC của bạn và gắn cờ các lỗi như chữ ký hết hạn hoặc các liên kết bị hỏng tới TLD. Một lựa chọn tốt khác là Verisign DNSSEC Analyzer.
Quyền riêng tư: NSEC so với NSEC3
NSEC tiêu chuẩn cho phép ai đó ‘dạo chơi’ (walk) trong vùng của bạn và liệt kê mọi tên miền phụ ẩn mà bạn sở hữu. Nếu bạn muốn ngăn chặn điều này, hãy sử dụng NSEC3, thuật toán này sẽ băm tên các bản ghi của bạn. Mặc dù không phải là một tấm lá chắn hoàn hảo chống lại những kẻ tấn công chuyên nghiệp, nhưng nó nâng cao đáng kể rào cản đối với những kẻ quét dạo.
Bảo mật DNS là một bước nền tảng trong chiến lược phòng thủ hiện đại. Bằng cách ký các vùng của mình, bạn đảm bảo người dùng truy cập chính xác vào nơi họ muốn, được bảo vệ khỏi mối đe dọa vô hình của kỹ thuật đầu độc bộ đệm (cache poisoning).

