Score:3

nginx ปฏิเสธคำขอทั้งหมดไปยังโฮสต์เสมือน คำขอมาจากตัวส่งต่อ nginx tcp

ธง gb

สรุป - ต้องเพิ่ม whitelist ips ใน mysite1.example.com ตอนนี้เมื่อเพิ่มเข้ามาแล้วจะไม่สามารถใช้งานได้เนื่องจากทุกคำขอมาจากเซิร์ฟเวอร์โหลดบาลานซ์

ฉันทำงานเกี่ยวกับการตั้งค่าด้วยโฮสต์ Nginx ที่นั่งด้านหน้าพร้อมแบ็กเอนด์อัปสตรีมเพื่อโหลดแพ็กเก็ต tcp ทั้งหมดบนพอร์ต 443 ไปยังเซิร์ฟเวอร์แบ็กเอนด์

การกำหนดค่า nginx ของเซิร์ฟเวอร์ Loadbalancer ที่รัน nginx - เซิร์ฟเวอร์ C มีดังต่อไปนี้

ลำธาร {
        ต้นน้ำ stream_backend {
                แฮช $remote_addr สอดคล้อง;
                เซิร์ฟเวอร์ 10.15.15.3:443; ##เซิฟเวอร์A
                เซิร์ฟเวอร์ 10.15.15.9:443; ##เซิฟเวอร์บี
        }


        เซิร์ฟเวอร์ {
                ฟัง 443;
                proxy_pass stream_backend;
                proxy_timeout 5 วินาที;
                proxy_connect_timeout 5 วินาที;
        }
}

เซิร์ฟเวอร์ A และเซิร์ฟเวอร์ B มีด้านล่าง nginx.conf เป็นเซิร์ฟเวอร์เดียวกันกับแอพ

มีโฮสต์เสมือนสองโฮสต์ที่ทำงานในแต่ละโฮสต์ พวกเขาทำงานได้ดี

http {

    เซิร์ฟเวอร์ {
        server_name mysite1.example.com;
        ฟัง *:443 ssl;
        ฟัง [::]:443 ssl;
        
        อนุญาต 123.45.85.220; #ดูเหมือนว่าจะไม่ได้ผล
        ปฏิเสธทั้งหมด #ทำได้แค่นี้

        
        ที่ตั้ง ^~ /static/ {
            ...
        }
        ...
        
        ssl_certificate file.pem;
        ssl_certificate_key file.key;
    }


    เซิร์ฟเวอร์ {
        server_name mysite2.example.com;
        ฟัง *:443 ssl;
        ฟัง [::]:443 ssl;
        
        
        สถานที่ / บางสิ่งบางอย่าง {
            ...
        }
        สถานที่ /something2{
            ...
        }
        
        ssl_certificate file.pem;
        ssl_certificate_key file.key;
    }
}

สิ่งที่ฉันต้องการคือการอนุญาต ips เพียงไม่กี่รายการไปยังโฮสต์เสมือน mysite1.example.com ปัญหาที่ฉันพบคือ nginx ที่ทำงานบนเซิร์ฟเวอร์ A และ B มองเห็น load balancer Ip เป็น Ip ของไคลเอ็นต์ ดังนั้นเมื่อพยายามเพิ่มอนุญาต IP; ปฏิเสธทั้งหมด ใช้งานไม่ได้กับโฮสต์ใด ๆ เนื่องจากมีโหลดบาลานเซอร์ IP ในคำขอทั้งหมดเป็น IP ไคลเอนต์

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

p.s การยกเลิก SSl เกิดขึ้นที่เซิร์ฟเวอร์ส่วนหลัง เซิร์ฟเวอร์ A และเซิร์ฟเวอร์ B

ฉันค้นหาผ่านเว็บและพบว่าสิ่งเหล่านี้มีประโยชน์ แต่ก็ยังไม่สามารถหาวิธีทำให้มันใช้งานได้ทั้งหมด

https://stackoverflow.com/questions/40873393/nginx-real-client-ip-to-tcp-stream-backend https://www.cyberciti.biz/faq/nginx-redirect-backend-traffic-based-upon-client-ip-address/

djdomi avatar
za flag
เป็นเรื่องยากที่จะเข้าใจคำขอดั้งเดิม - สามารถระบุให้แม่นยำกว่านี้และจัดรูปแบบคำถามของคุณให้อ่านง่ายขึ้นได้ไหม
gb flag
เพิ่มบทสรุปและความคิดเห็นเกี่ยวกับการกำหนดค่า ต้องหาวิธีไวท์ลิสต์ ips และปฏิเสธ ips อื่นๆ ทั้งหมดใน mysite.example.com
djdomi avatar
za flag
วิธีที่ง่ายที่สุดในการจำกัดการเข้าถึงคือการใช้อนุญาตและปฏิเสธ แต่ให้ปฏิเสธก่อนแล้วจึงอนุญาต
Score:5
ธง cz

เหตุการณ์นี้เกิดขึ้นเนื่องจากตัวจัดสรรภาระงาน nginx ของคุณสร้างการเชื่อมต่อ TCP ใหม่กับเว็บเซิร์ฟเวอร์ nginx ของคุณ ซึ่งทำให้ที่อยู่ IP ของไคลเอ็นต์เดิมสูญหาย

คุณสามารถแก้ปัญหานี้ได้โดยใช้โปรโตคอล PROXY โปรโตคอลนี้จะส่งข้อมูลที่อยู่ IP เดิมเมื่อมีการเปิดการเชื่อมต่อใหม่ เพื่อให้เว็บเซิร์ฟเวอร์ของคุณสามารถทราบได้

ในการตั้งค่า คุณต้องทำการเปลี่ยนแปลงต่อไปนี้:

  • บนโหลดบาลานเซอร์ ให้ตั้งค่า proxy_protocol บน;:

    ลำธาร {
        เซิร์ฟเวอร์ {
            proxy_pass ที่ไหนสักแห่ง;
            proxy_protocol บน;
    
  • บนเว็บเซิร์ฟเวอร์ ให้ยอมรับโปรโตคอล PROXY และเปิดใช้งานฟังก์ชัน IP จริงสำหรับที่อยู่ IP ของตัวจัดสรรภาระงาน

    เซิร์ฟเวอร์ {
        ฟัง 443 ssl http2 proxy_protocol;
        ฟัง [::]:443 ssl http2 proxy_protocol;
        real_ip_header proxy_protocol;
        set_real_ip_from <โหลดบาลานเซอร์ IP>;
    

มีการปรับแต่งเพิ่มเติมที่คุณสามารถทำได้กับโปรโตคอล PROXY ซึ่งคุณจะพบได้ใน เอกสาร nginx แต่สิ่งนี้จะช่วยให้คุณเริ่มต้นและแก้ปัญหาเฉพาะหน้าได้

Score:4
ธง tz

แนวทางของฉันคือ:

กรองในโหลดบาลานเซอร์โดยใช้ SNI:

โดยทั่วไป: SNI อนุญาตให้พร็อกซีเห็นชื่อโดเมนโดยไม่ต้องยกเลิก TLS ที่นี่ เป็นแนวทาง และนี่คือ เอกสาร nginx เพื่อรวมเป็นโซลูชัน หากคุณทำได้ คุณก็สามารถปฏิเสธได้ $ssl_preread_server_name.

ถ้า ( $ssl_preread_server_name ~* mysite1.example.com && $remote_addr !~* <whitelisted_ip> ) {
           กลับ 404;

โมดูล real_ip ก็ดูเหมือนจะเป็นทางออกที่ดีเช่นกัน

แก้ไข

เดอะ โปรโตคอลพร็อกซี จะดีกว่า real_ip จริงๆ แต่นี่ก็ยังหมายความว่าเซิร์ฟเวอร์ส่วนหลังของคุณถูกโจมตีด้วยคำขอที่พวกเขาต้องการบล็อก โซลูชัน SNI จะจับพวกมันที่โหลดบาลานเซอร์

co flag
การส่งต่อ SNI นั้นไม่น่าเชื่อถือ เนื่องจากเบราว์เซอร์รองรับส่วนขยาย ESNI และ ECH
Score:0
ธง in

ดูเหมือนว่าพร็อกซีของคุณไม่ผ่าน IP จริง ลองเพิ่มพารามิเตอร์นี้

proxy_set_header X-Real-IP $remote_addr;

คุณสามารถตรวจสอบบันทึกการเข้าถึงที่ ip ที่นั่น?

โพสต์คำตอบ

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