Iptables:“ -p udp - สถานะถูกสร้างขึ้น”


18

ลองดูกฎ iptables ทั้งสองนี้ซึ่งมักจะใช้เพื่ออนุญาต DNS ขาออก:

iptables -A OUTPUT -p udp --sport 1024:65535 --dport 53 
   -m state --state NEW,ESTABLISHED -j ACCEPT

iptables -A INPUT -p udp --sport 53 --dport 1024:65535
   -m state --state ESTABLISHED -j ACCEPT

คำถามของฉันคือฉันควรเข้าใจสถานะ ESTABLISHED ใน UDP อย่างไร UDP ไม่มีสถานะ

นี่คือสัญชาตญาณของฉัน - ฉันอยากรู้ว่าที่ไหนหรือสิ่งนี้ไม่ถูกต้อง:

หน้าคนบอกฉันนี้:

สถานะ

โมดูลนี้เมื่อรวมกับการติดตามการเชื่อมต่อจะอนุญาตให้เข้าถึง
สถานะการติดตามการเชื่อมต่อสำหรับแพ็คเก็ตนี้

  --สถานะ ...

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

เกี่ยวกับการหลีกเลี่ยงความขัดแย้ง:

เคอร์เนลติดตามว่าพอร์ตใดที่ถูกบล็อก (ไม่ว่าจะโดยบริการอื่น ๆ หรือโดยแพ็คเก็ต UDP ขาออกก่อนหน้า) ดังนั้นพอร์ตเหล่านี้จะไม่ถูกใช้สำหรับแพ็กเก็ต DNS ขาออกใหม่ภายในกรอบเวลาหรือไม่ (จะเกิดอะไรขึ้นถ้าฉันพยายามเริ่มบริการบนพอร์ตนั้นโดยไม่ตั้งใจภายในระยะเวลา - ความพยายามนั้นจะถูกปฏิเสธ / บล็อกหรือไม่)

โปรดหาข้อผิดพลาดทั้งหมดในข้อความด้านบน :-) ขอบคุณ

คริส

คำตอบ:


12

ดังนั้นโดยทั่วไป iptables จะจำหมายเลขพอร์ตที่ใช้สำหรับแพ็คเก็ตขาออก (มีอะไรอีกบ้างที่จำได้สำหรับแพ็กเก็ต UDP)

ฉันค่อนข้างมั่นใจสำหรับ UDP ที่มาและพอร์ตปลายทางและที่อยู่จะถูกเก็บไว้

หากคุณต้องการตรวจสอบตารางสถานะติดตั้ง conntrack และ / หรือ netstat-nat

(จะเกิดอะไรขึ้นถ้าฉันพยายามเริ่มบริการบนพอร์ตนั้นโดยไม่ตั้งใจภายในระยะเวลา - ความพยายามนั้นจะถูกปฏิเสธ / บล็อกหรือไม่)

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


ดังนั้นถ้าฉันเริ่มพูดอินสแตนซ์ Tomcat บนพอร์ต 8080 ฉันจะมีโอกาส 1: (65535-1023) ที่การเริ่มต้นจะล้มเหลวหากบังเอิญมีการค้นหา DNS ทำงานบนพอร์ตเดียวกัน หรือจะรอจนกว่ากรอบเวลาจะหมดอายุหรือไม่ ระยะเวลาตามค่าเริ่มต้นเป็นเวลานานเท่าใด
Chris Lercher

6
บน Linux ฉันเชื่อว่าช่วงพอร์ตชั่วคราวเป็นปกติ 32768-61000 (ดู / proc / sys / net / ipv4 / ip_local_port_range) สิ่งนี้จะไม่รวมพอร์ตตัวอย่างของคุณที่ 8080 มันเป็นเรื่องแปลกมากที่จะตั้งค่าบริการฟังพอร์ต ภายในช่วงชั่วคราว เวลาเข้า UDP รัฐที่อยู่ในตารางเป็นปกติ 30 วินาที (ดู proc / sys / / net / netfilter / nf_conntrack_udp_timeout)
Zoredache

2
+1 ขอบคุณโดยเฉพาะเส้นทาง / proc!
Chris Lercher

1
ในกรณีที่ผู้ใดประสงค์จะขยาย udp_timeout ให้ใช้echo "net.netfilter.nf_conntrack_udp_timeout = 180" >> /etc/sysctl.conf
Kiran

8

หมายเหตุ: คำตอบนี้ได้รับการแก้ไข

แม้จะมีสิ่งที่หน้าคนพูด แต่ESTABLISHEDดูเหมือนจะหมายถึง "stateful" สำหรับ UDP นั้นหมายถึง (ตามที่คุณแนะนำ) จดจำแต่ละแพ็กเก็ต UDP ขาออก ("src ip, src พอร์ต dst ip, dst พอร์ต" tuple) ในขณะที่และตระหนักถึงการตอบสนองของมัน

FWIW กฎปกติของฉันสำหรับการรับส่งข้อมูล DNS จะเป็นดังนี้:

# permit any outbound DNS request (NB: TCP required too)
iptables -A OUTPUT -p udp --sport 1024:65535 --dport 53  -j ACCEPT
iptables -A OUTPUT -p tcp --sport 1024:65535 --dport 53  -j ACCEPT

# accept any packet that's a response to anything we sent
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

คือการควบคุมปริมาณการใช้งานบนOUTPUTสายโซ่แล้วปล่อยให้iptablesโมดูลรัฐจัดการทุกอย่างอื่นในINPUTห่วงโซ่

ดูคำถามที่เกี่ยวข้องนี้ด้วย


1
ฉันรู้ว่าฉันควรอนุญาต TCP ด้วย แต่อะไรที่เกี่ยวข้องกับ UDP หมายถึงอะไร Manpage: "RELATED หมายถึงแพ็คเก็ตกำลังเริ่มการเชื่อมต่อใหม่ แต่เชื่อมโยงกับการเชื่อมต่อที่มีอยู่ ... " การเชื่อมต่อสำหรับ UDP? บางทีมันอาจจะสมเหตุสมผลมากกว่าถูกสร้างขึ้น แต่นั่นคือสิ่งที่ฉันอยากรู้
Chris Lercher

เมื่อฉันใช้กฎของคุณ แต่ จำกัด udp INPUT เป็น RELATED แบบสอบถาม DNS ของฉันไม่ทำงาน ดูเหมือนว่าฉันต้องอนุญาต ESTABLISHED มีเหตุผลใดบ้างที่จะอนุญาตให้ RELATED (สำหรับ UDP) ด้วย
Chris Lercher

ตกลงดูเหมือนว่า ESTABLISHED มีความหมายมากกว่าหน้าคนพูด ไม่ว่าในกรณีใด ๆ หากคุณใช้ตัวกรอง OUTPUT เช่นเดียวกับฉันและไม่ยอมรับการจราจรแบบ inbonud กฎ INPUT นั้นเป็นสิ่งเดียวที่คุณต้องการ
Alnitak

1
จากสิ่งที่เราค้นพบแพ็คเก็ต udp ที่เกี่ยวข้องไม่มีอยู่ AFAIK อย่างไรก็ตาม (ตัวอย่าง) หากคุณเคยทำFTP ขาออกจากกล่องนั้นคุณต้องมีกฎสถานะที่เกี่ยวข้องสำหรับช่องข้อมูล กฎ "ESTABLISHED, RELATED" เดียวคือ AFAIK กฎเดียวที่ดีที่สุดสำหรับการรับส่งข้อมูล
Alnitak

1
จริงๆแล้วRELATEDแพ็คเก็ต UDP อาจมีอยู่สำหรับ RTP
Alnitak

1

ผู้พัฒนา iptables ได้พิจารณาแล้วว่าสถานะ "ESTABLISHED" เป็นสถานการณ์เมื่อแพ็กเก็ตถูกมองเห็นได้ทั้งสองทิศทางไม่ว่าโปรโตคอลระหว่างไคลเอนต์ทั้งสองจะเป็นอย่างไร

ส่วนขยายสถานะเป็นส่วนหนึ่งของ conntrack เคอร์เนลเข้าใจสถานะจากตาราง

/proc/net/nf_conntrack

ตัวอย่างของสถานะ iptable สำหรับ UDP ในตาราง nf_conntrack จากมุมมองของผู้ส่ง ลองจินตนาการว่าคุณส่งแบบสอบถาม DNS ใน UDP

udp   17 20 src=192.168.1.2 dst=192.168.1.10 sport=35237 dport=53 \
 [UNREPLIED] src=192.168.1.10 dst=192.168.1.2 sport=53 \
 dport=35237 use=1

ส่งแพ็คเก็ตแล้ว มันยังไม่ได้รับการตอบสนองและโอ้ตารางมีข้อมูลสำหรับสิ่งที่คาดว่าจะได้รับคืน (แพ็กเก็ตสำหรับคำตอบ DNS)

udp   17 20 src=192.168.1.2 dst=192.168.1.10 sport=35237 dport=53 \
  src=192.168.1.10 dst=192.168.1.2 sport=53 \
 dport=35237 use=1

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.