Nachdem ich die firewalld-Manpage und die Fedora-Dokumentation gelesen habe, bin ich zu dem Schluss gekommen, dass ich die Struktur verwenden muss, um eine Firewall mit bestimmten Argumenten hinzuzufügen
firewall-cmd [--permanent] --direct --add-rule { ipv4 | ipv6 | eb } <table> <chain> <priority> <args>
Ich versuche insbesondere, eine benutzerdefinierte Regel mit Geoip-Matching zu erstellen, um alle Länder zu blockieren, die nicht aus den USA stammen. Bevor ich dies tue, muss ich zuerst eine passende Regel hinzufügen, die den Zugriff von meinem lokalen Netzwerk aus ermöglicht, da ich den Server über ssh in einem lokalen privaten Netzwerk kontrolliere. Ich füge also eine Regel hinzu
firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -s 192.168.0.0/24 -j ACCEPT
Ich füge dann eine zweite Regel hinzu
firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -m geoip ! --src-cc US -j DROP
Diese fügen der Eingabekette hinzu, fügen jedoch unter einer Unterkette mit dem Namen INPUT_direct hinzu. Diese Unterkette wird in der generischen Liste der unveränderten INPUT-Regeln als 3. und eine Schnellliste aufgeführt
iptables -L INPUT
zeigt die INPUT-Kette als diese
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
und das INPUT_direct as
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
das kann für einige funktionieren, aber wenn ich renne
ping france.fr
Ich bekomme als Ergebnis
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
Dies liegt höchstwahrscheinlich an der INPUT-Regel Nr. 1
iptables -L INPUT 1 ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
Ich stelle fest, dass ich einfach den gleichen benutzerdefinierten Regelsatz auf die OUTPUT-Kette anwenden und die Ping-Anforderung an france.fr oder etwas außerhalb der USA blockieren könnte, aber wie könnte ich das Regelset zur Basis-INPUT-Kette hinzufügen?
iptables -L INPUT
zeigt dies stattdessen
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
Ich frage das, weil ich das Gefühl habe, was ich will, anstatt dass das Ergebnis der Firewall-cmd ein bisschen sicherer ist. Bin ich falsch? Ich möchte, dass die Firewall von firewalld gesteuert wird, anstatt firewalld zu verwerfen und auf iptables zurückzugreifen, um eine bessere zukünftige Integration und mögliche Probleme mit der Abschreibung zu erreichen. Dies ist sogar mit firewalld möglich, oder ich werde gezwungen sein, ein benutzerdefiniertes Skript auszuführen boot up das beinhaltet
iptables -I INPUT 1 -s 192.168.0.0/24 -j ACCEPT iptables -I INPUT 2 -m geoip ! --src-cc US -j DROP
und wenn dies die Option ist, wo kann ich dieses Skript platzieren?