Forum Linux.noyau Règles iptables pour accéder à un serveur web sur un autre réseau

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
0
13
nov.
2014

Bonjour,

J'ai un serveur (192.168.4.6) avec deux cartes réseaux:

192.168.4.0/24 (device: lan)
192.168.1.0/24 (device: adsl)

Je souhaite accéder depuis le lan au modem adsl, dont l'ip ($modem) vaut 192.168.1.2.

Depuis la passerelle, j'ai bien accès au modem.

Par contre, depuis le client 192.168.4.10, je voudrais faire quelque chose comme :

curl 192.168.4.6:1111

qui me renverrait sur 192.168.1.2:80

J'ai autorisé en INPUT la machine 192.168.4.10:

iptables -A INPUT -i lan -s 192.168.4.10 -j ACCEPT

J'accepte également ce qui vient du modem

iptables -A INPUT -s "$modem" -j ACCEPT

En OUTPUT, j'ai une policy par défaut qui est d'accepter (sans autre rêgle).

iptables -P OUTPUT ACCEPT

Ensuite, je passe au nat pour réécrire le header ip et lui donner la bonne destination:

iptables -t nat -I PREROUTING -j DNAT -i lan -p TCP --dport 1111 --to-destination "$modem":80

J'ai lu qu'il fallait faire ça également:

iptables -t nat -A POSTROUTING -j MASQUERADE

Évidemment, ça ne fonctionne pas.

Avec un iptables -L -t nat -vxn , je vois que je passe dans les deux régles nat.
Pouvez-vous me dire ce qui manque ?

Merci.

  • # ipforwarding desactivé sur la passerelle ?

    Posté par  . Évalué à 4. Dernière modification le 13 novembre 2014 à 17:37.

    Les regles INPUT (OUTPUT) ne servent que pour les flux qui arrivent(sortent) sur la passerelle, elles n'ont pas d'impactent sur les flux qui traversent la passerelle.

    Tu as donc autorisé le poste client (4.10) à se connecter à la passerelle (pour le ssh par exemple)
    Tu as autorisé la box internet à se connecter à la passerelle (pour la telemaintenance, pourquoi pas)

    Mais nul part tu n'as autorisé la traversée de la passerelle.
    Dans un premier temps pour tout forwarder ce serait un

    iptables -A FORWARD -j ACCEPT

    encore faut-il que l'ip_forward soit actif sur la passerelle,
    que donne, sur la passerelle, les commandes :

    cat /proc/sys/net/ipv4/ip_forwarding
    cat /proc/sys/net/ipv4/conf/all/forwarding
    cat /proc/sys/net/ipv4/conf/eth0/forwarding
    cat /proc/sys/net/ipv4/conf/eth1/forwarding

    si tu as des zeros à chacune de ces commandes, c'est que l'ip forward n'est pas activé, donc ca ne marchera pas.

    tu peux commencer par un simple

    echo 1>/proc/sys/net/ipv4/ip_forwarding

    pour voir si cela resoud ton souci,

    si oui, alors tu peux mettre le reglage en dur dans le fichier /etc/sysctl.conf

    net.ipv4.ip_forwarding=1

    il s'activera automatiquement au prochain demarrage

    • [^] # Re: ipforwarding desactivé sur la passerelle ?

      Posté par  . Évalué à 2.

      Merci pour ta réponse très détaillée.

      J'avais fait l'impasse sur FORWARD, pensant que vu que je me connectais à ip_passerelle:1111, c'était INPUT qui était concerné.

      Grâce à ta réponse, j'ai compris qu'en réalité, la chaine PREROUTING réécrit tout de suite l'entête transformant en FORWARD ce qui était INPUT.

      pour le FORWARD, j'ai donc fait comme ça:

      iptables -A FORWARD -p tcp --dport 80 -d "$modem" -j ACCEPT #pour aller du poste client au modem.

      Et le retour depuis le modem se fait grâce au générique:

      iptables -I FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

      Ça marche très bien maintenant, et tu m'as enlevé une jolie épine du pied.

      Discussions en français sur la création de jeux videos : IRC libera / #gamedev-fr

Suivre le flux des commentaires

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