Premier message sur ServerFault donc je vais essayer de bien le faire :)
J'ai plusieurs environnements (par exemple, prod, dev, test, etc) et j'essaie d'écrire le fichier IPTables pour mes serveurs RHEL 6.6 qui permet de faire communiquer des groupes spécifiques de machines entre ces environnements sur des ports définis.
Initialement, avoir les règles pour chaque destination différente ou sous-réseau source définis sur sa propre ligne fonctionnait - cependant le fichier IPTables résultant est assez volumineux. Dans une tentative de simplifier/nettoyer l'ensemble des règles j'ai essayé de combiner des règles pour plusieurs adresses IP sources ou destinations utilisant les mêmes ports.
J'ai trouvé un article pertinent sur ServerFault sur le sujet IPTables Multiple Source IPs mais l'exemple le mieux noté ne semble pas fonctionner pour moi.
Par exemple, en essayant de combiner les deux règles suivantes :
-A INPUT -i $INTERFACE -m conntrack --ctstate NEW,ESTABLISHED,RELATED -s $CV1 -p tcp --dport 8400:8403 -j ACCEPT -m comment --comment "Source 1"
-A INPUT -i $INTERFACE -m conntrack --ctstate NEW,ESTABLISHED,RELATED -s $CV2 -p tcp --dport 8400:8403 -j ACCEPT -m comment --comment "Source 2"
En cela :
-A INPUT -i $INTERFACE -m conntrack --ctstate NEW,ESTABLISHED,RELATED -s $CV1,$CV2 -p tcp --dport 8400:8403 -j ACCEPT -m comment --comment "Not Working!"
J'ai aussi des règles qui mélangent à la fois des adresses IP source multiples et des adresses IP destination multiples (sans succès également) :
-A INPUT -i $INTERFACE -s $FOO1,$FOO2 -d $FOO1,$FOO2 -p tcp --dport 8400:8403 -j ACCEPT
-A OUTPUT -o $INTERFACE -s $FOO1,$FOO2 -d $FOO1,$FOO2 -p tcp --dport 8400:8403 -j ACCEPT
Remarque : Le fichier /etc/sysconfig/iptables est écrit par mon script de configuration personnalisé (d'où les variables $), avec les adresses IP définies de cette manière :
CV1=10.1.1.0/27
CV2=10.25.128.128/29
FOO1=10.1.30.140/30
FOO2=10.2.30.140/30
Les échecs de trafic sont détectés par les règles de rejet/journalisation en bas du fichier IPTables :
-A INPUT -i $INTERFACE -m limit --limit 5/m --limit-burst 7 -j LOG --log-prefix "Packet Rejected. "
-A FORWARD -i $INTERFACE -m limit --limit 5/m --limit-burst 7 -j LOG --log-prefix "Packet Forward Rejected. "
-A OUTPUT -o $INTERFACE -m limit --limit 5/m --limit-burst 7 -j LOG --log-prefix "Packet Dropped. "
-A INPUT -i $INTERFACE -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -i $INTERFACE -j REJECT --reject-with icmp-host-prohibited
-A OUTPUT -o $INTERFACE -j REJECT --reject-with icmp-host-prohibited
En me référant à l'entrée de la page de manuel IPTables, il semble que cela devrait fonctionner :
[!] -s, --source address[/mask][,...]
Spécification de source. L'adresse peut être un nom de réseau, un nom d'hôte, une adresse IP de réseau (avec /masque), ou une adresse IP simple. Les noms d'hôtes seront résolus une seule fois, avant que la règle soit soumise au noyau. Notez que spécifier un nom à résoudre avec une requête distante comme DNS est une très mauvaise idée. Le masque peut être un masque de réseau ou un nombre simple, spécifiant le nombre de 1 à gauche du masque réseau. Ainsi, un masque de 24 équivaut à 255.255.255.0. Un argument "!" avant la spécification de l'adresse inverse le sens de l'adresse. Le drapeau --src est un alias pour cette option.
Plusieurs adresses peuvent être spécifiées, mais cela se traduira par plusieurs règles (lors de l'ajout avec -A), ou causera la suppression de plusieurs règles (avec -D).[!] -d, --destination address[/mask][,...]
Spécification de destination. Voir la description du drapeau -s (source) pour une description détaillée de la syntaxe. Le drapeau --dst est un alias pour cette option.
Quelqu'un pourrait-il m'éclairer sur ce que je fais de mal ici ?