3 votes

En utilisant firewalld et firewall-cmd, comment ajouter une règle à la chaîne INPUT primaire et non à INPUT_direct ?

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 ?

0voto

Chris Points 131

Pour l'instant, la meilleure façon de procéder est de faire exactement ce que j'ai proposé, c'est-à-dire d'ajouter non seulement la règle de la goutte d'eau entrante, mais aussi celle de la goutte d'eau sortante.

 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

Actuellement, il n'y a pas d'autre moyen d'ajouter la règle directement à la chaîne INPUT ou OUTPUT par l'intermédiaire de firewall-cmd.

J'ai décidé de procéder de cette manière parce que je pensais que si un ver ou un logiciel malveillant s'introduisait dans mon serveur, sa connexion sortante vers n'importe quel pays serait considérée comme RELATED, ASSURED ou ESTABLISHED, mais cette méthode, en ajoutant simplement à la chaîne delegate_output, semble fonctionner pour bloquer toutes les connexions sortantes.

Je suis plus que sûr que quelqu'un pourrait améliorer cette réponse en expliquant comment je pourrais mettre la commande dans un init script ou systemd script, mais je pense que je serais plus heureux si fedora trouvait une option qui l'ajouterait directement à la chaîne primaire, mais peut-être que c'est une mauvaise pratique

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X