Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 27/09/2014, à 09:03

ibubbl3

iptables redirection de port

Bonjour à tous, j'ai une petite galère iptable

En gros j'ai un raspberry sur la DMZ de la box... En gros toutes les requêtes vers mon ip publique sont redirigé vers
raspberry.

Je veux faire deux choses :
- accèder au RPI en SSH sur port 22 depuis mon réseau local
- accèder au RPI en SSH sur port 4221 depuis internet.

SSH n'écoutant que sur le port 22 je pensais m'en sortir avec iptables.

J'ai créé une interface eth0:1 en 10.0.0.1 puis j'ai implémenté les règles suivantes :

table filter :

iptables -P INPUT DROP
iptables -A INPUT --source 192.168.0.0/24 -j ACCEPT
iptables -I INPUT 2 -i eth0:1 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

En gros je blacklist tout et je laisse lo,le lan eth0 et eth0:1 faire ce qu'ils veulent

Puis je redirige les requêtes en 4221 vers l'interface eth0:1 en 22 :
table nat :

iptables -t nat -I PREROUTING -d 192.168.0.253 -p tcp --dport 4221 -j DNAT --to 10.0.0.1:22

Problème, ça ne marche pas, ça fait deux jours que je sèche et je ne trouve rien.

j'ai activé le routage, j'ai essayé en mettant l'@ de eth0 en gateway de eth0:1 j'ai essayé de redirigé vers lo...
En gros j'ai du mal à déterminer si c'est un problème de routage, de filtrage ou les deux.

Merci d'avance pour ceux qui pourront m'aider.

Hors ligne

#2 Le 27/09/2014, à 09:11

bruno

Re : iptables redirection de port

Bonjour,

Tu te compliques la vie wink
Pourquoi mettre ton Pi dans la « DMZ » de la box ?
Ne le fait pas et fait les redirections de port sur ta box. Du port 4221 vers le port 22 du Pi au moins pour le SSH.

#3 Le 27/09/2014, à 09:15

ibubbl3

Re : iptables redirection de port

Certes, je me complique la vie, mais c'est pour des besoins qui me sont propre et aussi pour apprendre.... ça ne me paraît pas impossible, c'est juste que je bloque sur un point et je suis sur qu'il y a bien une solution. smile:)

Hors ligne

#4 Le 27/09/2014, à 09:28

bruno

Re : iptables redirection de port

Désolé je n'y connais pas grand chose en règles iptables. Je ne suis pas sûr que tu aies besoin d'une seconde interface eth0:1
Tu devrais tenter un truc du genre :

iptables -A PREROUTING -p tcp -m tcp --dport 4221-j REDIRECT --to-ports 22
iptables -A INPUT -p tcp -s 192.168.0.0/24 --dport 22 -j ACCEPT

#5 Le 27/09/2014, à 09:50

ibubbl3

Re : iptables redirection de port

En fait je l'ai déjà tenté...

si tu regardes dans ce que j'ai configuré :
iptables -A INPUT --source 192.168.0.0/24 -j ACCEPT
En gros j'accepte tout depuis le lan, mais je refuse tout depuis ailleurs. En utilisant ta policy redirect, je suis dans l'obligation d'ouvrir 22 vers l'extérieur ce qui en soit ne me convient pas (je veux le protéger)

L'idée que j'avais, c'était d'interdire tout depuis l'extérieur et de rediriger le traffic du port 4221 vers le port 22 sur une autre interface acceptant elle les connexions en 22 depuis l'extérieur (mais non joignable directement).

Pour résumer :

- Je ne veux pas que le port 22 répondent depuis internet
- Je veux que le port 22 réponde depuis mon lan
- Je veux rediriger le traffic de 4221 vers 22 pour accèder à machine en SSH sans avoir à ouvrir le port 22 au monde entier.

Ce qui m'amène à faire cette configuration qui en soit je te l'accorde peut paraître un peu tordu.

Dernière modification par ibubbl3 (Le 27/09/2014, à 09:50)

Hors ligne

#6 Le 28/09/2014, à 21:35

fruitsecrases

Re : iptables redirection de port

Tcho.

Il y a des trucs dans ce que tu dis vouloir faire qui ne peuvent pas être faîts avec tes règles Iptables actuelles. Par exemple dans ton tout premier message tu donnes ces deux règles complémentaires au début :


iptables -P INPUT DROP
.......
iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT



Et c'est en contradiction avec ta demande qui est si j'ai bien compris celle-ci :

ibubbl3 a écrit :

Je veux faire deux choses :
(A)  - accèder au RPI en SSH sur port 22 depuis mon réseau local
(B)  - accèder au RPI en SSH sur port 4221 depuis internet.


Jai ajouté les lettres (A) et (B) entre parenthèses au dessus pour mieux m'expliquer par la suite. Pour mes exemples  je vais prendre des adresses IP fictives pour "nommer" le matériel voulant joindre ton RPI (et aussi je vais donner une adresse IP fictive attribuée à ton RPI), afin que tu comprennes pourquoi ce que tu veux faire avec tes règles actuelles Iptables t'es impossible.



Les adresses fictives pourraient être les suivantes :

192.168.0.12 : Ton RPI
192.168.1.3 : Ton PC local avec lequel tu veux acceder à ton RPI
84.153.24.09 : Un de tes PC voulant contacter ton RPI depuis Internet.


Quand tu veux faire ce que j'ai appelé la manipulation (A) cela t'est effectivement impossible car tu ne l'autorises pas avec tes règles Iptables actuelles :

Car tu essaies de connecter l'adresse IP 192.168.1.3 à l'adresse IP : 192.168.0.12, et c'est impossible de faire cela avec les deux règles Iptables que tu donnes dans ton premier message (qui sont les suivantes) :


iptables -P INPUT DROP
.......
iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT



Pourquoi maintenant (en détails):

_Parce que avec ta règle "iptables -P INPUT DROP" tu refuses tout ce qui arrive de l'extérieur donc tu interdis bien sûr toutes connexions depuis  ton PC local vers ton port SSH, et aussi bien sûr tu interdis par la même occasion toutes connexions depuis un de tes PC Internet vers ton port SSH.

Car ton Iptables sur ton RPI les considère comme NEW (nouvelles connexions) car elles ne sont pas reconnues comme venant d'être lancées depuis le RPI, mais venant bien de l'extérieur du RPI, Iptables ne les laisse donc pas passer, car tu lui as dit de ne laisser passer (sur la chaîne INPUT) que les connexions RELATED et ESTABLISHED (autrement dit de ne laisser passser que ce qui est initié depuis le RPI).

Tout le reste est donc bloqué, donc tout ce qui vient de l'extérieur au RPI, (que ce soit extérieur-en-local ou extérieur-Internet) est bloqué avec ce type de règles Iptables, il faut les affiner (voir plus bas).


Tu as donc mis cela pour épauler ton DROP sur INPUT :

iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

Cette ligne de commande là ne comporte pas l'argument "NEW", et c'est le seul argument nécessaire à Iptables pour qu'il accepte une nouvelle connexion sur tes ports SSH venant donc soit de ton PC local, soit de ton PC Internet.

Cette ligne de commande juste au dessus accepte seulement ce qui est initié depuis le RPI, tout ce qui vient depuis le dehors du RPI est DROPÉ ! Donc ton PC en local est dropé, et ton PC d'Internet est aussi dropé.

Et en faisant les deux lignes suivantes, tu t'es empêché toi même de te connecter donc à toi même, (mais on vera plus bas comment contourner cela) : 


iptables -P INPUT DROP
.......
iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT


(En même temps en mettant l'argument "NEW" sur cette ligne de commande cela annulerai ta règle DROP sur INPUT....)



Mais tu as aussi paramétré Iptables avec ceci :

iptables -t nat -I PREROUTING -d 192.168.0.253 -p tcp --dport 4221 -j DNAT --to 10.0.0.1:22

Cela ne sert à rien pour Iptables car comme on vient de le voir au dessus, cette redirection NAT n'aboutira jamais car tu ne laisses rien entrer sur le RPI, donc pour Iptables il n'a rien à nater du tout...ni depuis ton local, ni depuis Internet... Car cela lui est interdit selon les règles que l'on vient de voir.



Je pense que ta solution pourra se trouver plus dans ce style de choses :

Tu laisses tes règles actuelles (donc les règles de ton premier message, celles qui t'interdisent les choses venant de toi même qu'elles soient d'Internet ou Locales, celles-là tu les laisses donc), et tu fais ton possible pour que ton PC en local ait une adresse IP fixe, de là tu créeras une règle  sur ton Iptables-RPI autorisant seulement l'accès depuis cette machine à l'IP locale FIXE. Et pour le joindre depuis internet, il te faudra aussi une adresse IP fixe (par exemple depuis un proxy VPN que tu payes et qui a toujours la même adresse IP internet fixe), que tu indiqueras à iptables de la même manière que pour l'IP locale.

De cette façon tu gardes donc toutes tes règles Iptables initiales (que tu as indiqué dans ton tout premier message ici en créant cette discussion), et tu n'autoriseras que l'adresse IP locale Fixe que tu auras choisi, et que l'adresse IP Internet Fixe que tu auras choisi sur ton Iptables-RPI......


Pour moi c'est viable, à toute.

Dernière modification par fruitsecrases (Le 29/09/2014, à 16:04)

Hors ligne

#7 Le 29/09/2014, à 15:04

fruitsecrases

Re : iptables redirection de port

J'ai édité, le ton du message était pas cool et les explications pas très claires, à plus.

Dernière modification par fruitsecrases (Le 29/09/2014, à 16:05)

Hors ligne

#8 Le 29/09/2014, à 21:33

ibubbl3

Re : iptables redirection de port

fruitsecrases a écrit :

iptables -P INPUT DROP
.......
iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

Je ne comprend pas pourquoi tu bloques sur ces deux lignes... C'est le principe d'une blacklist, j'interdis tout par défaut et ensuite j'ouvre ce qui m'intéresse.

Pour mon lan ça marche très bien :

iptables -A INPUT --source 192.168.0.0/24 -j ACCEPT

Au départ ce que je voulais c'était redirigé les trames arrivant de l'extérieur vers une interface virtuelle. J'ai appris que sur le forum debian que les interface eth0:1 ne sont que des alias IP et non traité en tant qu'unterface par iptables.

Pour que ça marche comme je le souhaite il me faudrait une interface virtuelle, une vraie avec sa propre mac... Que je route le traffic entre les l'interface réelle et la virtuelle.

Pour le moment j'ai grugé et ça marche de la manière suivante :

je créé l'alias IP suivant :

iface eth0:3 inet static
address 192.168.0.252
netmask 255.255.255.0

et en y mettant les règles suivantes :

######## INPUT 
iptables -P INPUT DROP
iptables -A INPUT --source 192.168.0.0/24 -j ACCEPT
iptables -A INPUT --destination 192.168.0.252 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

######## PAT (PREROUTING)
sudo iptables -t nat -A PREROUTING -p tcp -i eth0 --source 0.0.0.0/0  --destination 192.168.0.253 --dport 4221 -j DNAT --to 192.168.0.252:22

C'est un peu cracra car l'ip source du retour sera différente de l'aller mais comme la box réécrit la source avec l'ip publique ça marche.

J'ai deux questions encore :

- quelqu'un connait-il un soft ou une technique pour créer une vrai interface virtuelle ?
- eth0:1 ne monte pas automatiquement au boot, je suis obliger de faire manuellement un ifup... En googlant je me suis rendu compte que je n'étais pas le premier, mais je n'ai pas trouvé de solution fonctionelle.

si quelqu'un à une idée pour l'une ou l'autre question je suis preneur wink

Hors ligne

#9 Le 29/09/2014, à 21:46

ibubbl3

Re : iptables redirection de port

- eth0:1 ne monte pas automatiquement au boot, je suis obliger de faire manuellement un ifup... En googlant je me suis rendu compte que je n'étais pas le premier, mais je n'ai pas trouvé de solution fonctionelle.     

Bon au final, j'avais oublié cette petite ligne :

auto eth0:1

 
Me reste donc cette dernière question :

- quelqu'un connait-il un soft ou une technique pour créer une vrai interface virtuelle ?

Hors ligne

#10 Le 30/09/2014, à 07:38

fruitsecrases

Re : iptables redirection de port

Tcho !

Alors concrettement, qu'est-ce que tu as réussi à faire maintenant par rapport à te demande initiale (celle de ton premier message), tu arrives à faire ce qui suit maintenant ? :

ibubbl3 a écrit :

Je veux faire deux choses :
- accèder au RPI en SSH sur port 22 depuis mon réseau local
- accèder au RPI en SSH sur port 4221 depuis internet.

Dernière modification par fruitsecrases (Le 30/09/2014, à 07:50)

Hors ligne

#11 Le 30/09/2014, à 08:14

fruitsecrases

Re : iptables redirection de port

ibubbl3 a écrit :

Me reste donc cette dernière question :

- quelqu'un connait-il un soft ou une technique pour créer une vrai interface virtuelle ?


Oui je connais un Soft qui crée une interface virtuelle avec automatiquement une adresse MAC différente de sa machine hôte :

_La machine virtuelle.


Par exemple celle basée sur Oracle (VirtualBox)  : http://doc.ubuntu-fr.org/virtualbox

Hors ligne

#12 Le 30/09/2014, à 09:02

Compte supprimé

Re : iptables redirection de port

Salut smile
Iptable n'est pas simple smile Perso, je configure mes serveurs à l'aide de FWbuilder qui est un outil de plus haut niveau...
fwbuilder peut générer un script de configuration du pare-feu selon les règles saisies. Son architecture modulaire lui permet de générer des scripts pour les pare-feu de différents systèmes (iptables pour Linux, ipf pour FreeBSD et pf pour OpenBSD).

http://www.fwbuilder.org/4.0/quick_start_guide.shtml

Le paquet est dans les dépôts Ubuntu.

sudo apt-get install fwbuilder

Au pire, tu peux regarder après, le script créé pour comprendre d'ou venait l'erreur wink

smile

#13 Le 30/09/2014, à 09:35

fruitsecrases

Re : iptables redirection de port

À préciser que sur le lien que j'ai donné au dessus, les éclaircissements de la partie "réseau" des machines virtuelles est au paragraphe suivant :

5.2 : Carte réseau Virtuelle

Bien sûr tu auras autant d'adresses MAC et d'adresses réseau différentes, que de machines virtuelles créées...

Dernière modification par fruitsecrases (Le 30/09/2014, à 09:37)

Hors ligne

#14 Le 02/10/2014, à 07:05

fruitsecrases

Re : iptables redirection de port

ibubbl3 a écrit :

 
Me reste donc cette dernière question :

- quelqu'un connait-il un soft ou une technique pour créer une vrai interface virtuelle ?


Alors mon ami, tu t'en es sorti avec tous nos conseils ? smile

Hors ligne