กฎ iptables ไม่ได้ทำงาน


0

ฉันมีไฟล์กฎ iptable บนเชน INPUT ที่ฉันมี

-A INPUT -i em1 -p tcp -m tcp --dport 54000 -j ACCEPT
-A INPUT -i em1 -p tcp -m tcp --dport 30000 -j ACCEPT
-A INPUT -i em1 -p udp -m udp --dport 54000 -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -j INPUT_direct 
-A INPUT -j INPUT_ZONES
-A INPUT -p icmp -j ACCEPT

แล้วฉัน iptables-restore < rule_file และฉันเริ่มเซิร์ฟเวอร์ UDP ที่พอร์ต 30000 ซึ่งไม่ใช่พอร์ต UDP ที่อนุญาต 54000 แต่เซิร์ฟเวอร์ UDP ยังคงได้รับแพ็กเก็ต UDP ขาเข้าใน 30000 เกิดอะไรขึ้นกับสิ่งนี้?

BTW, iptables -L -n , ฉันเข้าใจ:

    Chain INPUT (policy ACCEPT)
    target     prot opt source               destination 
    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:54000
    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:30000
    ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0            udp dpt:54000
    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ES
    TABLISHED
    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
    INPUT_direct  all  --  0.0.0.0/0            0.0.0.0/0           
    INPUT_ZONES  all  --  0.0.0.0/0            0.0.0.0/0           
    ACCEPT     icmp --  0.0.0.0/0 

ฉันใช้ nmap จากเครื่องอื่นเพื่อตรวจสอบเครื่องนี้

nmap -port 30000

หรือ

nmap -port 54000

ผลแสดงให้เห็นว่าทั้งสองพอร์ตปิด!


ไม่มีกฎจริงที่ปล่อยหรือปฏิเสธสิ่งใด เพิ่มหนึ่งหรือตรวจสอบนโยบายหรือไม่
BatchyX

คำตอบ:


1
Chain INPUT (policy ACCEPT)

กฎของคุณไม่ตรงกันเมื่อคุณยอมรับทุกสิ่ง

ตรวจสอบแพ็กเก็ตที่ตรงกับ:

iptables -nvL

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

ในการเปลี่ยนนโยบายของคุณ: iptables -P CHAIN RULE

iptables -P INPUT DROP

ฉันไม่เข้าใจ ถ้าเป็นเส้น Chain INPUT (policy ACCEPT) ตัดสินใจทุกอย่างกฎต่อไปนี้จะใช้เพื่ออะไร
misteryes

ในตัวอย่างนี้: ไม่มีอะไรเลย การกำหนดนโยบายเพื่อยอมรับและเพิ่มกฎที่ข้ามไปยอมรับไม่ได้ทำอะไรเลย สิ่งนี้สมเหตุสมผลหากคุณเปลี่ยนเส้นทางไปยังเครือข่ายอื่น (เครือข่ายที่กำหนดเองสำหรับตัวอย่าง)
maxxvw

@misteryes: maxxvw ถูกต้อง สิ่งที่ iptables ทำมีดังต่อไปนี้: มันจะผ่านกฎทั้งหมดในห่วงโซ่จากบนลงล่าง หากไม่มีกฎที่ตรงกับแพ็คเก็ตของคุณ iptables จะทำสิ่งที่กำหนดไว้เป็นนโยบายสำหรับลูกโซ่ (ในกรณีของคุณนี่คือยอมรับ)
etagenklo

ดังนั้นวิธีการแก้ไขกฎ iptables?
misteryes

- & gt; เห็นคำตอบของฉัน
etagenklo

1

จำไว้ว่าเมื่อคุณตรวจสอบพอร์ตที่มี nmap / telnet และรับการ "ปิด" หรือ "การเชื่อมต่อถูกปฏิเสธ" หรือข้อผิดพลาดที่คล้ายกันนั่นหมายความว่าคุณอาจไม่ได้รับอนุญาตพอร์ตหรือคุณได้รับอนุญาตจากพอร์ต

ส่วนตัวฉันจะเขียนกฎด้วยวิธีนี้:

-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT //if you want allow "familiar" packets
-A INPUT -p icmp -j ACCEPT
-A INPUT -i em1 -p tcp -m tcp --dport 54000 -j ACCEPT //the interface is optional if your pc has only one network card
-A INPUT -i em1 -p tcp -m tcp --dport 30000 -j ACCEPT
-A INPUT -i em1 -p udp -m udp --dport 54000 -j ACCEPT
-A INPUT -j INPUT_direct 
-A INPUT -j INPUT_ZONES

ฉันได้อัปเดตคำถามแล้ว
misteryes

คำตอบอัปเดต :)
Fiisch

คุณเปลี่ยนคำสั่งซื้อทำไม ฉันลองรุ่นของคุณยังเซิร์ฟเวอร์ UDP ยังรับแพ็กเก็ต UDP ขาเข้าใน 30000
misteryes

BTW, INPUT_direct และ INPUT_ZONES คืออะไร
misteryes

สามารถเข้าถึง INPUT_ZONES ได้หาก INPUT_direct มี -j RETURN
BatchyX

0

เปลี่ยนนโยบายของคุณสำหรับ chain เป็น DROP:

iptables -P INPUT DROP

แน่นอนคุณจะต้องตรวจสอบให้แน่ใจว่ามีกฎยอมรับสำหรับทุกสิ่งที่คุณต้องการ

คำอธิบาย:

iptables จะตรวจสอบกฎทั้งหมดในห่วงโซ่ถ้าพวกเขาตรงกับแพ็คเก็ตของคุณ หากไม่มีกฎที่ตรงกันนโยบายสำหรับการเชื่อมโยงจะถูกดำเนินการ

ดังนั้นนี่ควรเป็นการกำหนดค่ามาตรฐานสำหรับไฟร์วอลล์: คุณต้องการให้ยอมรับทุกสิ่งที่ระบุไว้ในกฎแล้วปล่อยทุกอย่างอื่น

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