DMZ xuất hiện mà không kèm theo định nghĩa nào. Một dòng trong danh sách kiểm tra rà soát bảo mật, một câu trong tài liệu tăng cường bảo mật của nhà cung cấp, một yêu cầu trong tin tuyển dụng nằm ngay cạnh TLS và nguyên tắc đặc quyền tối thiểu.
Bạn tra cứu và tìm thấy sơ đồ một tường lửa cắm ba sợi cáp mạng. Một sợi đi ra internet, một sợi đi tới dãy máy chủ, một sợi đi tới mạng LAN văn phòng. Còn thứ bạn đang quản trị là một máy chủ thuê duy nhất, một địa chỉ IP công cộng và không có giao diện mạng dự phòng nào.
Bức hình đầu tiên là một kiến trúc DMZ đúng nghĩa. Trên một máy chủ duy nhất, bạn có thể tái tạo một phần mục tiêu bảo mật của nó: giới hạn những gì internet chạm tới được. Thứ bạn không thể tái tạo trên chính máy chủ đó là ranh giới mạng riêng biệt, thứ khiến một DMZ thực sự là DMZ.
Phiên bản ngắn gọn
- DMZ tách các dịch vụ mà người lạ buộc phải truy cập được ra khỏi phần còn lại của những gì bạn đang chạy.
- Vấn đề chưa bao giờ nằm ở việc đi dây: vấn đề là một vụ xâm nhập ở phía công cộng phải dừng lại ngay tại đó.
- Bạn có thể cấu hình một tường lửa mà vẫn không hề có DMZ.
- Một máy chủ duy nhất với một IP công cộng có thể giảm mức phơi bày nhờ reverse proxy, quy tắc tường lửa trên host và việc gắn dịch vụ vào loopback hoặc địa chỉ nội bộ, nhưng nó không tạo ra một phân đoạn DMZ riêng biệt.
- Phiên bản đó dùng chung nhân hệ điều hành với chính thứ nó bảo vệ, nên hãy tính nó là giảm phơi bày chứ không phải cô lập.
Bài viết này không đề cập đến điều gì
Phạm vi ở đây là mô hình tư duy, và ba chủ đề liền kề được cố ý bỏ qua.
- Không có các bước triển khai. Ở đây không có cấu hình reverse proxy, không có cú pháp quy tắc tường lửa, và không có khuyến nghị nên cài công cụ nào.
- Không đề cập cấu hình router gia đình. Tùy chọn "DMZ host" trên router tại nhà chỉ một thứ hoàn toàn khác.
- Không đưa ra phán quyết về zero trust. Việc vành đai mạng có còn là biện pháp kiểm soát chính đúng đắn hay không là một tranh luận có thật, và bài này không kết luận.
DMZ là gì và dùng để làm gì?
DMZ, hay vùng phi quân sự, là một phân đoạn mạng nằm giữa internet không đáng tin và mạng nội bộ. Nó chứa những dịch vụ buộc phải truy cập được từ bên ngoài, chẳng hạn máy chủ web và máy chủ thư. Mọi thứ còn lại nằm sau một ranh giới thứ hai, nên chạm được tới dịch vụ công cộng không có nghĩa là chạm được tới phần còn lại.
Mục từ điển thuật ngữ của Mozilla về DMZ gói gọn nửa phần cốt lõi của điều đó trong một mệnh đề: nó chỉ phơi bày một số điểm cuối đã được xác định, đồng thời từ chối mọi truy cập từ bên ngoài vào mạng nội bộ. Đó là toàn bộ mục tiêu thiết kế, được nêu ra mà không nhắc tới bất kỳ thiết bị nào.
Những loại dịch vụ thường nằm ở đó là hệ quả của chính mục tiêu ấy. Máy chủ web, máy chủ thư, máy chủ FTP, máy chủ VoIP: những thứ mà người lạ lẽ ra phải kết nối được. Máy chủ thư mục, cơ sở dữ liệu, chia sẻ tệp, ứng dụng nội bộ và giao diện quản trị không nằm trong danh sách đó, vì lẽ ra không ai từ bên ngoài được chạm tới chúng.
Hãy giữ lấy tính chất, đừng giữ lấy bức hình. Ba giao diện mạng chỉ là một cách tạo ra ranh giới tin cậy riêng biệt. Các thiết kế trên cloud và trên một máy chủ có thể áp dụng cùng nguyên tắc kiểm soát phơi bày theo cách khác, nhưng chỉ những thiết kế có vùng vành đai tách biệt mới thực sự tái tạo được chính DMZ.
DMZ ba giao diện cổ điển hoạt động thế nào?
DMZ cổ điển được dựng theo hai cách. Thiết kế một tường lửa cho một tường lửa duy nhất ba giao diện: một ra internet, một tới DMZ, một tới mạng nội bộ. Thiết kế hai tường lửa đặt DMZ vào giữa hai tường lửa tách biệt. Cả hai đều thực thi cùng một quy tắc. Internet chạm tới DMZ. Internet không bao giờ chạm tới mạng nội bộ.
Mô hình một tường lửa (ba chân)
Một tường lửa, ba giao diện mạng. Cái thứ nhất hướng ra internet. Cái thứ hai hướng vào DMZ, nơi các dịch vụ công cộng cư ngụ. Cái thứ ba hướng vào mạng nội bộ. Tường lửa cho phép lưu lượng vào từ internet tới những cổng cụ thể trong DMZ, cho phép một luồng hẹp từ DMZ vào bên trong ở nơi ứng dụng đòi hỏi, và từ chối mọi thứ còn lại.
Hình dạng này có tên là tường lửa ba chân. Mọi gói tin đi qua giữa các vùng đều phải qua một thiết bị duy nhất, khiến tường lửa đó trở thành điểm hỏng đơn lẻ cho lưu lượng liên vùng. Nếu nó hỏng, khả năng kết nối và việc thực thi chính sách sẽ bị ảnh hưởng, tùy vào cách tường lửa hành xử khi hỏng và mức dự phòng bạn đã chuẩn bị.
Tôi đã dành cả một thập kỷ vận hành mạng tại một ISP, và điều khiến người ta ngạc nhiên về một giao diện DMZ là nó bình thường đến mức nào. Một cổng ethernet thông thường, chỉ khác ở nhãn tin cậy được gán cho nó trong cấu hình tường lửa. Kiến trúc không nằm trong dây đồng. Nó nằm trong bộ quy tắc, và nằm ở chỗ có ai đó đã suy nghĩ cẩn thận xem mỗi luồng được phép đi theo hướng nào.
Mô hình hai tường lửa (lưng vào lưng)
Hai tường lửa nối tiếp nhau, với DMZ nằm ở giữa. Tường lửa ngoài cho lưu lượng internet đi vào DMZ và không đi xa hơn. Tường lửa trong chỉ cho phép đúng luồng từ DMZ vào bên trong mà một ứng dụng cần. Kẻ tấn công đã vào được DMZ vẫn phải vượt qua ranh giới chính sách của tường lửa trong trước khi tới được mạng nội bộ.
Hai tường lửa cho bạn hai ranh giới chính sách được thực thi riêng biệt, nhưng cũng thêm cấu hình, vá lỗi và độ phức tạp vận hành. Việc ranh giới ngoài hỏng hoặc bị chiếm không tự động xóa bỏ ranh giới trong, dù mức bảo vệ vẫn phụ thuộc vào cách cấu hình và quản lý cả hai tường lửa.
DMZ có phải là tường lửa không?
Không. DMZ là một mạng vành đai hoặc một phân đoạn mạng riêng. Tường lửa là một biện pháp kiểm soát phổ biến dùng để điều tiết lưu lượng giữa vùng đó, internet và mạng nội bộ. Bạn có thể cấu hình quy tắc tường lửa trên một mạng phẳng mà chẳng tạo ra DMZ nào, nên khác biệt ở đây thuộc về kiến trúc chứ không chỉ là chuyện cấu hình.
Sự nhầm lẫn ấy là dễ hiểu. Tường lửa là thứ bạn đăng nhập vào, thứ có tệp cấu hình, có nhà cung cấp và hợp đồng hỗ trợ, nên nó gom luôn cái tên của thứ mà nó tạo ra. Còn chẳng ai đăng nhập vào một phân đoạn mạng cả.
Hậu quả lộ ra vào đúng thời điểm tệ nhất. Cứ giả định máy chủ web công khai của bạn đã bị chiếm, vì sớm muộn gì điều đó cũng xảy ra. Trên một mạng phẳng, kẻ tấn công giờ đã có chỗ đứng trên một máy vốn dĩ đã nói chuyện được với cơ sở dữ liệu, máy chủ tệp và các giao diện quản trị của bạn, và việc đi lại giữa chúng chẳng qua là dùng quyền truy cập vốn đã được cho phép. Kiểu đi ngang đó gọi là lateral movement, và ranh giới thứ hai tồn tại đúng là để chặn nó. DMZ không ngăn máy chủ web bị chiếm. Nó ngăn một máy chủ web đã bị chiếm biến thành lối vào tất cả những thứ còn lại.
Một điểm cần làm rõ khi thuật ngữ này còn trước mắt: thiết lập "DMZ host" trên router gia đình hay văn phòng nhỏ là một tính năng khác. Nó chuyển tiếp lưu lượng vào không được yêu cầu tới một thiết bị nội bộ duy nhất, phơi thiết bị đó thẳng ra internet; nó không tạo ra một mạng DMZ riêng biệt và được bảo vệ.
Áp dụng nguyên tắc DMZ trên một máy chủ như thế nào?
Một máy chủ duy nhất với một IP công cộng có thể tái tạo một phần mục tiêu kiểm soát phơi bày của DMZ, mà không tái tạo được sự tách biệt mạng của nó. Một reverse proxy có thể trở thành điểm vào công cộng duy nhất, các quy tắc tường lửa chiều vào theo kiểu mặc định từ chối có thể chặn phần còn lại, và các dịch vụ nội bộ có thể lắng nghe trên loopback hoặc một giao diện nội bộ thay vì trên địa chỉ công cộng.
Hãy bắt đầu từ ràng buộc mà phần này giả định: một VPS, một giao diện công cộng, và không có thiết bị tường lửa riêng và không có mạng con DMZ nào thuộc quyền bạn. Với thiết lập đó, bạn không thể tái tạo cấu trúc ba chân cổ điển trên cùng một máy chủ. Quy tắc tường lửa trên host, việc chọn giao diện cho dịch vụ lắng nghe và một reverse proxy vẫn có thể giảm mức phơi bày, nhưng chúng không tạo ra cùng một ranh giới cô lập.
Một reverse proxy có thể chiếm giao diện công cộng ở các cổng 80 và 443 và trở thành điểm vào duy nhất ở tầng ứng dụng cho lưu lượng web. Điều đó thu hẹp bề mặt tấn công công khai, nhưng không tương đương với một giao diện DMZ riêng, vì proxy vẫn dùng chung máy chủ với những dịch vụ nằm sau nó.
Các quy tắc tường lửa chiều vào trên host cho phép hai cổng đó và loại bỏ phần còn lại. Mọi dịch vụ khác trên máy vẫn có thể đang chạy và lắng nghe, nhưng không thứ gì từ bên ngoài khởi tạo được kết nối tới chúng. Cách này tiệm cận chính sách "chỉ những cổng có chủ đích mới truy cập được" trong phạm vi một máy chủ; nó không tạo ra ranh giới riêng với mạng nội bộ.
Máy chủ ứng dụng, cơ sở dữ liệu và bảng quản trị không nên gắn vào địa chỉ công cộng. Khi proxy chạy trên cùng máy chủ, chúng có thể lắng nghe trên loopback; khi proxy chạy ở nơi khác trong mạng nội bộ, chúng có thể lắng nghe trên một địa chỉ nội bộ. Trong cả hai trường hợp, trên giao diện công cộng không có tiến trình nào lắng nghe cho những dịch vụ đó, nên chỉ mở một quy tắc chiều vào trên giao diện ấy cũng không phơi bày chúng.
Quyền truy cập quản trị thuộc về phía nội bộ, không thuộc phía DMZ. Giữ SSH và các giao diện quản lý ra khỏi đường đi công cộng, đặt sau một VPN hoặc một mạng nội bộ, sẽ ngăn mọi kết nối trực tiếp tới chúng từ internet công cộng.
Các khái niệm DMZ ánh xạ sang subnet VPC và security group ra sao?
Mô hình cổ điển ánh xạ khá sát về mặt khái niệm sang các nguyên thể mạng trên cloud, nhưng không phải một đối một. Một phân đoạn DMZ trở thành subnet công cộng. Mạng nội bộ trở thành subnet nội bộ không có tuyến tới internet gateway. Bộ quy tắc của tường lửa bị chia ra giữa security group, vốn gắn với giao diện mạng của tài nguyên, và network ACL, vốn gắn với subnet.
| Thành phần cổ điển | Tương đương trên cloud | Thực thi điều gì |
|---|---|---|
| Phân đoạn DMZ | Mạng con công khai | Cung cấp một tuyến ra internet; tài nguyên còn cần có địa chỉ công cộng và quy tắc bảo mật cho phép lưu lượng đó |
| Phân đoạn mạng nội bộ | Mạng con riêng tư | Không có tuyến trực tiếp tới internet gateway, nên internet không thể khởi tạo kết nối trực tiếp theo đường đó |
| Giao diện tường lửa giữa các vùng | Bảng định tuyến + gắn internet gateway | Lưu lượng có thể được định tuyến tới đâu; việc một tài nguyên có truy cập được hay không vẫn do địa chỉ công cộng và các biện pháp bảo mật quyết định |
| Bộ quy tắc tường lửa (theo vùng) | Network ACL | Quy tắc cho phép và từ chối phi trạng thái, được đánh giá tại rìa subnet |
| Bộ quy tắc tường lửa (theo máy chủ) | Security group | Quy tắc cho phép có trạng thái, áp dụng lên giao diện mạng của các tài nguyên được gắn kèm |
| Dịch vụ hướng ra công cộng trong DMZ | Load balancer hoặc instance proxy trong subnet công cộng | Điểm vào duy nhất mà lưu lượng buộc phải đi qua |
Chính các nhà cung cấp cloud cũng dùng vốn từ này, đó là bằng chứng tốt cho thấy thuật ngữ vẫn còn thời sự. Blog networking của AWS mô tả một kiến trúc DMZ trên Amazon VPC vốn cô lập các dịch vụ hướng ra công cộng khỏi mạng nội bộ, được xây trên VPC Block Public Access, một biện pháp kiểm soát ở cấp Region ra mắt vào tháng 11 năm 2024.
Subnet mới là phần chịu lực của toàn bộ phép ánh xạ này. Một subnet công cộng có tính công cộng vì bảng định tuyến của nó trỏ tới một internet gateway. Bởi bảng định tuyến quyết định gói tin đi về đâu, cách bố trí subnet định hình mức phơi bày của bạn trước cả bất kỳ quy tắc riêng lẻ nào.
Phép ánh xạ này khiếm khuyết ở đúng một chỗ. Một giao diện tường lửa từng áp đặt ranh giới cho cả một phân đoạn; còn một security group lại gắn với giao diện mạng của một tài nguyên. Hai máy trong cùng một subnet nội bộ có thể mang những security group hoàn toàn khác nhau, nên việc thực thi rơi xuống mức chi tiết mịn hơn bất cứ giao diện vật lý nào từng đạt tới. Thường thì đó là một cải tiến. Nhưng nó cũng có nghĩa là tên của một subnet nói cho bạn biết ít hơn về những gì truy cập được, so với những gì một sơ đồ mạng từng nói.
Chỗ mà phiên bản một máy chủ hụt hơi
Trên một máy chủ, tiến trình hướng ra công cộng và các dịch vụ nội bộ dùng chung một nhân và một cỗ máy. Các phân đoạn tách biệt buộc kẻ tấn công phải vượt qua một ranh giới mạng do tường lửa kiểm tra; một máy chủ đơn lẻ thì không. Mô hình một máy chủ giảm mức phơi bày. Nó không tái tạo sự tách biệt.
Nếu reverse proxy bị chiếm theo cách cho phép kẻ tấn công thực thi mã, thì đoạn mã đó vốn đã chạy trên chính cỗ máy đang chạy cơ sở dữ liệu của bạn. Lúc ấy việc gắn vào loopback chẳng giúp được gì, vì loopback truy cập được ngay từ trong host. Cô lập bằng container hay bằng người dùng có thể nâng cao công sức cần bỏ ra, nhưng container trên cùng một host vẫn dùng chung nhân của host đó. Trong mô hình cổ điển, bước tiếp theo của kẻ tấn công là một gói tin đi qua sợi dây mà có thứ gì đó đang soi. Còn ở đây, nó là một socket cục bộ.
Hệ quả thực tế là một ngưỡng, không phải một phán quyết. Khi thứ nằm sau proxy đáng giá hơn công sức dựng thêm một cỗ máy, hãy dùng máy thứ hai và một mạng nội bộ nối giữa chúng. Chẳng có gì trong bài này phải học lại để làm điều đó, vì chưa từng có phần nào của nó nói về phần cứng cả.
Xây dựng trên VPS Linux với quyền root, NVMe và sức mạnh AMD EPYC.
Xem các gói LinuxVành đai không còn là nơi duy nhất có thể thực thi chính sách bảo mật. Kiến trúc zero trust loại bỏ sự tin cậy ngầm dựa trên vị trí trong mạng, trong khi kết nối riêng được dựng bằng WireGuard hoặc Tailscale có thể giảm mức phơi bày ra công cộng. Không cách nào trong hai cách đó tự động thay thế được việc phân đoạn hay việc phân quyền. Còn quan điểm của tôi về câu hỏi hẹp hơn thì rất dứt khoát. Như một mô hình tư duy: hãy phân loại cái gì chạm tới được và cái gì không, và biết rõ ranh giới nào sẽ giữ được một vụ xâm nhập lại. Câu hỏi ấy sống sót qua mọi kiến trúc vừa nêu ở trên, và đó chính là lý do nó vẫn đáng được trả lời.
Câu hỏi thường gặp
DMZ có phải là VPN không?
Không. Chúng giải quyết những vấn đề khác nhau. DMZ kiểm soát những gì người ngoài không đáng tin có thể chạm tới, bằng cách chỉ phơi bày một nhóm nhỏ dịch vụ và không gì khác. VPN trao cho người ngoài đáng tin một lối đi riêng vào bên trong, bằng cách xác thực họ vào một mạng mà lẽ ra họ không tới được. Nhiều mạng chạy cả hai, và không cái nào thay thế được cái kia.
DMZ có an toàn không?
DMZ không làm cho một dịch vụ đã phơi ra trở nên an toàn. Nó giới hạn phạm vi mà vụ xâm nhập dịch vụ ấy chạm tới. Dịch vụ hướng ra công cộng vẫn hướng ra công cộng, vẫn phơi mình trước tất cả mọi người trên internet, và vẫn tự nó cần được vá lỗi, giám sát và tăng cường bảo mật. DMZ quyết định điều gì xảy ra sau khi nó đổ, chứ không quyết định nó có đổ hay không.
Tôi có cần DMZ khi chỉ có một máy chủ không?
Không, theo nghĩa cổ điển, và dù sao bạn cũng không dựng nổi một cái trên một máy chủ đơn lẻ. Cấu trúc ba giao diện cần các phân đoạn mạng tách biệt, mà một máy chủ với một IP công cộng thì chẳng có phân đoạn nào. Điều bạn làm được là kiểm soát mức phơi bày: cho một reverse proxy làm điểm vào công cộng duy nhất, mặc định từ chối những cổng vào còn lại, và để các dịch vụ nội bộ lắng nghe trên loopback hoặc một địa chỉ nội bộ. Cách đó giảm những gì internet chạm tới được, mà không cô lập dịch vụ công cộng khỏi phần còn lại của máy chủ. Khi thứ nằm sau proxy đáng giá hơn chi phí một cỗ máy thứ hai, hãy dùng hai máy và một mạng nội bộ nối giữa chúng.
Vì sao gọi là vùng phi quân sự?
Thuật ngữ này mượn từ nghĩa quân sự, chỉ một vùng đệm giữa hai lực lượng đối địch, nơi không bên nào nắm quyền kiểm soát trọn vẹn. Cách dùng trong mạng vẫn giữ nguyên phép ẩn dụ ấy: DMZ không thuộc trọn về phía ngoài không đáng tin, cũng chẳng thuộc trọn về phía trong đáng tin.

Thảo luận
Bình luận
Đăng nhập để tham gia thảo luận.