Firewall perso pour contourner numericable

Bonjour,

Vu que Numericable bloque le port 445 j’ai installé un serveur Debian 7.4 avec 2 interface réseau, explication :

Ma box en 192.168.1.254 avec la zone DMZ activé sur l’ip 192.168.1.1
ETH0 => 192.168.1.1 coté box
ETH1 => 192.168.0.194 pour le réseau local
Mon PC => 192.168.0.132

Je surfe bien, par contre je veux changer les ports de sortie pour la SMB et je n’obtiens pas de connexion avec le serveur SAMBA, voici mes lignes :

Sur mon firewall

/sbin/iptables -t nat -A PREROUTING -p tcp -d $ipwan --dport 1135 -j DNAT --to-destination 192.168.0.132:135
/sbin/iptables -t nat -A PREROUTING -p udp -d $ipwan --dport 1135 -j DNAT --to-destination 192.168.0.132:135
/sbin/iptables -t nat -A PREROUTING -p tcp -d $ipwan --dport 1137 -j DNAT --to-destination 192.168.0.132:137
/sbin/iptables -t nat -A PREROUTING -p udp -d $ipwan --dport 1137 -j DNAT --to-destination 192.168.0.132:137
/sbin/iptables -t nat -A PREROUTING -p tcp -d $ipwan --dport 1138 -j DNAT --to-destination 192.168.0.132:138
/sbin/iptables -t nat -A PREROUTING -p udp -d $ipwan --dport 1138 -j DNAT --to-destination 192.168.0.132:138
/sbin/iptables -t nat -A PREROUTING -p tcp -d $ipwan --dport 1139 -j DNAT --to-destination 192.168.0.132:139
/sbin/iptables -t nat -A PREROUTING -p tcp -d $ipwan --dport 1445 -j DNAT --to-destination 192.168.0.132:445
/sbin/iptables -t nat -A PREROUTING -p udp -d $ipwan --dport 1445 -j DNAT --to-destination 192.168.0.132:445

/sbin/iptables -t nat -A POSTROUTING -p tcp -s 192.168.0.132 --sport 135 -j SNAT --to-source $ipwan:1135
/sbin/iptables -t nat -A POSTROUTING -p udp -s 192.168.0.132 --sport 135 -j SNAT --to-source $ipwan:1135
/sbin/iptables -t nat -A POSTROUTING -p tcp -s 192.168.0.132 --sport 137 -j SNAT --to-source $ipwan:1137
/sbin/iptables -t nat -A POSTROUTING -p udp -s 192.168.0.132 --sport 137 -j SNAT --to-source $ipwan:1137
/sbin/iptables -t nat -A POSTROUTING -p tcp -s 192.168.0.132 --sport 138 -j SNAT --to-source $ipwan:1138
/sbin/iptables -t nat -A POSTROUTING -p udp -s 192.168.0.132 --sport 138 -j SNAT --to-source $ipwan:1138
/sbin/iptables -t nat -A POSTROUTING -p tcp -s 192.168.0.132 --sport 139 -j SNAT --to-source $ipwan:1139
/sbin/iptables -t nat -A POSTROUTING -p tcp -s 192.168.0.132 --sport 445 -j SNAT --to-source $ipwan:1445
/sbin/iptables -t nat -A POSTROUTING -p udp -s 192.168.0.132 --sport 445 -j SNAT --to-source $ipwan:1445

Sur le firewall du serveur distant :

/sbin/iptables -t nat -A PREROUTING -p tcp -d $vmbr0_0 --dport 1135 -j DNAT --to-destination 192.168.0.100:135
/sbin/iptables -t nat -A PREROUTING -p udp -d $vmbr0_0 --dport 1135 -j DNAT --to-destination 192.168.0.100:135
/sbin/iptables -t nat -A PREROUTING -p tcp -d $vmbr0_0 --dport 1137 -j DNAT --to-destination 192.168.0.100:137
/sbin/iptables -t nat -A PREROUTING -p udp -d $vmbr0_0 --dport 1137 -j DNAT --to-destination 192.168.0.100:137
/sbin/iptables -t nat -A PREROUTING -p tcp -d $vmbr0_0 --dport 1138 -j DNAT --to-destination 192.168.0.100:138
/sbin/iptables -t nat -A PREROUTING -p udp -d $vmbr0_0 --dport 1138 -j DNAT --to-destination 192.168.0.100:138
/sbin/iptables -t nat -A PREROUTING -p tcp -d $vmbr0_0 --dport 1139 -j DNAT --to-destination 192.168.0.100:139
/sbin/iptables -t nat -A PREROUTING -p tcp -d $vmbr0_0 --dport 1445 -j DNAT --to-destination 192.168.0.100:445
/sbin/iptables -t nat -A PREROUTING -p udp -d $vmbr0_0 --dport 1445 -j DNAT --to-destination 192.168.0.100:445

/sbin/iptables -t nat -A POSTROUTING -p tcp -s 192.168.0.100 --sport 135 -j SNAT --to-source $vmbr0_0:1135
/sbin/iptables -t nat -A POSTROUTING -p udp -s 192.168.0.100 --sport 135 -j SNAT --to-source $vmbr0_0:1135
/sbin/iptables -t nat -A POSTROUTING -p tcp -s 192.168.0.100 --sport 137 -j SNAT --to-source $vmbr0_0:1137
/sbin/iptables -t nat -A POSTROUTING -p udp -s 192.168.0.100 --sport 137 -j SNAT --to-source $vmbr0_0:1137
/sbin/iptables -t nat -A POSTROUTING -p tcp -s 192.168.0.100 --sport 138 -j SNAT --to-source $vmbr0_0:1138
/sbin/iptables -t nat -A POSTROUTING -p udp -s 192.168.0.100 --sport 138 -j SNAT --to-source $vmbr0_0:1138
/sbin/iptables -t nat -A POSTROUTING -p tcp -s 192.168.0.100 --sport 139 -j SNAT --to-source $vmbr0_0:1139
/sbin/iptables -t nat -A POSTROUTING -p tcp -s 192.168.0.100 --sport 445 -j SNAT --to-source $vmbr0_0:1445
/sbin/iptables -t nat -A POSTROUTING -p udp -s 192.168.0.100 --sport 445 -j SNAT --to-source $vmbr0_0:1445

Une idée pourquoi mes règles ne passent pas ?

Je vous remercie d’avance.

Tu peux expliquer un peu tes règles, qui est serveur SMB et qui est client SMB ?

Pourtant c’est claire…

192.168.0.132 c’est mon pc
192.168.0.194 le routeur eth1
192.168.1.1 routeur eth0

le firewall du serveur distant 95.123.152.162
la VM 192.168.0.100

quoi dire de plus !

Que tu ne réponds pas à la question posée.

Mon pc n’est surement pas un serveur samba mais bien le client…

si non, laisse tomber.

Merci quand même.

  1. Tu as tort, si un peut te répondre c’est Pascal.
  2. Ça n’est absolument pas clair, tu nous parles d’une VM, d’une machine distante, d’un parefeu sur une machine distante (que tu règles avec des IP de ton réseau à toi on dirait)… Bref, la question de Pascal est pertinente

On n’en sait rien tant que tu ne le dis pas clairement.

Tu ne te débarrasseras pas de moi si facilement, je suis tenace.
Si je comprends bien, le chemin réseau est le suivant :

poste client - firewall local - box - internet - firewall distant - serveur SMB

Le serveur SMB est une machine virtuelle hébergée sur une machine qui joue le rôle de firewall pour celle-ci.

Que représentent $ipwan et $vmbr0_0 dans tes règles ?

PS : Un VPN entre les firewalls local et distant, voire un simple tunnel d’encapsulation, permettrait de masquer le trafic SMB aux yeux du FAI sans devoir faire du NAT à tous les étages.

Ou toi, aussi bien.

Absolument,

$ipwan est mon ip interne et $vmbr0_0 l’ip extérieur de la VM

Cette solution me semble vraiment bien, surtout si il y à la sécurité qui va avec, mais comment on réalise cela ???

Merci d’avoir continué à répondre :slightly_smiling:

Tu es sur une machine A, tu as un compte ssh (toto@labas) sur une machine B qui peut interroger une machine C sur le port 445, tu peux «transporter ce service sur la machine A sur le port 1445 en faisant depuis A

Voilà, c’est tout

Le problème est que les pc clients à connecter au samba son des windows.

Il suffit à ces machines d’interroger la machine A (rien n’interdit d’ailleurs de mettre un port à 445 si ce n’est qu’il faut être root dans ce cas).

donc sur la machine A (windows) je fait “\ipDeLaMachineB\Partage” et àa va rediriger ver le serveur SMB via le port 1445 ?

Non la machine A’ interroge A qui transmet à B qui interroge C et retour

Donc, “ssh -N -L 1445:C:445 toto@labas” est à réaliser sur le poste Windows ? :open_mouth:

Non, la commande

exécutée sur une machine serveurlocal ouvre un port p1 sur la machine locale qui est déportée sur le port p2 de la machine serveurdistant visible depuis la machine intermédiaire. serveurdistant et intermediaire sont loin (mettons au Pérou), intermediaire contient un serveur ssh et connait la machine serveurdistant. serveurlocal est chez toi et ta machine windows interroge serveurlocal. Tu peux également «déporter» les UDP

Sinon il y a OpenVPN (openvpn.net/index.php/open-source/downloads.html) qui va bien sous windows :023

Rien ne fonctionne, me gave grave cette box, le pire c’est que je ne sais même pas passer sur free car il n’y à pas de débit dans ma zone, seul numericable passe…

Y à quand même bien moyen de ce connecter sur un samba distant malgré le blocage du port 445 !!!

Si seulement dans windows on pouvais changer le port de sortie…

Ce que tu veux faire est classique, il y a 3 solutions indiquées ici, celle que tu proposais incluse

Le transfert de port par SSH me semble contraignant : fonctionne uniquement pour TCP et pas UDP (or certaines fonctions de Netbios/SMB utilisent UDP), doit être lancé par une commande ssh, nécessite les droits root pour les ports < 1024… Si besoin de chiffrement, un VPN de type openvpn entre les deux firewalls me semble plus appropriée. On peut même faire un VPN ponté pour faire comme si les deux côtés étaient dans le même domaine de diffusion. Si pas besoin de chiffrement, un simple tunnel d’encapsulation IPIP ou GRE entre les deux firewalls suffit (man ip, commande tunnel).

Pour en revenir à la solution à base de NAT,

L’adresse IP interne de quoi ?
“WAN” pour une adresse interne, c’est vachement logique comme nommage…
Tu ne veux pas plutôt dire l’adresse externe du firewall client, sur l’interface connectée à la box ?
Le but est de translater tous les ports interdits en d’autres ports lorsque les paquets sortent à l’extérieur, et l’inverse lorsque les paquets entrent. Par exemple pour le port TCP 445, ceci devrait suffire.

  • Sur le firewall côté client :

iptables -t nat -A OUTPUT -o $if_ext -p tcp --dport 445 -j DNAT --to :1445 iptables -t nat -A POSTROUTING -o $if_ext -p tcp --sport 445 -j SNAT --to $ip_ext:1445
où if_ext est l’interface du firewall connectée à la box et ip_ext son adresse IP.

  • Sur le firewall côté serveur :

iptables -t nat -A PREROUTING -i $if_ext -d $ip_ext -p tcp --dport 1445 -j DNAT --to $ip_serveur:445
où if_ext est l’interface extérieure du firewall, ip_ext son adresse IP et ip_serveur l’adresse IP interne du serveur SMB.

Il me semblait qu’on pouvait le faire avec des tubes (mkfifo) redirigés par nc, mais c’est sûr que c’est plus compliqué qu’un VPN qui rgèlerait ses soucis.

edit: voilà la solution à laquelle je pensais pour le trafic UDP (ou qque chose d’approchant en tout cas)

zarb.org/~gc/html/udp-in-ssh-tunneling.html