Règles iptables et NAT - Sécurité - Systèmes & Réseaux Pro
Marsh Posté le 02-02-2010 à 22:32:07
Salut,
Ton explication n'est pas tout à fait claire, j'ai quelques mécompréhension mais le schéma suivant devrait répondre à ta question :
>> http://irp.nain-t.net/doku.php/130 [...] chitecture
Si j'ai bien compris tu fais du SNAT ou du MASQUERADE pour que tes serveurs puissent discuter avec internet. Ce NAT a lieu en POSTROUTING, donc après le passage en FORWARD
=> quand tu fais un -t filter -A FORWARD, netfilter verra l'adresse ip non-natée. C'est sur celle là que tu devras effectuer tes tests de filtrage, sur l'adresse IP originale, en gros.
En espérant avoir été assez clair :-)
Marsh Posté le 03-02-2010 à 09:00:53
Oui c'est presque ça, tu as réussi à me comprendre, c'est l'essentiel
Merci pour ta réponse, mais les règles ACCEPT sont déjà définies sur la table filter. Je m'explique. J'ai la règle MASQUERADE qui intervient au début :
iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -j MASQUERADE
puis des règles du style :
iptables -A FORWARD -s 192.168.2.0/24 -d 0.0.0.0/0 -p tcp --dport 80 -j ACCEPT
ça, ça marche puisque la source est bien une des VM. Maintenant si je veux remplacer 192.168.. par l'adresse publique du serveur parent, ça ne marche pas.
Le filtrage doit donc intervenir sur l'IP natée et non l'IP originale.
Marsh Posté le 02-02-2010 à 17:04:45
Bonjour,
Je suis confronté à un petit problème sympathique et j'aimerais un peu d'aide pour le résoudre. Je vais essayer d'être le plus clair possible.
Je gère plusieurs serveurs qui virtualisent une ou plusieurs machines. Je dispose d'une IP publique pour chaque serveur (physique) et j'ai une règle NAT qui permet aux VM de communiquer avec l'extérieur.
J'ai créé un script qui me permet de déployer des règles de firewall sur tous mes serveurs ; le problème, c'est que si je veux établir des règles spécifiques à un serveur, je suis un peu coincé.
Je m'explique. Par défaut le firewall bloque tout (normal). Je veux autoriser l'accès à une machine sur l'ip xx.xx.xx.xx. Avec mon script, pas de problème, un petit iptables -A FORWARD -d xx.xx.xx.xx -p tcp --dport machin -j ACCEPT. (FORWARD parce que le firewall est sur le serveur physique)
Maintenant, je veux restreindre cet accès au serveur dont l'adresse est yy.yy.yy.yy. Comment fais-je donc ? Si je précise la source dans la règle FORWARD, ça ne va pas aller puisque la source sera une VM hébergée sur le serveur (donc une source d'origine réseau local). Si je fais une règle OUTPUT, ça n'ira pas non plus encore une fois puisque la source ne sera pas celle que l'on aura précisée.
Dois-je cumuler plusieurs règles, y'a-t-il une astuce que je ne connais pas, mon explication est-elle claire ?
Merci pour votre aide !