Score:0

iptables ไม่ทำงานกับ "x-forwarded-for" (หลัง Cloudflare)

ธง jm

ฉันมีเว็บเซิร์ฟเวอร์ (Ubuntu กับ Apache) ที่ทำงานอยู่เบื้องหลัง Cloudflareฉันต้องการบล็อกผู้ใช้โดยใช้ iptables ที่นี่ฉันต้องการใช้ส่วนขยายการจับคู่สตริงของ iptables และยกเลิกการเชื่อมต่อถ้า x-ส่งต่อ-สำหรับ จับคู่ ฉันกำลังเพิ่มกฎด้วยคำสั่งต่อไปนี้:

iptables -I INPUT -m string --string "x-forwarded-for: 216.244.66.205" --algo bm --to 65535 -j DROP

หลังจากเพิ่มกฎนี้แล้ว ไคลเอ็นต์ยังคงสามารถเข้าถึงเซิร์ฟเวอร์ได้

ฉันรู้เกี่ยวกับส่วนหัวเฉพาะของ Cloudflare สำหรับ IP ไคลเอ็นต์นั่นคือ cf-เชื่อมต่อ-ip. ถ้าฉันเพิ่มกฎด้วยคำสั่งต่อไปนี้ มันจะทำงานตามที่คาดไว้ นี่คือกฎที่ใช้ได้ดี:

iptables -I INPUT -m string --string "cf-connecting-ip: 216.244.66.205" --algo bm --to 65535 -j DROP

ทำไมฉันถึงต้องการใช้ XFF แทน cf-เชื่อมต่อ-ip:

ฉันมีตัวโหลดบาลานเซอร์แยกต่างหาก (haproxy) และบางโดเมนกำลังทำงานผ่านสิ่งนี้แทน Cloudflare นั่นคือเหตุผลที่ฉันต้องการใช้ XFF เพราะ cf-เชื่อมต่อ-ip เป็นเฉพาะสำหรับ Cloudflare และ XFF ได้รับการสนับสนุนโดยทั้งคู่

การรับส่งข้อมูลจาก Cloudflare ไปยังเว็บเซิร์ฟเวอร์คือ HTTP (พอร์ต 80) ดังนั้นข้อมูล http จึงมองเห็นได้ใน iptables

ฉันเห็นว่า Cloudflare กำลังเชื่อมต่อทั้งสองอย่างถูกต้อง cf-เชื่อมต่อ-ip และส่วนหัว XFF นี่คือผลลัพธ์ของ tcpdump ในคำขอหลายรายการ:

tcpdump -A -s 65535 'พอร์ต tcp 80' | เกรป 216.244.66.205
x-ส่งต่อสำหรับ: 216.244.66.205
cf-connecting-ip: 216.244.66.205
x-ส่งต่อสำหรับ: 216.244.66.205
cf-connecting-ip: 216.244.66.205
x-ส่งต่อสำหรับ: 216.244.66.205
cf-connecting-ip: 216.244.66.205
x-ส่งต่อสำหรับ: 216.244.66.205
cf-connecting-ip: 216.244.66.205

อย่างไรก็ตาม iptables สามารถตรวจจับ cf-เชื่อมต่อ-ip แต่ไม่ x-ส่งต่อ-สำหรับ.

ฉันทำอะไรผิดที่นี่?

Alex avatar
in flag
สิ่งนี้ดูเกี่ยวข้อง - https://serverfault.com/a/980916/802321
Ajaib Singh avatar
jm flag
@Alex สิ่งนี้ไม่เกี่ยวข้อง ฉันใช้ส่วนขยายการจับคู่สตริงแทนการบล็อก IP ที่เชื่อมต่อ ฉันรู้ว่า IP ที่เชื่อมต่อเป็นของ Cloudflare นั่นคือเหตุผลที่ฉันลองใช้ XFF
Score:1
ธง us

การจับคู่สตริงดำเนินการกับเพย์โหลดของแพ็กเก็ต IP เดียว

ดังนั้นสาเหตุหนึ่งที่เป็นไปได้คือที่ตั้งของ x-ส่งต่อสำหรับ: ส่วนหัวจะอยู่บนขอบเขตของสองส่วน TCP ดังนั้นแพ็กเก็ต IP แรกอาจมี x-forw และแพ็กเก็ต IP ที่สอง กระตือรือร้นสำหรับ:. จากนั้น สตริง โมดูลการจับคู่ไม่ตรงกับแพ็กเก็ตใดแพ็กเก็ต

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

เป็นการดีที่สุดที่จะใช้คุณสมบัติบล็อกเช่นนี้ในระดับ HTTP

Ajaib Singh avatar
jm flag
จะตรวจสอบแพ็กเก็ตเพย์โหลดได้อย่างไร เป็นไปได้ด้วย tcpdump?
us flag
คุณสามารถใช้ tcpdump หรือ Wireshark เพื่อตรวจสอบเพย์โหลด ฉันไม่มีคำแนะนำที่แน่นอนที่จะบอกคุณถึงวิธีการทำ

โพสต์คำตอบ

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