Pare-feu: exercices utilisant ufw

Introduction

Dans cet exercice, nous allons voir comment implémenter une protection basique d'un système utilisant ufw pour configurer le pare-feu iptables.

Notes

$ sudo -s
#
# systemctl start apache2

Installation

# apt install ufw

Cette commande va installer iptables parmi les dépendances s'il n'est pas encore présent.

Vérification de l'état initial

# 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.

Préparation pour activation

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.

Activer le pare-feu

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!

Autoriser le web

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?

Suppression d'une règle

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)

Autorisation d'accès au web à partir d'un poste

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.

Désactiver ufw

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.