J'accomplirais cela en ajoutant des sources à une zone. Vérifiez d'abord les sources disponibles pour votre zone:
firewall-cmd --permanent --zone=public --list-sources
S'il n'y en a pas, vous pouvez commencer à les ajouter, c'est votre "liste blanche"
firewall-cmd --permanent --zone=public --add-source=192.168.100.0/24
firewall-cmd --permanent --zone=public --add-source=192.168.222.123/32
(Cela ajoute un ensemble /24
et une seule IP, juste pour que vous ayez une référence à la fois pour un sous-réseau et une seule IP)
Définissez la plage de ports que vous souhaitez ouvrir:
firewall-cmd --permanent --zone=public --add-port=1-22/tcp
firewall-cmd --permanent --zone=public --add-port=1-22/udp
Cela ne fait que les ports 1 à 22. Vous pouvez élargir cela, si vous le souhaitez.
Maintenant, rechargez ce que vous avez fait.
firewall-cmd --reload
Et vérifiez votre travail:
firewall-cmd --zone=public --list-all
Note latérale / éditorial: Peu importe, mais j'aime la zone "de confiance" pour un ensemble d'adresses IP répertoriées dans firewalld. Vous pouvez faire une évaluation supplémentaire en lisant les suggestions de redhat sur le choix d'une zone .
Voir également:
Si vous souhaitez mettre des DROP
paquets en dehors de cette source, voici un exemple pour supprimer ceux en dehors de celui que /24
j'ai utilisé comme exemple plus tôt, vous pouvez utiliser des règles riches pour cela , je crois. C'est conceptuel, je ne l'ai pas testé (plus loin que de voir que centos 7 accepte la commande), mais, devrait être assez facile pour faire un pcap et voir s'il se comporte comme vous vous y attendez
firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.100.0/24" invert="True" drop'
Même si une réponse a été acceptée et votée, je ne pense pas qu'elle soit correcte. Je ne trouve pas d'explication claire dans la documentation, mais d'après le comportement implémenté, cela ressemble à ceci:
La réponse serait donc:
Par exemple, en supposant que la zone par défaut est publique et n'a pas de ports ouverts, ajoutez la source et la plage de ports à la zone "de travail":
vérifiez maintenant les zones actives (la zone par défaut est toujours active):
tu auras:
donc les règles de zone "de travail" s'appliqueront au sous-réseau particulier. Vous aurez une gamme de ports ouverts pour le "whitelist" = sous-réseau comme demandé. Et bien sûr, utilisez l'
--permanent
option dans les--add-xxx
instructions pour que le comportement reste fidèle.En retour, tous les ports ou services que vous avez dans la zone "publique" (par défaut) s'appliqueront à toutes les interfaces et adresses source.
Le même système fonctionne pour les interfaces. Dites en ajoutant l'interface "ens3" à la zone "travail":
vous utiliserez les règles de zone "de travail" pour toutes les demandes de l'interface particulière - sélecteur plus grossier que "source".
la source
sources
liste blanche. La raison en était que la zone avait une interface assignée.public
zone, le cas échéant (ces services seront disponibles pour toutes les adresses car les interfaces sont attribuées à lapublic
zone par défaut). Ou changez la zone par défaut en une autre:block
oudrop
(c'est une pratique courante). Ou changez lapublic
cible de zone en%%REJECT%%
ouDROP
.Avertissement: je n'ai pas vraiment essayé ce que je suggère ici, mais c'est assez proche de la dernière configuration de pare-feu que j'ai faite, donc je m'en vais. Firewalld vous fournit quelques zones préconfigurées, juste à cet effet. Il y en a un appelé "drop", qui supprime tout ce qui entre, et un appelé "trust", qui permet toute connexion (c'est-à-dire, vous ne devriez même pas avoir besoin d'ouvrir des ports individuels, je pense). L'astuce consiste à obtenir la bonne zone pour déclencher ce que vous voulez.
Firewalld appliquera les règles d'une zone en fonction de la priorité suivante:
Donc, tout d'abord, vous voulez lier vos IP de confiance à la zone "de confiance":
Ensuite, définissez votre zone par défaut sur "drop" ou liez votre interface à celle-ci:
puis effectuez les modifications (avertissement: cela interrompra probablement votre connexion si vous le faites sur le réseau et que vous n'avez pas ajouté votre IP source à la zone de confiance):
Bien sûr, vous pouvez également les tester temporairement en omettant le "--permanent" (et vous n'avez pas non plus à - recharger).
la source
block
peut également être utilisé (au lieu dedrop
) si vous voulez dire aux autres hôtes que vous ne leur parlez pas ....J'utilise mes pare-feu de cette manière. Voici ma méthode préférée pour accomplir ce que vous voulez.
Vous verrez que votre zone par défaut est publique et les services activés sont dhcpv6-client et ssh. Nous ne voulons pas de services publics disponibles, non? Seuls les IP sur liste blanche sont autorisés. Supprimons donc les deux services publics.
Maintenant, ajoutons à la liste blanche une adresse IP spécifique qui donne accès à n'importe quel port.
Maintenant, inscrivons sur liste blanche une autre IP, que nous voulons seulement avoir accès aux accès SSH, http et https. Pas d'autres ports.
Si vous vous connectez via SSH, assurez-vous d'autoriser votre IP avant d'appliquer votre nouveau jeu de règles. Lorsque vous êtes prêt à appliquer les nouvelles règles.
la source
Vous pouvez gérer facilement par Rich Rule.
Premier pas
Deuxième étape - Ajouter une règle riche
Tous les ports sont accessibles par 192.168.2.2 une fois que vous avez ajouté une règle riche et bloqué tous les ports d'autres sources.
Si vous ajoutez un port ou un service par la commande ci-dessous, il sera accessible par toutes les sources.
Si vous souhaitez ouvrir un port spécifique pour une commande IP spécifique à celle ci-dessous
la source
La meilleure réponse de dougBTV est fausse. Je ne peux pas répondre à sa réponse car je n'ai pas encore les points de représentation requis, je vais donc expliquer ici:
Il utilise la zone par défaut "public". Il lie des réseaux à cette zone puis ouvre des ports sur cette zone. Mais, dans une configuration par défaut, tout le trafic passe par la zone par défaut, pas seulement les réseaux sources auxquels vous y êtes lié. Ses commandes --add-source ne font donc aucune différence et ses commandes --add-port ont maintenant permis au monde entier d'accéder à ces ports.
La 2e réponse de Normunds Kalnberzins est correcte. Vous souhaitez créer une zone distincte, lier votre réseau / IP à cette zone et ouvrir les ports de cette zone.
Alternativement, vous pouvez tout laisser dans la zone par défaut et utiliser les règles riches de firewalld pour autoriser l'accès à partir de certaines IP:
Cela autorise tout le trafic de 192.168.2.2 vers tous les ports et comme je n'ai pas spécifié de zone, cela sera appliqué à la zone par défaut "public" (utilisez --get-default-zone pour vérifier quelle est votre zone par défaut et - get-active-zones pour voir quelles zones sont actuellement utilisées).
Pour autoriser l'accès de cette IP uniquement à un port spécifique, je ferais:
La meilleure pratique consiste à exécuter ces commandes sans --permanent (ou --perm pour faire court), ce qui affecte le pare-feu en cours d'exécution. Après avoir vérifié que votre règle fonctionne, exécutez-la à nouveau avec --perm ajouté afin qu'elle soit mémorisée lors des rechargements de firewalld ultérieurs.
la source
Pour ajouter à la réponse de Normunds:
Pour bloquer tout autre trafic:
Avertissement: si vous accédez à partir d'une machine distante, cela peut déconnecter votre session de connexion. Si vous n'avez pas obtenu la configuration IP de la zone de travail correctement, vous ne pourrez pas vous connecter à votre serveur.
Pour recharger le pare-feu:
Je ne pouvais pas comprendre comment ajouter deux adresses IP différentes avec «--add-rich-rule».
la source
ipset
similairefirewall-cmd --permanent --new-ipset=blacklist --type=hash:ip
à l'ipset avecfirewall-cmd --ipset=blacklist --add-entry=192.168.1.4
ensuite vous pouvez utiliserfirewall-cmd --add-rich-rule='rule source ipset=blacklist drop'
Je suis surpris que les réponses de la zone de confiance ne soient pas la réponse sélectionnée. La zone de confiance a une «cible: ACCEPTER» par défaut tandis que les autres sont «cible: par défaut». Même si cela n'a pas vraiment d'importance, il semble que ce soit la méthode prévue en raison de son nom et de sa valeur cible par défaut.
Comment verrouiller rapidement une boîte pour que vous seul puissiez y accéder:
Après avoir répertorié toutes les zones, vous devriez voir quelque chose comme ceci:
Remarque: j'ai supprimé les lignes avec une valeur nulle / manquante. L'important est que trust et drop soient tous deux (actifs) et drop a votre interface publique.
Ce que cela fait à iptables pour la démonstration:
la source