[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: vérifier l'utilisation d'une règle Iptables



Salut,

Seb a écrit :

Sur ma passerelle, j'ai ajouté des règles Iptables pour améliorer la
sécurité, en empêchant par exemple les trames venant d'Internet qui ont
comme source des IP de classes A, B, C et D.

Alors tes règles ne doivent pas laisser passer grand chose, dans la mesure ou la plupart des adresses internet appartiennent à ces anciennes classes. Classes qui sont désormais obsolètes depuis l'adoption de CIDR, c'est-à-dire un bon moment.

	iptables -t nat -A PREROUTING -i $WAN_INTERFACE -s 10.0.0.0/8 -j DROP

Dans ce cas, je sais quelles fonctionnent avec "iptables -t nat -L -n
- -v" et le nb de paquets donné.

Remarque : bien que supportant les cibles ACCEPT et DROP, les chaînes PREROUTING, OUTPUT et POSTROUTING de la table nat ne sont pas prévues pour faire du filtrage mais uniquement du NAT (SNAT, DNAT, MASQUERADE, REDIRECT, NETMAP...), à cause de leur fonctionnement particulier en relation avec le suivi de connexion : seul le premier paquet d'une connexion est examiné par les règles des chaînes de la table nat, et le résultat détermine également le traitement des paquets suivants dans les deux sens.

Le filtrage (ACCEPT, REJECT, DROP...) doit avoir lieu dans les chaînes INPUT, OUTPUT et FORWARD de la table filter (table par défaut) qui sont prévues pour ça. A la limite, si on a besoin de filtrer sur des critères qui peuvent être altérés après la traversée de la chaîne PREROUTING (comme par exemple l'adresse destination en cas de port forwarding), il vaut mieux le faire dans la table mangle (toujours traversée avant la table nat) que dans la table nat. Mais une solution plus élégante consiste à marquer les paquets à filtrer dans la table mangle avec la cible MARK et à les filtrer dans la table filter avec la correspondance mark.

Exemple pour rejeter l'accès aux adresses privées du LAN depuis l'extérieur :

iptables -t mangle -A PREROUTING -i $WAN_INTERFACE -d $LAN_NETWORK \
   -j MARK --set-mark 0x1234

iptables -A INPUT -i $WAN_INTERFACE -m mark --mark 0x1234 \
   -j REJECT --reject-with network unreachable

iptables -A FORWARD -i $WAN_INTERFACE -m mark --mark 0x1234 \
   -j REJECT --reject-with network unreachable

J'ai voulu ajouté des règles pour l'accès à POP3 (tcp/110) où seules les
IP des serveurs POP3 choisis seront accessibles (en fait je drop les
trames qui ne corresponde pas).
	iptables -t nat -A PREROUTING -i $LAN_INTERFACE -s $LAN_NETWORK -p tcp
- --dport 110 -d ! $ipPopServer -j DROP

Remarque 1: comme expliqué plus haut, ce filtrage devrait avoir lieu dans la chaîne FORWARD de la table filter.

Remarque 2: pour ce genre de filtrage il vaut mieux utiliser la cible REJECT avec émission d'un RST (option --reject-with tcp-reset) pour signaler immédiatement à l'émetteur que la connexion est refusée au lieu de le laisser réessayer plusieurs fois et attendre en vain une réponse avant d'abandonner finalement.

Remarque 3: tu fais comment s'il y a plusieurs adresses de serveurs POP3 autorisées ?

Pour les tests j'ai mis "-j ACCEPT"

Si c'est pour compter on peut aussi ne pas spécifier de cible, ainsi le paquet continue à traverser les règles suivantes.

Mais dans ce cas, même en allant relever mes mails, je n'ai pas d'info
sur le nb de paquets pris par la règle.

Mais encore ? Le compteur de paquets reste à zéro ?
Le serveur POP interrogé est-il celui autorisé ou un autre ?

Une erreur de ma part, c'est sûr, mais je ne vois pas où.
Une petite idée ??

Il faudrait voir les règles précédentes. Mais la première erreur est déjà d'avoir fait du filtrage dans la table nat.



Reply to: