Skip to main content

Création de la template Debian

Pour se simplifier la vie et gagner du temps nous créer une template que nous allons cloner. a certains moment nous la rallumerons pour faire certaines modifications mais je préciserais à quel moment.

Donc dans un premier temps nous allons récupérer l'ISO de Debian 13 disponible ici.

Une fois l'image téléchargé nous allons créer notre VM Template avec 2 coeur, 2 giga de ram et 16Go de stockage. Pour la majorité des services que nous allons utilisé, ceci est largement suffisant. D'autant plus qu'à la fin de la mise en place de template nous allons de nouveau réduire sa taille afin que les VM soient le minimum possible.

Attention, qqch de très important! on ne fait jamais le easy install! ça ne sert à rien

SI Dans l'hypervieurs Debian 13 n'est pas proposé dans VMWare, utilisé debian 12, mais utilisé l'ISO Debian 13

Vous devez avoir une ressemblance comme ceci

Configuration Debian

Pour la configuration on peut faire avec l'interface graphique ou en interface, cela ne change pas. je fait personnellement avec interface car je suis plus habitué [] (https://wiki.cclaudel.fr/uploads/images/gallery/2026-02/fTljJINzKnOMFLyo-image-1771940512625.png)

A titre personnel je met toujours mes machines Linux en anglais car il existe plein de tuto qui sont en anglais et que je préfères (je mais ensuite le clavier en azerty) mais là vous pouvez faire ce que vous voulez

Pour la région j'habite en France, je vais donc mettre France

Si vous avez fait comme moi, sélectionner en LOCALE celle des États-Unis

cela vous demandera ensuite le clavier et là mettez ce que vous préférez

Pour le hostname, il faut toujours mettre un nom parlant, dans mon cas ce sera debian-template

Pour le moment on laisse le domaine à vide

ceci est un long débat sur comment administrer une machine Linux. Pour moi, il ne faut pas utiliser le compte root, il ne faut donc pas lui donner de mot de passe comme cela, ce sera notre utilisateur qui sera dans le groupe sudo et root n'a pas de mot de passe

Pour le nom d'utilisateur, nous allons donner un nom qui nous parles beaucoup. Comme j'aime beaucoup le seigneurs des anneaux je vais l'appeler "sauron". Je rappel que ceci est un tuto à but non commercial, en entreprise veillez à respecter la charte de l'entreprise si vous ne voulez pas vous faire détruire par votre DSI.

pour son mot de passe mettez en un, mais on ne vas pas s'en servir beaucoup. Il faut juste qu'il soit assez sécurisées selon l'ANSII (au moins 14 caractères)

Le stockage on ne vas pas le chiffrer car cela pourrait compromettre certaines applications

et pour la répartition, nous sommes un serveur, utilisons la répartition serveurs. La répartion "All files in one partiotion" est très bien aussi et si vous avez peur de mal faire qqch, utilisez là sans soucis.

par la suite n'oubliez pas d'effacer ce qu'il y a sur le disque. Pas de panique, les environnements sont isolés donc aucune donnée privé ne sera effacé

pas besoin de scanner d'autres medias d'installations, nous allons ensuite utiliser les dépot apt. Sélectionnez le plus proche de vous pour attendre le moins

Pour l'usage des paquets il est toujours préférable de le désactiver car cela garde un d'anonymat. Très utile quand on veut gérer une infra qui n'est pas publique

Pour la configuration de base, nous allons juste garder "SSH server" et "Standard system utilities" qui vont nou ssimplifier la vie pour plus tard

Choississez d'installer grub sur le disque principal et sélectionner le, cela fera gagner du temps à chaque démarrage de la VM

Une fois tout cela fait on peut redémarrer la machine.

Une fois la machine redémarrer on fait un update dans le doute pour être sur d'avoir la dernière version des paquets

sudo apt update && sudo apt upgrade -y

Configuration de sshd

Maintenant pour se simplifier les commande, nous allons utiliser ssh depuis un terminal pour opuvoir copier les commandes.

Pour se connecter à ssh il nous faut d'abord l'IP de la machine avec la commande ip a

Et on regarde si on peut se connecter avec le mot de passe

$ ssh sauron@172.16.37.156                                           
The authenticity of host '172.16.37.156 (172.16.37.156)' can't be established.
ED25519 key fingerprint is SHA256:VS4y14DFvnqnTrRkuzQAPVqJQGsBxEpDl4TIB8M9Npc.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '172.16.37.156' (ED25519) to the list of known hosts.
sauron@172.16.37.156's password: 
Linux debian-template 6.12.73+deb13-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.12.73-1 (2026-02-17) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
sauron@debian-template:~$ 

a la première connection on vous mettra cette alerte, c'est normal il faut y accepter.

Clé ssh

se connecter par mot de passe c'est simple mais pas sécurisés. Même si le protocol est chiffré, il faut mieux utiliser une clé ssh.

Sur la machine hôte on va créer une clés ssh avec la commande ssh suivante

ssh-keygen -t ed25519 -C "infra-admin@cclaudel.fr" -f ~/.ssh/dev_key

puis ensuite nous allons ensuite la pousser avec la commande ssh-copy-id

$ ssh-copy-id -i ~/.ssh/dev_key.pub sauron@172.16.37.156
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/cclaudel/.ssh/dev_key.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
sauron@172.16.37.156's password: 

Number of key(s) added: 1

Now try logging into the machine, with: "ssh -i /home/cclaudel/.ssh/dev_key 'sauron@172.16.37.156'"
and check to make sure that only the key(s) you wanted were added.

et si on réessaye désormais de ce connecter en indiquand la clé privée à utiliser

$ ssh -i ~/.ssh/dev_key sauron@172.16.37.156            
Linux debian-template 6.12.73+deb13-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.12.73-1 (2026-02-17) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Tue Feb 24 15:40:52 2026 from 172.16.37.1

Configuration ssh

Ce tuto est un peu long je suis d'accord (Et c'est encore plus long pour moi car je doit tout rédiger en faisant le tuto directement)

Mais on s'accroche, cette partie est très longue, mais très importante pour sécurisés son serveur

on désormais modifier sa configuration pour interdire certains truc. Sur Debian, le fichier de configuration du serveur est /etc/ssh/sshd_config

dans le fichier il faut décommenter et/ou modifier les informations suivantes

LoginGraceTime 2m
PermitRootLogin no
StrictModes yes
MaxAuthTries 3
MaxSessions 2

PasswordAuthentification no
PermitEmptyPasswords no

On redémmare ensuite le service ssh pour qu'il est c'est nouvelle configuration

sudo systemctl restart sshd

Si vous pouvez toujours vous connecter avec la clé ssh bravo vous avez réussis cette étape !

Sécurisation du serveur

Bien que le serveur ne soit pas exposés directement à internet (en tout cas ceux dans Lan admin), il ne faut pas oublié que la plupart des attaques viennes de l'intérieur du réseau. On va donc rajouter deux outils simples et essentiels pour plus de sécurités:

  • nftables: pare feu interne à la machine
  • fail2ban: une protection des attaques par brutes forces sur le serveur

nftabels

installation

pour installer nftables sur la vm, la commande est simple

sudo apt install nftables -y

Configuration

Dans la template nous allons ouvrir uniquement le port ssh, le reste n'a pas besoin de communiquer et d'être atteind, ce qui limite la zone d'attaque

la règle SSH doit être active à chaque redémarrage. Pour que ce soit effectif, nous allons changer le fichier de configuration présent /etc/nftables.conf

#!/usr/sbin/nft -f

# On vide les règles existantes
flush ruleset

table inet filter {
    chain input {
        # Politique par défaut : on bloque tout ce qui entre
        type filter hook input priority 0; policy drop;

        # Autoriser le trafic sur la boucle locale (indispensable au système)
        iif "lo" accept

        # Autoriser le trafic des connexions déjà établies (pour que le serveur puisse répondre)
        ct state established,related accept

        # Autoriser le port SSH (22)
        tcp dport 22 accept
    }

    chain forward {
        # Politique par défaut : on bloque le routage (inutile sauf si c'est un routeur)
        type filter hook forward priority 0; policy drop;
    }

    chain output {
        # Politique par défaut : on autorise tout ce qui sort du serveur
        type filter hook output priority 0; policy accept;
    }
}

puis on oublie pas d'enable et de redémarrer le service

sudo systemctl enable nftables
sudo systemctl restart nftables

des bons moyens de vérifier que cela fonctionne c'est d'utiliser les outils ss et nmap

En local sur le serveur

$ ss -ltun
Netid State  Recv-Q  Send-Q                      Local Address:Port                           Peer Address:Port                         
udp   UNCONN 0       0                           172.16.37.156:68                                  0.0.0.0:*                            
udp   UNCONN 0       0        [fe80::3a7e:e4e1:998:3f06]%ens33:546                                    [::]:*                            
tcp   LISTEN 0       128                               0.0.0.0:22                                  0.0.0.0:*                            
tcp   LISTEN 0       128                                  [::]:22                                     [::]:*

depuis une machine distante (remplacer l'ip par la votre)

$ sudo nmap -sV -p- 172.16.37.156 
Starting Nmap 7.95 ( https://nmap.org ) at 2026-02-24 16:27 CET
Nmap scan report for 172.16.37.156
Host is up (0.00036s latency).
Not shown: 65534 filtered tcp ports (no-response)
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 10.0p2 Debian 7 (protocol 2.0)
MAC Address: 00:0C:29:1E:1D:3B (VMware)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 104.66 seconds

attention avec nmap, si vous faite du scan de port sur une machine qui ne vous appartient pas, cela peut vous causer des soucis juridique car c'est complètement illégal

On n'oublie pas d'essayer dans une nouvelle session de se reconnecter en ssh!

fail2ban

fail2ban est un standard de la sécurité pour bloquer ce qui parrraitrait un peu trop suspect selon des règles prédéfinis

installations

sudo apt install fail2ban -y

configuration

Fail2ban peut être très dangereux, on ne compte plus le nombre de personne qui ont bloqué leur machine avec de fail2ban. Impossible de se connecter en ssh.

on va donc créer une sauvegarde de notre fichier de base avec la commande suivante

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.conf.bck

puis ensuite nous alonns créer le fichier /etc/fail2ban/jail.local avec le contenu suivant

[DEFAULT]
banaction = nftables-multiport
banaction_allports = nftables-allports


backend = systemd

[sshd]
enabled = true
port    = ssh
filter  = sshd

bantime = 3600
maxretry = 3

et puis on redémmare le service

sudo systemctl restart fail2ban

Conclusion

avec tout ceci, le serveur Debian a une base très solide. Il faudra faire attention dès qu'on installeras un service on ouvre bien le/les port(s) correspondant.