Configuration Iptables - OpenLDAP
L'application OpenLDAP
a été installée sur la machine afin de mettre en place un annuaire et de gérer les droits d'accès aux applications, qui permettent ce type de configuration. La machine n'étant pas directement exposée sur internet, l'accès à l'annuaire ne devrait pas être disponible à des personnes malveillantes. 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 OpenLDAP
. Dans le cadre d'une installation standard, le port est 389
. Mais si tel n'a pas été le cas, la commande netstat permet de retrouver le port:
#sudo netstat -tulpn Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:389 0.0.0.0:* LISTEN 1241/slapd tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 1062/mysqld tcp 0 0 192.168.1.32:53 0.0.0.0:* LISTEN 1045/named tcp 0 0 127.0.1.1:53 0.0.0.0:* LISTEN 1113/dnsmasq tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 1045/named tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 987/sshd tcp 0 0 0.0.0.0:631 0.0.0.0:* LISTEN 23787/cupsd tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN 1045/named tcp6 0 0 :::35391 :::* LISTEN 1514/java tcp6 0 0 127.0.0.1:8005 :::* LISTEN 1514/java tcp6 0 0 :::389 :::* LISTEN 1241/slapd tcp6 0 0 :::54568 :::* LISTEN 1514/java tcp6 0 0 :::43114 :::* LISTEN 1514/java tcp6 0 0 :::8080 :::* LISTEN 1514/java tcp6 0 0 :::54288 :::* LISTEN 1514/java tcp6 0 0 :::80 :::* LISTEN 1467/apache2 tcp6 0 0 :::7091 :::* LISTEN 1514/java tcp6 0 0 :::53 :::* LISTEN 1045/named tcp6 0 0 :::22 :::* LISTEN 987/sshd tcp6 0 0 :::631 :::* LISTEN 23787/cupsd tcp6 0 0 ::1:953 :::* LISTEN 1045/named tcp6 0 0 :::443 :::* LISTEN 1467/apache2 udp 0 0 0.0.0.0:5353 0.0.0.0:* 868/avahi-daemon: r udp 0 0 0.0.0.0:58603 0.0.0.0:* 868/avahi-daemon: r udp 0 0 192.168.1.32:53 0.0.0.0:* 1045/named udp 0 0 127.0.1.1:53 0.0.0.0:* 1113/dnsmasq udp 0 0 127.0.0.1:53 0.0.0.0:* 1045/named udp6 0 0 :::33848 :::* 1514/java udp6 0 0 :::5353 :::* 1514/java udp6 0 0 :::5353 :::* 868/avahi-daemon: r udp6 0 0 :::53 :::* 1045/named udp6 0 0 :::47411 :::* 868/avahi-daemon: r
Il est possible de filtrer sur le programme avec la commande Grep:
#sudo netstat -tulpn | grep slapd tcp 0 0 0.0.0.0:389 0.0.0.0:* LISTEN 1241/slapd tcp6 0 0 :::389 :::* LISTEN 1241/slapd
Dans le cas présent, cela confirme l'utilisation du port 389
.
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 fail2ban-apache-scan tcp -- 0.0.0.0/0 0.0.0.0/0 multiport dports 80,443 fail2ban-ssh tcp -- 0.0.0.0/0 0.0.0.0/0 multiport dports 22 Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain fail2ban-apache-scan (1 references) target prot opt source destination RETURN all -- 0.0.0.0/0 0.0.0.0/0 Chain fail2ban-ssh (1 references) target prot opt source destination RETURN all -- 0.0.0.0/0 0.0.0.0/0
Création "Chain"
Dans un premier temps, une "chain" est créée pour structurer la table:
#sudo iptables -N iptables-slapd
Paramètre | Utilisation |
---|---|
-N | Mode création. |
iptables-slapd | Nom de la nouvelle "Chain". |
La définition de Iptables
devient:
#sudo iptables --list -n Chain INPUT (policy ACCEPT) target prot opt source destination fail2ban-apache-scan tcp -- 0.0.0.0/0 0.0.0.0/0 multiport dports 80,443 fail2ban-ssh tcp -- 0.0.0.0/0 0.0.0.0/0 multiport dports 22 Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain fail2ban-apache-scan (1 references) target prot opt source destination RETURN all -- 0.0.0.0/0 0.0.0.0/0 Chain fail2ban-ssh (1 references) target prot opt source destination RETURN all -- 0.0.0.0/0 0.0.0.0/0 Chain iptables-slapd (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-slapd -j REJECT
Paramètre | Utilisation |
---|---|
-A | Mode ajout. |
iptables-slapd | Cible dans la table où est ajoutée la règle. |
-j REJECT | Les connexions seront refusées |
La définition de Iptables
devient:
#sudo iptables --list -n Chain INPUT (policy ACCEPT) target prot opt source destination fail2ban-apache-scan tcp -- 0.0.0.0/0 0.0.0.0/0 multiport dports 80,443 fail2ban-ssh tcp -- 0.0.0.0/0 0.0.0.0/0 multiport dports 22 Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain fail2ban-apache-scan (1 references) target prot opt source destination RETURN all -- 0.0.0.0/0 0.0.0.0/0 Chain fail2ban-ssh (1 references) target prot opt source destination RETURN all -- 0.0.0.0/0 0.0.0.0/0 Chain iptables-slapd (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
L'annuaire étant essentiellement utilisé localement, il faut autoriser la connexion localement:
#sudo iptables -I iptables-slapd 1 -s 127.0.0.1 -j ACCEPT
Paramètre | Utilisation |
---|---|
-I | Mode insertion. |
iptables-slapd | 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:
#sudo iptables --list -n Chain INPUT (policy ACCEPT) target prot opt source destination fail2ban-apache-scan tcp -- 0.0.0.0/0 0.0.0.0/0 multiport dports 80,443 fail2ban-ssh tcp -- 0.0.0.0/0 0.0.0.0/0 multiport dports 22 Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain fail2ban-apache-scan (1 references) target prot opt source destination RETURN all -- 0.0.0.0/0 0.0.0.0/0 Chain fail2ban-ssh (1 references) target prot opt source destination RETURN all -- 0.0.0.0/0 0.0.0.0/0 Chain iptables-slapd (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 de l'annuaire peut s'effectuer avec des outils déployés sur la machine, comme phpLDAPAdmin. Cependant, cela peut être utile de gérer l'annuaire à 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-slapd 2 -s 192.168.1.3 -j ACCEPT
Paramètre | Utilisation |
---|---|
-I | Mode insertion. |
iptables-slapd | 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:
#sudo iptables --list -n Chain INPUT (policy ACCEPT) target prot opt source destination fail2ban-apache-scan tcp -- 0.0.0.0/0 0.0.0.0/0 multiport dports 80,443 fail2ban-ssh tcp -- 0.0.0.0/0 0.0.0.0/0 multiport dports 22 Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain fail2ban-apache-scan (1 references) target prot opt source destination RETURN all -- 0.0.0.0/0 0.0.0.0/0 Chain fail2ban-ssh (1 references) target prot opt source destination RETURN all -- 0.0.0.0/0 0.0.0.0/0 Chain iptables-slapd (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-slapd 2 -m iprange --src-range 192.168.1.1-192.168.1.10 -j ACCEPT
Paramètre | Utilisation |
---|---|
-I | Mode insertion. |
iptables-slapd | 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:
#sudo iptables --list -n Chain INPUT (policy ACCEPT) target prot opt source destination fail2ban-apache-scan tcp -- 0.0.0.0/0 0.0.0.0/0 multiport dports 80,443 fail2ban-ssh tcp -- 0.0.0.0/0 0.0.0.0/0 multiport dports 22 Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain fail2ban-apache-scan (1 references) target prot opt source destination RETURN all -- 0.0.0.0/0 0.0.0.0/0 Chain fail2ban-ssh (1 references) target prot opt source destination RETURN all -- 0.0.0.0/0 0.0.0.0/0 Chain iptables-slapd (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 389 -j iptables-slapd
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 389 | Spécifie les ports auquel s'applique la règle, ici ce sera tcp. |
-j iptables-slapd | La règle est redirigée vers la "Chain" iptables-slapd créée.
|
La définition de Iptables
devient:
#sudo iptables --list -n Chain INPUT (policy ACCEPT) target prot opt source destination iptables-slapd tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:389 fail2ban-apache-scan tcp -- 0.0.0.0/0 0.0.0.0/0 multiport dports 80,443 fail2ban-ssh tcp -- 0.0.0.0/0 0.0.0.0/0 multiport dports 22 Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain fail2ban-apache-scan (1 references) target prot opt source destination RETURN all -- 0.0.0.0/0 0.0.0.0/0 Chain fail2ban-ssh (1 references) target prot opt source destination RETURN all -- 0.0.0.0/0 0.0.0.0/0 Chain iptables-slapd (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
Application J2EE
Attention aux application J2EE, comme Jenkins, Nexus ou Subsonic, il faut autoriser l'ip du serveur même si celui-ci est en local. Sinon, les tentative de connexion à l'annuaire, s'effectuant via des framework Java, n'aboutissent pas. Par contre, l'application Sonar n'est pas imactée par une telle mise en place.
Dans le cas où l'IP du serveur est 192.168.1.25, donc pas dans l'ensemble spécifié dans l'article, il faut lancer la commande suivante:
#sudo iptables -I iptables-slapd 2 -s 192.168.1.32 -j ACCEPT
L'IP sera alors autorisé, et la règle placée juste avant l'ensemble dans la "chain" iptables-slapd
.