Après avoir lu la page de manuel de firewalld et la documentation de fedora, j'ai compris que pour ajouter une règle personnalisée au firewall avec des arguments spécifiques, je dois utiliser la structure suivante
firewall-cmd [--permanent] --direct --add-rule { ipv4 | ipv6 | eb } <table> <chain> <priority> <args>
Ce que j'essaie de faire en particulier, c'est de créer une règle personnalisée avec une correspondance géographique pour bloquer tous les pays qui ne sont pas originaires des États-Unis. Avant de faire cela, je dois d'abord ajouter une règle de correspondance qui autorise l'accès depuis mon réseau local car je contrôle le serveur via ssh sur un réseau local privé, donc j'ajoute une règle comme suit
firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -s 192.168.0.0/24 -j ACCEPT
J'ajoute ensuite une deuxième règle comme suit
firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -m geoip ! --src-cc US -j DROP
Ceux-ci s'ajoutent à la chaîne d'entrée, mais sous une sous-chaîne appelée INPUT_direct, cette sous-chaîne est répertoriée dans la liste générique des règles INPUT inchangées comme étant la troisième et une rapide
iptables -L INPUT
montre la chaîne INPUT comme suit
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
et l'INPUT_direct comme
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
Cela peut fonctionner pour certains, mais si j'exécute
ping france.fr
J'obtiens comme résultat
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
cela est plus que probablement dû à la règle d'ENTRÉE n° 1
iptables -L INPUT 1
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
Je sais que je pourrais simplement appliquer le même jeu de règles personnalisé à la chaîne OUTPUT et bloquer les requêtes ping vers france.fr ou tout autre site extérieur aux États-Unis, mais comment puis-je ajouter le jeu de règles à la chaîne INPUT de base de façon à ce qu'il ne soit pas possible de l'appliquer à la chaîne OUTPUT.
iptables -L INPUT
montre ceci à la place
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
Je pose cette question parce que j'ai l'impression que ce que je veux au lieu de ce qui est le résultat du firewall-cmd est un peu plus sûr, est-ce que je me trompe ? J'aimerais que le pare-feu reste contrôlé par firewalld plutôt que d'abandonner firewalld et de revenir à iptables pour une meilleure intégration future et d'éventuels problèmes de dépréciation, donc est-ce possible avec firewalld, ou vais-je être obligé de lancer un script personnalisé au démarrage qui inclut
iptables -I INPUT 1 -s 192.168.0.0/24 -j ACCEPT
iptables -I INPUT 2 -m geoip ! --src-cc US -j DROP
Et si c'est le cas, où dois-je placer ce script ?