# Webship เว็บเซิร์ฟเวอร์: การตั้งค่าความปลอดภัยโดยค่าเริ่มต้น
เว็บเซิร์ฟเวอร์ที่ปลอดภัยไม่ควรพึ่งพาการที่ผู้ดูแลจำการตั้งค่าเพิ่มเติมในเวลา 2 นาฬิกาเช้า มันควรเริ่มจากฐานที่ปลอดภัย ปฏิเสธการตั้งค่าที่ไม่ปลอดภัย และต้องการการเลือกอย่างตั้งใจก่อนที่จะเปิดเผยความสามารถที่ละเอียดอ่อน
นั่นคือโมเดลเบื้องหลัง Webship การตั้งค่าเริ่มต้นจะเปิดใช้งานการป้องกันคำขอและการตอบสนองหลัก จำกัดทรัพยากรที่ผู้โจมตีสามารถใช้ และปล่อยพื้นผิวการควบคุมที่เป็นทางเลือกให้ปิดอยู่ คุณสามารถปรับแต่งค่าเริ่มต้นเหล่านั้นสำหรับแอปพลิเคชันจริง แต่คุณไม่จำเป็นต้องค้นพบการป้องกันทั้งหมดก่อนที่คำขอแรกจะมาถึง
การมีความปลอดภัยโดยค่าเริ่มต้นไม่ได้หมายความว่าปลอดภัยโดยไม่ต้องมีบริบท ใบรับรอง การอนุญาตของแอปพลิเคชัน นโยบายเครือข่าย ความลับ และการตอบสนองต่อเหตุการณ์ยังคงเป็นความรับผิดชอบของผู้ปฏิบัติงาน งานของ Webship คือทำให้จุดเริ่มต้นที่ปลอดภัยชัดเจน—และทำให้การลดความปลอดภัยโดยไม่ตั้งใจเป็นเรื่องยากขึ้น
การป้องกันที่เริ่มต้นเปิดใช้งาน
Webship เปิดใช้งานหกชั้นในการตั้งค่าพื้นฐานของมัน:
| เลเยอร์ | พฤติกรรมเริ่มต้น | สิ่งที่ลดลง | | --- | --- | --- | | การป้องกันไฟล์จุด | ปฏิเสธส่วนของเส้นทางคงที่ที่ขึ้นต้นด้วยจุด | การเปิดเผยไฟล์สภาพแวดล้อม เมทาดาต้าของรีโพซิทอรี และการกำหนดค่าท้องถิ่นโดยไม่ตั้งใจ | | ไฟร์วอลล์สำหรับเว็บแอปพลิเคชัน | บล็อกแพทเทิร์นการโจมตีที่รู้จัก | การฉีด SQL, การสคริปต์ข้ามเว็บไซต์, การเข้าถึงไฟล์ผิดพลาด, การสแกนเส้นทางที่มีความอ่อนไหว, การฉีดคำสั่ง, การลักลอบส่งหัวข้อ, และการเข้ารหัสคำขอที่ไม่รองรับ | | การควบคุม DDoS | ทำงานในโหมดปกติโดยมีสถานะของผู้ใช้จำกัด | การโจมตีด้วยคำขอจำนวนมาก การติดตามที่ไม่จำกัด และการใช้ทรัพยากรที่สามารถหลีกเลี่ยงได้ | | การท้าทายของบอท | ใช้คุกกี้ท้าทายที่ลงชื่อ | การละเมิดอัตโนมัติและการสแกนซ้ำที่มีต้นทุนต่ำ | | หัวข้อการรักษาความปลอดภัยในการตอบสนอง | เพิ่มนโยบายเบราว์เซอร์ที่เข้มงวด | ความสับสนของ MIME, การฝังหน้าเว็บ, การรั่วไหลของ referrer, ความสามารถของเบราว์เซอร์ที่อันตราย และการโหลดเนื้อหากว้าง | เกราะป้องกัน API | ใช้โหมดบล็อกและปฏิเสธเส้นทางที่ไม่รู้จักเมื่อมีการกำหนดสัญญา API แล้ว | จุดสิ้นสุดเงา, วิธีการที่ไม่ได้ตั้งใจ, ประเภทเนื้อหาที่ไม่คาดคิด, และข้อกำหนดการอนุญาตที่ขาดหาย
WAF เริ่มต้นยังตั้งข้อจำกัดเข้มงวดเกี่ยวกับสิ่งที่มันตรวจสอบ: ส่วนหัวของคำขอ 32 KiB, เส้นทาง 2,048 ไบต์, และเนื้อหาคำขอ 1 MiB ข้อจำกัดเหล่านี้เป็นข้อจำกัดด้านความปลอดภัย ไม่ใช่สวิตช์ปรับประสิทธิภาพโดยอัตโนมัติ หากแอปพลิเคชันต้องการคำขอที่ใหญ่ขึ้นอย่างถูกต้อง ให้เพิ่มขีดจำกัดที่เกี่ยวข้องสำหรับแอปพลิเคชันนั้นและทดสอบผลลัพธ์ แทนการปิดการตรวจสอบโดยรวม
การป้องกัน DDoS เริ่มต้นในโหมดปกติที่ 600 คำขอต่อหนึ่งนาที โดยมีค่าการระเบิดที่อนุญาต 100 ต่อคีย์ลูกค้า ตารางสถานะลูกค้าของมันถูกจำกัดที่ 65,536 รายการ ค่าตัวเลขเหล่านี้เป็นค่ามาตรฐานพื้นฐาน ไม่ใช่แบบจำลองการจราจรสากล: API สาธารณะ บริการดาวน์โหลด และแผงผู้ดูแลระบบภายในไม่ควรใช้ข้อจำกัดเฉพาะแอปพลิเคชันเดียวกัน
การป้องกันของเบราว์เซอร์เป็นส่วนหนึ่งของมาตรฐานพื้นฐาน
นโยบายส่วนหัวการตอบสนองของ Webship ถูกเปิดใช้งานแม้เมื่อแอปพลิเคชันลืมเพิ่มของตัวเอง ค่าเริ่มต้นประกอบด้วย:
- X-Content-Type-Options: nosniff;
- นโยบายปฏิเสธการแสดงผลในเฟรม
- นโยบายผู้ส่งต่อ: ไม่มีผู้ส่งต่อ;
- ความปลอดภัยในการขนส่งแบบเข้มงวดเป็นเวลา หนึ่งปี รวมถึงโดเมนย่อย
- นโยบายความปลอดภัยของเนื้อหา จำกัดไว้ที่เนื้อหาจากต้นทางเดียวกัน พร้อมข้อจำกัดด้านการฝังกรอบและฐาน URI;
- นโยบายการอนุญาตปิดการเข้าถึงตำแหน่ง ไมโครโฟน และกล้อง
การตั้งค่าเริ่มต้นเหล่านี้มีความเข้มงวดโดยเจตนา ตรวจสอบ HSTS ก่อนนำไปใช้กับโดเมนที่มีซับโดเมนที่ยังไม่พร้อมใช้งาน HTTPS อย่างเต็มที่ ตรวจสอบนโยบายความปลอดภัยเนื้อหา (Content-Security-Policy) ก่อนที่แอปพลิเคชันจะโหลดสคริปต์ สไตล์ ฟอนต์ รูปภาพ หรือการเชื่อมต่อจากแหล่งอื่น ค่าเริ่มต้นที่ปลอดภัยควรล้มเหลวอย่างชัดเจนในระหว่างการติดตั้ง ไม่ใช่ถูกทำให้ลดความปลอดภัยอย่างเงียบ ๆ ในการผลิต
พื้นผิวทางเลือกยังคงปิดอยู่
Webship ไม่ได้เปิดเผยทุกฟีเจอร์เพียงเพราะไฟล์ไบนารีมีฟีเจอร์เหล่านั้น การทำรีเวิร์สพร็อกซี, WebTransport, จุดสิ้นสุดสำหรับการสังเกตการทำงาน, TLS อัตโนมัติ, การตรวจสอบแหล่งที่มาของการตอบสนอง, และจุดควบคุม MCP ถูกปิดโดยค่าเริ่มต้น
จุดเชื่อมต่อ MCP มีขอบเขต loopback เมื่อเปิดใช้งานและต้องการการกำหนดค่าความปลอดภัยอย่างชัดเจน เมตริกและสถิติจำเป็นต้องเปิดใช้งานอุปกรณ์วัดอย่างตั้งใจ การจัดการใบรับรองโดยอัตโนมัติจำเป็นต้องให้ผู้ปฏิบัติการเลือกไดเรกทอรี ACME ผู้ติดต่อ การจัดเก็บ และการยอมรับข้อกำหนดในการใช้บริการ ซึ่งช่วยป้องกันไม่ให้คุณสมบัติการปฏิบัติการกลายเป็นพื้นผิวเครือข่ายที่ไม่คาดคิด
ตัวฟังพื้นฐานยังผูกกับ 127.0.0.1 ผู้ปฏิบัติการต้องเลือกที่อยู่สาธารณะอย่างชัดเจน การเลือกเพียงครั้งเดียวนี้สร้างจุดตรวจสอบที่มีประโยชน์สำหรับกฎไฟร์วอลล์ สิทธิ์การใช้งานบริการ ตัวตน TLS และโครงสร้างการติดตั้ง
การพร็อกซีแบบย้อนกลับช่วยรักษาขอบเขตความเชื่อถือ
เมื่อเปิดใช้งานการรีเวิร์สพร็อกซี การส่งผ่าน TLS ยังคงเป็นค่าเริ่มต้น Webship ส่งต่อทราฟฟิกที่เข้ารหัสโดยไม่เข้าครอบครองข้อความธรรมดาของแอปพลิเคชันหรือคีย์เซสชันที่ใช้งานอยู่ แหล่งที่มาคงรับผิดชอบต่อ TLS และโปรโตคอลที่ต่อรองกัน
เปิดใช้งานการยุติ TLS เฉพาะเมื่อ Webship ต้องตรวจสอบคำขอ HTTP, จัดเส้นทางตามพาธ, ใช้นโยบาย WAF และ API, เขียนหัวข้อใหม่ หรือเก็บแคชคำตอบ การยุติไม่ใช่ว่าจะไม่ปลอดภัยโดยธรรมชาติ; มันเป็นการย้ายขอบเขตความน่าเชื่อถือ การตัดสินใจที่สำคัญคือเครื่องใดที่อนุญาตให้เห็นข้อความธรรมดาและทำไม
การส่งผ่านก็มีข้อจำกัดทางฟังก์ชันเช่นกัน การกำหนดเส้นทางของ TCP ขึ้นอยู่กับ ClientHello SNI เพราะคำขอ HTTP ถูกเข้ารหัส HTTP/3 การส่งผ่านต้องการให้เส้นทางแบ่งปันต้นกำเนิด UDP หนึ่ง หากคุณต้องการความปลอดภัยที่ตระหนักถึงเนื้อหาที่ปลายทาง ให้ยุติ TLS ที่นั่นและปกป้องการเชื่อมต่อจากปลายทางไปยังต้นทางแยกต่างหาก
เกณฑ์มาตรฐานการผลิตที่คุณสามารถทบทวนได้
ข้อความต่อไปนี้ทำให้ค่าตั้งต้นที่สำคัญชัดเจนแทนที่จะพึ่งการละเว้น:
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=()"บนตัวฟังหลายโดเมน, unknown_sni = "reject" จะป้องกันไม่ให้โฮสต์เนมที่ไม่รู้จักได้รับใบรับรองเริ่มต้นของตัวฟัง ตัวฟังแบบอัตโนมัติ-TLS ของ Webship จะปฏิเสธชื่อที่ไม่รู้จักจนกว่าจะมีใบรับรอง
การตรวจสอบความถูกต้องเป็นการควบคุมด้านความปลอดภัย
Webship ตรวจสอบการตั้งค่าก่อนที่จะเชื่อมต่อผู้ฟัง ฟิลด์ที่ไม่รู้จัก ขอบเขตที่ไม่ถูกต้อง ตัวตนที่ไม่สมบูรณ์ ผู้ฟังที่ขัดแย้งกัน และการรวมโปรโตคอลที่ไม่สามารถรองรับได้ จะทำให้การเริ่มต้นล้มเหลวพร้อมข้อผิดพลาดเฉพาะ การตรวจสอบเดียวกันนี้จะทำก่อนที่จะติดตั้งการตั้งค่าแบบสด การรีโหลดที่ล้มเหลวจะทำให้การตั้งค่าปัจจุบันยังคงใช้งานอยู่
เส้นทางการกำหนดค่า MCP ที่ตรวจสอบแล้วเพิ่มการป้องกันอีกขั้น: มันปฏิเสธการเปลี่ยนแปลงแบบสดที่สามารถปิดใช้งาน WAF, ชั้น DDoS, API Shield, การท้าทายบอท, นโยบาย edge-auth หรือชั้น header การตอบสนองที่กำลังทำงานอยู่ การตรวจสอบเวอร์ชันป้องกันไม่ให้ผู้ดูแลระบบคนหนึ่งเขียนทับ snapshot การกำหนดค่าที่ใหม่กว่า การตั้งค่าที่ผูกกับกระบวนการยังคงต้องการการรีสตาร์ทแทนการทำเหมือนว่าการเปลี่ยนแปลงแบบสดบางส่วนประสบความสำเร็จแล้ว
นี่เป็นความแตกต่างที่มีประโยชน์ ค่าเริ่มต้นที่ปลอดภัยจะปกป้องการติดตั้งใหม่ การตรวจสอบแบบทำธุรกรรมและการอัปเดตที่มีการป้องกันจะปกป้องระบบที่กำลังทำงานอยู่
ผู้ประกอบการยังต้องตัดสินใจอะไร
ก่อนที่จะเปิดเผย Webship ต่ออินเทอร์เน็ต:
- กำหนดตัวตน TLS ที่เชื่อถือได้และปกป้องกุญแจส่วนตัว
- ตั้งค่าการจัดการ SNI ที่ไม่ทราบสำหรับโทโพโลยีของผู้ฟัง
- ยืนยันว่า HSTS และนโยบายความปลอดภัยของเนื้อหาตรงกับทุกแอปพลิเคชันและทุกซับโดเมน
- กำหนดจุดสิ้นสุดของ API Shield วิธีการที่ยอมรับ ประเภทเนื้อหา และข้อกำหนดการอนุญาต
- เพิ่มข้อจำกัดอัตราเฉพาะเส้นทางแทนที่จะพึ่งพาเฉพาะค่าพื้นฐานทั่วโลก
- เปิดใช้งานการตรวจสอบเอดจ์สำหรับโฮสต์หรือเส้นทางที่ได้รับการป้องกันและใช้โทเค็นที่มีอายุตั้งสั้น
- เก็บ MCP และตัวฟังการสังเกตการณ์ให้เป็นส่วนตัว ทำการยืนยันตัวตน และแยกออกจากการจราจรสาธารณะ
- เรียกใช้ Webship ด้วยบัญชีเฉพาะที่ไม่มีสิทธิพิเศษ รากแอปพลิเคชันที่สามารถอ่านได้เท่านั้นเมื่อเป็นไปได้ และใช้เฉพาะความสามารถของระบบปฏิบัติการที่จำเป็นเท่านั้น
- ตรวจสอบการตั้งค่าก่อนการเปิดตัว จากนั้นทดสอบการจราจรที่ถูกบล็อกและอนุญาตในสภาพแวดล้อมแบบแคนารี
- ตรวจสอบเหตุการณ์การตรวจสอบความปลอดภัยและซ้อมการเปลี่ยนจากโหมดปกติไปยังโหมดกำลังถูกโจมตีหรือการล็อกดาวน์
ค่าปริยายที่ปลอดภัยกว่าคือการเริ่มต้น ไม่ใช่การอ้างสิทธิ์
ไม่มีเว็บเซิร์ฟเวอร์ใดสามารถตัดสินใจได้ว่าผู้ใช้คนใดควรเห็นใบแจ้งหนี้ของคุณ แหล่งที่มาที่สามารถเรียกใช้งาน API ของคุณได้ หรือจุดเชื่อมต่อธุรกิจของคุณควรรับคำขอเร็วแค่ไหน การควบคุมเหล่านั้นต้องใช้ความรู้เกี่ยวกับแอปพลิเคชัน
Webship จัดหาชั้นล่าง: ตัววิเคราะห์แบบจำกัด การกำหนดค่าที่เข้มงวด เฮดเดอร์ตอบสนองป้องกัน การตรวจสอบคำขอ การควบคุมการละเมิด และพื้นผิวทางเลือกที่ปิด ผลลัพธ์ไม่ได้หมายถึง “ความปลอดภัยได้รับการแก้ไขแล้ว” แต่เป็นช่องว่างที่เล็กลงระหว่างการติดตั้งเซิร์ฟเวอร์กับการใช้งานอย่างรับผิดชอบ
ตรวจสอบ เอกสาร Webship ทั้งหมดก่อนการปรับใช้งานจริง โครงร่างการกำหนดค่าและไฟล์ไบนารีที่กำลังทำงานอยู่ยังคงเป็นแหล่งข้อมูลที่เชื่อถือได้สำหรับเวอร์ชันที่คุณใช้งานอยู่