# Iptables règle localhost

**URL:** <https://www.debian-fr.org/t/iptables-regle-localhost/76965>\
**Category:** Support Debian\
**Created:** [Juin 12, 2018, 11:51 UTC](https://www.debian-fr.org/t/iptables-regle-localhost/76965 "2018-06-12T23:51:48Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![m4d3x](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/3bc359/32.png) [@m4d3x](https://www.debian-fr.org/u/m4d3x)\
**Post date:** [Juin 12, 2018, 11:51 UTC](https://www.debian-fr.org/t/iptables-regle-localhost/76965/1 "2018-06-12T23:51:49Z")

</div>

Salut.

J’essai d’interdire l’accès au port 3306 (de mysql) via _iptables_ de l’extérieur.  
Comme j’arrives pas à tester de l’extérieur, j’essaie de tester sur le localhost.

Mais j’y arrive pas, ça arrive encore à se connecter via: mysql --host=localhost --port=3306 -u utilisateur -p

Mon iptables basique:

```
iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
iptables -t filter -P OUTPUT DROP
iptables -t filter -A OUTPUT -p udp -m udp --dport 53 -m conntrack --ctstate NEW,RELATED,ESTABLISHED -j ACCEPT 
iptables -t filter -A INPUT -p udp -m udp --sport 53 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -t filter -A OUTPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate NEW,RELATED,ESTABLISHED -j ACCEPT  
iptables -t filter -A INPUT -p tcp -m multiport --sports 80,443 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -t filter -A OUTPUT -o lo -j ACCEPT
iptables -t filter -A INPUT -i lo -j ACCEPT

```

J’ai ajouter tous ces règles:

```
iptables -A INPUT -p tcp --dport 3306 -j DROP
iptables -A OUTPUT -p tcp --dport 3306 -j DROP
ip6tables -A INPUT -p tcp --dport 3306 -j DROP
ip6tables -A OUTPUT -p tcp --dport 3306 -j DROP

iptables -A INPUT -p tcp -s localhost --dport 3306 -j DROP
iptables -A OUTPUT -p tcp -s localhost --dport 3306 -j DROP
ip6tables -A INPUT -p tcp -s localhost --dport 3306 -j DROP
ip6tables -A OUTPUT -p tcp -s localhost --dport 3306 -j DROP

iptables -A INPUT -p tcp --dport 3306 -s 127.0.0.1 -d 127.0.0.1 -j DROP
ip6tables -A INPUT -p tcp --dport 3306 -s ::1 -d ::1 -j DROP

```

Les règles sont bien sauvegarder dans iptables -L.

La connection arrive encore à s’établir sans soucis.

Je fais une erreur quelque part ?  
Est-ce que la règle ci-dessous, empêche de bloquer le port 3306 ?

```
iptables -t filter -A OUTPUT -o lo -j ACCEPT
iptables -t filter -A INPUT -i lo -j ACCEPT
```

---

<div class="post-metadata">

**Author:** ![PascalHambourg](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pascalhambourg/32/5837_2.png) [@PascalHambourg](https://www.debian-fr.org/u/PascalHambourg)\
**Post date:** [Juin 13, 2018, 11:52 UTC](https://www.debian-fr.org/t/iptables-regle-localhost/76965/2 "2018-06-13T11:52:50Z")

</div>

> [@m4d3x](#):
>
> J’essai d’interdire l’accès au port 3306 (de mysql) via iptables de l’extérieur.  
> Comme je n’arrive pas à tester de l’extérieur, j’essaie de tester sur le localhost.

Ce n’est pas cohérent. Si l’accès doit être interdit de l’extérieur, il faut tester depuis l’extérieur qu’il est bloqué, et tester en local qu’il n’est pas bloqué.

> [@m4d3x](#):
>
> Est-ce que la règle ci-dessous, empêche de bloquer le port 3306 ?

En local, oui, puisque la règle qui accepte est placée avant la règle qui bloque.

---

<div class="post-metadata">

**Author:** ![m4d3x](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/3bc359/32.png) [@m4d3x](https://www.debian-fr.org/u/m4d3x)\
**Post date:** [Juin 13, 2018, 2:12 UTC](https://www.debian-fr.org/t/iptables-regle-localhost/76965/3 "2018-06-13T14:12:52Z")

</div>

J’ai mise à jours le sens, c’est pareil.  
Alors, j’ai vider tout l’iptables ip6tables et ajouter un drop total input/forward/output autre règles, bien sauvegarder/charger.

J’y suis quand même parvenu à me connecter en ligne de commande:  
mysql --host=localhost --port=3306 -u utilisateur -p

En tous cas, mes autres règles perso fonctionnent.  
J’imagine que la connection mysql se fait d’une manière qui m’échappe.

Existe-t-il un moyen de savoir si un port est ouvert ou fermé ?

---

<div class="post-metadata">

**Author:** ![PascalHambourg](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pascalhambourg/32/5837_2.png) [@PascalHambourg](https://www.debian-fr.org/u/PascalHambourg)\
**Post date:** [Juin 13, 2018, 2:34 UTC](https://www.debian-fr.org/t/iptables-regle-localhost/76965/4 "2018-06-13T14:34:44Z")

</div>

> [@m4d3x](#):
>
> J’ai mis à jour le sens

C’est-à-dire ? Il faut vérifier le jeu de règles actif avec `iptables-save` pour IPv4 et `ip6tables-save` pour IPv6.

Mais je répète : ça n’a pas de sens de tester en local si un port est inaccessible depuis l’extérieur. Le résultat n’est pas significatif.  
Il faut quand même que MySQL soit accessible en local, non ? Sinon, autant ne pas le faire écouter sur une socket TCP mais seulement sur une socket Unix (s’il supporte ce mode de connexion), voire ne pas le faire tourner du tout.

> [@m4d3x](#):
>
> Existe-t-il un moyen de savoir si un port est ouvert ou fermé ?

Des commandes comme `netstat`, `ss`, `lsof`, `fuser`… permettent de voir les sockets TCP et UDP ouvertes sur la machine locale et les ports correspondants.

Il faut bien comprendre qu’iptables ne sert pas à ouvrir ni fermer des ports mais à accepter ou bloquer des paquets IP.

---

<div class="post-metadata">

**Author:** ![Almtesh](https://www.debian-fr.org/user_avatar/www.debian-fr.org/almtesh/32/10312_2.png) [@Almtesh](https://www.debian-fr.org/u/Almtesh)\
**Post date:** [Juin 14, 2018, 9:54 UTC](https://www.debian-fr.org/t/iptables-regle-localhost/76965/5 "2018-06-14T09:54:24Z")

</div>

Bonjour,

Quelques petites notes à part :

- Est-il possible d’avoir toutes tes règles iptables appliquées avec le retour de la commande `iptables-save` et `ip6tables-save` ?
- Pour appliquer automatiquement tes règles iptables au démarrage, tu peux utiliser le paquet `iptables-persistent`, le configurateur du paquet te propose même d’importer automatiquement les règles appliquées dans la configuration qui se trouvera dans le dossier `/etc/iptables/`.

Voilà, bonne journée.

---

<div class="post-metadata">

**Author:** ![m4d3x](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/3bc359/32.png) [@m4d3x](https://www.debian-fr.org/u/m4d3x)\
**Post date:** [Juin 19, 2018, 3:29 UTC](https://www.debian-fr.org/t/iptables-regle-localhost/76965/6 "2018-06-19T15:29:09Z")

</div>

Pour ce qui est du tcp / unix.  
Ne connaissant pas le socket unix, j’avais pas trop donné suite dessus quand j’avais vu.  
Je crois qu’il s’agit pour les connexions en local, j’y jetterais un oeil sur web.

Dans ma base de donnée mysql pour root j’ai ceci:

```plaintext
+-----------+---------+-------------------------------------------+-------------+
| Host | User | Password | plugin |
+-----------+---------+-------------------------------------------+-------------+
| localhost | root |xxxx | unix_socket |

```

C’est bien un socket unix je crois.

> J’essai d’interdire l’accès au port 3306 (de mysql) via iptables de l’extérieur.  
> Comme j’arrives pas à tester de l’extérieur, j’essaie de tester sur le localhost.

Quand je disais cela, je voulais dire cela:

- comme j’ai pas d’autres connexions/ordinateurs pour me connecter réellement de l’extérieur.
- je vais faire pareil mais au lieu de l’extérieur, je vais tester de l’intérrieur
- en interdisant l’accès intérrieur et essayer de me connecter de l’intérrieur
- \<donc blocker le local au port 3306 et essayer de me connecter du local au port 3306\>

J’ai trouver un moyen pour me connecter de l’extérrieur en configurant ma box et en utilisant mon ip publique.  
Mais au moment de cet configuration j’avais tester autre choses, tester mysql ne m’est pas venu à l’idée.  
Je sais pas si je recommencerais un jour ce même teste et vérifier pour le port mysql.  
En tout cas ça m’intéresse plus en ce moment.

C’était juste pour bien être sûr qu’il n’y ai pas d’accès de l’extérrieur.  
J’ai bloqué tout ce qui est entrant, sauf le web et quelques port spécifique, donc il n’y devrait pas y avoir de soucis.

Merci à vous.
