- Published on
Hãy sử dụng DNS over HTTPS/TLS vì an toàn của bạn
- Authors
- Name
- Anh Tuấn
- @datuan
Giao thức HTTPS đã phổ biến đến mức chúng ta mặc định việc lướt web, truy cập các ứng dụng đã an toàn và có thể tin tưởng để sử dụng. Tuy nhiên, có một loại truy vấn vẫn chưa được nâng cấp từ khi World Wide Web xuất hiện và luôn đứng trước mối nguy hiểm rình rập, đó là truy vấn DNS (DNS query).
Cloudflare đã chính thức ra mắt Warp đến với mọi người, cùng cập nhật ở bài viết mừng sinh nhật Cloudflare 9 tuổi 🔗 bạn nhé.
Bài viết này dành cho tất cả mọi người, già trẻ lớn bé, thông thạo công nghệ hay không, ai ai cũng cần được bảo vệ và có được sự riêng tư khi sử dụng internet.
Nếu giữ mặc định hiện nay, từ máy tính, điện thoại đến các thiết bị khác đều truy vấn DNS thông qua một kết nối không được mã hóa. Điều này dẫn đến 2 vấn đề vô cùng nguy hiểm:
Hacker có thể "nghe lén" để biết bạn truy cập datuan.dev mặc cho bạn đang truy cập trang web mình qua kết nối HTTPS an toàn bằng các công cụ cơ bản nhất.
Các ứng dụng web ngày càng cần bảo mật hơn, sự riêng tư của chúng ta được đặt lên hàng đầu. Vì vậy DNS over HTTPS/TLS giúp ta ngăn chặn sự dòm ngó từ bên ngoài.
Hacker có thể thực hiện loại tấn công Man-in-the-middle 🔗 (MiTM) nổi tiếng để thay đổi nội dung của truy vấn DNS. Điều này có thể dẫn bạn tới một máy chủ được hacker cài bẫy sẵn thay vì máy chủ thật. Dù cho HTTPS đã có thể chặn đứng MiTM, truy vấn DNS vẫn chưa được mã hóa để chống lại loại hình tấn công này.
Thật may, DNSSEC 🔗 đã có thể giải quyết một phần tình trạng này, nhưng không phải tất cả. DNSSEC không được bật mặc định, không phải nhà cung cấp tên miền nào cũng hỗ trợ, không phải loại tên miền nào cũng có thể triển khai. Như đối với TLD .dev mình đang sử dụng đây, Namecheap đã trả lời rằng họ chưa có thời gian dự kiến để hỗ trợ DNSSEC.
Nói vậy không phải để bạn chủ quan bỏ qua DNSSEC. Nếu nhà cung cấp hỗ trợ, hãy bật ngay DNSSEC càng sớm càng tốt để bảo vệ người dùng của bạn.
DNS over HTTPS/TLS
DNS over HTTPS (DoH) lần đầu tiên được Google và Mozilla tiến hành thử nghiệm, để đến năm 2019, Google, Cloudflare, Quad9,... mở ra các DoH server công cộng để tất cả mọi người có thể sử dụng.
Từ sự kiện Cloudflare ra mắt dãy DNS 1.1.1.1 🔗, mình biết đến tính năng DNS over HTTPS (DoH) và DNS over TLS (DoT), từ đó tìm hiểu và áp dụng vào cá nhân, sau đó chia sẻ cho mọi người. Đây chính là lí do của bài viết không mang nặng tính kĩ thuật này.
Nói sơ về truy vấn DNS: quá trình truy vấn DNS, trình duyệt hoặc máy tính sẽ gửi một yêu cầu lên máy chủ DNS để hỏi địa chỉ IP chính xác của một tên miền cần truy cập. Các máy chủ DNS này sẽ tìm kiếm và trả về địa chỉ IP của tên miền này, là IP mà quản trị đã cấu hình sẵn.
Tại sao truy vấn DNS truyền thống không đủ an toàn?
Quá trình đơn giản nhưng không thể thiếu này trở nên dễ tổn thương hơn bao giờ hết khi đã, đang hoặc sẽ bị các hacker khai thác triệt để khi giao thức HTTPS đã trở nên đủ an toàn.
Hãy tưởng tượng rằng hacker can thiệp giữa quá trình này, thay đổi địa chỉ IP thật bằng một địa chỉ IP giả đã chuẩn bị sẵn của hacker. Lúc này và có thể mãi sau này, bạn sẽ truy cập trang web giả mạo hoàn toàn thay vì phải đi đến địa chỉ IP đúng mà không hề hay biết.
DNS over HTTPS/TLS giúp được gì cho tôi?
Nói đơn giản, DNS over HTTPS/TLS bảo vệ bạn bằng cách gửi các truy vấn bằng kết nối mã hóa, điều này giúp hacker không thể biết được bạn đang truy vấn địa chỉ IP cho tên miền nào. Kế đó, DNS over HTTPS/TLS giúp bạn xác minh xem nội dung trả về (bao gồm IP máy chủ) có được gửi từ máy chủ DNS gốc hay không, có bị thay đổi gì trong lúc truyền đi hay không. Đây cũng là cách mà giao thức HTTPS hoạt động.
Sự khác nhau giữa DNS over HTTPS và DNS over TLS
Sự khác biệt rõ ràng và duy nhất nằm ở port (cổng) mà hai giao thức này hỗ trợ.
DNS over HTTPS tất nhiên sử dụng cổng 443, sử dụng giao thức HTTPS và HTTP/2 để triển khai nội dung đến người dùng. Nhờ sử dụng cổng 443, truy vấn DNS có thể "ẩn náu" giữa các request HTTPS thông thường, và system admin sẽ phải suy nghĩ rất kĩ trước khi khóa lại cổng này vì điều này là gần như không thể.
Còn DNS over TLS lại sử dụng cổng 853 mà rất ít ứng dụng sử dụng đến. Vì vậy, system admin có thể dễ dàng lọc các request này, block cổng nếu cần thiết và chúng ta sẽ không thể truy vấn DNS được nữa.
Cách sử dụng DNS over HTTPS/TLS
Ở đây không bàn về cách triển khai vì chúng ta sẽ đứng ở vai trò người dùng cuối. Chúng ta sẽ tìm cách đưa các truy vấn DNS từ máy tính đến các máy chủ DoH, DoT bằng các phần mềm sẵn có do hiện nay còn rất ít hệ thống hỗ trợ sẵn DNS over HTTPS/TLS.
iOS/Android
Rất đơn giản, tải ứng dụng 1.1.1.1 của Cloudflare từ App Store 🔗 hoặc Play Store 🔗, mở ứng dụng, bật kết nối là xong. Quá trình này tốn khoảng 5 giây và kết nối rất ổn định. Hiện tại mình đang sử dụng DNS 1.1.1.1 liên tục 24/24 mà chưa bị ngắt quãng, rớt kết nối lần nào.
Ứng dụng 1.1.1.1 hoạt động như một kết nối VPN nên sẽ có biểu tượng VPN khi ta kết nối vào. Tuy nhiên hiện tại nó chỉ mới đóng vai trò cấu hình DNS chứ không mã hóa kết nối hay ẩn địa chỉ IP gốc của chúng ta. Khi nào ứng dụng 1.1.1.1 + Warp hoạt động chính thức 🔗 thì chúng ta sẽ có một ứng dụng VPN thực thụ ra mắt thì chúng ta sẽ được hưởng lợi tiếp. ?
MacOS
MacOS hiện tại chưa có ứng dụng để một click ăn ngay như trên iOS hoặc Android, bạn cần phải mở Terminal lên để làm việc, tuy nhiên cũng nhanh và đơn giản thôi.
- Nhấn tổ hợp Command + Space để mở Spotlight search.
- Gõ từ khóa 'Terminal'
- Nhấn Enter nơi kết quả Terminal.app
Tiếp theo, gõ câu lệnh bên dưới để cài đặt Homebrew và cloudflared. Trong quá trình cài Homebrew và cloudflared có thể hỏi mật khẩu tài khoản của bạn, cứ nhập mật khẩu và nhấn Enter thôi, không phải lo gì cả.
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew install cloudflare/cloudflare/cloudflared
Sau khi cài đặt xong cloudflared, chúng ta sẽ cấu hình địa chỉ để truy vấn DNS. Ở đây chúng ta có thể dùng của Google, Quad9, nhưng bản thân mình thấy Cloudflare dùng cũng rất ổn rồi. Bạn dùng gì tùy thích nhé.
mkdir -p /usr/local/etc/cloudflared
cat << EOF > /usr/local/etc/cloudflared/config.yml
proxy-dns: true
proxy-dns-upstream:
- https://1.1.1.1/dns-query
- https://1.0.0.1/dns-query
EOF
Vậy là xong, còn bước cuối cùng thôi. Gõ câu lệnh bên dưới để cấu hình cloudflared hoạt động:
sudo cloudflared service install
Lúc này, bạn có thể cấu hình DNS của MacOS về địa chỉ 127.0.0.1 là được. Phần này nằm trong Advanced > DNS của cấu hình Wifi/LAN.
Từ này về sau, bất kì mạng Wifi/LAN nào mà laptop của bạn kết nối vào đều sử dụng DoH để đảm bảo riêng tư và an toàn. Chúng ta không cần quan tâm bật/tắt hay phải kết nối VPN mỗi lần máy khởi động nữa.
Kiểm tra kết nối DNS over HTTPS/TLS
Cuối cùng là kiểm tra xem chúng ta đã thực sự triển khai được DNS over HTTPS/TLS trên máy cá nhân chưa bằng cách truy cập vào website ESNI Checker 🔗 của Cloudflare và nhấn Check my browser.
Nếu bạn không sử dụng DNS 1.1.1.1 và không sử dụng DNS over HTTPS/TLS sẽ hiện ra thông báo này:
Nếu bạn chỉ sử dụng DNS 1.1.1.1 của Cloudflare và không sử dụng DNS over HTTPS/TLS sẽ hiện ra thông báo này:
Và cuối cùng, nếu bạn triển khai thành công DNS over HTTPS/TLS theo bài viết này có nghĩa là bạn đã được bảo vệ ở mức rất cao: