Hành trình một lần mở trang: từ HTTP chữ rõ đến HTTPS
Câu hỏi xuyên suốt: một thành viên mở trang đóng lệ phí của câu lạc bộ. Trên đường từ trình duyệt đến máy chủ, ai nhìn thấy được gì, ai có thể sửa gì, và ta chặn bằng cách nào?
Thời lượng: khoảng 90 phút (giảng và thực hành xen kẽ, 9 bài tập, bài cuối làm ở nhà)
Mạch bài: một câu hỏi, bốn phần
5 phútBài 5 cho biết mỗi kết nối có IP và port ở hai đầu. Bài này đi tiếp với một tình huống cụ thể:
Để trả lời, bài đi theo thứ tự "nhìn vấn đề trước, tìm cách chặn sau":
| Phần | Việc làm | Trả lời câu hỏi nào | Thời gian |
|---|---|---|---|
| A. Nội dung | Đọc HTTP, tự bắt gói trong máy | Dữ liệu gửi đi trông thế nào? (kết quả: chữ rõ, ai thấy cũng đọc được) | 20 phút |
| B. Đường đi | DNS, router và NAT, firewall, TCP | Dữ liệu đi qua những điểm nào, mỗi điểm thấy gì và có thể làm gì? | 30 phút |
| C. Bảo vệ | TLS và HTTPS, chứng chỉ | Làm sao biến chữ rõ thành chữ mã và chắc rằng đang nói đúng máy chủ? | 20 phút |
| D. Chẩn đoán | Tìm lớp bị lỗi, rà soát website | Khi hỏng, lỗi ở lớp nào? Website của mình đã đủ các lớp chưa? | 15 phút |
Cần chuẩn bị
- Python 3 (chạy web server thử), trình duyệt, terminal.
- Wireshark đã cài và cấp quyền bắt gói. Nếu chưa có, vẫn làm được phần lớn bài tập bằng cách đọc dữ liệu mẫu.
curl(có sẵn trên macOS, Linux; Windows dùngcurl.exe).
example.com.A1. HTTP: nội dung mà trình duyệt gửi đi
8 phútlà ngôn ngữ giữa trình duyệt và website. Trình duyệt gửi một , server trả một . Khi Lan bấm "Đóng phí", trình duyệt gửi khoảng như sau (đã trình bày lại cho dễ đọc):
POST /dong-phi HTTP/1.1
Host: clb.example
Cookie: phien=a1b2c3d4
Content-Type: application/x-www-form-urlencoded
Content-Length: 29
ten=Lan&so_tien=200000&ghi=ok- Dòng đầu: (
POST= gửi dữ liệu lên;GET= lấy tài nguyên; cònPUT,DELETE), đường dẫn/dong-phitrên server, và phiên bản giao thức. - Các dòng
Tên: giá trịlà .Hostlà tên đích.Cookiemang mã phiên đăng nhập (bài 3).Content-Lengthlà số byte của body. - Dòng trống kết thúc header. Phần sau đó là body: dữ liệu Lan nhập.
Server trả lời bằng một response:
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 14
<h1>Hello</h1>Dòng đầu có . Bảng mã thường gặp:
| Mã | Nghĩa | Không được suy ra |
|---|---|---|
| 200 | Thành công | Dữ liệu chắc chắn đúng |
| 301 / 302 | Chuyển hướng sang URL khác | URL mới là đáng tin |
| 403 | Từ chối vì không đủ quyền | Mật khẩu sai |
| 404 | Không tìm thấy tài nguyên | Mạng hỏng |
| 500 | Lỗi bên trong server | Bị tấn công |
Một response chứa số tài khoản sai vẫn là 200: HTTP chỉ nói giao thức chạy ổn, tính đúng của dữ liệu là chuyện toàn vẹn (bài 1).
BÀI TẬP 1 · 5 PHÚT
Đọc một request
Dùng request POST ở trên và trả lời:
- Method và đường dẫn là gì?
- Phần nào là dữ liệu Lan nhập, phần nào là bằng chứng "đã đăng nhập"?
Content-Length: 29đếm cái gì? Hãy đếm thử chuỗiten=Lan&so_tien=200000&ghi=ok.- Nếu request này đi qua HTTP, người ở router nhà Lan đọc được những gì và làm gì được với cookie?
Xem đáp án
- Method
POST, đường dẫn/dong-phi. - Dữ liệu nhập là body (
ten,so_tien,ghi). Bằng chứng đăng nhập là headerCookie: phien=a1b2c3d4. - Số byte của body. Chuỗi có đúng 29 ký tự ASCII (7 + 1 + 14 + 1 + 6) nên 29 byte.
- Đọc được toàn bộ: tên, số tiền, cookie. Với cookie còn hiệu lực, người đó gửi request giả danh Lan mà không cần mật khẩu hay MFA. Đây là đánh cắp phiên (session hijacking) đã học ở bài 3.
A2. Lab 1: tự bắt gói HTTP trong máy mình
12 phútĐể thấy chữ rõ bằng mắt, ta chạy cả client và server trong cùng một máy. Địa chỉ 127.0.0.1 luôn trỏ về chính máy, nên gói không ra router. Dùng của Wireshark để xem các gói.
Bước 1. Dựng server
- Tạo thư mục trống
network-lab, đừng chọn thư mục chứa dữ liệu cá nhân. - Tạo file
index.htmltrong đó:
<h1>Cau lac bo - Lich sinh hoat</h1>- Mở terminal đúng trong thư mục đó và chạy (giữ cửa sổ này chạy):
python3 -m http.server 8000 --bind 127.0.0.1py -m http.server 8000 --bind 127.0.0.18000 là port lắng nghe. --bind 127.0.0.1 chỉ cho máy này truy cập, thói quen tốt để không vô tình mở dịch vụ thử nghiệm ra mạng. Mở http://127.0.0.1:8000/ trong trình duyệt: server in dòng log như "GET / HTTP/1.1" 200 -.
Lỗi thường gặp: "command not found" là chưa cài Python hoặc sai tên lệnh; "Address already in use" là port đang dùng, đổi port và sửa URL cho khớp; server phục vụ file ở thư mục hiện hành nên chạy sai thư mục sẽ ra trang khác.
Bước 2. Bắt gói
| Hệ điều hành | Giao diện loopback trong Wireshark |
|---|---|
| macOS | lo0 |
| Linux | lo |
| Windows | Npcap Loopback Adapter (tên có thể khác) |
- Chọn giao diện loopback và bấm bắt đầu capture trước khi tạo kết nối.
- Trong terminal khác, gửi một request có kèm cookie giả:
curl -H "Cookie: phien=demo123" http://127.0.0.1:8000/- Dừng capture. Nhập
tcp.port == 8000. Filter chỉ ẩn bớt dòng, không xóa gói. - Chuột phải một dòng HTTP, chọn Follow → TCP Stream.
Nếu không thấy gói: kiểm tra đã chọn loopback, server còn chạy, capture bắt đầu trước thao tác. Bảng dưới là dữ liệu minh họa đã giản lược (không phải capture từ máy bạn); bấm một dòng để xem giải thích.
| No. | Protocol | Source port | Dest. port | Info · Chọn để xem |
|---|
BÀI TẬP 2 · 10 PHÚT
Tìm chữ rõ trong capture của chính bạn
Trong cửa sổ Follow TCP Stream, ghi lại:
- Port nguồn (port tạm của client) và port đích.
- Dòng request đầu tiên và dòng đầu của response (mã trạng thái).
- Dòng
Cookiebạn đã gửi: có đọc được không? - Nội dung body của trang.
Sau đó dừng capture và server (Ctrl+C), xóa file capture nếu không cần: file PCAP có thể chứa dữ liệu của luồng khác.
Xem đáp án
- Port đích là 8000; port nguồn là số ngẫu nhiên cao (thường trên 49152), mỗi lần chạy khác nhau.
GET / HTTP/1.1vàHTTP/1.0 200 OK(server Python mặc định trả HTTP/1.0; trình duyệt hoặc curl gửi 1.1, hai bên có thể khác phiên bản).- Đọc được nguyên văn
Cookie: phien=demo123. Đây chính là điều bất kỳ ai trên đường đi cũng làm được với HTTP. - Đọc được
<h1>Cau lac bo - Lich sinh hoat</h1>.
Kết luận phần A: HTTP không mã hóa lộ mọi thứ. Phần B xem ai nằm trên đường đi, phần C cách chặn.
B1. Đường đi (1): DNS tìm địa chỉ máy chủ
8 phútPhần A dùng địa chỉ số trực tiếp. Trên Internet, Lan gõ tên, nên trước tiên máy phải đổi tên thành IP. Việc này do làm: nhận câu hỏi, dùng kết quả đã lưu () hoặc hỏi tiếp các máy chủ DNS.
| Thông tin | Ví dụ | Ý nghĩa |
|---|---|---|
| Tên hỏi | clb.example | Tên đang cần tra |
| Loại bản ghi | A (IPv4), AAAA (IPv6) | Loại thông tin cần |
| Kết quả | 203.0.113.10 | Địa chỉ trả về (địa chỉ tài liệu, minh họa) |
| TTL | 300 giây | Thời gian được phép lưu cache |
Rủi ro bảo mật của DNS
- DNS thông thường không mã hóa và không tự xác thực: ai ở giữa đường nhìn thấy tên website bạn truy cập, và nếu giả được câu trả lời (DNS spoofing) thì đưa được người dùng tới máy chủ giả.
- Kẻ chiếm được tài khoản nhà đăng ký tên miền (bài 2) sửa được bản ghi A và chuyển cả website sang máy chủ của họ. Cần MFA và quyền tối thiểu cho tài khoản này.
- Tra được IP chưa chứng minh trang tải được, hay đúng là trang mong muốn.
BÀI TẬP 3 · 5 PHÚT
Quan sát DNS và nghĩ như kẻ tấn công
Chạy hai lần liên tiếp:
nslookup example.com
dig example.com- Ghi IP và TTL (
dighiện TTL ở cột thứ hai). Lần chạy thứ hai TTL có giảm không? Vì sao? - Nếu kẻ tấn công sửa được bản ghi A của
clb.example, Lan gõ đúng tên vẫn thấy gì? Tài khoản nào cần được bảo vệ?
Xem đáp án
- TTL thường giảm dần vì kết quả đang nằm trong cache của resolver và đếm ngược tới khi hết hạn. Hết TTL thì tra lại.
- Lan vào một máy chủ do kẻ tấn công điều khiển, có thể là bản sao giống hệt trang thật để lấy tiền hoặc mật khẩu. Cần bảo vệ tài khoản ở nhà đăng ký tên miền và DNS (MFA, quyền tối thiểu, theo dõi thay đổi bản ghi). Ngoài ra HTTPS (phần C) giúp trình duyệt nhận ra máy chủ không đúng chủ tên miền.
B2. Đường đi (2): router và NAT
10 phútBiết IP máy chủ rồi, gói tin rời mạng nhà qua . Router có hai việc đáng chú ý về bảo mật.
Việc 1: dịch địa chỉ (NAT)
IP riêng như 192.168.1.10 không dùng trực tiếp trên Internet. Khi gói đi ra, router thực hiện : thay địa chỉ nguồn bằng IP công cộng của router. Nhiều thiết bị chung một IP công cộng nên router còn đổi cả port () và ghi vào bảng ánh xạ:
| Kết nối bên trong | Ánh xạ bên ngoài | Đích |
|---|---|---|
| 192.168.1.10:51514 | 198.51.100.25:62001 | 203.0.113.10:443 |
| 192.168.1.11:51514 | 198.51.100.25:62002 | 203.0.113.10:443 |
Hai máy cùng dùng port 51514 vẫn được tách nhờ hai port ngoài khác nhau. Khi server trả lời về 62001 hoặc 62002, router tra bảng và chuyển về đúng máy.
Việc 2: là điểm mọi gói đều đi qua
Router (và mọi thiết bị trên đường: Wi-Fi công cộng, nhà mạng, thiết bị trung gian) thấy được IP, port và với HTTP cả nội dung. Router bị chiếm thì kẻ tấn công đọc và sửa được lưu lượng chưa mã hóa (tấn công kẻ đứng giữa, ). Vì vậy: đổi mật khẩu quản trị mặc định của router, cập nhật firmware, và đừng tin Wi-Fi lạ cho dữ liệu nhạy cảm.
BÀI TẬP 4 · 10 PHÚT
Đọc bảng NAT và đối chiếu với máy bạn
Phần 1 (trên giấy). Dùng bảng NAT ở trên:
- Một gói từ
203.0.113.10:443đến198.51.100.25:62002. Router chuyển nó về đâu? - Một gói lạ từ
192.0.2.77:4444đến198.51.100.25:62999. Chuyện gì xảy ra và vì sao?
Phần 2 (trên máy bạn). Dùng lệnh ở bài 5 để ghi IP riêng và gateway của máy. Tùy chọn: chạy curl https://ifconfig.me để xem IP công cộng của bạn và so với IP riêng.
Xem đáp án
Phần 1.
- Về
192.168.1.11:51514, vì bảng ghi 62002 tương ứng với máy .11. - Bị bỏ: không có ánh xạ nào cho port 62999 nên router không biết chuyển cho máy nào. Đây là lý do mạng nhà ít bị "gõ cửa" từ ngoài, nhưng cần firewall để chủ động chặn.
Phần 2. IP riêng thường dạng 192.168.x.x hoặc 10.x.x.x; IP công cộng là địa chỉ khác hẳn và chung cho mọi thiết bị trong nhà (hoặc cả nhiều nhà nếu có CGNAT). Gateway thường là 192.168.x.1.
B3. Đường đi (3): firewall và TCP
12 phútTường lửa
cho phép hoặc chặn lưu lượng theo quy tắc (IP, port, giao thức, trạng thái kết nối). Nguyên tắc: chặn mặc định, chỉ mở thứ cần thiết (default deny). Mỗi port mở ra ngoài là một điểm có thể bị tấn công. Ví dụ quy tắc cho máy chủ của câu lạc bộ:
| Thứ tự | Hành động | Đến port | Từ |
|---|---|---|---|
| 1 | Cho phép | 443 (HTTPS) | Mọi nơi |
| 2 | Cho phép | 22 (quản trị từ xa SSH) | Chỉ 203.0.113.50 (máy của quản trị viên) |
| 3 | Chặn | Tất cả port còn lại | Mọi nơi |
Kết nối chỉ thành công khi nhiều lớp cùng đúng: có đường đi, firewall không chặn, có chương trình đang lắng nghe đúng IP và port, hai bên nói giao thức tương thích, và ứng dụng cho phép yêu cầu. Vì vậy "mở port", "chạy server" và "cấp quyền sửa dữ liệu" là ba việc khác nhau. Mở port 8000 không tạo ra web server; server chỉ lắng nghe 127.0.0.1 thì máy khác không vào được dù firewall đã mở.
TCP: bắt tay ba bước
cho luồng byte đúng thứ tự, truyền lại phần bị mất. Trước khi gửi dữ liệu, hai bên làm : SYN (client xin kết nối) → SYN/ACK (server đồng ý) → ACK (client xác nhận). Chỉ sau đó HTTP mới bắt đầu chạy bên trên.
- Bắt tay TCP không mã hóa. Kết nối HTTP vẫn dùng TCP, nội dung vẫn là chữ rõ.
- Server phải giữ trạng thái cho mỗi kết nối đang bắt tay dở. Kẻ tấn công gửi rất nhiều SYN mà không hoàn tất (SYN flood) làm cạn tài nguyên: một dạng . Phòng bằng giới hạn tốc độ và cơ chế chống SYN flood của hệ điều hành hoặc nhà cung cấp.
- TCP có thể chuyển đúng request mà ứng dụng vẫn trả 403 hay 404. TCP không biết gì về nghiệp vụ.
Ghi chú: gửi từng gói rời, không bảo đảm đủ và đúng thứ tự. chạy trên UDP nhưng có độ tin cậy và TLS tích hợp, là nền của HTTP/3, nên thấy UDP cổng 443 không tự là dấu hiệu tấn công.
BÀI TẬP 5 · 10 PHÚT
Quyết định của firewall và đọc dấu hiệu SYN flood
Phần 1. Dùng bộ quy tắc ở trên, quyết định cho phép hay chặn:
- Gói từ
198.51.100.9đến cổng 443. - Gói từ
198.51.100.9đến cổng 22. - Gói từ
203.0.113.50đến cổng 22. - Gói từ
203.0.113.50đến cổng 3306 (cơ sở dữ liệu).
Phần 2. Đọc đoạn capture phía server (rút gọn) và cho biết đâu là bắt tay bình thường, đâu đáng ngờ:
1 192.0.2.10:40001 -> server:443 SYN
2 server:443 -> 192.0.2.10:40001 SYN/ACK
3 192.0.2.10:40001 -> server:443 ACK
4 192.0.2.21:50110 -> server:443 SYN
5 192.0.2.22:50111 -> server:443 SYN
6 192.0.2.23:50112 -> server:443 SYN
7 192.0.2.24:50113 -> server:443 SYN
(... hàng nghìn dòng SYN từ nhiều IP, không có ACK ...)Xem đáp án
Phần 1.
- Cho phép (quy tắc 1).
- Chặn (quy tắc 2 chỉ cho 203.0.113.50, rơi xuống quy tắc 3).
- Cho phép (quy tắc 2).
- Chặn (không có quy tắc cho 3306, rơi xuống chặn mặc định). Cơ sở dữ liệu không nên mở ra ngoài.
Phần 2. Dòng 1 đến 3 là bắt tay bình thường đủ ba bước. Dòng 4 trở đi: rất nhiều SYN từ nhiều IP khác nhau, server trả SYN/ACK nhưng không nhận ACK, kết nối treo dở. Đó là dấu hiệu SYN flood (tấn công từ chối dịch vụ). Cách ứng phó: bật SYN cookies hoặc bảo vệ chống DoS của nhà cung cấp, giới hạn tốc độ, ghi lại thời điểm và log để báo cáo (bài 4).
C1. TLS và HTTPS: biến chữ rõ thành chữ mã
8 phútPhần A cho thấy vấn đề (chữ rõ), phần B cho thấy ai nằm trên đường đi. Giải pháp: , cơ chế mã hóa kênh truyền. là HTTP chạy bên trong kênh TLS, thường ở port 443. Sau khi TCP bắt tay xong, hai bên làm bắt tay TLS:
- Thống nhất phiên bản và thuật toán.
- Server gửi : gắn tên miền với khóa công khai, được ký bởi một tổ chức cấp chứng chỉ (CA) mà trình duyệt tin tưởng.
- Client kiểm tra: tên miền khớp, chưa hết hạn, chuỗi chứng chỉ dẫn tới CA tin cậy.
- Hai bên tạo khóa phiên chung và dùng khóa đó mã hóa mọi dữ liệu còn lại.
Kênh thiết lập xong cho ba bảo vệ, khớp với bài 1: bí mật (người ngoài không đọc được), toàn vẹn (sửa giữa đường bị phát hiện), xác thực máy chủ (đúng chủ của tên miền). Nhờ đó, request của Lan ở phần A1 đi qua router và nhà mạng dưới dạng dữ liệu mã hóa: người trung gian không đọc được cookie và không sửa được trang trả về mà không bị phát hiện.
HTTPS chưa giải quyết hết
| HTTPS bảo vệ | HTTPS không bảo vệ |
|---|---|
| Nội dung, header, cookie trên đường truyền | Nội dung website có trung thực hay không |
| Phát hiện bị sửa giữa đường | Phân quyền sai trong ứng dụng |
| Xác nhận đang nói với chủ của tên miền | Dữ liệu đã bị sửa sẵn trên server (bài 4) |
| Metadata: IP, thời điểm, lượng dữ liệu, thường cả tên miền |
clb-example.com hay thay l bằng 1) và xin chứng chỉ hợp lệ cho chính tên đó. Kênh vẫn mã hóa nhưng bạn đang nói chuyện với sai bên. Luôn đọc tên miền trong thanh địa chỉ.Cấu hình HTTPS đúng cho website của bạn
- Chuyển hướng (301) mọi truy cập HTTP sang HTTPS, và bật header
Strict-Transport-Security(HSTS) để trình duyệt tự dùng HTTPS từ lần sau. - Đặt cờ
Securecho cookie phiên (chỉ gửi qua HTTPS) vàHttpOnly(script trong trang không đọc được cookie). - Theo dõi hạn chứng chỉ: hết hạn thì trình duyệt cảnh báo và người dùng không vào được.
- Khi trình duyệt cảnh báo chứng chỉ, đừng bấm bỏ qua với trang có đăng nhập hay thanh toán.
BÀI TẬP 6 · 5 PHÚT
Phân tích ba cảnh báo chứng chỉ
Cho mỗi trường hợp, nêu: ý nghĩa, rủi ro, quản trị viên nên làm gì, người dùng nên làm gì.
- Chứng chỉ chỉ cấp cho
clb.example, người dùng vàowww.clb.example: "name mismatch". - Chứng chỉ hết hạn hôm qua.
- Chứng chỉ tự ký (self-signed), không có CA nào đứng sau.
Xem đáp án
- Tên trong chứng chỉ không khớp tên đang truy cập. Có thể chỉ là cấu hình thiếu, cũng có thể là máy chủ khác. Quản trị: cấp chứng chỉ bao gồm cả
www.clb.example(hoặc chuyển hướng về tên chuẩn). Người dùng: không nhập thông tin nhạy cảm, báo quản trị. - Hết hạn: kênh vẫn mã hóa được nhưng không còn bảo đảm danh tính; thường do quên gia hạn. Quản trị: gia hạn, bật gia hạn tự động và cảnh báo trước hạn. Người dùng: chờ, đừng bỏ qua cảnh báo với trang thanh toán.
- Tự ký: không ai xác nhận chủ tên miền nên kẻ giữa đường tự tạo chứng chỉ giống hệt. Chỉ chấp nhận được trong môi trường thử nghiệm nội bộ. Quản trị: dùng CA công cộng miễn phí như Let's Encrypt cho website thật. Người dùng: không tin.
C2. Lab 2: so sánh HTTP và HTTPS bằng capture
12 phútLab này chứng minh phần C: cùng một kiểu yêu cầu, HTTP lộ nội dung còn HTTPS thì không. Lần này server ở ngoài máy, nên chọn giao diện Wi-Fi hoặc Ethernet thật thay vì loopback. Đóng ứng dụng không cần thiết và không đăng nhập thứ nhạy cảm trong lúc bắt gói. Dùng example.com làm website mẫu công khai.
- Bắt đầu capture trên đúng giao diện.
- Tạo truy vấn DNS:
nslookup example.com- Tạo yêu cầu HTTPS:
curl --http1.1 -I https://example.com--http1.1 ép HTTP/1.1 cho dễ quan sát TCP và TLS; -I chỉ lấy header (phương thức HEAD). Trên Windows PowerShell dùng curl.exe.
- Dừng capture. Lọc lần lượt
dns,tcp,tls. Đối chiếu thời gian, IP và port với thao tác vừa làm.
Bạn sẽ thấy truy vấn DNS, bắt tay TCP, bắt tay TLS (trong gói Client Hello có tên miền ở phần Server Name), sau đó chỉ còn dữ liệu mã hóa ("Application Data"). Bạn không đọc được dòng GET hay header như ở Lab 1.
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 1256
...curl đọc được header vì nó là một đầu của kết nối và tự giải mã TLS. Người chỉ bắt gói từ bên ngoài không có khóa. Truy vấn DNS và kết nối HTTPS có thể ra IP khác nhau (cache, IPv4/IPv6, cân bằng tải), nên đừng ghép hai dòng chỉ vì chúng gần nhau.
BÀI TẬP 7 · 10 PHÚT
Điền bảng "ai thấy gì"
Từ hai lab, điền bảng cho một request HTTP (Lab 1) và một request HTTPS (Lab 2). Mỗi ô ghi "thấy" hoặc "không thấy" đối với người bắt gói ở giữa đường:
| Thông tin | HTTP | HTTPS |
|---|---|---|
| IP và port đích | ? | ? |
| Tên miền truy cập | ? | ? |
| Đường dẫn và method (GET /…) | ? | ? |
| Cookie | ? | ? |
| Nội dung trang | ? | ? |
| Truy vấn DNS (DNS thường) | ? | ? |
Câu hỏi thêm: nếu kẻ giữa đường cố sửa số tài khoản trong trang HTTPS, chuyện gì xảy ra?
Xem đáp án
| Thông tin | HTTP | HTTPS |
|---|---|---|
| IP và port đích | Thấy | Thấy |
| Tên miền truy cập | Thấy (Host header, DNS) | Thường thấy (DNS, Server Name trong TLS) |
| Đường dẫn và method | Thấy | Không thấy |
| Cookie | Thấy | Không thấy |
| Nội dung trang | Thấy | Không thấy |
| Truy vấn DNS (DNS thường) | Thấy | Thấy |
Sửa giữa đường: TLS kiểm tra toàn vẹn nên dữ liệu bị sửa làm bắt tay hoặc giải mã thất bại, kết nối bị ngắt thay vì hiển thị trang sai. Metadata (IP, tên miền, lượng dữ liệu) vẫn lộ, đó là lý do HTTPS giảm rủi ro chứ không xóa hết.
D. Chẩn đoán theo lớp và rà soát website
15 phútHành trình đi qua nhiều lớp, và mỗi lớp lỗi cho một dấu hiệu khác. Biết thứ tự này, thay vì sửa ngẫu nhiên, bạn đọc dấu hiệu để chọn đúng lớp kiểm tra:
| Dấu hiệu | Lớp nghi ngờ | Kiểm tra tiếp |
|---|---|---|
| Không tra được tên | DNS | Tên, resolver, loại bản ghi |
| Có IP nhưng không kết nối được | Mạng, firewall, dịch vụ | Đích, port, tuyến, firewall, server có lắng nghe không |
| TCP có, TLS lỗi | Chứng chỉ, cấu hình TLS | Tên khớp, hạn dùng, chuỗi tin cậy |
| TLS có, HTTP 403 | Quyền, cấu hình ứng dụng | Quy tắc truy cập, đường dẫn |
| HTTP 200 nhưng dữ liệu sai | Ứng dụng, dữ liệu, cache | Nghiệp vụ, bản ghi, lịch sử sửa (bài 4) |
Khi gắn thêm tên miền mới vào cùng máy chủ, phải đúng cả bốn lớp: DNS trỏ đúng máy; web server biết tên mới thuộc website nào; chứng chỉ TLS có tên mới; ứng dụng chỉnh URL chuẩn và cookie. "Đã trỏ A record đúng" chỉ là một quan sát ở lớp DNS, chưa phải kết luận mọi thứ xong.
BÀI TẬP 8 · 8 PHÚT
Chẩn đoán năm tình huống
Với mỗi tình huống, nêu lớp nghi ngờ nhất và việc kiểm tra đầu tiên:
nslookup clb.examplebáo "NXDOMAIN" (không tồn tại).- Tra DNS ra IP đúng,
curltreo rồi báo "connection timed out". - Kết nối được nhưng trình duyệt báo "certificate expired".
- Trang mở được nhưng thành viên thường thấy 403 khi vào trang danh sách.
- Số tài khoản hiển thị sai nhưng mọi thứ trả mã 200 và có ổ khóa.
Xem đáp án
- DNS: bản ghi chưa có hoặc tên miền hết hạn. Kiểm tra bản ghi tại nhà đăng ký và hạn tên miền.
- Mạng/firewall/dịch vụ: gói đi mà không có phản hồi nên thường là firewall chặn hoặc server không lắng nghe. Kiểm tra port có mở, server có chạy, bắt gói xem có SYN mà không thấy SYN/ACK.
- TLS: chứng chỉ hết hạn. Gia hạn và bật tự động gia hạn.
- Ứng dụng: 403 là phân quyền (đúng cho thành viên thường nếu danh sách chỉ dành cho người phụ trách). Kiểm tra quy tắc quyền, không phải router.
- Dữ liệu: HTTPS và 200 không bảo đảm toàn vẹn. Xem lịch sử chỉnh sửa, quyền sửa, log (bài 4), đối chiếu bản đã duyệt.
BÀI TẬP 9 · Về nhà, 20 PHÚT
Rà soát một website bằng danh sách kiểm tra
Chọn website của câu lạc bộ (hoặc website bạn có quyền kiểm tra) và điền bảng. Mỗi mục ghi Đạt, Chưa đạt hoặc Chưa biết, kèm bằng chứng (lệnh đã chạy, ảnh chụp):
| Mục | Cách kiểm tra |
|---|---|
| 1. Tài khoản tên miền có MFA, email khôi phục còn thuộc quyền | Đăng nhập nhà đăng ký, xem cài đặt bảo mật |
| 2. Tên miền và chứng chỉ còn hạn trên 30 ngày | Xem hạn ở nhà đăng ký; bấm vào ổ khóa xem chứng chỉ |
| 3. HTTP tự chuyển sang HTTPS | curl -I http://tên-miền, tìm mã 301 và dòng Location: https://… |
| 4. Có header HSTS | curl -I https://tên-miền, tìm Strict-Transport-Security |
5. Cookie phiên có Secure và HttpOnly | Công cụ nhà phát triển của trình duyệt, mục Application → Cookies |
| 6. Chỉ mở các port cần thiết | Hỏi nhà cung cấp hosting danh sách quy tắc firewall |
| 7. File nhạy cảm không nằm trong thư mục công khai | Thử truy cập đường dẫn tới file danh sách thành viên mà không đăng nhập |
Chỉ kiểm tra website của mình hoặc nơi được cho phép; các lệnh trên là yêu cầu thông thường, không dò quét.
Xem đáp án
Không có đáp án duy nhất. Một báo cáo tốt: mỗi mục có kết quả và bằng chứng; mục "Chưa đạt" kèm cách sửa và người chịu trách nhiệm; mục "Chưa biết" ghi rõ cần ai xác nhận. Xếp thứ tự xử lý theo rủi ro (bài 2): mất quyền tên miền và lộ dữ liệu thành viên nặng hơn thiếu HSTS.
Tóm tắt
- Mạch bài: nội dung (HTTP chữ rõ) → đường đi (DNS, NAT, firewall, TCP) → bảo vệ (TLS/HTTPS) → chẩn đoán.
- không mã hóa lộ cookie, mật khẩu và nội dung cho mọi thiết bị trên đường đi.
- không mã hóa; tài khoản tên miền cần MFA vì sửa bản ghi là chuyển được cả website.
- không phải . Firewall chặn mặc định, chỉ mở port cần thiết. SYN flood là một dạng .
- cho bí mật, toàn vẹn, xác thực máy chủ, nhưng không bảo đảm website trung thực hay ứng dụng phân quyền đúng.
- Chẩn đoán theo lớp: DNS, TCP/firewall, TLS, HTTP, ứng dụng.
Tự kiểm tra · 5 câu có giải thích +
Ghi chú cá nhân +
Tự lưu trên trình duyệt. Không nhập thông tin bí mật.