Forum général.général Rediriger le trafic de ETH0 port 143 sur IP_EXTERNE:143 via un seul NIC

Posté par  .
Étiquettes :
1
3
juil.
2010
Bonjour,

Je suis en train de planifier pour un client une migration de d'emails.

Actuellement les mails passent par un hébergeur (HOSTEUR.COM) et l'on télécharge les emails sur un serveur (Debian) via fetchmail.

Ensuite, les utilisateurs du LAN se connecte en IMAP (143) sur le serveur local pour lire les mails via Outlook ou Thunderbird.

Le système doit changer dans le sens où l'on change d'hébergeur. Les utilisateurs ne se connecterons plus sur le serveur Debian dans le LAN mais directement en IMAP chez le nouvel hébergeur.

Pour la migration en tant que tel, pas de soucis.

Mon problème vient du fait que je ne vais pas avoir l'occasion de changer la configuration de toutes les stations présentes dans le LAN.

Une solution consiste à rediriger tous le trafic entrant sur le port 143 du serveur local vers le serveur de l'hébergeur le temps pour moi de faire le nécessaire.

Je galère un peu à mettre en place les règles du firewall "iptables".

Voici un extrait du fichier de config de IPTABLES.

LAN=eth0
NET_LAN=192.168.110.0/24
IP_NEW_MAIL_SERVER=********

# ferme tout en entree
$IPTABLES -F
$IPTABLES -t nat -F
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT DROP
$IPTABLES -P FORWARD DROP

# on accepte les connexion sortantes
$IPTABLES -P OUTPUT ACCEPT

# on accepte les interfaces locales
$IPTABLES -A INPUT -i lo -j ACCEPT

# on accepte les connexions tcp deja  etablies
$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# On active le forwarding des paquets dans le noyau
echo 1 > /proc/sys/net/ipv4/ip_forward

#### CONFIG DU LAN

# on autorise l'icmp (ping..)
$IPTABLES -A INPUT -i $LAN -p icmp -j ACCEPT

# on ouvre le port pour ssh
$IPTABLES -A INPUT -i $LAN -p tcp --dport 22 -j ACCEPT

# on ouvre le port pour smtp
$IPTABLES -A INPUT -i $LAN -p tcp --dport 25 -j ACCEPT

# on ouvre le port pour dns
$IPTABLES -A INPUT -i $LAN -p udp --dport 53 -j ACCEPT

# on ouvre le port IMAP puis on redirige le flux
$IPTABLES -t nat -A PREROUTING -i $LAN -p tcp --dport 143 -j DNAT --to-destination $IP_NEW_MAIL_SERVER:143

Une fois la règle appliquée, si je fait un iptables --list j'obtiens pour le résultat suivant :

Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT icmp -- anywhere anywhere
ACCEPT tcp -- anywhere anywhere tcp dpt:ssh
ACCEPT tcp -- anywhere anywhere tcp dpt:smtp
ACCEPT udp -- anywhere anywhere udp dpt:domain
ACCEPT tcp -- anywhere anywhere tcp dpt:imap2

Chain FORWARD (policy DROP)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

Je ne vois nulle part apparaitre ma règle de NAT et d'ailleurs, je commence à me demander si cela est possible sur un seul NIC et sur une IP différente du LAN ?

Quelqu'un aurait une idée ?
  • # tu ne listes qu'une table avec iptables --list

    Posté par  . Évalué à 5.

    Pour lister toutes les règles de ta table NAT.
    iptables -t nat -L -v
  • # Redirection de port

    Posté par  . Évalué à 3.

    iptables-save permet de tout lister.

    Ta règle netfilter fait en sorte que les paquets sortent avec seulement l'adresse de destination modifiée. Si ton ordinateur de bureau est en 192.168.1.10 alors tes paquets sortent avec cette adresse comme source. Autant dire que les paquets ne vont pas loin :-)

    Il te faut une seconde règle qui modifie également l'adresse source. Quelque chose du genre:
    iptables --table nat --append PREROUTING --destination $LOCAL_IP --protocol tcp --destination-port 80 --jump DNAT --to-destination $DEST_IP
    iptables --table nat --append POSTROUTING --destination $DEST_IP --protocol tcp --destination-port 80 --jump SNAT --to-source $LOCAL_IP


    Note: il te faut /proc/sys/net/ipv4/ip_forward à 1


    Le mieux est tout de même d'utiliser les dns. C'est fait pour.
    Par exemple imap.maboite.com
    Pour changer de serveur, tu réduis le TTL à 5 minutes, et le soir tu peux changer tranquillement. Et remettre le TTL à une valeur plus grande.
    • [^] # Re: Redirection de port

      Posté par  . Évalué à 1.

      Merci pour ta réponse Kerro.

      Pour l'adresse source, c'est pas plutôt du Masquerading ?

      Enfin, toujours est-il que ce n'est pas nécessaire car ensuite, tous passe dans un routeur Cisco qui s'occupe de de modifier l'adresse IP local par l'adresse IP publique.

      Pour les DNS, of course mais je n'ai pas le choix car je n'ai pas accès à toute les machines durant le processus de migration.

      D'où la recherche de cette solution, ce n'est que temporaire.
      • [^] # Re: Redirection de port

        Posté par  . Évalué à 2.

        Pour l'adresse source, c'est pas plutôt du Masquerading ?
        Ca fonctionne aussi. Quelque chose comme:
        iptables --table nat --append POSTROUTING --destination $LAN --dport 143 --jump MASQUERADE
  • # Un bon dessin vaut mieux qu'un long discours...

    Posté par  (site web personnel) . Évalué à 1.

    http://www.google.fr/url?sa=t&source=web&cd=1&ve(...)

    Système - Réseau - Sécurité Open Source

  • # Redirection DNS

    Posté par  . Évalué à 4.

    Bonjour,

    J'ai été confronté à une situation similaire il y'a quelques mois.

    Nos clients pop utilisaient le nom de machine "pop"(+nom de domaine) qui était résolue par notre dns interne en l'ip de notre pop externalisé. Et un beau jour changement de prestataire !

    Plutôt que passer sur tous les postes et changer manuellement les réglages de Mail j'ai redéfini "imap" en autre chose avec CNAME (en n'oubliant pas le point final) .

    pop CNAME pop.orange-business.com.


    Utiliser un dns interne est assez souvent une bonne idée. Ça fait disproportionné dans un premier temps mais devient très vite incontournable.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.