Debian

Sécurisation d'un VPS sous Debian 10

Mise à jour

Il est important de mettre à jour régulièrement Debian.

apt update && apt upgrade -y

Accès SSH

On gère ensuite la connexion SSH.

On génère une clé SSH.

ssh-keygen

On rentre un passphrase.

On copie ensuite le contenu de la clé privée dans notre outil de connexion SSH (PuTTY par exemple).

cat ~/.ssh/id_rsa.pub

On peut également le faire à l'aide de PuTTYgen.

image-1615394652290.png

On copie le contenu de la clé dans le fichier /home/$USER/.ssh/authorized_keys.

On rentre une passphrase, on clique sur "Save Private Key".

On modifie ensuite le fichier de configuration sshd.

nano /etc/ssh/sshd_config

image-1615395219479.png

image-1615395242745.png

On modifie également le port SSH.

Fail2ban

On installe fail2ban pour éviter les attaques via SSH.

apt install fail2ban

Pare-feu

On installe iptables.

apt install iptables
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 2022  -m state --state NEW -j ACCEPT
iptables -A INPUT -p tcp --dport 80  -m state --state NEW -j ACCEPT
iptables -A INPUT -p tcp --dport 443  -m state --state NEW -j ACCEPT
iptables -A INPUT -p ICMP --icmp-type 8 -j ACCEPT
iptables -A INPUT -j DROP
ip6tables -A INPUT -i lo -j ACCEPT
ip6tables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
ip6tables -A INPUT -p tcp --dport 2022  -m state --state NEW -j ACCEPT
ip6tables -A INPUT -p tcp --dport 80  -m state --state NEW -j ACCEPT
ip6tables -A INPUT -p tcp --dport 443  -m state --state NEW -j ACCEPT
ip6tables -A INPUT -p ICMPV6 --icmpv6-type 8 -j ACCEPT
ip6tables -A INPUT -j DROP
apt install iptables-persistent
iptables-save > /etc/iptables/rules.v4
ip6tables-save > /etc/iptables/rules.v6

Pour ajouter une règle à la ligne 7 : 

iptables -I INPUT 7 -p tcp -m tcp --dport 3000 -j ACCEPT

SFTP

SFTP, pour Secure File Transfer Protocol (ou protocole de transfert de fichiers SSH). Un tunnel est alors créé et chiffré.

 

image-1616495598095.png

(Source : https://exavault.medium.com/what-is-sftp-the-smart-business-file-transfer-solution-3763174503c0)

Pour la mise en place, on va créer un utilisateur, créer le répertoire sftp et modifier les autorisations (interdire l'accès en shell par exemple).

adduser sftpuser
#mot de passe : sisrsisr

On crée ensuite le répertoire et les droits/permissions.

mkdir -p /var/sftp/uploads
chown root:root /var/sftp
chmod 755 /var/sftp
chown sftpuser:sftpuser /var/sftp/uploads

On restreint ensuite l'accès à ce répertoire.

nano /etc/ssh/sshd_config

On rajoute en fin de fichier :

Match User sftpuser
ForceCommand internal-sftp
PasswordAuthentication yes
ChrootDirectory /var/sftp
PermitTunnel no
AllowAgentForwarding no
AllowTcpForwarding no
X11Forwarding no

On redémarre le service sshd.

systemctl restart sshd

On vérifie :

image-1616496030463.png

Générer un certificat Wildcard

Installation des dépendances

apt install python3-pip
apt install certbot
apt install python3-certbot-dns-ovh

Création des accès à l'API d'OVH

On se rend sur le site de l'API d'OVH pour créer nos clés. Voici les droits à attribuer :

On remplace {domain} par notre nom de domaine, sans les accolades. Par exemple : exemple.fr.

Accound ID correspond à votre Nichandle, présent dans l'interface de gestion de compte OVH, sous la forme xx11111-ovh.

On obtient ensuite une liste d'identifiants : Application Key, Application Secret, Consumer Key.

Sur notre serveur, on crée un fichier ".ovhapi". A titre d'exemple, je le place dans /root/. 

nano /root/.ovhapi

On rentre les identifiants sous cette forme :

dns_ovh_endpoint = ovh-eu
dns_ovh_application_key = xxx
dns_ovh_application_secret = xxx
dns_ovh_consumer_key = xxx

On attribue ensuite les droits sur ce fichier.

chmod 600 /root/.ovhapi

Génération du certificat Wildcard

La génération du certificat s'effectue en une seule ligne de commande :

certbot certonly --dns-ovh --dns-ovh-credentials ~/.ovhapi -d exemple.fr -d *.exemple.fr

Pensez bien à remplacer “exemple.fr” par votre nom de domaine.

Dans ce cas, le domaine exemple.fr ainsi que tous ses sous-domaines seront certifiés.

Créer un alias sous Linux

Il faut modifier le fichier de configuration de notre Shell.

On rajoute une ligne :

alias docker-restart='docker-compose down && docker-compose up -d'

Quand on rentrera la commande "docker-restart", la commande 'docker-compose down && docker-compose up -d' sera lancée.

Ce sera effectif à la prochaine session. Pour l'appliquer tout de suite :

source ~/.bashrc

Bind en tant que DNS secondaire d'un DNS sous Windows

Dans la console DNS, on ajoute le serveur SRV-DB11 dans la liste des serveurs de noms.

On autorise ensuite le transfert de zone vers les serveurs listés dans l’onglet Serveur de noms.

On répète l’opération pour toutes les zones.

Sur SRV-DB11, on installe bind9.

apt update && apt install bind9 -y

On modifie le fichier « /etc/bind/named.conf.local » pour y déclarer les zones secondaires.

On modifie aussi les options globales :

On redémarre ensuite le service et on observe le statut :

Etendre disque

fdisk -l

fdisk /dev/sda

n

p

defaut

defaut

w

gdisk /dev/sda

pvcreate /dev/sda4 (sda4 étant la nouvelle partition)

vgextend media-vg /dev/sda4

lvresize -l +100%FREE --resizefs media-vg/root