logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 16-03-2019 23:17:23

madrippeur
Membre
Inscription : 16-03-2019

[Résolu] Iptable pour point d'accès wifi

Coucou la communauté !
J'ai un raspberry avec debian strech et hostapd installé qui me sert de point d’accès wifi. Le fonctionnement est parfait sauf sur un point.

J'ai besoin de limiter le matériel connecté dessus pour ne laisser qu'accès à internet (port 80 443 et 53 si je ne m'abuses) et me laisser un accès en ssh (port 22). C'est la que ça coince ... j'ai joué un peu avec iptables mais je n'arrive à rien sad

Pour infos, "invités" de ce point d'accès wifi se connectent à wlan0 et le lien avec internet se fait grâce à eth0.
le wlan0 est en 192.168.4.x
le eth0 en ip dynamique

Voici le contenu de ce que j'essai de donner à manger à iptables :

#!/bin/sh
    # On définit la policy par défaut a DROP
    iptables -P INPUT DROP
    iptables -P OUTPUT DROP
    iptables -P FORWARD DROP


    ## On autorise la boucle locale
    iptables -t filter -A OUTPUT -o lo -p all -j ACCEPT
    iptables -t filter -A INPUT -i lo -p all -j ACCEPT

    # On droppe tout ce qui est invalide
    IPTABLES -A INPUT -m state --state INVALID -j DROP
    IPTABLES -A OUTPUT -m state --state INVALID -j DROP

    # Autorise les reponses de connexions déjà initiées
    iptables -A OUTPUT -o eth0 -p all --m state --state RELATED,ESTABLISHED,UNTRACKED  -j ACCEPT
    iptables -A INPUT -i eth0 -p all --m state --state RELATED,ESTABLISHED,UNTRACKED  -j ACCEPT
    iptables -A INPUT -i wlan0 -p all -m state --state RELATED,ESTABLISHED,UNTRACKED -j ACCEPT
    iptables -A OUTPUT -o wlan0 -p all -m state --state RELATED,ESTABLISHED,UNTRACKED -j ACCEPT

    # On autorise les requetes HTTP & DNS
    iptables -A OUTPUT -o eth0 -m state --state NEW  -p all --dports 53,80,443,22 -j ACCEPT
    iptables -A INPUT -i eth0 -m state --state NEW  -p all --dports 53,80,443,22 -j ACCEPT
    iptables -A OUTPUT -o wlan0 -m state --state NEW  -p all --dports 53,80,443,22 -j ACCEPT
    iptables -A INPUT -i wlan0 -m state --state NEW  -p all --dports 53,80,443,22 -j ACCEPT

    iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
    iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT
    iptables -A FORWARD -i eth0 -o wlan0 -j ACCEPT



Lorsque je lance le script, je perds tous les accès au raspberry, et donc obligé de le reboot sad

Pourriez vous me donner un petit coup de main pour ces règles Iptables ?
Merci d'avance de votre aide wink
J'ai posté cette demande d'aide chez ubuntu, je n'aime pas trop les doublons, mais comme précisé par un modérateur, c'est mieux de demander ici smile

Edit à toto : J'ai édité ton message pour le rendre plus lisible en remplaçant le bbcode de la Citation : quote destiné aux textes par code (via Autrecode) qui est destiné à l'écriture des codes sur le forum. Je te laisse cliquer sur le lien Modifier au bas à droite de ce post pour voir comment le bb-code est utilisé.
Voir le tuto : Le code, ça pique moins les yeux en couleur

Dernière modification par madrippeur (17-03-2019 18:21:31)

Hors ligne

#2 16-03-2019 23:42:58

raleur
Membre
Inscription : 03-10-2014

Re : [Résolu] Iptable pour point d'accès wifi

As-tu seulement testé si ce script s'exécutait sans erreur ?

L'option --dports est spécifique à la correspondance "multiport" qui est omise dans tes règles. D'autre part cette correspondance n'est possible qu'avec un protocole qui a la notion de port comme TCP ou UDP, mais certainement pas avec "all" qui veut dire "n'importe quel protocole".

Pour info, SSH, HTTP et HTTPS utilisent uniquement TCP ; DNS utilise surtout UDP et rarement TCP.

Accessoirement, ces règles ne font aucun filtrage des connexions entre les clients wifi et l'extérieur. Un tel filtrage doit se faire dans la chaîne FORWARD.

madrippeur a écrit :

internet (port 80 443 et 53 si je ne m'abuse


[modéré]
Internet ne se limite pas à HTTP, HTTPS et DNS. Ça, c'est juste le web.
Avant d'écrire des règles iptables, il faut connaître les flux de paquets en jeu.

Note : inutile de surcharger les règles avec des options vides comme "-p all".

Dernière modification par raleur (16-03-2019 23:48:44)


Il vaut mieux montrer que raconter.

Hors ligne

#3 17-03-2019 00:23:26

madrippeur
Membre
Inscription : 16-03-2019

Re : [Résolu] Iptable pour point d'accès wifi

Coucou !

raleur a écrit :

As-tu seulement testé si ce script s'exécutait sans erreur ?


oui j'ai seulement essayé :
Lorsque je lance le script, je perds tous les accès au raspberry, et donc obligé de le reboot.
La moindre règle que je donne à ce iptable me déconnecte. :s

raleur a écrit :

Pour info, SSH, HTTP et HTTPS utilisent uniquement TCP ; DNS utilise surtout UDP et rarement TCP.


Très bien wink j'ai appris et compris quelque chose.

raleur a écrit :


[modéré]


Ok, tu vois donc pourquoi je demande un peu d'aide. Je penses que si j'avais compris comment ce la fonctionnait, je n'aurai pas fais ce genre d'erreur.


raleur a écrit :

Avant d'écrire des règles iptables, il faut connaître les flux de paquets en jeu.


Tu dois bien te rendre compte tout de même que j'ai fais un minimum de recherches avant de demander de l'aide, et que j'ai fais avec les moyens du bord qui sont plutôt petits actuellement.
Le besoin que j'ai est seulement d'autoriser l'accès au web et pouvoir me connecter en ssh sur le raspberry par l'eth0 et le wlan0.

Edit à toto : La modération de minuit n'avait pas encore pris son poste, avec nos excuses. dodo.gif

Dernière modification par madrippeur (17-03-2019 00:24:23)

Hors ligne

#4 17-03-2019 09:29:42

raleur
Membre
Inscription : 03-10-2014

Re : [Résolu] Iptable pour point d'accès wifi

madrippeur a écrit :

oui j'ai seulement essayé


Visiblement tu ne l'as pas testé dans des conditions permettant de voir les éventuels messages d'erreur, sinon tu aurais vu que toutes les commandes contenant --dports échouaient. Cela signifie via une console physique (sur une autre machine si besoin) et non par SSH, car évidemment si tous les paquets sont bloqués (ce que font les trois premières commandes) la connexion SSH sera interrompue.

madrippeur a écrit :

Le besoin que j'ai est seulement d'autoriser l'accès au web et pouvoir me connecter en ssh sur le raspberry par l'eth0 et le wlan0.


Le serveur DNS utilisé par les clients wifi est-il sur le point d'accès ou au delà ?
Le point d'accès fait-il office de serveur DHCP  ?
Le point d'accès lui-même a-t-il besoin de faire des connexions sortantes, par exemple pour ses mises à jour ?


Il vaut mieux montrer que raconter.

Hors ligne

#5 17-03-2019 10:13:42

madrippeur
Membre
Inscription : 16-03-2019

Re : [Résolu] Iptable pour point d'accès wifi

raleur a écrit :

Visiblement tu ne l'as pas testé dans des conditions permettant de voir les éventuels messages d'erreur, sinon tu aurais vu que toutes les commandes contenant --dports échouaient. Cela signifie via une console physique (sur une autre machine si besoin) et non par SSH, car évidemment si tous les paquets sont bloqués (ce que font les trois premières commandes) la connexion SSH sera interrompue.


Effectivement je ne suis pas allé jusqu'au dport car les premiéres lignes me coupent l'accès.
J'ai cru comprendre qu'il fallait bloquer pour ensuite donner des règles d'exceptions pour autoriser. Seuls, les dport echouent.


raleur a écrit :

Le serveur DNS utilisé par les clients wifi est-il sur le point d'accès ou au delà ?


le serveur dns sera celui de google, donc en dehors du réseau local

raleur a écrit :

Le point d'accès fait-il office de serveur DHCP  ?


Oui, il attribut actuellement sur du 192.168.4.0/24, le dhcp donne bien le dns google.
le réseau local est sur : 192.168.1.0/24

raleur a écrit :

Le point d'accès lui-même a-t-il besoin de faire des connexions sortantes, par exemple pour ses mises à jour ?


Je pensais figer son état, donc pas de mise à jour, juste me garder un accès ssh pour une maintenance ponctuelle. Je me disait qu'au pire, je pouvais vider iptable, faire les mises à jours et le relancer quelques fois dans l'année.

Donc d’après ce que je comprends il faudrait ouvrir les ports utiles puis faire les drops ?

Hors ligne

#6 17-03-2019 10:35:10

raleur
Membre
Inscription : 03-10-2014

Re : [Résolu] Iptable pour point d'accès wifi

Accès à un DNS des clients wifi vers extérieur : autoriser le port destination 53 UDP et TCP en FORWARD de wlan0 vers eth0.
Accès web des clients wifi vers l'extérieur : autoriser les ports destination 80 et 443 TCP en FORWARD de wlan0 vers eth0.

Accès SSH vers le point d'accès : autoriser le port destination 22 TCP en INPUT.

DHCP : autoriser le couple port source 68 et port destination 67 UDP en INPUT sur wlan0.
Autoriser le couple port source 67 et port destination 68 UDP en OUTPUT sur wlan0.

madrippeur a écrit :

il faudrait ouvrir les ports utiles puis faire les drops ?


Ça ne change pas grand-chose au résultat final. La politique par défaut est appliquée indépendamment des règles. Peu importe si la règle qui est censée autoriser plante en erreur avant ou après la définition de la politique qui bloque : au final la règle n'est pas créée et ça bloque.

Il faut tester l'exécution du script dans un contexte où on peut voir les éventuels messages d'erreur, donc avec une console physique, sur une autre machine si nécessaire.


Il vaut mieux montrer que raconter.

Hors ligne

#7 17-03-2019 11:12:28

madrippeur
Membre
Inscription : 16-03-2019

Re : [Résolu] Iptable pour point d'accès wifi

Merci de ton aide.
Si je comprends bien ce que tu me dis :

raleur a écrit :

Accès à un DNS des clients wifi vers extérieur : autoriser le port destination 53 UDP et TCP en FORWARD de wlan0 vers eth0.
Accès web des clients wifi vers l'extérieur : autoriser les ports destination 80 et 443 TCP en FORWARD de wlan0 vers eth0.
Accès SSH vers le point d'accès : autoriser le port destination 22 TCP en INPUT.
DHCP : autoriser le couple port source 68 et port destination 67 UDP en INPUT sur wlan0.
Autoriser le couple port source 67 et port destination 68 UDP en OUTPUT sur wlan0.



Cela nous donnerai :

# Politique par défaut
  iptables -P INPUT DROP
  iptables -P FORWARD DROP
  iptables -P OUTPUT ACCEPT

# Faire confiance à nous-mêmes ;o)
  iptables -A INPUT -i lo -j ACCEPT


#Accès à un DNS des clients wifi vers extérieur : autoriser le port destination 53 UDP et TCP en FORWARD de wlan0 vers eth0.
  iptables -A FORWARD -i wlan0 -p tcp --dport 53 -d eth0 -j ACCEPT
  iptables -A FORWARD -i wlan0 -p tcp --dport 53 -d eth0 -j ACCEPT

#Accès web des clients wifi vers l'extérieur : autoriser les ports destination 80 et 443 TCP en FORWARD de wlan0 vers eth0.
  iptables -A FORWARD -i wlan0 -p tcp --dport 80 -d eth0 -j ACCEPT
  iptables -A FORWARD -i wlan0 -p tcp --dport 443 -d eth0 -j ACCEPT


#Accès SSH vers le point d'accès : autoriser le port destination 22 TCP en INPUT.
  iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT
  iptables -t filter -A OUTPUT -p tcp --sport 22 -j ACCEPT

#DHCP : autoriser le couple port source 68 et port destination 67 UDP en INPUT sur wlan0.
  iptables -t filter -A INPUT -i wlan0 -p udp --sport 67 -j ACCEPT
  iptables -t filter -A INPUT -i wlan0 -p udp --sport 68 -j ACCEPT

#Autoriser le couple port source 67 et port destination 68 UDP en OUTPUT sur wlan0.
  iptables -t filter -A OUTPUT -o eth0 -p udp --sport 67 -j ACCEPT
  iptables -t filter -A OUTPUT -o eth0 -p udp --sport 68 -j ACCEPT
 



Chaque ligne a été renseignée en physique sur la machine. Aucune erreur d’exécution en entrant ligne par ligne. Cependant, lorsque je me connecte sur le wifi, je n'ai pas de résolution dns.
Un ip config me donne un bon adressage sur le pc connecté au Wlan, j'ai bien accès au Ssh du raspberry, mais les pages internet me disent "erreur dns, page introuvable". Le Pc a été connecté au wlan après les modification de iptables.

Dernière modification par madrippeur (17-03-2019 11:31:52)

Hors ligne

#8 17-03-2019 11:21:25

raleur
Membre
Inscription : 03-10-2014

Re : [Résolu] Iptable pour point d'accès wifi

madrippeur a écrit :

iptables -P OUTPUT ACCEPT


Je croyais que tu ne voulais pas autoriser de trafic sortant.

madrippeur a écrit :

-d eth0


Erreur. -d spécifie l'adresse destination, pas l'interface de sortie.

Et les règles pour autoriser les paquets ESTABLISHED dans le sens retour et les paquets RELATED, elles ont disparu ?

madrippeur a écrit :

#DHCP : autoriser le couple port source 68 et port destination 67 UDP en INPUT sur wlan0.
    iptables -t filter -A INPUT -i wlan0 -p udp --sport 67 -j ACCEPT
    iptables -t filter -A INPUT -i wlan0 -p udp --sport 68 -j ACCEPT


Le couple, c'est les deux en même temps, pas l'un ou l'autre. Et le port destination ne se spécifie pas avec --sport.


Il vaut mieux montrer que raconter.

Hors ligne

#9 17-03-2019 11:25:23

madrippeur
Membre
Inscription : 16-03-2019

Re : [Résolu] Iptable pour point d'accès wifi

Puré, j'ai pas tout compris. J'y retourne.
Merci !

Toto, merci pour le édit. J'ai modifié mes postes en conséquence.

Dernière modification par madrippeur (17-03-2019 11:32:26)

Hors ligne

#10 17-03-2019 11:52:01

madrippeur
Membre
Inscription : 16-03-2019

Re : [Résolu] Iptable pour point d'accès wifi

Bon je vient de remodifier le script.

#!/bin/sh
#
# firewall.sh

# Politique par défaut
  iptables -P INPUT DROP
  iptables -P FORWARD DROP
  iptables -P OUTPUT DROP

# Faire confiance à nous-mêmes ;o)
  iptables -A INPUT -i lo -j ACCEPT


# Autorise les reponses de connexions déjà initiées
  iptables -A OUTPUT -o eth0 -p all -m state --state RELATED,ESTABLISHED,UNTRACKED -j ACCEPT
  iptables -A INPUT -i eth0 -p all -m state --state RELATED,ESTABLISHED,UNTRACKED -j ACCEPT
  iptables -A INPUT -i wlan0 -p all -m state --state RELATED,ESTABLISHED,UNTRACKED -j ACCEPT
  iptables -A OUTPUT -o wlan0 -p all -m state --state RELATED,ESTABLISHED,UNTRACKED -j ACCEPT


#Accès à un DNS des clients wifi vers extérieur : autoriser le port destination 53 UDP et TCP en FORWARD de wlan0 vers eth0.
  iptables -A FORWARD -i wlan0 -p udp --sport 53 -o eth0 --dport 53 -j ACCEPT
  iptables -A FORWARD -i wlan0 -p tcp --sport 53 -o eth0 --dport 53 -j ACCEPT

#Accès web des clients wifi vers l'extérieur : autoriser les ports destination 80 et 443 TCP en FORWARD de wlan0 vers eth0.
  iptables -A FORWARD -i wlan0 -p tcp --sport 80 -o eth0 --dport 80 -j ACCEPT
  iptables -A FORWARD -i wlan0 -p tcp --sport 443 -o eth0 --dport 443 -j ACCEPT


#DHCP : autoriser le couple port source 68 et port destination 67 UDP en INPUT sur wlan0.
  iptables -t filter -A INPUT -i wlan0 -p udp --sport 67:68 -j ACCEPT

#Autoriser le couple port source 67 et port destination 68 UDP en OUTPUT sur wlan0.
  iptables -t filter -A OUTPUT -o eth0 -p udp --sport 67:68 -j ACCEPT

#Accès SSH vers le point d'accès : autoriser le port destination 22 TCP en INPUT.
  iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT
  iptables -t filter -A OUTPUT -p tcp --sport 22 -j ACCEPT

 



J'obtiens le même résultat. Aucune erreur à l'insertion des lignes, mais pas de résolution DNS. Je fais des efforts, mais je ne comprends pas tout à priori.

Iptables -L


me donne

Chain INPUT (policy DROP)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTA                                                                                        BLISHED,UNTRACKED
ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTA                                                                                        BLISHED,UNTRACKED
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:domain
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:http
ACCEPT     udp  --  anywhere             anywhere             udp dpt:80
ACCEPT     udp  --  anywhere             anywhere             udp spts:bootps:bo                                                                                        otpc
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh

Chain FORWARD (policy DROP)
target     prot opt source               destination
ACCEPT     udp  --  anywhere             anywhere             udp spt:domain dpt                                                                                        :domain
ACCEPT     tcp  --  anywhere             anywhere             tcp spt:domain dpt                                                                                        :domain
ACCEPT     tcp  --  anywhere             anywhere             tcp spt:http dpt:h                                                                                        ttp
ACCEPT     tcp  --  anywhere             anywhere             tcp spt:https dpt:                                                                                        https

Chain OUTPUT (policy DROP)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTA                                                                                        BLISHED,UNTRACKED
ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTA                                                                                        BLISHED,UNTRACKED
ACCEPT     tcp  --  anywhere             anywhere             tcp spt:domain
ACCEPT     tcp  --  anywhere             anywhere             tcp spt:http
ACCEPT     udp  --  anywhere             anywhere             udp spt:80
ACCEPT     udp  --  anywhere             anywhere             udp dpts:bootps:bo                                                                                        otpc
ACCEPT     tcp  --  anywhere             anywhere             tcp spt:ssh
 

Dernière modification par madrippeur (17-03-2019 13:17:03)

Hors ligne

#11 17-03-2019 15:54:15

raleur
Membre
Inscription : 03-10-2014

Re : [Résolu] Iptable pour point d'accès wifi

En effet tu ne comprends pas tout et c'est de pire en pire. En plus il reste des règles de tes tentatives précédentes car le script ne les efface pas. Je renonce à tenter de t'expliquer, tu as trop de lacunes sur les protocoles réseau.

# Politique par défaut
  iptables -P INPUT DROP
  iptables -P FORWARD DROP
  iptables -P OUTPUT DROP

# vider les règles
  iptables -F

# Faire confiance à nous-mêmes ;o)
  iptables -A OUTPUT -o lo -j ACCEPT
  iptables -A INPUT -i lo -j ACCEPT


# Autorise les reponses de connexions déjà initiées
  iptables -A INPUT -m state --state RELATED,ESTABLISHED,UNTRACKED -j ACCEPT
  iptables -A FORWARD -m state --state RELATED,ESTABLISHED,UNTRACKED -j ACCEPT
  iptables -A OUTPUT -m state --state RELATED,ESTABLISHED,UNTRACKED -j ACCEPT


#Accès à un DNS des clients wifi vers extérieur : autoriser le port destination 53 UDP et TCP en FORWARD de wlan0 vers eth0.
  iptables -A FORWARD -i wlan0 -o eth0 -p udp --dport 53 -j ACCEPT
  iptables -A FORWARD -i wlan0 -o eth0 -p tcp --dport 53 -j ACCEPT

#Accès web des clients wifi vers l'extérieur : autoriser les ports destination 80 et 443 TCP en FORWARD de wlan0 vers eth0.
  iptables -A FORWARD -i wlan0 -o eth0 -p tcp --dport 80 -j ACCEPT
  iptables -A FORWARD -i wlan0 -o eth0 -p tcp --dport 443 -j ACCEPT


#DHCP : autoriser les requêtes DHCP en INPUT sur wlan0.
  iptables -t filter -A INPUT -i wlan0 -p udp --sport 68 --dport 67 -j ACCEPT

#Autoriser les réponses DHCP en OUTPUT sur wlan0.
  iptables -t filter -A OUTPUT -o wlan0 -p udp --sport 67 --dport 68 -j ACCEPT


#Accès SSH vers le point d'accès : autoriser le port destination 22 TCP en INPUT.
  iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT


# Et on n'oublie pas le masquerading (NAT source) sur eth0 dans la table nat

  iptables -t nat -F
  iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
 



Et pour afficher le jeu de règles en place, utilise la commande iptables-save plutôt qu'iptables -L.


Il vaut mieux montrer que raconter.

Hors ligne

#12 17-03-2019 18:00:22

madrippeur
Membre
Inscription : 16-03-2019

Re : [Résolu] Iptable pour point d'accès wifi

Merci de ton aide et de tes explications. J'espère et je penses avoir compris, je vais adapter pour accepter les connexions au ports de mails standards pour voir si j'y parviens.
A priori le fonctionnement de tes règles sont conformes à ce que je recherchais, je n’accède pas aux partages réseau et je ne vois aucun matériel de mon réseau local.

Hors ligne

Pied de page des forums