mit firewalld und firewall-cmd wie man eine Regel zur primären INPUT-Kette hinzufügt, nicht INPUT_direct

5165
Chris

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?

1

1 Antwort auf die Frage

0
Chris

Im Moment ist der beste Weg, dies zu erreichen, genau das zu tun, was ich vorgeschlagen hatte, nämlich nicht nur die eingehende Drop-Regel, sondern auch den ausgehenden Drop hinzuzufügen, so dass die Befehle wären

 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 

Derzeit gibt es keine andere Möglichkeit, die Regel durch Firewall-Cmd direkt der INPUT- oder OUTPUT-Kette hinzuzufügen

Ich habe das nur so gemacht, weil ich der Meinung war, dass wenn eine Art Wurm oder Malware in meinen Server gerät, seine ausgehende Verbindung zu einem beliebigen Land als RELATED, ASSURED oder ESTABLISHED betrachtet wird. Diese Methode wird jedoch durch Hinzufügen der Delegate_output-Kette erreicht scheint zu arbeiten, um alle ausgehenden Verbindungen zu blockieren, also bin ich zufrieden

Ich bin mehr als sicher, dass jemand diese Antwort besser beantworten könnte, indem ich erkläre, wie ich den Befehl in ein init-Skript oder ein systemd-Skript einfügen könnte, aber ich denke, ich wäre froh, wenn Fedora nur eine Option herausfinden würde, die ihn direkt zum Primärsystem hinzufügt Kette, aber vielleicht ist das schlechte Praxis