ทำไมฉันไม่สามารถใช้นโยบายปฏิเสธในการเชื่อมต่อ iptables ของฉันได้


11

ขณะนี้ฉันมีการตั้งค่า OUTPUT chain เป็น DROP ฉันต้องการเปลี่ยนเป็นปฏิเสธเพื่อให้ฉันรู้ว่าไฟร์วอลล์ของฉันหยุดฉันไม่ให้ไปที่อื่นแทนที่จะมีปัญหากับบริการใด ๆ ที่ฉันพยายามเข้าถึง (ปฏิเสธทันทีแทนที่จะหมดเวลา) อย่างไรก็ตาม iptables ดูเหมือนจะไม่สนใจสิ่งนี้ หากฉันแก้ไขไฟล์กฎที่บันทึกไว้ด้วยตนเองและพยายามกู้คืนไฟล์ฉันจะได้รับiptables-restore v1.4.15: Can't set policy 'REJECT' on 'OUTPUT' line 22: Bad policy nameและปฏิเสธที่จะโหลดกฎ หากฉันพยายามตั้งค่านี้ด้วยตนเอง ( iptables -P OUTPUT REJECT) ฉันจะได้รับiptables: Bad policy name. Run 'dmesg' for more information.แต่ไม่มีเอาต์พุตเป็น dmesg

ฉันยืนยันว่ากฎที่เหมาะสมนั้นได้รับการรวบรวมไว้ในเคอร์เนลและฉันได้รีบูตเครื่องเพื่อให้แน่ใจว่าโหลดแล้ว:

# CONFIG_IP_NF_MATCH_TTL is not set
CONFIG_IP_NF_FILTER=y
***
CONFIG_IP_NF_TARGET_REJECT=y
***
CONFIG_IP_NF_TARGET_LOG=y
CONFIG_IP_NF_TARGET_ULOG=y

(เครื่องหมายดอกจันถูกเพิ่มเพื่อเน้นกฎที่บังคับใช้)

ทุกสิ่งที่ฉันสามารถค้นหาสถานะว่า REJECT เป็นนโยบาย / เป้าหมายที่ถูกต้อง (โดยทั่วไป) แต่ฉันไม่พบสิ่งใดที่ระบุว่ามันไม่ถูกต้องสำหรับเครือข่าย INPUT, FORWARD หรือ OUTPUT Google-fu ของฉันไม่ได้ช่วยอะไร ฉันอยู่ที่ Gentoo ถ้ามันสร้างความแตกต่าง ทุกคนที่นี่มีข้อมูลเชิงลึกหรือไม่


คุณสามารถแสดงiptablesกฎที่เป็นปัญหาได้หรือไม่
บาฮามาต

คำตอบ:


15

REJECTเป็นส่วนขยายเป้าหมายในขณะที่นโยบายโซ่จะต้องเป็นเป้าหมาย หน้าคนบอกว่า (แม้ว่ามันจะไม่ชัดเจนจริงๆ) แต่บางสิ่งที่มันบอกว่าผิดปกติ

นโยบายสามารถเป็นได้ACCEPTหรือDROPอยู่ในเครือข่ายในตัวเท่านั้น หากคุณต้องการผลกระทบของการปฏิเสธแพ็กเก็ตทั้งหมดที่ไม่ตรงกับกฎก่อนหน้าให้ตรวจสอบว่ากฎสุดท้ายตรงกับทุกอย่างและเพิ่มกฎด้วยREJECTส่วนขยายเป้าหมาย ในคำอื่น ๆ iptables -t filter -A OUTPUT -j REJECTหลังจากที่เพิ่มกฎระเบียบที่เกี่ยวข้องทั้งหมดทำ

ดูหัวข้อ"สิ่งที่เป็นนโยบายลูกโซ่ที่เป็นไปได้"ในรายการ netfilter สำหรับรายละเอียดเพิ่มเติม


มันสมเหตุสมผลแล้วและการปฏิเสธทั่วไปในตอนท้ายควรจะได้ผล จากความอยากรู้คำจำกัดความของส่วนขยายเป้าหมายอยู่ที่ไหนสักแห่งที่เห็นได้ชัดและฉันเพิ่งพลาดไปหรือเป็นหนึ่งในบิตที่บันทึกไม่ดีหรือไม่
ND Geek

1
การอ่านหน้าคนทั้งหมดเป็นที่ชัดเจนว่า REJECT เป็นส่วนขยายเป้าหมาย แต่หน้าคนนั้นยาวมากดังนั้น "TL; DR" จึงมีแนวโน้มที่จะนำไปใช้ นอกจากนี้ยังหมายความว่า DROP, ACCEPT และ QUEUEเป็นเป้าหมายนโยบายที่ถูกต้อง จากรหัสปัจจุบัน QUEUE ไม่ใช่!
StarNamer

4

ฉันไม่พบเอกสาร แต่การอ้างอิงที่นี่บ่งชี้ว่านโยบายที่อนุญาตเท่านั้นคือ ACCEPT หรือ DROP สิ่งนี้ได้รับการยืนยันโดยการดูที่แหล่งที่มาของlibiptc(ซึ่งมีหน้าที่รับผิดชอบในการจัดการกฎ) รอบ ๆ บรรทัด 2429 ซึ่งมีรหัสอยู่

2429         if (strcmp(policy, LABEL_ACCEPT) == 0)
2430                 c->verdict = -NF_ACCEPT - 1;
2431         else if (strcmp(policy, LABEL_DROP) == 0)
2432                 c->verdict = -NF_DROP - 1;
2433         else {
2434                 errno = EINVAL;
2435                 return 0;
2436         }

เดิมด้ายiptables -A OUTPUT -j REJECTแสดงให้เห็นสิ่งที่ดีที่สุดที่จะทำคือการเพิ่มปฏิเสธในตอนท้ายของห่วงโซ่ที่ควรจะเป็น

โปรดทราบว่ารหัสก่อนหน้านี้คือ:

2423         if (!iptcc_is_builtin(c)) {
2424                 DEBUGP("cannot set policy of userdefinedchain `%s'\n", chain);
2425                 errno = ENOENT;
2426                 return 0;
2427         }
2428 

ดังนั้นคุณจึงไม่สามารถตั้งค่านโยบายบนเครือข่ายที่กำหนดโดยผู้ใช้ได้


คำสั่งนั้นในเธรดไม่ถูกต้อง -pสำหรับการจับคู่บนโปรโตคอล; เขาหมายถึง-Aคำตอบของฉันพูดว่า
Shawn J. Goff

นั่นน่าสนใจทีเดียว ความอยากรู้อยากเห็นในตัวฉันสงสัยว่ามีเหตุผลอยู่เบื้องหลังหรือถ้านั่นเป็นเพียงแค่สิ่งต่าง ๆ อาจเป็นไปได้เพราะความเรียบง่าย (รหัสที่ง่ายขึ้นหมายถึงจุดที่เป็นไปได้น้อยที่สุดสำหรับช่องโหว่) หากฉันเป็นนักพัฒนาระดับกลางฉันอาจถูกแฮ็คข้อมูลภายในเครื่อง แต่เนื่องจากฉันไม่ได้รับความปลอดภัยฉันจะไม่แตะต้องมันเลย
ND Geek

2

REJECTที่OUTPUTทำให้รู้สึกไม่; REJECTจะกลับแพ็คเก็ต ICMPซึ่งจะต้องมีการสำรวจเครือข่าย

เพิ่มใหม่-j LOGเป็นกฎสุดท้ายของคุณ (ดังนั้นก่อนหน้าDROPนโยบาย) เพื่อดูว่าอะไรจะเกิดขึ้นในOUTPUTสายโซ่


1
REJECTแพ็กเก็ต ICMP ไม่สามารถส่งคืนบนอินเทอร์เฟซ lo ได้หรือไม่ ฉันเห็นด้วยว่า a LOGมีประโยชน์สำหรับการแก้ไขปัญหา แต่สิ่งที่ฉันหวังไว้จริงๆคือวิธีเตือนฉันว่า "โอ้ใช่ ... ที่อาจถูกบล็อกโดยDROPค่าเริ่มต้น iptables ของฉัน" แทนที่จะแก้ไขปัญหาเป็นเวลา 5 นาที ขอให้เพื่อนร่วมงาน การเข้าถึงเซิร์ฟเวอร์ XYZ รู้ว่าอาจเป็นในท้องที่ซึ่งเป็นแนวทางที่พบได้บ่อยที่สุดของฉันเนื่องจากวันทำงานทั่วไปของฉันไม่ค่อยพบสิ่งที่ฉันยังไม่เคยเปิดมาก่อน แน่นอนว่าบางทีฉันต้องจำไว้ให้ดีขึ้น แต่แฟลตREJECTก็ชัดเจนกว่า
ND Geek

ฉันไม่คิดว่าคุณต้องการให้ethXอินเทอร์เฟซสร้างปริมาณการใช้งานบนloอินเทอร์เฟซด้วยเหตุผลหลายประการ พวกเขาเป็นอิสระมาก คุณสามารถทำให้โซ่นำไปใช้กับหนึ่งและอื่น ๆ
Aaron D. Marasco
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.