Kiểm tra cổng dịch vụ web: thử phản hồi từ trình duyệt và sinh lệnh quét thật cho máy bạn
Công cụ nhập máy chủ và một danh sách cổng HTTP hoặc HTTPS thường gặp, gửi yêu cầu kèm thời gian chờ tới từng cổng, rồi phân loại thành có phản hồi, không phản hồi và không kết luận được. Vì trình duyệt không mở được kết nối TCP thô, phần dùng được nhất là các lệnh nmap, nc, telnet và Test-NetConnection sinh sẵn để bạn chạy từ máy mình.
Tính năng nổi bật
- Thử từng cổng bằng yêu cầu HTTP hoặc HTTPS kèm thời gian chờ tự chọn từ ba đến mười hai giây
- Phân loại rõ ba nhóm kết quả: có phản hồi, không phản hồi và không kết luận được
- Nhận biết và báo riêng những cổng bị chính trình duyệt chặn, không giả vờ đã thử
- Danh sách cổng web thường gặp bấm chọn nhanh, kèm ô nhập thêm cổng tuỳ ý
- Sinh sẵn tám lệnh kiểm tra thật: nmap, nc, telnet, Test-NetConnection, curl và ss
- Bảng tra ý nghĩa hơn hai mươi cổng phổ biến, ghi rõ cổng nào thử được từ trình duyệt
- Bắt buộc xác nhận quyền kiểm tra trước khi mở nút chạy
- Toàn bộ yêu cầu đi thẳng từ trình duyệt của bạn, không qua máy chủ trung gian nào
Trình duyệt làm được gì với cổng, và vì sao phần lệnh mới là phần chính
Một công cụ quét cổng thật sự mở kết nối TCP tới từng cổng rồi đọc phản hồi ở mức gói tin. Mã chạy trong trình duyệt không có quyền đó: nó chỉ gọi được các giao thức mà trình duyệt hỗ trợ, thực tế là HTTP và HTTPS. Vì vậy trang này không quét cổng, nó gửi một yêu cầu tới địa chỉ dạng giao thức, tên máy chủ, dấu hai chấm và số cổng, rồi xem yêu cầu đó thành công hay thất bại trong thời gian chờ. Cách làm này cho tín hiệu hữu ích với những cổng đang chạy dịch vụ web, chẳng hạn bảng quản trị ở cổng 8080 hay ứng dụng thử nghiệm ở cổng 3000, nhưng hoàn toàn mù với SSH, MySQL hay Redis. Ngoài ra, chính sách bảo mật của trình duyệt không cho trang web đọc mã trạng thái trả về từ tên miền khác, nên một cổng đóng, một chứng chỉ TLS sai tên miền và một tường lửa im lặng có thể cho ra cùng một dạng lỗi. Chúng tôi nói thẳng điều đó thay vì tô vẽ. Phần giá trị nhất của trang là khối lệnh sinh sẵn: chúng chạy từ máy bạn, mở kết nối thật, và trả lời chính xác câu hỏi cổng nào đang mở.
Lợi ích khi sử dụng
- Phát hiện nhanh bảng quản trị hay ứng dụng thử nghiệm vô tình hở ra Internet
- Có ngay lệnh đúng cú pháp cho cả Linux, macOS và Windows mà không phải tra lại tài liệu
- Hiểu được vì sao một cổng không kết luận được thay vì nhận một kết quả sai lệch
- Bảng tra cổng giúp đoán dịch vụ nào đang chạy trước khi đăng nhập vào máy chủ
- Không cần cài phần mềm, mở được ngay trên điện thoại khi đang trực sự cố
- Nhắc rõ ranh giới pháp lý nên tránh được việc quét nhầm hệ thống của người khác
Cách kiểm tra cổng dịch vụ
- 1Nhập tên miền hoặc địa chỉ IP của máy chủ bạn sở hữu hoặc được phép kiểm tra.
- 2Chọn các cổng cần thử trong danh sách dựng sẵn, thêm cổng riêng vào ô bên dưới nếu cần.
- 3Chọn giao thức thử và thời gian chờ cho mỗi cổng, để mặc định là hợp lý trong đa số trường hợp.
- 4Bật xác nhận quyền kiểm tra để mở nút chạy, rồi bấm nút thử.
- 5Đọc kết quả theo ba nhóm màu và xem dòng giải thích bên dưới mỗi cổng.
- 6Cuộn xuống khối lệnh, chép lệnh nmap hoặc Test-NetConnection và chạy từ máy bạn để có kết luận chắc chắn.
Ba nhóm kết quả nghĩa là gì
Nhóm có phản hồi nghĩa là yêu cầu rời khỏi trình duyệt và nhận lại được một phản hồi trong thời gian chờ. Kết luận an toàn rút ra ở đây là có một dịch vụ nói được giao thức HTTP hoặc HTTPS đang lắng nghe trên cổng đó. Bạn không biết mã trạng thái là 200, 401 hay 500, vì trình duyệt không cho trang web đọc nội dung phản hồi từ tên miền khác. Nhóm không phản hồi nghĩa là hết thời gian chờ mà không có gì trả lời. Trường hợp này thường ứng với cổng bị tường lửa nuốt gói tin, hoặc máy chủ quá tải. Nhóm không kết luận được là nhóm cần đọc kỹ nhất: yêu cầu thất bại nhưng trình duyệt không cho biết vì sao. Nếu thất bại gần như tức thì, dưới khoảng tám trăm mili giây, khả năng cao là hệ điều hành phía kia trả về gói từ chối, tức cổng đóng. Nếu thất bại sau vài giây, nguyên nhân có thể là chứng chỉ TLS không hợp lệ cho tên miền bạn nhập, tên miền không phân giải được, hoặc mạng của bạn chặn. Con số mili giây hiển thị bên phải mỗi dòng chính là manh mối để phân biệt, và khi nghi ngờ thì hãy chạy lệnh nmap để có câu trả lời chắc chắn.
Vì sao nhiều cổng không thể thử từ trình duyệt
Có ba lớp rào chắn chồng lên nhau. Lớp thứ nhất là danh sách cổng mà trình duyệt tự chặn vì lý do an toàn, phát sinh từ các cuộc tấn công lợi dụng trình duyệt để gửi lệnh giả sang giao thức khác. Danh sách này gồm phần lớn các cổng dưới 1024 cùng một số cổng cao như 6000 hay 10080, và nó bao trùm SSH cổng 22, FTP cổng 21, SMTP cổng 25 lẫn 587. Khi bạn thử những cổng này, yêu cầu không bao giờ rời khỏi trình duyệt và công cụ sẽ báo riêng là trình duyệt chặn. Lớp thứ hai là quy tắc nội dung hỗn hợp: trang bạn đang đọc chạy trên HTTPS, nên trình duyệt cấm nó gửi yêu cầu HTTP thuần. Điều này khiến các cổng web không mã hoá như 80, 8080 hay 3000 không thể thử trực tiếp, và công cụ đánh dấu chúng là không thử được thay vì báo sai thành đóng. Lớp thứ ba là bản chất giao thức: cơ sở dữ liệu, hàng đợi tin nhắn hay giao thức điều khiển từ xa đều dùng định dạng nhị phân riêng mà trình duyệt không nói được. Ba lớp này giải thích vì sao khối lệnh ở cuối trang không phải phần phụ mà là phần chính.
Đọc kết quả nmap và các lệnh thay thế
Lệnh nmap trả về ba trạng thái đáng nhớ. Trạng thái open nghĩa là có tiến trình đang lắng nghe và chấp nhận kết nối. Trạng thái closed nghĩa là máy chủ có trả lời nhưng không có gì lắng nghe, tức máy sống mà dịch vụ không chạy. Trạng thái filtered nghĩa là không nhận được gì cả, thường do tường lửa lặng lẽ vứt gói tin; đây là trạng thái mơ hồ nhất và cũng là cấu hình được khuyến nghị cho các cổng bạn muốn giấu. Tuỳ chọn không kiểm tra máy chủ sống trước khi quét rất cần thiết vì nhiều máy chủ chặn gói kiểm tra kết nối, nếu thiếu nó nmap sẽ kết luận máy chủ chết và bỏ qua. Tuỳ chọn dò phiên bản dịch vụ giúp biết đang chạy máy chủ web nào, phiên bản bao nhiêu, hữu ích khi rà soát bản vá nhưng làm lệnh chạy chậm hơn nhiều. Trên máy không cài được nmap, lệnh netcat với cờ quét và thời gian chờ cho kết quả tương đương với từng cổng. Trên Windows, lệnh PowerShell kiểm tra kết nối mạng có sẵn trong hệ điều hành và trường kết quả cần đọc là dòng cho biết phép thử TCP thành công hay không. Riêng lệnh xem tiến trình đang lắng nghe, chạy ngay trên máy chủ, cho bức tranh chính xác nhất vì nó không bị tường lửa che.
Những cổng nên đóng và cách rà soát định kỳ
Nguyên tắc chung là chỉ mở đúng cổng cần thiết cho người dùng cuối, thường là 80 để chuyển hướng và 443 cho lưu lượng thật. Mọi thứ còn lại nên nằm sau tường lửa hoặc chỉ nghe trên địa chỉ nội bộ. Các trường hợp hở phổ biến trên máy chủ thực tế gồm bảng quản trị container ở cổng 9000, giao diện quản trị hàng đợi ở cổng 15672, máy chủ tìm kiếm ở cổng 9200, và ứng dụng đang phát triển quên tắt ở cổng 3000 hay 8000. Nhiều dịch vụ trong số này mặc định không có mật khẩu hoặc dùng mật khẩu mặc định, nên chỉ cần lộ cổng là lộ toàn bộ dữ liệu. Cách xử lý gọn nhất là cấu hình dịch vụ chỉ lắng nghe trên địa chỉ nội bộ rồi truy cập qua đường hầm SSH khi cần, thay vì mở cổng ra Internet và dựa vào mật khẩu. Với cơ sở dữ liệu thì càng phải triệt để: không có lý do chính đáng nào để cổng MySQL hay MongoDB nhìn thấy được từ Internet công cộng. Nên đặt lịch rà soát mỗi quý, chạy lệnh xem tiến trình lắng nghe ngay trên máy chủ, đối chiếu với danh sách dịch vụ bạn thực sự cần, và đóng phần dư.
Ranh giới pháp lý khi kiểm tra cổng
Kiểm tra cổng trên hạ tầng của chính mình là công việc quản trị bình thường. Nhưng dò quét cổng hệ thống của người khác khi chưa được phép là chuyện khác hẳn: đó là hành vi truy cập trái phép vào hệ thống thông tin, bị pháp luật Việt Nam điều chỉnh và bị hầu hết nhà cung cấp dịch vụ coi là dấu hiệu tấn công. Hệ quả thực tế thường đến trước hệ quả pháp lý, vì hệ thống phát hiện xâm nhập của bên bị quét ghi lại địa chỉ nguồn, và nhà cung cấp của bạn có thể khoá dịch vụ theo điều khoản sử dụng. Khi làm kiểm thử cho khách hàng, hãy có văn bản uỷ quyền ghi rõ phạm vi địa chỉ, khoảng thời gian và người chịu trách nhiệm hai bên trước khi chạy bất kỳ lệnh nào; đây là thông lệ chuẩn trong ngành. Với hạ tầng thuê tại nhà cung cấp đám mây, cần đọc thêm chính sách kiểm thử của họ vì một số nơi yêu cầu báo trước. Đó là lý do trang này bắt bạn bật công tắc xác nhận quyền kiểm tra trước khi mở nút chạy: không phải thủ tục hình thức mà là để bạn dừng lại một nhịp và tự xác định mình có quyền hay không.
Câu hỏi thường gặp (FAQ)
Vì sao công cụ nói đây không phải công cụ quét cổng?
Vì mã chạy trong trình duyệt không mở được kết nối TCP thô, chỉ gọi được HTTP và HTTPS. Trang này gửi yêu cầu web tới từng cổng rồi xem thành công hay thất bại, đó là chỉ báo chứ không phải phép quét. Muốn quét thật, hãy dùng lệnh nmap sinh sẵn ở cuối trang và chạy từ máy của bạn.
Vì sao cổng 22 hay 25 luôn báo trình duyệt chặn?
Trình duyệt có một danh sách cổng tự chặn để tránh bị lợi dụng gửi lệnh giả sang các giao thức khác, và danh sách đó bao gồm phần lớn cổng dưới 1024, trong đó có SSH cổng 22 và SMTP cổng 25. Yêu cầu không bao giờ rời khỏi trình duyệt, nên chúng tôi báo riêng thay vì kết luận cổng đóng.
Vì sao cổng 80 hay 3000 lại hiện không thử được?
Trang này chạy trên HTTPS, và trình duyệt cấm trang HTTPS gửi yêu cầu HTTP thuần theo quy tắc nội dung hỗn hợp. Vì vậy các cổng web không mã hoá không thể thử trực tiếp. Với những cổng đó, hãy dùng lệnh curl hoặc nmap trong khối lệnh phía dưới.
Kết quả có phản hồi có nghĩa là cổng chắc chắn mở không?
Nghĩa là có một dịch vụ nói được HTTP hoặc HTTPS đang lắng nghe và đã trả lời trong thời gian chờ. Đó là bằng chứng khá mạnh, nhưng bạn không biết mã trạng thái là gì vì trình duyệt không cho trang web đọc phản hồi từ tên miền khác. Cổng có thể đang trả về lỗi xác thực hoặc trang bảo trì.
Không kết luận được khác không phản hồi ở chỗ nào?
Không phản hồi nghĩa là hết thời gian chờ mà im lặng hoàn toàn, thường ứng với tường lửa nuốt gói tin. Không kết luận được nghĩa là yêu cầu thất bại nhưng trình duyệt không nói lý do; thất bại rất nhanh thường là cổng đóng, thất bại sau vài giây có thể do chứng chỉ TLS sai tên miền hoặc mạng chặn.
Công cụ này khác Port Reference thế nào?
Port Reference là bảng tra thuần, cho biết số cổng nào ứng với dịch vụ nào, không gửi đi bất kỳ yêu cầu nào. Trang này ngoài bảng tra còn thử gửi yêu cầu thật tới máy chủ bạn nhập rồi phân loại phản hồi, và sinh sẵn lệnh quét để bạn chạy từ máy mình.
Công cụ này khác Website Status Checker thế nào?
Website Status Checker trả lời một câu hỏi duy nhất là trang chủ trên cổng mặc định có sống không. Trang này thử nhiều cổng cùng lúc, phù hợp khi bạn cần biết bảng quản trị ở cổng 8080, ứng dụng ở cổng 3000 hay giao diện quản trị ở cổng 9000 có đang hở ra Internet hay không.
Tôi quét cổng máy chủ của người khác được không?
Không nên và trong nhiều trường hợp là không hợp lệ. Dò quét hệ thống chưa được phép bị coi là hành vi truy cập trái phép vào hệ thống thông tin, đồng thời bị hầu hết nhà cung cấp dịch vụ ghi nhận là dấu hiệu tấn công và có thể dẫn tới khoá dịch vụ. Chỉ kiểm tra máy chủ bạn sở hữu hoặc đã có uỷ quyền bằng văn bản.
Nên đặt thời gian chờ bao nhiêu giây?
Năm giây là mức cân bằng tốt. Đặt ngắn hơn thì máy chủ ở xa hoặc đang tải nặng dễ bị kết luận nhầm là không phản hồi. Đặt dài hơn thì mỗi cổng đóng khiến bạn phải chờ lâu, và một danh sách mười cổng có thể mất hơn một phút vì công cụ thử tuần tự từng cổng.
Trong kết quả nmap thì filtered nghĩa là gì?
Filtered nghĩa là nmap không nhận được phản hồi nào, thường do tường lửa lặng lẽ vứt gói tin thay vì trả lời từ chối. Nó khác closed, tức máy chủ có trả lời nhưng không có tiến trình nào lắng nghe. Với cổng bạn muốn giấu khỏi Internet, filtered chính là trạng thái nên hướng tới.
Những cổng nào tuyệt đối không nên mở ra Internet?
Cổng cơ sở dữ liệu như 3306 của MySQL, 5432 của PostgreSQL, 6379 của Redis và 27017 của MongoDB, cùng các bảng quản trị nội bộ như 9000, 9200 hay 15672. Nhiều dịch vụ trong số này mặc định không đặt mật khẩu. Cách đúng là cho chúng chỉ lắng nghe trên địa chỉ nội bộ rồi truy cập qua đường hầm SSH.
Vì sao công cụ thử tuần tự từng cổng mà không chạy song song?
Gửi hàng loạt yêu cầu cùng lúc tới nhiều cổng của một máy chủ trông giống hệt một đợt quét và dễ kích hoạt cơ chế chặn tự động phía máy chủ. Thử tuần tự chậm hơn nhưng nhẹ nhàng với hệ thống đích, và cũng cho con số mili giây sạch hơn để bạn phân biệt cổng đóng với chứng chỉ lỗi.
Từ khóa liên quan
- kiểm tra cổng mở
- open port checker
- kiểm tra port máy chủ
- cổng 8080 là gì
- cổng 443 và cổng 80 khác nhau
- lệnh nmap kiểm tra cổng
- dùng netcat kiểm tra port
- telnet kiểm tra cổng
- test-netconnection powershell
- kiểm tra port trên windows
- xem tiến trình đang lắng nghe cổng
- cổng nào không nên mở ra internet
- redis mongodb lộ cổng
- mở cổng trên tường lửa
- trình duyệt chặn cổng err unsafe port
- lỗi nội dung hỗn hợp mixed content
- port filtered và closed khác nhau
- rà soát cổng máy chủ định kỳ
- quét cổng có hợp pháp không
- công cụ kiểm tra cổng miễn phí
