J'invoque un dieu de Iptables [Iptables] - réseaux et sécurité - Linux et OS Alternatifs
Marsh Posté le 20-04-2006 à 21:31:56
Serveur_01, Serveur_02, etc, ont des adresses IP privées ?
Marsh Posté le 20-04-2006 à 21:34:07
Voui sur la planche d'adresses 192.168.68.X
Marsh Posté le 20-04-2006 à 21:44:21
Les adresses IP publiques sont "fixes" (définitivement attribuées, elles ne changent pas toutes les 24h par exemple) ?
Marsh Posté le 20-04-2006 à 21:49:02
J'aurais le droit à un bonbon si je réussis ?
Marsh Posté le 20-04-2006 à 21:52:23
les adresses ip publiques sont fixes oui
(et t'auras le droit à un bonbon à la fraise si tu réussis )
Marsh Posté le 20-04-2006 à 21:58:06
et pour rigoler un peu, voilà mon /etc/network/interface :
Code :
|
Marsh Posté le 20-04-2006 à 22:21:18
Et toutes les adresses publiques sont assignées à la passerelle (elle seule est "visible" de l'extérieur en gros), c'est bien ça ?
Marsh Posté le 20-04-2006 à 22:25:34
exactement docteur
parmis mes recherches, je suis tombé sur le point 7.30 de cet article :
http://www.e-infomax.com/ipmasq/ho [...] -fr-7.html
Il faut d'après eux, faire une configuration NAT Many:Many ...
jva cibler mes recherches sur ce fameux NAT Many:Many
Marsh Posté le 20-04-2006 à 22:48:38
Bon, bah à priori, pour chaque redirection associée à une IP publique et un port déterminé, tu dois ajouter trois règles du type :
IF_inet : interface réseau connectée à Internet, par ex. eth0
IP_pub : IP publique concernée, par ex. 61.89.169.21
Serv : Port du service concerné, par ex. 80
IP_priv : IP privée concernée, par ex. 192.168.68.85
1 - pour le Destination NAT (la redirection, en elle même, quoi) :
iptables -t nat -A PREROUTING -i <IF_inet> -p <le protocole, tcp ou udp> -d <IP_pub> --dport <Serv> -j DNAT --to-destination <IP_priv>
2 - pour autoriser les paquets en entrée sur la passerelle :
iptables -t filter -A INPUT -i <IF_inet> -p <le protocole, tcp ou udp> -d <IP_pub> --dport <Serv> -m state --state NEW -j ACCEPT
3 - pour autoriser le routage vers le serveur "privé", chargé de traiter la demande :
iptables -t filter -A FORWARD -p <le protocole, tcp ou udp> --dport <Serv> -m state --state NEW -j ACCEPT
J'utilise le suivi de connection (connection tracking, c'est le -m state --state qqchose), ça permet de simplifier la vie, surtout si on a des protocoles comme Ftp à gérer. Par contre, pour que ces règles puissent fonctionner, il faut que le support de celui-ci soit activé dans le noyau (c'est le cas en général) et ajouter au bon endroit (en général, le plus tot possible), les deux règles suivantes, une seule fois :
iptables -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t filter -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
Les paquets appartenants aux connexions déjà établies, sont directement prises en charge par ces deux règles, et le fait de les mettre le plus tot possible dans les tables INPUT et FORWARD, permet de les traiter très rapidement et de passer à autre chose.
Bon, ce n'est qu'un exemple, y'a des modifs à faire pour ton cas, et certaines choses à adapter à ton gout/besoin/utilisation, c'est donc à toi de t'en inspirer et de mettre ça sous la bonne forme et au bon endroit dans ton script/autre.
Amuses toi bien
Marsh Posté le 20-04-2006 à 23:20:28
Je pose 2 et je retiens 1, sans oublier la virgule, et j'obtiens (d'un point de vue simplifié) si je voulais
- laisser entrer le 80 de l'ip publique 1 (X.X.X.1) et le rediriger sur le 80 du serveur privé 1 (192.168.68.4), et
- laisser entrer le 25 de l'ip publique 2 (X.X.X.2) et le rediriger sur le 25 du serveur privé 2 (192.168.68.5) :
// les regles à ajouter le plus tot possible
iptables -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t filter -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
// je laisse entrer le 80 de l'ip publique X.X.X.1 sur l'interface eth0 pour le rediriger sur l'ip privée 192.168.68.4
iptables -t nat -A PREROUTING -i eth0 -p udp -d X.X.X.1 --dport 80 -j DNAT --to-destination 192.168.68.4
iptables -t filter -A INPUT -i eth0 -p udp -d X.X.X.1 --dport 80 -m state --state NEW -j ACCEPT
iptables -t filter -A FORWARD -p udp --dport 80 -m state --state NEW -j ACCEPT
//je laisse entrer le 25 de l'ip publique X.X.X.2 sur l'interface eth0 pour le rediriger sur l'ip privée 192.168.68.5
iptables -t nat -A PREROUTING -i eth0 -p udp -d X.X.X.2 --dport 25 -j DNAT --to-destination 192.168.68.5
iptables -t filter -A INPUT -i eth0 -p udp -d X.X.X.2 --dport 25 -m state --state NEW -j ACCEPT
iptables -t filter -A FORWARD -p udp --dport 25 -m state --state NEW -j ACCEPT
si c'est bien un truc comme ça, je t'envoie un bonbon à la fraise dès demain par la poste, promis juré
Marsh Posté le 20-04-2006 à 23:23:14
en parlant de demain, je fais des heures supp et je me fais jeter, donc je reprends ça demain matin
merki en tout cas !
Marsh Posté le 21-04-2006 à 15:34:20
Ahhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh !!!!
Je pense que je vais me trancher les veines aux cotons-tige !
L'interface eth0 doit etre définie comment dans mon /etc/network/interfaces ?
Vu que j'ai plusieurs ip publiques sur l'eth0, je fais quoi moi là ?
Au secours !
Marsh Posté le 21-04-2006 à 15:38:39
Tu peux pas utiliser des interfaces genre eth0:x (eth0:0, eth0:1, etc)
Marsh Posté le 21-04-2006 à 15:45:56
Cruchot a écrit : Tu peux pas utiliser des interfaces genre eth0:x (eth0:0, eth0:1, etc) |
le20k a écrit : Ahhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh !!!! |
Voilà, le monsieur t'as donné la solution.
Tu crées des alias sur une interface (celle reliée à internet par exemple).
Marsh Posté le 21-04-2006 à 15:46:19
ça c'est une bonne question ...
apparemment ça se fait : http://lists.debian.org/debian-use [...] 00295.html
Marsh Posté le 21-04-2006 à 15:47:27
Zzozo : damned, trop rapide !
en tout cas à tous les 2 MERCI !
je vais plancher là dessus
Marsh Posté le 21-04-2006 à 15:55:52
déjà pour tester, manuellement tu peux utiliser des commandes du style :
ipconfig <IF_inet>:n add <une des adresses IP publiques>
et tu augmentes n pour chaque IP publique différente, et où IF_inet est le nom de l'interface reliée à internet
Après, il te restera plus qu'à automatiser ça en modifiant le bon fichier de config
Voilà
Marsh Posté le 21-04-2006 à 16:04:14
Zzozo, ça serait pas plutôt ifconfig ?
Sinon j'ai trouvé ça :
http://www.ibiblio.org/pub/Linux/d [...] Alias.html
Mais du coup, pour le firewall, est-ce que ça serait une bonne idée que j'utilise ces fameux alias à la place de déclarer l'ip publique à chaque fois ?
Genre :
iptables -t nat -A PREROUTING -i <IF_inet>:n -p <le protocole, tcp ou udp> --dport <Serv> -j DNAT --to-destination <IP_priv>
Marsh Posté le 21-04-2006 à 16:14:59
Heu oui, je m'amusais avec Windows, spour ça
non, utilises bien l'interface physique "réelle".
Marsh Posté le 21-04-2006 à 16:30:29
d'accord
Est-ce que ça conviendrait tout ça ?
Mon fichier /etc/network/interfaces :
Code :
|
et mon script de firewall :
Code :
|
Alors docteur ? c'est bon ?
Marsh Posté le 21-04-2006 à 16:36:01
Par contre, penses à mettre les "policy" par défaut à DROP sinon le fw il sert pas à grand chose
Marsh Posté le 21-04-2006 à 16:57:28
Genre je le placerai ici ?
// on flush tout
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
[là-->]iptables -A INPUT -j DROP
Marsh Posté le 21-04-2006 à 17:00:43
Oui mais t'arrêtes pas en si bon chemin, oublies pas de faire la même chose pour FORWARD
Marsh Posté le 21-04-2006 à 17:12:26
oops petit oubli
récapitulatif :
Code :
|
Marsh Posté le 21-04-2006 à 17:15:41
tu laisses accéder à SSH de l'extérieur, aussi ?
Marsh Posté le 21-04-2006 à 17:20:58
Malheureusement oui ...
Il me le faut depuis le lan comme depuis le wan, donc c'est correct ma règle ?
Marsh Posté le 21-04-2006 à 17:42:10
oui, c'est bon pour laisser l'accès à SSH
Ceci dit, tant que tu y es, pourquoi pas utiliser le connection tracking aussi pour l'accès SSH ?
genre iptables -A FIREWALL -p tcp --dport 22 -m state --state NEW -j ACCEPT
Marsh Posté le 21-04-2006 à 17:56:25
Certes, très bonne idée
Marsh Posté le 21-04-2006 à 22:09:25
ok, c'est en place mais j'ai quelques petits soucis ...
Passerelle --> internet = ok
Internet --> passerelle:22 = ok
Internet --> serveurs internes (exemple:80) = pas ok
Serveurs internes --> Passerelle:22 = ok
Serveurs internes --> Internet = pas ok
grrr.... any idea ?
Marsh Posté le 21-04-2006 à 22:30:35
Normal, j'avais pas regardé dans le détail mais je viens de m'apercevoir que t'as commis une petite erreur ... pour le web, c'est bien le port 80 en général, mais en TCP pas en UDP
Marsh Posté le 21-04-2006 à 22:37:52
Saperlipopette ! quels yeux de lynx !
Cependant, meme après cette modification (sur chacune des 3 lignes identifiant l'ouverture du 80), je n'ai pas de réponse sur le 80 en utilisant l'IF_inet2.
Et par la meme occasion, j'ai fait un joli iptables -L, et ça me donne quelque chose que je n'aime pas : (je n'ai aucune regle qui mentionne un des serveurs internes)
Code :
|
Marsh Posté le 21-04-2006 à 22:42:29
normal, pour voir les règle de dnat, faut utiliser cette ligne de commande là
iptables -t nat -L -v (le -v est pas forcément nécessaire, mais ça affiche un supplément d'infos bien utile parfois)
là tu n'affiches que les règles de filtrage (-t filter implicite et par défaut)
Marsh Posté le 21-04-2006 à 22:44:32
Essaies de te connecter à tes serveurs Web, depuis l'extérieur
puis lances un
iptables -t nat -L -v --line -n
et un
iptables -t filter -L -v --line -n
stp
histoire de savoir quelles règles "matchent" les paquets.
Marsh Posté le 21-04-2006 à 22:51:42
je commence à loucher à force de voir tout ça
si t'arrives à t'y retrouver là dedans ......
Code :
|
Marsh Posté le 21-04-2006 à 22:52:19
Mouais .... tu peux aussi lancer un ifconfig stp ?
J'ai l'impression que tes IP publiques sont pas assignées là où il faut ...
Marsh Posté le 21-04-2006 à 22:55:45
et hop !
Code :
|
Marsh Posté le 21-04-2006 à 22:57:11
tant qu'on y est, un route -n aussi
Si tu préfères, envoies moi ça en MP
Marsh Posté le 21-04-2006 à 22:59:55
bon bah c'est bien ce que je pensais
T'as "oublié" d'assigner ton adresse en x.x.x.2 sur ton interface reliée à Internet (créér un alias quoi)
Et comme ton adresse en x.x.x.2 c'est celle qui est censée gérer les services web, d'après tes règles netfilter/iptables, ça risque pas de marcher
Créé l'alias et ça devrait marcher
Marsh Posté le 21-04-2006 à 23:00:40
Le route -n est pas indispensable du coup
Marsh Posté le 20-04-2006 à 19:57:21
Salut à toi !
Si tu as cliqué sur ce post, c'est que (j'espère) tu te sens un peu un Dieu d'Iptables, donc ton aide me serait forte utile !
Voici ce que j'ai :
1) J'ai 5 adresses IP qui entrent par ma connexion internet.
2) J'ai le serveur Serveur_01 qui est un serveur de mail et web.
3) J'ai le serveur Serveur_02 qui est un serveur de plein de choses, en plus de mail et web.
4) J'ai une debian qui tourne actuellement comme antispam, filtrant tout ce qui arrive de l'adresse IP1:25, et redistribuant au serveur Serveur_01:25.
Je ne peux pas changer les parametres énoncés aux points 1, 2 et 3.
Voilà ce sur quoi je travaille, et souhaiterait avoir une aide :
La Debian doit etre "convertie" en passerelle d'entrée, redirigeant chaque requette pour chacune des 5 adresses ip publiques entrantes vers les divers serveurs en interne, tout en gardant sa fonctionnalité antispam.
-------- IP1 = XX.XX.XX.1 eth0 ---------- eth1 From IP1:25 To Serveur_01:25
Internet ---> IP2 = XX.XX.XX.2 ---> Passerelle ----> From IP4:25 To Serveur_02:25
-------- IP3 = Xx.XX.XX.3 +antispam From IP1:80 To Serveur_01:80
IP4 = XX.XX.XX.4 --------- From IP2:1723 To Serveur_02:1723
IP5 = XX.XX.XX.5 From IP3:80 To Serveur_01:80
From IPX:XX To Serveur_0X:XX etc... (redirections données à titre d'exemple)
J'ai pas mal réussi à faire les redirections, mais je ne vois pas comment trier selon l'ip d'entrée ... Comment faire ?
mon script iptables :
(script pas mal inspiré de http://okki666.free.fr/docmaster/a [...] x128.html)
---------------
dieu créa l'homme et meuh fit la vache