Bonjour,
J'administre plusieurs serveurs qui virtualisent une ou plusieurs machines. Chaque machine physique dispose d'une IP publique, mais je ne dispose pas de suffisamment d'IP pour tout le monde donc je fais de la translation d'adresse.
Sur le serveur, j'ai une règle du genre :
iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -j MASQUERADE
Sur chaque serveur, j'ai également des règles d'autorisation (tout est bien sûr bloqué par la politique par défaut).
Une règle peut-être, par exemple :
iptables -A FORWARD -s 192.168.2.0/24 -d 0.0.0.0/0 -p tcp --dport 80 -j ACCEPT
Maintenant, je suis confronté à un petit problème. Le nombre de serveurs va croissant et en bon admin, je suis une feignasse. Je veux donc déployer des règles de firewall en les éditant depuis un endroit et en les rsyncant.
Le problème, c'est qu'en faisant comme ça tout le monde aura les mêmes règles ; or si je veux définir des règles spécifiques à une IP, je suis bloqué.
Explications : Le serveur xx.xx.xx.xx doit pouvoir faire communiquer sa ou ses VM avec le sous réseau yy.yy.yy.yy, mais pas les autres.
Une règle comme :
iptables -A FORWARD -s xx.xx.xx.xx -d yy.yy.yy.yy -p tcp --dport p -j ACCEPT
ne fonctionnera pas, puisque la source sera l'adresse privée de la VM. Une règle OUTPUT ne fonctionnera pas non plus.
Comment donc puis-je donc faire pour filtrer non pas sur la "vraie" adresse mais sur l'adresse natée ?
J'espère avoir été clair dans mes explications, et j'espère que vous pourrez m'aider à trouver une solution, mes recherches sur le web et dans le man ayant été infructueuses de mon côté :(
Mais je suis certain que ce que je cherche à faire est possible...
Merci à vous !
# Fwbuilder
Posté par maxix . Évalué à 2.
D'un coté ca gere une "base de donnée" contenant tes différentes machines, leurs adresses, des dns, des services, etc, et de l'autre ca permet d'éditer des firewalls assez génériques, pour ensuite en générer les scripts iptables ou autre et les pousser sur les machines par ssh.
http://www.fwbuilder.org/
(j'ai eu un sursaut de stupeur quand j'ai été sur le site, en voyant une barre google translate au dessus, j'ai eu peur qu'une sale extension non sollicitée se soit glissé dans un partenariat ubuntu-mozilla-google. Mais non, ca a l'air intégré par le site)
[^] # Re: Fwbuilder
Posté par Rankin . Évalué à 1.
[^] # Re: Fwbuilder
Posté par Rankin . Évalué à 1.
# J'ai rien compris
Posté par benoar . Évalué à 3.
Et puis, nommer les machines, et éventuellement faire un dessin.
J'ai aussi l'impression que tu fais un peu du NAT à tâton ... non ?
[^] # Re: J'ai rien compris
Posté par Rankin . Évalué à 2.
Je ne fais pas du NAT à tâtons, le NAT marche très bien.
Mon problème n'est pas si compliqué, je vais tourner les choses différemment.
J'ai un serveur Serveur1 d'adresse publique a.b.c.d. Ce serveur virtualise plusieurs VM d'adresses privées 192.168.1.2 à 192.168.1.5.
J'ai maintenant un autre serveur Serveur2 d'adresse publique e.f.g.h qui héberge lui aussi des VM.
Je veux faire des règles de firewall que je vais déployer sur tous mes serveurs (Serveur1 et Serveur2 en l'occurrence dans l'exemple). Ces règles seront les mêmes partout. Si je veux faire accéder seulement les VM stockées sur Serveur1 à la machine i.j.k.l, je veux pouvoir mettre en place une règle du genre :
iptables -A ? -s a.b.c.d -p proto -d i.j.k.l --dport port -j ACCEPT
Or je ne sais pas comment mettre en place une règle pour une adresse source natée (et non la véritable adresse source qui est lue par le filtre FORWARD).
C'est plus clair ?
[^] # Re: J'ai rien compris
Posté par benoar . Évalué à 2.
En gros, tu veux faire des règles "conditionnelles" en fonction du serveur ? Plutôt que de vouloir tout faire avec des règles iptables, ne peux tu pas faire l'ajout conditionnel en shell ? Ou simplement avoir un fichier de règles communes, et un fichier par serveur pour les règles spécifiques ? (pareil, que tu copies/charge conditionnellement)
Enfin bon, si tu veux le faire à ta méthode, sache que le masquerading n'est fait qu'après le routage et le filtrage en forward/sortie (d'où le nom de la chaîne : postrouting) et que donc tu ne peux plus rien faire une fois arrivé là. Avant ça, la source de tes paquets est toujours les adresses privées de tes VMs.
Ha, et aussi, ça aurait aidé si depuis le début tu disais que tu voulais faire du filtrage _sortant_ pour tes serveurs (ce qui est beaucoup moins commun que du filtrage entrant, puisque si ce sont des serveurs, ils sont plutôt accédés que source de connexions).
[^] # Re: J'ai rien compris
Posté par Rankin . Évalué à 1.
Si j'ai posé cette question, c'est que je ne peux pas faire des scripts conditionnels, car l'application que je souhaitais faire de cette règle serait appliquée à un grand nombre de serveurs, et une interface web permettant de les configurer ne permet pas à l'heure actuelle de faire du cas par cas.
Mais il va apparemment falloir pouvoir le faire néanmoins...
[^] # Re: J'ai rien compris
Posté par benoar . Évalué à 2.
[^] # Re: J'ai rien compris
Posté par Rankin . Évalué à 1.
Le souci, c'est que les serveurs sont un exemple, mais cela pourrait s'appliquer à des machines hébergeant des VM et n'ayant pas d'IP fixe. Par exemple une machine reçoit l'adresse a.b.c.d quand elle est dans le réseau R1, et à ce titre elle a le droit d'accéder au Serveur1. Mais quand elle est en dehors du réseau R1, elle n'a plus le droit.
Dans ce cas la condition ne marche pas : si le script est lancé alors que la machine est dans le réseau R1, elle pourra bien accéder au Serveur1, mais elle pourra encore en sortant de ce réseau puisque la règle aura été appliquée.
Maintenant le cas inverse, si le script est lancé en dehors de R1, la VM ne pourra jamais accéder à Serveur1.
Je pense que je n'ai pas été clair du tout.
[^] # Re: J'ai rien compris
Posté par benoar . Évalué à 2.
Pour qu'une machine n'exécute pas une règle, le mieux est encore de ne pas lui donner.
[^] # Re: J'ai rien compris
Posté par Rankin . Évalué à 1.
En ce qui concerne les lacunes, je me contenterai de sourire ; comme je te l'ai déjà dit si je pose cette question c'est bien parce que je suis contraint de donner les mêmes règles à tout le monde... Ce n'est pas pour le plaisir.
[^] # Re: J'ai rien compris
Posté par benoar . Évalué à 2.
Après, si tu veux te mettre un boulet au pied avant de trouver une solution, c'est ton problème.
En tous cas, c'est clair que le "je ne peux pas en parler directement" n'aide pas beaucoup à la compréhension.
[^] # Re: J'ai rien compris
Posté par Rankin . Évalué à 1.
Et je fais un effort depuis le début pour ne pas être désagréable parce que tu fais toi-même l'effort de me répondre et je t'en remercie, mais le ton que tu utilises ne me plaît pas trop...
[^] # Re: J'ai rien compris
Posté par benoar . Évalué à 2.
Sinon, en ce qui concerne ton problème, ça "m'énerve" (je sais, je m'énerve pour un rien ...) de se refuser à des solutions simples quand on a des contraintes débiles. (oui, je sais que des fois on doit faire avec des contraintes, mais là, se refuser d'accéder au shell, ça me paraît débile) Comment tes règles iptables vont-elles être "rentrées" sur le serveur en question ? Il y aura bien un programme qui va lancer iptables avec les bons arguments ? Ou appeler la librairie qu'il faut. Et ce programme ne peut pas faire de conditionnelle en fonction du serveur sur lequel il se trouve ?
[^] # Re: J'ai rien compris
Posté par Rankin . Évalué à 1.
Je suis relativement d'accord avec toi concernant le libre, mais dans mon cas c'est ce projet qui devrait me permettre de gagner ma vie... Et je ne peux pas prendre le risque de diffuser trop d'informations sur mon mode de fonctionnement.
Je te remercie en tout cas d'avoir pris de ton temps pour me répondre, surtout pour m'aider dans un projet dont le fonctionnement est contraire à tes opinions.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.