การใช้ firewalld และ firewall-cmd วิธีการเพิ่มกฎเข้ากับเชน INPUT หลักไม่ใช่ INPUT_direct


1

ดังนั้นหลังจากอ่าน man page ของ firewalld และเอกสารของ fedora ฉันได้เข้าใจว่าการเพิ่มกฎที่กำหนดเองให้กับไฟร์วอลพร้อมด้วยเหตุผลเฉพาะที่ฉันต้องใช้โครงสร้าง

 firewall-cmd [--permanent] --direct --add-rule { ipv4 | ipv6 | eb } <table> <chain> <priority> <args>

สิ่งที่ฉันพยายามทำโดยเฉพาะคือสร้างกฎที่กำหนดเองด้วยการจับคู่ geoip เพื่อบล็อกทุกประเทศที่ไม่ได้มาจากสหรัฐอเมริกา ก่อนที่ฉันจะทำฉันต้องเพิ่มกฎการจับคู่ที่อนุญาตให้เข้าถึงจากเครือข่ายท้องถิ่นของฉันก่อนที่ฉันจะควบคุมเซิร์ฟเวอร์ผ่าน ssh บนเครือข่ายส่วนตัวในพื้นที่ดังนั้นฉันจึงเพิ่มกฎเช่นนี้

 firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -s 192.168.0.0/24 -j ACCEPT

ฉันจึงเพิ่มกฎข้อที่สองเช่นนั้น

 firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -m geoip ! --src-cc US -j DROP

สิ่งเหล่านี้เพิ่มในห่วงโซ่การป้อนข้อมูล แต่เพิ่มภายใต้ห่วงโซ่ย่อยที่เรียกว่า INPUT_direct ห่วงโซ่ย่อยนี้จะแสดงรายการในรายการกฎ INPUT ทั่วไปไม่เปลี่ยนแปลงเป็นที่ 3 และรวดเร็ว

 iptables -L INPUT

แสดงเชน INPUT เช่นนี้

 Chain INPUT (policy ACCEPT)
 target     prot opt source               destination
 ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
 ACCEPT     all  --  anywhere             anywhere
 INPUT_direct  all  --  anywhere             anywhere
 INPUT_ZONES_SOURCE  all  --  anywhere             anywhere
 INPUT_ZONES  all  --  anywhere             anywhere
 ACCEPT     icmp --  anywhere             anywhere
 DROP       all  --  anywhere             anywhere             ctstate INVALID
 REJECT     all  --  anywhere             anywhere             reject-with icmp-host-prohibited

และ INPUT_direct เป็น

 Chain INPUT_direct (1 references)
 target     prot opt source               destination
 ACCEPT     all  --  192.168.0.0/24         anywhere
 DROP       all  --  anywhere             anywhere             -m geoip ! --source-country US

สิ่งนี้อาจใช้ได้สำหรับบางคน แต่ถ้าฉันวิ่ง

 ping france.fr

ฉันได้รับเป็นผล

 PING france.fr (46.18.192.148) 56(84) bytes of data.
 64 bytes from ns1-sgg.produhost.net (46.18.192.148): icmp_seq=1 ttl=52 time=136 ms
 64 bytes from ns1-sgg.produhost.net (46.18.192.148): icmp_seq=2 ttl=52 time=135 ms
 64 bytes from ns1-sgg.produhost.net (46.18.192.148): icmp_seq=3 ttl=52 time=136 ms

นี่เป็นไปได้มากกว่าเนื่องจากกฎ INPUT # 1

 iptables  -L INPUT 1

 ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED

ฉันรู้ว่าฉันสามารถใช้ ruleset ที่กำหนดเองแบบเดียวกันกับเชน OUTPUT และบล็อกคำขอ ping ไปที่ france.fr หรือสิ่งอื่น ๆ นอกสหรัฐอเมริกา แต่ฉันจะเพิ่ม ruleset ไปยังเชน INPUT ได้อย่างไร

 iptables -L INPUT

แสดงสิ่งนี้แทน

 Chain INPUT (policy ACCEPT)
 target     prot opt source               destination
 ACCEPT     all  --  192.168.0.0/24         anywhere
 DROP       all  --  anywhere             anywhere             -m geoip ! --source-country US
 ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
 ACCEPT     all  --  anywhere             anywhere
 INPUT_direct  all  --  anywhere             anywhere
 INPUT_ZONES_SOURCE  all  --  anywhere             anywhere
 INPUT_ZONES  all  --  anywhere             anywhere
 ACCEPT     icmp --  anywhere             anywhere
 DROP       all  --  anywhere             anywhere             ctstate INVALID
 REJECT     all  --  anywhere             anywhere             reject-with icmp-host-prohibited

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

 iptables -I INPUT 1 -s 192.168.0.0/24 -j ACCEPT
 iptables -I INPUT 2 -m geoip ! --src-cc US -j DROP

และถ้าเป็นตัวเลือกที่ฉันจะวางสคริปต์นี้

คำตอบ:


0

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

 firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 0 -s 192.168.0.0/24 -j ACCEPT
 firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 1 -m geoip ! --src-cc US -j DROP
 firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 0 -d 192.168.0.0/24 -j ACCEPT
 firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 1 -m geoip ! --dst-cc US -j DROP

ขณะนี้ไม่มีวิธีอื่นในการเพิ่มกฎลงในเชน INPUT หรือ OUTPUT โดยตรงผ่าน firewall-cmd

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

ฉันมั่นใจว่ามีคนตอบคำถามได้ดีกว่าโดยอธิบายว่าฉันสามารถใช้คำสั่งในสคริปต์ init หรือสคริปต์ systemd ได้อย่างไร แต่ฉันคิดว่าฉันจะมีความสุขมากขึ้นถ้า fedora เพิ่งจะคิดออกตัวเลือกที่จะเพิ่มไปยังหลักโดยตรง โซ่ แต่บางทีนี่อาจจะเป็นการปฏิบัติที่ไม่ดี

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