วิธีที่ดีที่สุดในการป้องกันเซิร์ฟเวอร์เริ่มต้นคืออะไร


26

ฉันมี vhost จำนวนหนึ่งและฉันต้องการ "ปิด" vhost ที่เป็นค่าเริ่มต้นไม่ว่าจะเป็นหน้าว่างหน้าข้อผิดพลาดหรือโดยทั่วไปก็ตามสิ่งที่เป็นการใช้ทรัพยากรของ Nginx อย่างมีประสิทธิภาพที่สุดในขณะที่อนุญาตให้ vhost อื่น ๆ เข้าถึงได้ผ่านทางเท่านั้น โดเมนที่กำหนดไว้ล่วงหน้า

คำตอบ:


42

กำหนดdefault_serverที่ส่งคืนรหัสHTTP 444 :

server {
    listen      80 default_server;
    server_name _;
    return      444;
}

(การส่งคืนรหัสข้อผิดพลาด 4xx หมายถึงคำขอสามารถตีความได้โดยไคลเอนต์ว่าเป็นคำขอที่ไม่สำเร็จแทนที่จะเป็นหน้าเปล่า HTTP 200 แต่เชื่อถือได้เต็มที่ฉัน )


2
444 เป็นรหัสเฉพาะของnginx ที่ไม่ได้มาตรฐาน : "จะส่งคืนรหัสที่ไม่ได้มาตรฐานของ nginx 444 ที่ปิดการเชื่อมต่อ"
bzeaman

2
สิ่งนี้ใช้ไม่ได้กับ https อย่างง่าย ๆ ฟัง 443 default_server จะไม่ทำงานอย่างใดอย่างหนึ่งเนื่องจากการจับมือกันของ ssl เกิดขึ้นก่อนอื่นและ nginx จะเกิดข้อผิดพลาดก่อนที่จะส่งคืน 444 วิธีแก้ปัญหาหนึ่งที่ฉันยังไม่ได้ลอง แต่ควรจะทำงานคือการสร้างใบรับรอง เปลี่ยนเส้นทางไปที่ http เพื่อหลีกเลี่ยงข้อผิดพลาดของเบราว์เซอร์
Simon Bengtsson

ตั๋ว Nginx เพื่อให้เป็นวิธีที่ดีที่จะปฏิเสธการเชื่อมต่อ SSL คือที่นี่ พวกเขายังมีวิธีแก้ปัญหาssl_ciphers aNULL;การตั้งค่า
nh2

หมายเหตุ: วิธีแก้ปัญหาที่ผมกล่าวจะทำลายไม่ใช่ SNI ที่รองรับลูกค้า HTTPS (เช่น Nginx ของตัวเองproxy_passถ้าคุณตั้งค่าproxy_ssl_server_name on;) จากการเข้าถึงอื่น ๆserver_names(เพื่อเป็นหลักทำลายที่ถูกต้องserver_nameสำหรับพอร์ต 443 ที่คุณไม่ต้องการที่จะปล่อยให้ผ่านไป) ดูtrac.nginx.org/nginx/ticket/195#comment:11สำหรับรายละเอียด
nh2

4

เพียงกำหนดvhost เริ่มต้นที่จะชี้ไปที่ไดเรกทอรีด้วยไฟล์ index.html ที่ว่างเปล่า

server {
    listen       80 default_server;
    server_name  _ ;
    root /var/www/placeholder ; 
    index index.html;
}

และวางดัชนีว่างใน / var / www / placeholder


มันจะตรวจจับทุกคำขอที่ไม่กระทบกับชื่อโดเมนและการตอบสนองของคุณด้วยหน้าว่าง
wojciechz

คุณreturn '';แทนroot...indexไม่ได้ใช่ไหม
oriadam

0

ทำไมไม่เพียงแค่ปฏิเสธทั้งหมด

server {
    listen       80 default_server;
    server_name  _;

    location / {
        deny    all;
    }
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.