ดังนั้นหลังจากอ่าน 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
และถ้าเป็นตัวเลือกที่ฉันจะวางสคริปต์นี้