Score:0

การเข้าถึง apache public reverse proxy virtualhost url จาก localhost ที่อยู่เบื้องหลัง NAT โดยใช้ iptables

ธง bo

ฉันมีปัญหากับแขกที่ใช้ virsh หลังเซิร์ฟเวอร์ที่ทำงานด้วยไฟร์วอลล์ iptables ผู้เยี่ยมชมนี้โฮสต์เว็บไซต์หนึ่งมีความสำคัญที่สุดด้วยพร็อกซีย้อนกลับ

ทุกอย่างทำงานได้ดี ฉันติดตั้งแล้ว ทำงานร่วมกันออนไลน์ 1: https://www.collaboraoffice.com/code/. สุดยอดมากในการเปิดเอกสารและมี เสียบเข้าไป สำหรับสิ่งสำคัญที่สุด

ฉันทดสอบปลั๊กอินนี้จากเซิร์ฟเวอร์ระยะไกลและรัน Matters ที่เข้าถึงกล่องภายในนี้ซึ่งอยู่เบื้องหลัง iptables ของฉัน และมันก็ทำงานได้อย่างสมบูรณ์ อย่างไรก็ตาม เมื่อฉันทดสอบปลั๊กอินนี้จากเซิร์ฟเวอร์ภายในเครื่องของผู้เยี่ยมชม ซึ่งอยู่เบื้องหลัง iptables ดังนั้น NAT โดยพื้นฐานแล้ว ก็จะไม่พบตัวเอง ฉันหมดเวลาแล้ว

ดังนั้น แขกของฉันที่อยู่เบื้องหลัง iptables ซึ่งมีการตั้งค่ากฎที่เหมาะสมเพื่อส่งผ่านทราฟฟิก จึงถือว่า AND CollaboraOnline มีความสำคัญ แต่ถ้าฉันชี้ URL สาธารณะจาก Mattermost เพื่อดึงข้อมูล CollaboraOnline ทั้งสอง localhost จะไม่พบกันและกัน ฉันไม่สามารถทำ localhost:9980 หรือ 127.0.0.1:9980 (ซึ่งเป็นที่ที่ CollaboraOnline อยู่) ในปลั๊กอิน มันไม่ชอบพอร์ตในที่อยู่...

ถ้าผมม้วนผม https://CollaboraOnline.domain.ca ฉันเห็นว่าหมดเวลาแล้ว

ถ้าฉันแก้ไขไฟล์ /etc/hosts บนเซิร์ฟเวอร์ localhost เป็น 127.0.0.1 CollaboraOnline.domain.caจากนั้น curl ก็ใช้งานได้ ที่สำคัญปลั๊กอินพบ CollaboraOnline แต่ก็ยังใช้งานไม่ได้เพราะฉันลงเอยด้วยข้อผิดพลาดการตรวจสอบประเภท SSL เช่นนี้

AH02032: ชื่อโฮสต์ที่ส่งผ่าน SNI และชื่อโฮสต์ที่ส่งผ่าน HTTP ไม่มีการตั้งค่า SSL ที่เข้ากันได้ วิธีข้าม

ตอนนี้ฉันไม่มีความคิดที่สดใส ฉันมีกล่องสาธารณะอีกอันที่ไม่ได้อยู่หลัง virsh กับ iptables ถ้าฉันขดไปที่ localhost อันใดอันหนึ่ง ทุกอย่างเรียบร้อยดี สิ่งนี้ทำให้ฉันเชื่อว่า iptables อาจต้องการกฎสำหรับผู้เยี่ยมชมของฉันที่เรียกใช้สิ่งที่สำคัญที่สุดและ CollaboraOnline เพื่อให้สามารถวนกลับมาที่ตัวเองได้เมื่อขอ URL สาธารณะที่ให้บริการตัวเอง!?

ไม่มีใครมีความคิดเกี่ยวกับเรื่องนี้?

VM แขกของฉันคือ 192.168.122.126 และเซิร์ฟเวอร์หลักของฉันที่โฮสต์แขก Vrish และ iptables คือ 192.168.122.1

นี่คือกฎ iptables (ลบความยุ่งเหยิงบางอย่างเช่นสิ่งที่ล้มเหลว 2 แบน)

iptables -L
ส่งต่อไปข้างหน้า (ยอมรับนโยบาย)
เป้าหมาย prot เลือกปลายทางต้นทาง         
ยอมรับทั้งหมด -- ทุกที่ 192.168.122.126 สถานะ ใหม่ ที่เกี่ยวข้อง ก่อตั้ง
ยอมรับทั้งหมด -- ทุกที่ 192.168.122.0/24 ctstate ที่เกี่ยวข้อง ก่อตั้ง
ยอมรับทั้งหมด -- 192.168.122.0/24 ที่ใดก็ได้            
ยอมรับทั้งหมด - ทุกที่ทุกที่            
ปฏิเสธทั้งหมด - ทุกที่ที่ปฏิเสธด้วย icmp-port-ไม่สามารถเข้าถึงได้
ปฏิเสธทั้งหมด - ทุกที่ที่ปฏิเสธด้วย icmp-port-ไม่สามารถเข้าถึงได้
iptables -L -t แนท 
ห่วงโซ่ PREROUTING (ยอมรับนโยบาย)
เป้าหมาย prot เลือกปลายทางต้นทาง         
DNAT tcp -- ที่ใดก็ได้ 148.59.149.79 tcp dpt:9980 ถึง:192.168.122.126:9980
DNAT tcp -- ที่ใดก็ได้ 148.59.149.79 tcp dpt:12000 ถึง:192.168.122.126:12000
DNAT tcp -- ที่ใดก็ได้ 148.59.149.79 tcp dpt:11000 ถึง:192.168.122.126:11000
DNAT tcp -- ที่ใดก็ได้ 148.59.149.79 tcp dpt:submission to:192.168.122.126:587
DNAT tcp -- ที่ใดก็ได้ 148.59.149.79 tcp dpt:imap2 ถึง:192.168.122.126:143
DNAT tcp -- ที่ใดก็ได้ 148.59.149.79 tcp dpt:smtp ถึง:192.168.122.126:25
DNAT tcp -- ที่ใดก็ได้ 148.59.149.79 tcp dpt:webmin ถึง:192.168.122.126:10000
DNAT tcp -- ที่ใดก็ได้ 148.59.149.79 tcp dpt:4443 ถึง:192.168.122.126:4443
DNAT udp -- ที่ใดก็ได้ 148.59.149.79 udp dpt:10000 ถึง:192.168.122.126:10000
DNAT tcp -- ที่ใดก็ได้ 148.59.149.79 tcp dpt:http ถึง:192.168.122.126:80
DNAT tcp -- ที่ใดก็ได้ 148.59.149.79 tcp dpt:https ถึง:192.168.122.126:443
Martin avatar
kz flag
ถ้าฉันเข้าใจคุณถูกต้อง ระบบโฮสต์ของคุณจะยึดกฎ iptables และเปลี่ยนเส้นทางการรับส่งข้อมูลขาเข้าไปยังเครื่องเสมือนของคุณอย่างถูกต้อง คุณดำเนินการคำสั่ง curl ภายใน VM หรือบนระบบโฮสต์หรือไม่
gstlouis avatar
bo flag
@มาร์ติน ฉันขดจาก VM ของแขก ไม่ใช่เซิร์ฟเวอร์ที่เก็บ iptables และโฮสต์แขกของฉัน ดังนั้นแขกของฉันจึงเป็น 192.168.122.126 และเซิร์ฟเวอร์/iptables/vrish ของฉันคือ 192.168.122.1
Martin avatar
kz flag
โอเค VM และโฮสต์อยู่ในเครือข่ายย่อยเดียวกัน... คุณช่วยโพสต์กฎ iptables ของคุณได้ไหม
gstlouis avatar
bo flag
@Martin อัปเดตโพสต์ต้นฉบับ
Martin avatar
kz flag
และ VM ไม่มีกฎไฟร์วอลล์หรือไม่? เพราะถ้า nat เกิดขึ้นบนเซิร์ฟเวอร์ ฉันไม่เห็นเหตุผลว่าทำไม curl จากภายใน VM ไปยัง localhost จึงล้มเหลว...
gstlouis avatar
bo flag
@มาร์ติน VM มี iptables สำหรับวัตถุประสงค์ที่ล้มเหลว โซ่ FORWARD ไม่เก็บอะไรเลย และโซ่ตาราง nat ว่างเปล่าทั้งหมด นอกเสียจากว่าฉันจำเป็นต้องบอก iptables บน VM บางอย่างเกี่ยวกับการวนซ้ำคำขอสาธารณะของ url กลับไปที่ตัวมันเอง iptables ไม่เก็บค่าอะไรที่กำหนดเองจากการกำหนดค่าดั้งเดิม ยกเว้นเชนเพิ่มเติมที่ไม่ผ่าน 2 แบน ฉันสามารถโพสต์ได้หากคุณคิดว่ามันเกี่ยวข้อง
Martin avatar
kz flag
ให้เรา [ดำเนินการสนทนาต่อในการแชท](https://chat.stackexchange.com/rooms/136222/discussion-between-martin-and-gstlouis)
gstlouis avatar
bo flag
ต้องจากไปแล้ว อาจจะเป็นพรุ่งนี้? @มาร์ติน
Martin avatar
kz flag
แน่นอน ฉันคิดว่าเชน INPUT / OUTPUT นั้นมีความเกี่ยวข้องกัน - บางที fail2ban จะล็อกคุณไม่ให้เข้า...
gstlouis avatar
bo flag
@มาร์ติน ฉันได้ปิดทั้ง f2b และมันยังใช้งานไม่ได้ ฉันเข้าสู่ระบบแชทแล้ว แต่อาจตอบกลับไม่เร็วนัก
Score:1
ธง kz

ผู้ร้ายในที่นี้คือกฎ NAT ที่ผิดพลาด/ไม่สมบูรณ์ ระหว่างการเชื่อมต่อ TCP แต่ละจุดสิ้นสุดจะมี IP ต้นทาง/ปลายทางคงที่ และหากได้รับแพ็กเก็ต IP บนพอร์ตนี้ด้วย IP ต้นทาง/ปลายทางที่แตกต่างกัน แพ็กเก็ตจะถูกละทิ้ง สิ่งนี้เป็นจริงสำหรับทั้งปลายทาง: ไคลเอนต์ ( curl ) และเซิร์ฟเวอร์

เพื่อให้เข้าใจถึงปัญหา ฉันจะติดตามแพ็กเก็ตโฟลว์ โดยเริ่มจากไคลเอ็นต์:

  • curl จากภายใน VM ส่งแพ็กเก็ตไปยังที่อยู่ IP สาธารณะ IP ต้นทาง: 192.168.122.126, IP ปลายทาง: 148.59.149.79
  • เคอร์เนลของ VM ตรวจสอบตารางเส้นทาง และส่งแพ็กเก็ต ip ไปยังเกตเวย์เริ่มต้น ซึ่งก็คือ 192.168.122.1
  • เคอร์เนลของโฮสต์ได้รับแพ็กเก็ตและส่งผ่านเชน iptables (จำไว้ว่าเชนใดได้รับการสำรวจก่อน - PREROUTING ไปก่อน POSTROUTING )
  • ภายในเชน PREROUTING IP ปลายทางจะถูกแทนที่ด้วย 192.168.122.126
  • ที่นี่โซ่ POSTROUTING จะถูกข้าม
  • เนื่องจาก IP ปลายทาง แพ็กเก็ตจะกลับไปที่ VM
  • ที่ซ็อกเก็ตเซิร์ฟเวอร์ แพ็กเก็ต IP จะมาถึง IP ปลายทางและต้นทางคือ 192.168.122.126 ไม่มีปัญหาจนถึงตอนนี้
  • ซ็อกเก็ตเซิร์ฟเวอร์ส่งการตอบกลับ - ในครั้งนี้ เนื่องจาก IP ปลายทางเป็นอินเทอร์เฟซของตัวเอง กฎ NAT ของโฮสต์จะไม่ถูกนำไปใช้
  • ซ็อกเก็ตไคลเอนต์ได้รับการตอบกลับจาก 192.168.122.126 - ซึ่งไม่ใช่ IP ซึ่งซ็อกเก็ตไคลเอนต์ได้ส่งคำขอเชื่อมต่อ ดังนั้นแพ็กเก็ตจึงหลุด

วิธีแก้ไขคือการเปลี่ยนที่อยู่ IP ต้นทาง ซึ่งการตอบกลับจากซ็อกเก็ตเซิร์ฟเวอร์ของ VM จะต้องผ่านกฎ NAT ของโฮสต์:

iptables -t nat -I การโพสต์ 1 -s 192.168.122.126 -d 192.168.122.126 -j SNAT --to-source 192.168.122.1

โปรดจำไว้ว่าเป้าหมาย SNAT ใช้ได้เฉพาะในห่วงโซ่ POSTROUTING เท่านั้น ดังนั้น DNAT จากห่วงโซ่ PREROUTING จึงถูกนำมาใช้แล้ว

ด้วยกฎนี้ ซ็อกเก็ตเซิร์ฟเวอร์ภายใน VM จะได้รับคำขอการเชื่อมต่อขาเข้าจาก 192.168.122.1 - ส่งการตอบกลับ และการตอบกลับจะได้รับการย้อนกลับของกฎ SNAT / DNAT ทันทีที่มาถึงโฮสต์: ต้นทางไปยัง 192.168 122.126 และปลายทางเป็น 148.59.149.79

การตอบกลับนี้ตรงกับคำขอเชื่อมต่อเริ่มต้น และความพยายามในการเชื่อมต่อก็สำเร็จ

โพสต์คำตอบ

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