Liste blanche des adresses IP de la list blanche dans CentOS 7

Je veux configurer le pare-feu CentOS 7 de sorte que toutes les requests entrantes seront bloquées, sauf des adresses IP d'origine que je list blanche. Et pour les adresses IP de la list blanche, tous les ports doivent être accessibles. Quelqu'un peut-il me guider pour cela?

Je suis capable de find quelques solutions (pas sûr qu'elles fonctionneront) pour iptables mais CentOS 7 utilise firewalld . Je ne peux pas find quelque chose de similaire à réaliser avec la command firewall-cmd .

Les interfaces sont dans la zone publique. J'ai également déplacé tous les services à la zone publique déjà.

Je ferais cela en ajoutant des sources à une zone. Première vérification quelles sources il y a pour votre zone:

 firewall-cmd --permanent --zone=public --list-sources 

S'il n'y en a pas, vous pouvez commencer à les append, ceci est votre "list 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 entier /24 et une IP unique, juste pour que vous ayez une reference à la fois pour un sous-réseau et une IP unique)

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 de côté / éditorial: Peu importe, mais j'aime bien la zone «de confiance» pour un set d'adresses IP répertoriées en blanc dans firewalld. Vous pouvez faire une autre évaluation en lisant les suggestions de redhat sur le choix d'une zone .

Voir également:

  • RHEL 7 en utilisant l'article Firewalls
  • Fedora FirewallD docs (assez bon, fedora utilise firewalld depuis un certain time)

Si vous souhaitez DROP packages en dehors de cette source, voici un exemple pour supprimer ceux qui ne sont pas dans le file /24 j'ai utilisé comme exemple plus tôt, je crois que vous pouvez utiliser des règles riches pour cela . C'est conceptuel, je ne l'ai pas testé (plus loin que de voir que centos 7 accepte la command), mais, devrait être assez facile pour faire un pcap et voir si il se comporte comme vous pouvez vous attendre

 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 que ce soit correct. Je ne parviens pas à find des explications claires dans la documentation, mais à partir du comportement implémenté cela ressemble à ça:

  1. l'interface et la source sont utilisées comme sélecteurs – quelle (s) zone (s) activer
  2. les deux sont ignorés pour la zone par défaut (toujours active)

Donc la réponse serait:

  1. verrouiller la zone par défaut, par exemple "public" – pas de ports ouverts ou services disponibles
  2. dans une autre zone, dites «travail» – définissez la source et les ports ouverts

Par exemple, en supposant que la zone par défaut est publique et n'a pas de ports ouverts, ajoutez la source et la scope du port à la zone "work":

  sudo firewall-cmd --zone=work --add-source=192.168.0.0/24 sudo firewall-cmd --zone=work --add-port=8080-8090/tcp 

maintenant vérifier les zones actives (la zone par défaut est toujours active):

  sudo firewall-cmd --get-active-zones 

tu auras:

  work sources: 192.168.0.0/24 

les règles de zone "travail" s'appliqueront donc au sous-réseau particulier. Vous aurez une gamme de ports ouverts pour le sous-réseau "whitelist" = comme demandé. Et bien sûr, utilisez l'option --permanent dans les --add-xxx pour faire en sorte que le comportement persiste.

À son tour, tous les ports ou services que vous avez dans la zone "publique" (par défaut) s'appliqueront à toutes les interfaces et adresses sources.

  sudo firewall-cmd --list-all-zones public (default) interfaces: sources: services: ports: masquerade: no forward-ports: icmp-blocks: rich rules: work (active) interfaces: sources: 192.168.0.0/24 services: dhcpv6-client ipp-client ssh ports: 8080-8090/tcp masquerade: no forward-ports: icmp-blocks: rich rules: 

Le même système fonctionne pour les interfaces. Dites en ajoutant l'interface "ens3" à la zone "travail":

  sudo firewall-cmd --zone=work --add-interface=ens3 

vous utiliserez les règles de zone "work" pour toutes les requêtes de l'interface particulière – plus sélecteur grossier que "source".

Avertissement: Je n'ai pas essayé ce que je suggère, mais c'est assez proche de la dernière configuration firewalld que j'ai faite, alors je m'en vais. Firewalld vous fournit quelques zones préconfigurées, uniquement à cette fin. Il y en a un appelé "drop", qui laisse tomber tout ce qui arrive, et un appelé "trusted", qui permet n'importe quelle connection (c'est à dire que vous ne devriez même pas avoir besoin d'ouvrir des ports individuels, je pense). L'astuce consiste à get la bonne zone pour triggersr ce que vous voulez.

Firewalld appliquera les règles pour une zone en fonction de la priorité suivante:

  • Si l'adresse IP source correspond à une adresse IP source liée à une zone, elle l'utilise.
  • Si l'adresse IP source ne correspond à aucune zone particulière, il vérifie s'il existe une zone configurée pour l' interface sur laquelle le package est entré. S'il y en a un, ça l'utilise.
  • Enfin, si rien d'autre ne correspond, il utilise la zone par défaut.

Donc, tout d'abord, vous voulez lier vos IP de confiance à la zone "de confiance":

 firewall-cmd --permanent --zone=trusted --add-source=1.2.3.4 

Ensuite, définissez votre zone par défaut sur "drop" ou liez votre interface à celle-ci:

 firewall-cmd --permanent --set-default-zone=drop firewall-cmd --permanent --zone=drop --change-interface=eth0 

puis effectuez les modifications (avertissement: cela vous fera probablement perdre votre connection si vous faites ceci sur le réseau et vous n'avez pas ajouté votre IP source à la zone de confiance):

 firewall-cmd --reload 

Bien sûr, vous pouvez aussi les tester temporairement en omettant le "- permanent" (et vous n'avez pas besoin de – recharger non plus).

Juste pour append à la réponse de Normunds:

 $ sudo firewall-cmd --permanent --zone=work --add-source=172.16.0.0/12 $ sudo firewall-cmd --permanent --zone=work --add-port=8080-8090/tcp 

Pour bloquer tout autre trafic:

 $ sudo firewall-cmd --set-default-zone=drop 

Avertissement: si vous accédez depuis une machine distante, vous risquez de déconnecter votre session de connection. Si vous n'avez pas obtenu la configuration IP de la zone de travail correctement, vous ne pourrez pas vous connecter à votre server.

Pour recharger le pare-feu:

 $ sudo firewall-cmd --reload 

Je ne pouvais pas find comment append deux adresses IP différentes avec '–add-rich-rule'.

J'opère mes pare-feu de cette manière. Voici ma méthode préférée pour accomplir ce que vous voulez.

 # firewall-cmd --list-all 

Vous verrez que votre zone par défaut est publique et que les services activés sont dhcpv6-client et ssh. Nous ne voulons pas de services publics disponibles, n'est-ce pas? Seules les adresses IP en list blanche sont autorisées. Supprimons donc les deux services publics.

 # firewall-cmd --zone=public --remove-service=ssh --permanent # firewall-cmd --zone=public --remove-service=dhcpv6-client --permanent 

Maintenant, mettons en list blanche une adresse IP spécifique qui accorde l'access à n'importe quel port.

 #firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="xx.xx.xx.xx" accept' 

Maintenant, faisons une list blanche d'une autre adresse IP, que nous voulons seulement avoir access à l'access SSH, http et https. Aucun autre port.

 #firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="xx.xx.xx.xx" service name="ssh" accept' #firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="xx.xx.xx.xx" service name="http" accept' #firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="xx.xx.xx.xx service name="https" accept' 

Si vous vous connectez via SSH, assurez-vous d'autoriser votre adresse IP avant d'appliquer votre nouveau jeu de règles. Lorsque vous êtes prêt à appliquer les nouvelles règles.

 #firewall-cmd --reload 

Vous pouvez gérer facilement par Rich Rule.

Premier pas

 firewall-cmd --permanent --set-default-zone=home firewall-cmd --permanent --zone=drop --change-interface=eth0 

Deuxième étape – Ajouter une règle riche

 firewall-cmd --permanent --zone=home --add-rich-rule='rule family="ipv4" source address="192.168.78.76/32" accept' 

Tous les ports sont accessibles par 192.168.2.2 une fois que vous avez ajouté la règle riche et bloqué chaque port d'une autre source.

Si vous ajoutez un port ou un service par la command ci-dessous, il sera accessible par toutes les sources.

 firewall-cmd --zone=public --add-service=ssh firewall-cmd --zone=public --add-port=8080 

Si vous souhaitez ouvrir un port spécifique pour un Ip spécifique que la command ci-dessous

 firewall-cmd --permanent --zone=home --add-rich-rule='rule family="ipv4" port="8080/tcp" source address="192.168.78.76/32" accept' 

La meilleure réponse de dougBTV est erronée. Je ne peux pas répondre à sa réponse parce que je n'ai pas encore les points de rep requirejs, alors je vais vous expliquer ici:

Il utilise la zone par défaut "public". Il relie les réseaux à cette zone et ouvre les ports sur cette zone. Mais tout le trafic passe par la zone par défaut, vous avez maintenant autorisé le monde entier à accéder à ces ports.

La 2ème réponse de Normunds Kalnberzins est correcte. Vous souhaitez créer une zone distincte, associer votre réseau / IP à cette zone et ouvrir les ports de cette zone.

Vous pouvez également tout laisser dans la zone par défaut et utiliser les règles riches de firewalld pour autoriser l'access à partir de certaines adresses IP:

 firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.2.2" accept' 

Cela autorise tout le trafic de 192.168.2.2 à tous les ports et parce que je n'ai pas spécifié de zone, celle-ci sera appliquée à 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'access de cette adresse IP uniquement à un port spécifique, je le ferais:

 firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.2.2" port port="1234" protocol="tcp" accept' 

La meilleure pratique consiste à exécuter ces commands sans –permanent (ou –perm) qui affecte le pare-feu en cours d'exécution. Après avoir testé le fonctionnement de votre règle, exécutez-la à nouveau avec –perm ajouté afin que les recharges subséquentes du pare-feu soient mémorisées.