web-dev-qa-db-fra.com

bloquer tout sauf quelques ips avec firewalld

Sur une machine en réseau Linux, je voudrais restreindre l'ensemble d'adresses sur la zone "publique" (concept firewalld), qui sont autorisées à y accéder. Donc, le résultat final serait qu'aucune autre machine ne peut accéder à aucun port ou protocole, sauf ceux explicitement autorisés, une sorte de mélange de

  --add-rich-rule='rule family="ipv4" source not  address="192.168.56.120" drop'

  --add-rich-rule='rule family="ipv4" source not  address="192.168.56.105" drop'

Le problème ci-dessus est que ce n'est pas une vraie liste, il bloquera tout car si sa seule adresse est bloquée en n'étant pas la même que l'autre, générant un effet accidentel de "drop all", comment pourrais-je "débloquer" un non spécifique ensemble contigu? la source accepte-t-elle une liste d'adresses? je n'ai rien vu dans mon regard sur les documents ou le résultat google jusqu'à présent.


EDIT: Je viens de créer ceci:

# firewall-cmd  --zone=encrypt --list-all
encrypt (active)
  interfaces: eth1
  sources: 192.168.56.120
  services: ssh
  ports: 6000/tcp
  masquerade: no
  forward-ports: 
  icmp-blocks: 
  rich rules: 

Mais je peux toujours atteindre le port 6000 à partir de .123 mon intention était que si une source n'est pas répertoriée, elle ne devrait pouvoir accéder à aucun service ou port

18
mike

Les règles riches ne sont pas du tout nécessaires.

Si vous souhaitez restreindre une zone à un ensemble spécifique d'adresses IP, définissez simplement ces adresses IP comme sources pour la zone elle-même (et supprimez toute définition d'interface qui peut être présente, car elles remplacent les adresses IP source).

Vous ne voulez probablement pas faire cela dans la zone "publique", car cela est sémantiquement destiné à ce que les services publics soient ouverts sur le monde.

Au lieu de cela, essayez d'utiliser une zone différente telle que "interne" pour la plupart des adresses IP de confiance pour accéder à des services potentiellement sensibles tels que sshd. (Vous pouvez également créer vos propres zones.)

Attention: ne confondez pas la zone spéciale "de confiance" avec la zone "interne" normale. Toutes les sources ajoutées à la zone "de confiance" seront autorisées sur tous les ports; l'ajout de services à la zone "de confiance" est autorisé mais cela n'a aucun sens.

firewall-cmd --zone=internal --add-service=ssh
firewall-cmd --zone=internal --add-source=192.168.56.105/32
firewall-cmd --zone=internal --add-source=192.168.56.120/32
firewall-cmd --zone=public --remove-service=ssh

Le résultat de ceci sera une zone "interne" qui permet l'accès à ssh, mais seulement à partir des deux adresses IP données. Pour le rendre persistant, réexécutez chaque commande avec --permanent en annexe.

24
Michael Hampton

Selon firewalld.richlanguage:

Source source [not] address = "address [/ mask]"

   With the source address the Origin of a connection attempt can be limited to the source address. An address is either a single IP address, or a network IP address. The address has to match the rule family (IPv4/IPv6). Subnet mask is expressed in either
   dot-decimal (/x.x.x.x) or prefix (/x) notations for IPv4, and in prefix notation (/x) for IPv6 network addresses. It is possible to invert the sense of an address by adding not before address. All but the specified address will match then.

Spécifiez un masque de réseau pour l'adresse afin d'autoriser les blocs contigus.

En dehors de cela, vous pouvez essayer de créer un ipset pour une liste non contiguë d'adresses IP autorisées.

Par exemple, dans /etc/firewalld/direct.xml:

<?xml version="1.0" encoding="utf-8"?>
<direct>
   <rule ipv="ipv4" table="filter" chain="INPUT" priority="0">-m set --match-set whitelist src -j ACCEPT</rule>
</direct>

Le ipset réel doit être créé séparément.

1
dawud

Vous pouvez gérer facilement par Rich Rule.

Première étape

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é 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.

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

Si vous souhaitez ouvrir un port spécifique pour une commande Ip inférieure à la commande ci-dessous

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