Dans cet exercice, nous allons voir comment implémenter une protection basique d'un système utilisant ufw pour configurer le pare-feu iptables.
$ sudo -s #
# systemctl start apache2
# apt install ufw
Cette commande va installer iptables parmi les dépendances s'il n'est pas encore présent.
# ufw status Status: inactive # iptables -nvL Chain INPUT (policy ACCEPT 44579 packets, 8596K bytes) pkts bytes target prot opt in out source destination Chain FORWARD (policy ACCEPT 52080 packets, 4315K bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 25720 packets, 2713K bytes) pkts bytes target prot opt in out source destination
La sortie d'iptables montre que le pare-feu est en mode permissif "autorise tout" - il n'y a pas de règles dans les chaînes et le "policy" par défaut est ACCEPT si aucune règle ne corresponde.
Quand nous activons le pare-feu, il est important que nous ne bloquons pas SSH sinon nous serons bloqués à l'extérieur!
ufw connaît quelques applications, OpenSSH inclus, ce qui nous permet d'appliquer simplement la règle:
# ufw app list Available applications: Apache Apache Full Apache Secure OpenSSH # ufw allow OpenSSH Rules updated Rules updated (v6)
Cette politique autorise les connexions SSH depuis n'importe quelle adresse IP. Si ce n'est pas ce que vous souhaitez, vous pouvez ajouter une règle plus spécifique manuellement.
Maintenant, nous allons activer le firewall:
# ufw enable Command may disrupt existing ssh connections. Proceed with operation (y|n)? y Firewall is active and enabled on system startup # ufw status Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6)
Si vous voulez, vous pouvez encore vérifier les règles iptables:
# iptables -nvL
... mais cela affiche une longue configuration de plusieurs pages à l'écran. Enfoui dans cet affichage, vous pouvez identifier la règle suivante qui autorise SSH:
Chain ufw-user-input (1 references) pkts bytes target prot opt in out source destination 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 /* 'dapp_OpenSSH' */
"ufw status" est plus facile!
Essayer de vous connecter au serveur depuis votre poste en utilisant un navigateur. Que ce passe-t-il? Vous devez vous aperçevoir que la connexion a expiré puisque les paquets ont été bloqués.
Supposons que nous n'allons autoriser les connexions web qu'à partir des postes de l'atelier. Pour se faire, ajouter une règle qui autorise les connexions depuis les adresses de l'atelier (n'importe quel port) vers n'importe quelle adresse IP sur les ports web.
# ufw allow proto tcp from 100.64.0.0/22 to any port 80,443 Rule added # ufw status Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere 80,443/tcp ALLOW 100.64.0.0/22 OpenSSH (v6) ALLOW Anywhere (v6)
Etes-vous maintenant capable de vous connectez à votre serveur utilisant votre navigateur web?
Il existe deux manières de supprimer une règle. Il est possible de répéter la règle entière avec "delete", par exemple, ufw delete allow proto tcp from 100.64.0.0/22 to any port 80,443
Cependant, une manière plus simple est de supprimer une règle en fonction de sa position. Exécutez la commande suivante pour supprimer votre règle d'accès au web:
# ufw status numbered Status: active To Action From -- ------ ---- [ 1] OpenSSH ALLOW IN Anywhere [ 2] 80,443/tcp ALLOW IN 100.64.0.0/22 [ 3] OpenSSH (v6) ALLOW IN Anywhere (v6) # ufw delete 2 Deleting: allow from 100.64.0.0/22 to any port 80,443 proto tcp Proceed with operation (y|n)? y Rule deleted # ufw status numbered Status: active To Action From -- ------ ---- [ 1] OpenSSH ALLOW IN Anywhere [ 2] OpenSSH (v6) ALLOW IN Anywhere (v6)
Exercice: ajouter une règle qui limite l'accès web à votre propre adresse IP.
Vérifier que votre ordinateur puisse accéder à votre serveur web, mais pas celui de votre voisin.
Finalement, arrêter complètement ufw. Ceci est particulièrement pratique lorsque vous tentez de résoudre certains problèmes, mais pour la suite l'atelier nous allons nous assurer que ufw n'interfère pas avec les prochaines exercices.
# ufw disable Firewall stopped and disabled on system startup # ufw status Status: inactive
Si vous êtes connectés en tant que root, taper "exit" pour retourner à la session normale.