Configuration Iptables - Cups
L'application Cups
a été installée sur la machine afin de disposer d'un serveur d'impression. Lors de sa configuration, des retrictions ont été mises en place au niveau de la configuration Apache
. 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 Cups
. Dans le cadre d'une installation standard, le port est 631
. 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 cupsd tcp 0 0 0.0.0.0:631 0.0.0.0:* LISTEN 3075/cupsd tcp6 0 0 :::631 :::* LISTEN 3075/cupsd
Dans le cas présent, cela confirme l'utilisation du port 631
.
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-cups
Paramètre | Utilisation |
---|---|
-N | Mode création. |
iptables-cups | 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-cups (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-cups -j REJECT
Paramètre | Utilisation |
---|---|
-A | Mode ajout. |
iptables-cups | 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-cups (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 exposé par un serveur Apache
, il faut autoriser la connexion localement:
#sudo iptables -I iptables-cups 1 -s 127.0.0.1 -j ACCEPT
Paramètre | Utilisation |
---|---|
-I | Mode insertion. |
iptables-cups | 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-cups (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-cups 2 -s 192.168.1.3 -j ACCEPT
Paramètre | Utilisation |
---|---|
-I | Mode insertion. |
iptables-cups | Cible dans la table où est ajoutée la règle. |
2 | Position de l'insertion. Celle-ci est ajoutée après localhost. |
-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-cups (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-cups 2 -m iprange --src-range 192.168.1.1-192.168.1.10 -j ACCEPT
Paramètre | Utilisation |
---|---|
-I | Mode insertion. |
iptables-cups | 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-cups (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 631 -j iptables-cups
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 631 | Spécifie les ports auquel s'applique la règle, ici ce sera tcp. |
-j iptables-cups | La règle est redirigée vers la "Chain" iptables-mysql créée.
|
La définition de Iptables
devient:
#sudo iptables --list -n Chain INPUT (policy ACCEPT) target prot opt source destination iptables-cups tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:631 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