debian12firewallufw
Voici la liste des notions à connaitre pour mettre en place UFW:
Pour assurer la sécurité de son serveur, les premiers gestes qui sauvent c'est souvent mettre en place au minima une redirection du port SSH, Fail2Ban et LogWatch.
Le FireWall est également un élément important. Aussi, IPtables n'est pas 'simple' à aborder, UFW propose de faire office d'interface à IPtables et de simplifier les commandes. Ce qui est utile pour les débutants comme moi.
Les règles par défaut de notre FireWall, c'est de bloquer toutes les connexions entrantes et autoriser toutes les connexions sortantes.
Seulement, sur le serveur des services fonctionnent, que ce soit le serveur web (lemp), mail, le gestionnaire de secret...
Avant de tout 'bloquer' il serait bien de faire un listing des ports utilisés.
Ici on va utiliser Netstat, on peut aussi utiliser nmap (mais moi aussi je débute alors ^.^).
# si netstat n'est pas disponible
> sudo apt-get install net-tools
#lister les ports en écoute
sudo netstat -taupeln|grep LISTEN
Vous obtiendez quelques chose comme:
tcp 0 0 127.0.0.54:53 0.0.0.0:* LISTEN 996 13426 365/systemd-resolve tcp 0 0 0.0.0.0:69696 0.0.0.0:* LISTEN 0 14518 519/sshd: /usr/sbin tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 996 13424 365/systemd-resolve tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 0 94279 39801/nginx: master tcp 0 0 0.0.0.0:5355 0.0.0.0:* LISTEN 996 13412 365/systemd-resolve tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 0 94278 39801/nginx: master tcp6 0 0 :::69696 :::* LISTEN 0 14549 519/sshd: /usr/sbin tcp6 0 0 :::80 :::* LISTEN 0 94280 39801/nginx: master tcp6 0 0 :::5355 :::* LISTEN 996 13420 365/systemd-resolve tcp6 0 0 :::443 :::* LISTEN 0 94277 39801/nginx: master
Ma compéhension est approximative et peut même être erronée si j'ai mal interprété certains aspects.
Prenez donc ces informations avec précaution.
Je n'ai pas compris tout de suite pour les lignes concernant systemd-resolve
:
Sur le port 53, c'est lié au service DNS, il s'agit probablement d'un service qui agit come résolveur DNS, cache DNS.
Cela me fait penser un peu au fichier C:\Windows\system32\drivers\etc\hosts de Windows.
On le retrouve aussi sur le port 5355, a priori c'est du LLMNR (Link-Local Multicast Name Resolution) soit "Résolution de Noms Multicast Local"
Après, je retrouve bien nginx et ssh (oui le port est faux).
Bref, identifier bien les "connexions" à garder, voir celle qui faut supprimer.
sudo apt update && sudo apt upgrade sudo apt install ufw
Le firewall n'est pas activé par défaut.
La politique de 'base' est de refuser toutes les connexions entrantes et d'autoriser toutes les connexions sortantes.
Ne fermez pas votre canal ssh en cour avant d'avoir vérifier que vous avez bien configuré, activé le firewall et que vous pouvez ouvrir une nouvelle connexion ssh. Ne vérifier pas simplement avec une requête HTTPS (un site ou autre) les connexions ne se ferment pas nécessairement immédiatement.
Assurez-vous de bien configurer, sous peine de ne plus avoir acces à votre serveur.
# bloque toutes les connexions entrantes
sudo ufw default deny incoming
# on autorise les connexions sortantes
sudo ufw default allow outgoing
# on autorise SSH port par défaut
# sudo ufw allow ssh
# ou SSH port personalisé
sudo ufw allow 2024/tcp
# on active le par-feu et ON VERIFIE QUE L'ON PEUT OUVRIR UN AUTRE TUNEL SSH
sudo ufw enable
> Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
> Firewall is active and enabled on system startup
A partir de là, vous autorisez ensuite suivant vos services/besoins.
Exemple, pour nginx:
sudo ufw allow 'Nginx Full'
UFW dispose de plusieurs profiles d'applications pour les services communs: web, mail, DNS...
Pour avoir la liste complète:
sudo ufw app list
Afficher les détails d'un profile:
sudo ufw app info <nom_de_l_application>
Par exemple on peut autoriser Nginw sur le port 80 (http) ou le port 443 (https) voir les deux:
#autoriser Nginx pour HTTP
sudo ufw allow 'Nginx HTTP'
#autoriser Nginx pour HTTPS
sudo ufw allow 'Nginx HTTPS'
#autoriser Nginx pour HTTP et HTTPS
sudo ufw allow 'Nginx Full'
Cela peut être pratique pour mettre en place rapidement les premières mesures.
Les profiles se trouvent ici /etc/ufw/applications.d/
Vous pouvez même créer vos propres profils, pratique si vous avez des règles identiques qui reviennent souvent.
[Apache]
title=Web Server
description=Apache c'est bien aussi
ports=80,443/tcp
Pour configurer le firewall on lui indique des règles, soit pour autoriser allow
, soit pour interdire deny
Ensuite, on peut choisir si on autorise/block
to any port
Voici quelques exemples en allow
, c'est le même principe pour deny
:
# autoriser une plage de ports
sudo ufw allow 5800:6000/tcp
# autoriser des ports
sudo ufw allow 8100, 8105, 8106, 9000/udp
# autoriser une adresse IP
sudo ufw allow from _ADRESSE_IP
#autoriser une IP sur un port en particulier
sudo ufw allow from _ADRESSE_IP to any port _PORT
#autoriser une plage IP sur un port spécifique
sudo ufw allow from _ADRESSE_IP/24 to any port _PORT
#autoriser une interface réseau: exemple pour eth2
sudo ufw allow in on eth2 to any port _PORT
Exemple: 158.47.28.112/24 soit les IPs (hôtes) allant de 158.47.28.0 à 158.47.28.255
Une IPv4 c'est quatre octects séparé pars des points et chaque partie peut prendre une valeur entre 0 et 255.
La notion de sous-réseau permet de diviser une adresse IP en deux parties: IP (identifiant) correspond au réseau et l'identifiant de l'hôte dans ce réseau.
Pour l'exprimer la notation CIDR (Classless Inter-Domain Routing) est utilisé, exemple: /24
24 pour les 24 premiers bits de l'adresse IP sont utilisés pour identifier le réseau, soit 8bits (32-24=8) pour les adresses hôtes du sous-réseau.
C'est peut être plus claire avec cet
Parfois on pense avoir mis en place une règle pour autoriser une connexion mais rien à faire la connexion ne passe pas.
Le premier reflexe, regarder vos règles à nouveau, sinon les logs en temps réel, histoire de voir le comportement du firewall.
# liste les règles
sudo ufw status verbose
# regarde les logs en temps réel
# exemple si le firewall block
sudo grep 'BLOCK' /var/log/ufw.log | tail -f
# on peut rechercher un port spécifique exemple:
sudo tail -f /var/log/ufw.log | grep 'DPT=443'
Editer le fichier de config. de ufw
sudo nano /etc/default/ufw
Activation ufw en tant que service:
sudo systemctl enable ufw --now
Checker l'état du service, le redémarrer:
# état du service
systemctl status ufw
# restart
sudo systemctl restart ufw
Lister les règles:
# lister les règles
sudo ufw status verbose
# lister les règles de manière concise
sudo ufw status numbered
# supprimer une règle
sudo ufw delete _numéro_de_la_règle
Activer/Désactiver, recharger les règles:
# activer le firewall
sudo ufw enable
# le désactiver
sudo ufw disable
# recharger les règles
sudo ufw reload
Autoriser une IP sur un port spécifique:
# remplacer _IP_SOURCE et _PORT
sudo ufw allow from _IP_SOURCE to any port _PORT
Voilà avec ça normalement on a en place un firewall, c'est du basique mais mieux que rien!.
Vous pouvez 'tester' un scan des ports ouverts: port-scan- ipvoid.com
On peut pousser plus loin les règles personalisées via les user.rules
. ou appliquer des règles avant ou après les commandes ufw.
Je n'ai pas cette expertise pour le moment , je vous laisse faire vos recherches
Voici les principales sources utilisées qui m'ont aidé à mettre en place ufw: