# Webship Máy chủ Web: Cài đặt bảo mật theo mặc định
Một máy chủ web an toàn không nên phụ thuộc vào việc người vận hành phải nhớ thêm một cài đặt vào lúc 2 giờ sáng. Nó nên bắt đầu từ một cơ sở bảo vệ, từ chối cấu hình không an toàn và yêu cầu các lựa chọn có chủ đích trước khi cho phép truy cập các khả năng nhạy cảm.
Đó là mô hình đứng sau Webship. Cấu hình mặc định của nó bật các biện pháp bảo vệ chính đối với yêu cầu và phản hồi, giới hạn các nguồn lực mà kẻ tấn công có thể tiêu thụ, và để các bề mặt điều khiển tùy chọn bị vô hiệu hóa. Bạn có thể điều chỉnh các cài đặt mặc định đó cho một ứng dụng thực tế, nhưng bạn không cần phải khám phá mọi biện pháp bảo vệ trước khi yêu cầu đầu tiên đến.
Bảo mật theo mặc định không có nghĩa là bảo mật mà không có bối cảnh. Chứng chỉ, quyền ủy quyền ứng dụng, chính sách mạng, bí mật và phản ứng sự cố vẫn thuộc về người vận hành. Nhiệm vụ của Webship là làm cho điểm khởi đầu an toàn trở nên rõ ràng—và làm cho việc làm yếu không cố ý trở nên khó hơn.
Các biện pháp bảo vệ được bật sẵn
Webship kích hoạt sáu lớp trong cấu hình cơ bản của nó:
| Lớp | Hành vi mặc định | Những gì nó giảm | | --- | --- | --- | | Bảo vệ tệp dấu chấm | Từ chối các đoạn đường dẫn tĩnh bắt đầu bằng dấu chấm | Tiết lộ ngẫu nhiên các tệp môi trường, siêu dữ liệu kho lưu trữ và cấu hình cục bộ | | Tường lửa ứng dụng web | Chặn các mẫu tấn công đã biết | SQL injection, cross-site scripting, traversal, kiểm tra đường dẫn nhạy cảm, command injection, header smuggling, và các mã hóa yêu cầu không được hỗ trợ | | Kiểm soát DDoS | Chạy ở chế độ bình thường với trạng thái khách hàng có giới hạn | Lượng yêu cầu tràn, theo dõi không giới hạn và cạn kiệt tài nguyên có thể tránh được | | Thử thách bot | Sử dụng cookie thử thách được ký | Lạm dụng tự động chi phí thấp và quét lặp lại | | Tiêu đề bảo mật phản hồi | Thêm chính sách trình duyệt hạn chế | Nhầm lẫn MIME, đóng khung, rò rỉ referrer, khả năng trình duyệt nguy hiểm và tải nội dung rộng rãi | | API Shield | Sử dụng chế độ chặn và từ chối các đường dẫn không xác định khi hợp đồng API đã được định nghĩa | Các điểm cuối ẩn, phương thức không mong muốn, loại nội dung bất ngờ và thiếu yêu cầu ủy quyền |
WAF mặc định cũng đặt các giới hạn cứng lên những gì nó kiểm tra: 32 KiB của tiêu đề yêu cầu, một đường dẫn 2.048 byte, và một thân yêu cầu 1 MiB. Đây là các giới hạn bảo mật, không phải các công tắc hiệu suất tùy ý. Nếu một ứng dụng thực sự cần các yêu cầu lớn hơn, hãy tăng giới hạn thích hợp cho ứng dụng đó và kiểm tra kết quả thay vì vô hiệu hóa việc kiểm tra trên toàn cầu.
Bảo vệ DDoS bắt đầu ở chế độ bình thường với 600 yêu cầu mỗi phút kèm theo giới hạn tăng đột biến 100 cho mỗi khóa khách hàng. Bảng trạng thái khách hàng của nó bị giới hạn ở 65.536 mục. Những giá trị này là mức cơ bản, không phải là mô hình lưu lượng chung: một API công khai, một dịch vụ tải xuống và một bảng điều khiển quản trị nội bộ không nên chia sẻ cùng giới hạn ứng dụng cụ thể.
Các biện pháp bảo vệ trình duyệt là một phần của cơ sở
Chính sách tiêu đề phản hồi của Webship được bật ngay cả khi một ứng dụng quên thêm tiêu đề của riêng nó. Mặc định bao gồm:
- X-Content-Type-Options: nosniff;
- chính sách từ chối khung;
- Chính sách-Referrer: không gửi referrer;
- Strict-Transport-Security trong một năm, bao gồm cả các tên miền phụ;
- Chính sách Bảo mật Nội dung giới hạn với nội dung cùng nguồn, với các hạn chế về khung và URI cơ sở;
- Chính sách quyền hạn vô hiệu hóa quyền truy cập định vị, microphone và camera.
Các mặc định này được thiết lập có chủ ý để hạn chế. Hãy xem xét HSTS trước khi áp dụng nó cho một tên miền có các tên miền phụ chưa sẵn sàng hoàn toàn HTTPS. Hãy xem xét Chính sách Bảo mật Nội dung trước khi một ứng dụng tải các script, style, font, hình ảnh hoặc kết nối từ các nguồn khác. Một mặc định an toàn nên thất bại rõ ràng trong quá trình triển khai, không được yếu đi một cách âm thầm trong môi trường sản xuất.
Các bề mặt tùy chọn vẫn đóng
Webship không hiển thị tất cả các tính năng chỉ vì nhị phân có chứa chúng. Reverse proxy, WebTransport, các điểm cuối quan sát, TLS tự động, nguồn gốc phản hồi và điểm cuối điều khiển MCP đều bị tắt theo mặc định.
Điểm cuối MCP có phạm vi loopback khi được kích hoạt và yêu cầu cấu hình bảo mật rõ ràng. Số liệu và thống kê yêu cầu công cụ đo lường phải được bật một cách có chủ ý. Quản lý chứng chỉ tự động yêu cầu người vận hành chọn thư mục ACME, các liên hệ, lưu trữ và chấp nhận điều khoản dịch vụ. Điều này ngăn các tính năng vận hành trở thành các bề mặt mạng bất ngờ.
Trình nghe cơ bản cũng liên kết với 127.0.0.1. Người vận hành phải chọn rõ ràng một địa chỉ công khai. Lựa chọn duy nhất đó tạo ra một điểm kiểm tra hữu ích cho các quy tắc tường lửa, quyền dịch vụ, nhận dạng TLS và cấu trúc triển khai.
Đảo ngược proxy giữ nguyên ranh giới tin cậy
Khi bật reverse proxy, truyền qua TLS vẫn là mặc định. Webship chuyển tiếp lưu lượng đã được mã hóa mà không chiếm quyền sở hữu văn bản thuần của ứng dụng hoặc khóa phiên đang hoạt động. Nguồn gốc vẫn chịu trách nhiệm về TLS và giao thức đã được thương lượng.
Chỉ bật kết thúc TLS khi Webship phải kiểm tra các yêu cầu HTTP, định tuyến theo đường dẫn, áp dụng chính sách WAF và API, viết lại tiêu đề, hoặc lưu trữ phản hồi. Kết thúc TLS không tự nó kém an toàn; nó chỉ di chuyển ranh giới tin cậy. Quyết định quan trọng là máy nào được phép thấy văn bản thuần và lý do tại sao.
Chế độ truyền thẳng cũng có giới hạn chức năng. Định tuyến TCP dựa trên ClientHello SNI vì yêu cầu HTTP đã được mã hóa. Truyền thẳng HTTP/3 yêu cầu các tuyến chia sẻ một nguồn UDP. Nếu bạn cần bảo mật nhận biết nội dung tại rìa, hãy kết thúc TLS ở đó và bảo vệ riêng lẻ đoạn đường từ rìa đến nguồn.
Một đường cơ sở sản xuất mà bạn có thể xem xét
Đoạn trích sau đây làm rõ các giá trị mặc định quan trọng thay vì dựa vào việc bỏ qua:
listen = "0.0.0.0:443"
deny_dotfiles = true
[tls]
unknown_sni = "reject"
[ddos]
enabled = true
mode = "normal"
requests_per_minute = 600
burst = 100
block_seconds = 60
max_tracked_clients = 65536
[security]
enabled = true
rate_limit_max_entries = 65536
[security.waf]
enabled = true
mode = "block"
sqli = true
xss = true
traversal = true
sensitive_paths = true
header_abuse = true
max_header_bytes = 32768
max_path_bytes = 2048
max_body_bytes = 1048576
[security.response_headers]
enabled = true
nosniff = true
frame_deny = true
referrer_no_referrer = true
hsts = "max-age=31536000; includeSubDomains"
content_security_policy = "default-src 'self'; frame-ancestors 'none'; base-uri 'self'"
permissions_policy = "geolocation=(), microphone=(), camera=()"Trên một listener đa miền, unknown_sni = "reject" ngăn một hostname không được nhận dạng nhận chứng chỉ mặc định của listener. Các listener automatic-TLS của Webship đã từ chối các tên không xác định cho đến khi có chứng chỉ.
Xác thực là một biện pháp kiểm soát bảo mật
Webship xác nhận cấu hình trước khi liên kết các trình lắng nghe. Các trường không xác định, giới hạn không hợp lệ, danh tính chưa hoàn chỉnh, các trình lắng nghe mâu thuẫn và kết hợp giao thức không được hỗ trợ sẽ khiến khởi động thất bại với một lỗi cụ thể. Cùng một quy trình xác thực được thực hiện trước khi một cấu hình trực tiếp được cài đặt. Một lần tải lại thất bại sẽ giữ cho cấu hình hiện tại vẫn hoạt động.
Đường dẫn cấu hình MCP đã xác thực thêm một lớp bảo vệ khác: nó từ chối các thay đổi trực tiếp có thể vô hiệu hóa WAF đang hoạt động, lớp DDoS, API Shield, thử thách bot, chính sách xác thực biên, hoặc lớp tiêu đề phản hồi. Kiểm tra phiên bản ngăn một quản trị viên ghi đè một bản sao cấu hình mới hơn. Các cài đặt gắn với tiến trình vẫn yêu cầu khởi động lại thay vì giả vờ rằng một thay đổi trực tiếp một phần đã thành công.
Đây là một sự phân biệt hữu ích. Các giá trị mặc định an toàn bảo vệ một triển khai mới. Việc xác thực giao dịch và các cập nhật được bảo vệ bảo vệ một triển khai đang hoạt động.
Các nhà điều hành vẫn cần phải quyết định
Trước khi đưa Webship ra Internet:
- Cấu hình một danh tính TLS đáng tin cậy và bảo vệ khóa riêng.
- Đặt cách xử lý SNI không xác định cho cấu trúc người nghe.
- Xác nhận rằng HSTS và Chính sách Bảo mật Nội dung (Content-Security-Policy) khớp với mọi ứng dụng và tên miền phụ.
- Định nghĩa các điểm cuối API Shield, các phương thức chấp nhận, loại nội dung và yêu cầu ủy quyền.
- Thêm giới hạn tỷ lệ riêng cho từng tuyến đường thay vì chỉ dựa vào mức cơ bản toàn cục.
- Bật xác thực biên cho các máy chủ hoặc đường dẫn được bảo vệ và sử dụng token có thời hạn ngắn.
- Giữ MCP và các trình nghe quan sát riêng tư, xác thực và tách biệt khỏi lưu lượng công cộng.
- Chạy Webship với một tài khoản riêng không có đặc quyền, một thư mục gốc ứng dụng chỉ đọc khi có thể, và chỉ với các khả năng của hệ điều hành mà nó cần.
- Xác nhận cấu hình trước khi triển khai, sau đó kiểm tra lưu lượng bị chặn và được phép trong môi trường thử nghiệm canary.
- Theo dõi các sự kiện kiểm toán bảo mật và tập dượt việc chuyển từ chế độ bình thường sang chế độ đang bị tấn công hoặc khóa.
Một mặc định an toàn hơn là một khởi đầu, không phải là một tuyên bố
Không máy chủ web nào có thể quyết định người dùng nào nên xem hóa đơn của bạn, nguồn nào có thể gọi API của bạn, hoặc mức độ nhanh chóng mà điểm cuối doanh nghiệp của bạn nên chấp nhận yêu cầu. Những kiểm soát đó đòi hỏi kiến thức về ứng dụng.
Webship cung cấp lớp dưới: các bộ phân tích cú pháp có giới hạn, cấu hình nghiêm ngặt, tiêu đề phản hồi phòng thủ, kiểm tra yêu cầu, kiểm soát lạm dụng và bề mặt tùy chọn đóng. Kết quả không phải là “bảo mật đã giải quyết.” Nó là khoảng cách nhỏ hơn giữa việc cài đặt một máy chủ và vận hành nó một cách có trách nhiệm.
Xem xét toàn bộ tài liệu Webship trước khi triển khai sản xuất. Lược đồ cấu hình và tệp thực thi đang chạy vẫn là nguồn chính xác cho phiên bản mà bạn vận hành.