Configuration Iptables - MySql : Différence entre versions
m |
(Aucune différence)
|
Version actuelle en date du 15 novembre 2018 à 14:57
L'application MySql
a été installée sur la machine afin de disposer d'un serveur de base de données pour l'ensemble des applications nécessitant un tel tiers. Lors de sa configuration, les restrictions d'accès depuis la machine ont été levées. La machine n'étant pas directement exposée sur internet, la connexion aux bases de données ne devrait pas être disponible à des personnes malveillantes. De plus, il est possible de restreintre l'adresse IP de connexion lors de la création des comptes.
Cependant, la sécurité va être augmentée en ajoutant des règles dans Iptables
afin de restreinte l'accès à ce service.
Sommaire
Votre avis
Nobody voted on this yet
|
|
Analyse
Il faut dans un premier temps identifié le port utilisé par MySql
. Dans le cadre d'une installation standard, le port est 3306
. Mais si tel n'a pas été le cas, la commande netstat permet de retrouver le port, en filtrant avec la commande Grep.
#sudo netstat -tulpn | grep mysql tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 13043/mysqld
Dans le cas présent, cela confirme l'utilisation du port 3306
et que le serveur est configuré pour accéder les connexions depuis n'importe quelle machine, dont la mise en place est explicité ici.
Paramétrages
Après avoir identifié le port utilisé, les règles dans Iptables
vont être mis en place en s'inspirant de l'organisation faite par Fail2ban
.
La configuration Iptables
initiale étant la suivante.
#sudo iptables --list -n Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination
Création "Chain"
Dans un premier temps, une "chain" est créée pour structurer la table.
#sudo iptables -N iptables-mysql
Paramètre | Utilisation |
---|---|
-N | Mode création. |
iptables-mysql | Nom de la nouvelle "Chain". |
La définition de Iptables
devient la suivante.
#sudo iptables --list -n Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain iptables-mysql (0 references) target prot opt source destination
Restriction générale
Par défaut, toutes les connexions vont être refusées.
#sudo iptables -A iptables-mysql -j REJECT
Paramètre | Utilisation |
---|---|
-A | Mode ajout. |
iptables-mysql | Cible dans la table où est ajoutée la règle. |
-j REJECT | Les connexions seront refusées |
La définition de Iptables
devient la suivante.
#sudo iptables --list -n Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain iptables-mysql (0 references) target prot opt source destination REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
Autorisation locale
Le serveur étant essentiellement utilisé localement, il faut autoriser la connexion localement.
#sudo iptables -I iptables-mysql 1 -s 127.0.0.1 -j ACCEPT
Paramètre | Utilisation |
---|---|
-I | Mode insertion. |
iptables-mysql | Cible dans la table où est ajoutée la règle. |
1 | Position de l'insertion. |
-s 127.0.0.1 | Autorisation pour la machine locale. |
-j ACCEPT | Les connexions seront autorisées. |
La définition de Iptables
devient la suivante.
#sudo iptables --list -n Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain iptables-mysql (0 references) target prot opt source destination ACCEPT all -- 127.0.0.1 0.0.0.0/0 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
Autorisation adresse IP
L'administration des bases de données peut s'effectuer à partir d'un ordinateur "externe", évitant ainsi d'avoir accès directement à la machine. Pour autoriser la connexion depuis une adresse IP spécifique.
#sudo iptables -I iptables-mysql 2 -s 192.168.1.3 -j ACCEPT
Paramètre | Utilisation |
---|---|
-I | Mode insertion. |
iptables-mysql | Cible dans la table où est ajoutée la règle. |
2 | Position de l'insertion. Celle-ci est ajoutée après localhost.
En effet, les connexions seront principalement depuis la machine, donc il est "préférable" que les autorisations arrivent le plus rapidement possible. |
-s 192.168.1.3 | Autorisation pour une IP particulière. |
-j ACCEPT | Les connexions seront autorisées. |
La définition de Iptables
devient la suivante.
#sudo iptables --list -n Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain iptables-mysql (0 references) target prot opt source destination ACCEPT all -- 127.0.0.1 0.0.0.0/0 ACCEPT all -- 192.168.1.3 0.0.0.0/0 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
Autorisation ensemble adresses IP
Dans le précédent paragraphe, une seule adresse IP a été autorisée. Il peut être utile d'autoriser un ensemble d'adresse dans le cas où l'accès doit être réalisé depuis plusieurs ordinateurs.
#sudo iptables -I iptables-mysql 2 -m iprange --src-range 192.168.1.1-192.168.1.10 -j ACCEPT
Paramètre | Utilisation |
---|---|
-I | Mode insertion. |
iptables-mysql | Cible dans la table où est ajoutée la règle. |
2 | Position de l'insertion. Celle-ci est ajoutée après localhost.
En effet, les connexions seront principalement depuis la machine, donc il est "préférable" que les autorisations arrivent le plus rapidement possible. |
-m iprange | Utilisation du module pour déclarer un ensemble d'adresse IP. |
--src-range 192.168.1.1-192.168.1.10 | Toutes les IPs entre 192.168.1.1 et 192.168.1.10 sont concernées. |
-j ACCEPT | Les connexions seront autorisées. |
La définition de Iptables
devient la suivante.
#sudo iptables --list -n Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain iptables-mysql (0 references) target prot opt source destination ACCEPT all -- 127.0.0.1 0.0.0.0/0 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 source IP range 192.168.1.1-192.168.1.10 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
Activation "Chain"
Enfin, il faut ajouter la nouvelle "Chain" comme règle du trafic.
#sudo iptables -I INPUT -p tcp --dport 3306 -j iptables-mysql
Paramètre | Utilisation |
---|---|
-I | Mode insertion. |
INPUT | Cible dans la table où est ajoutée la règle. |
-p tcp | S'applique au connexion tcp. |
--dport 3306 | Spécifie les ports auquel s'applique la règle, ici ce sera tcp. |
-j iptables-mysql | La règle est redirigée vers la "Chain" iptables-mysql créée.
|
La définition de Iptables
devient la suivante.
#sudo iptables --list -n Chain INPUT (policy ACCEPT) target prot opt source destination iptables-mysql tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:3306 Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain iptables-mysql (1 references) target prot opt source destination ACCEPT all -- 127.0.0.1 0.0.0.0/0 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 source IP range 192.168.1.1-192.168.1.10 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable