Score:0

ส่วนหัว HTTP_HOST ไม่ถูกต้อง การกำหนดค่า NGINX ไม่ป้องกันส่วนหัวที่ไม่ถูกต้องของ localhost จากเครื่องสแกนพอร์ต IP ที่กดปุ่ม django

ธง jm

ฉันได้รับข้อผิดพลาดส่วนหัวของโฮสต์ไม่ถูกต้องจากเซิร์ฟเวอร์ของฉัน และฉันไม่แน่ใจว่าจะแก้ไขอย่างไร

URL คำขอข้อผิดพลาดคือ https://127.0.0.1:8000 และข้อเสนอแนะที่ชัดเจนคือการเพิ่ม localhost ให้กับโฮสต์ที่อนุญาต (โดยใช้ django) ของฉัน อย่างไรก็ตาม ฉันได้อ่านแล้วว่าการรักษา localhost ไว้ในโฮสต์ที่อนุญาตในการผลิตนั้นเป็นแนวปฏิบัติที่ไม่ดีและอาจเป็นข้อบกพร่องด้านความปลอดภัย ในขณะนี้ โฮสต์ที่อนุญาตใน prod ถูกจำกัดไว้ที่โดเมนที่ลงทะเบียนของฉัน

ฉันขุดเสร็จแล้วดูเหมือนว่าคำขอเหล่านี้มาจากเครื่องสแกนพอร์ต IP ในรายงานอีเมล บางครั้งฉันเห็นลิงก์ GitHub ใน HTTP_USER_AGENT ไปยังที่เก็บสแกนเนอร์ดังกล่าว และ HTTP_X_FORWARDED_FOR มักจะเป็นผู้ให้บริการ VPN บางรายหรืออยู่ในมอสโกวหรือปักกิ่ง

นี่คือการกำหนดค่า nginx ปัจจุบันของฉัน ฉันได้นำคำแนะนำเล็กน้อยจากโพสต์อื่น ๆ เช่น custom if regex filtering แต่ดูเหมือนจะไม่มีผล

นอกเหนือจากปัญหานี้ ดูเหมือนว่าทุกอย่างจะทำงานตามที่ตั้งใจไว้ ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชมอย่างมาก. เป็นครั้งแรกที่ตั้งค่าอะไรแบบนี้ ดังนั้นโปรดชี้ให้เห็นข้อผิดพลาดที่ชัดเจน

# ไฟล์: /etc/nginx/sites-available/app

ปิด server_tokens;
access_log /var/log/nginx/app.access.log;
error_log /var/log/nginx/app.error.log;

เซิร์ฟเวอร์ {
    ฟัง 80 default_server;
    กลับ 444;
}

เซิร์ฟเวอร์ {
    server_name app.example.com;
    ฟัง 80;
    ส่งคืน 301 https://$host$request_uri;
}

เซิร์ฟเวอร์ {

    # กำหนด regex if คำสั่งเป็น 444 ส่วนหัวของโฮสต์ที่ไม่คาดคิด
    ถ้า ( $host !~* ^(app.example.com|example.com)$ ) {
        กลับ 444;
    }

    ตำแหน่ง / คงที่ {
        เปิดดัชนีอัตโนมัติ;
        นามแฝง /path/to/django/staticfiles;
    }
    
    # ส่งคำขอให้ guinicorn ฟังบน http://localhost:8000
    ที่ตั้ง / {
        proxy_pass http://localhost:8000;
        รวม /etc/nginx/proxy_params;
        ปิด proxy_redirect;
    }

    ฟัง 443 ssl;
    server_name app.example.com;
    ssl_certificate /path/to/fullchain.pem;
    ssl_certificate_key /path/to/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers รหัส;
}
Score:1
ธง us

คุณขาด a default_server บล็อกสำหรับ HTTPS ดังนั้นคำขอทั้งหมดสำหรับโฮสต์ใดๆ ผ่าน HTTPS จะถูกส่งผ่านไปยังของคุณ app.example.com เซิร์ฟเวอร์ บล็อก (ฉันเปลี่ยนเป็นโดเมนตัวอย่าง)

การกำหนดค่าของคุณควรมีลักษณะดังนี้สำหรับเซิร์ฟเวอร์เริ่มต้น:

เซิร์ฟเวอร์ {
    ฟัง 80 default_server;
    ฟัง 443 default_server ssl;

    ssl_certificate /path/to/certificate.crt;
    ssl_certificate_key /path/to/certificate.key;

    กลับ 444;
}

ฉันใช้ใบรับรอง / คีย์ที่ลงนามด้วยตนเองของระบบในบล็อกนี้ ตัวอย่างเช่น ในระบบที่ใช้เดเบียนก็มี /etc/ssl/private/ssl-cert-snakeoil.key และ /etc/ssl/certs/ssl-cert-snakeoil.pem.

จากนั้นคุณต้องลบ ถ้า บล็อกของคุณ app.example.com บล็อก.

Atayls avatar
jm flag
ขอบคุณ ฉันจะให้สิ่งนี้ไป ในใบรับรอง SSL ฉันสามารถทำซ้ำบรรทัด SSL ปัจจุบันของฉันแต่อยู่ภายในบล็อกเซิร์ฟเวอร์เริ่มต้นที่แก้ไขแล้วได้ ไม่มีปัญหากับการมีบรรทัดใบรับรองสองครั้งภายในสองบล็อกแยกกัน?
us flag
นั่นเป็นทางเลือกหนึ่ง

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา