# Debian # Sécurisation d'un VPS sous Debian 10 ## Mise à jour Il est important de mettre à jour régulièrement Debian. ```bash apt update && apt upgrade -y ``` ## Accès SSH On gère ensuite la connexion SSH. On génère une clé SSH. ```bash 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). ```bash cat ~/.ssh/id_rsa.pub ``` On peut également le faire à l'aide de PuTTYgen. [![image-1615394652290.png](https://docs.khroners.fr/uploads/images/gallery/2021-03/scaled-1680-/SP0BftdNGOEUxSFo-image-1615394652290.png)](https://docs.khroners.fr/uploads/images/gallery/2021-03/SP0BftdNGOEUxSFo-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. ```bash nano /etc/ssh/sshd_config ``` [![image-1615395219479.png](https://docs.khroners.fr/uploads/images/gallery/2021-03/scaled-1680-/iw6PTmRnhavhTdVK-image-1615395219479.png)](https://docs.khroners.fr/uploads/images/gallery/2021-03/iw6PTmRnhavhTdVK-image-1615395219479.png) [![image-1615395242745.png](https://docs.khroners.fr/uploads/images/gallery/2021-03/scaled-1680-/lt0myGE4PAvsVPJk-image-1615395242745.png)](https://docs.khroners.fr/uploads/images/gallery/2021-03/lt0myGE4PAvsVPJk-image-1615395242745.png) On modifie également le port SSH. ## Fail2ban On installe fail2ban pour éviter les attaques via SSH. ```bash apt install fail2ban ``` ## Pare-feu On installe iptables. ```bash apt install iptables ``` ```sh 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 ``` ```shell apt install iptables-persistent iptables-save > /etc/iptables/rules.v4 ip6tables-save > /etc/iptables/rules.v6 ``` Pour ajouter une règle à la ligne 7 : ```shell 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](https://docs.khroners.fr/uploads/images/gallery/2021-03/scaled-1680-/p5vCByd7F99BWS9i-image-1616495598095.png)](https://docs.khroners.fr/uploads/images/gallery/2021-03/p5vCByd7F99BWS9i-image-1616495598095.png) (Source : [https://exavault.medium.com/what-is-sftp-the-smart-business-file-transfer-solution-3763174503c0](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). ```bash adduser sftpuser #mot de passe : sisrsisr ``` On crée ensuite le répertoire et les droits/permissions. ```bash 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. ```bash 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. ```bash systemctl restart sshd ``` On vérifie : [![image-1616496030463.png](https://docs.khroners.fr/uploads/images/gallery/2021-03/scaled-1680-/9MsoLhGYANU9QtAP-image-1616496030463.png)](https://docs.khroners.fr/uploads/images/gallery/2021-03/9MsoLhGYANU9QtAP-image-1616496030463.png) # Générer un certificat Wildcard ## Installation des dépendances ```plaintext 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](https://api.ovh.com/createToken/) pour créer nos clés. Voici les droits à attribuer : - `GET /domain/zone/` - `GET: /domain/zone/{domain}/` - `GET /domain/zone/{domain}/status` - `GET /domain/zone/{domain}/record` - `GET /domain/zone/{domain}/record/*` - `POST /domain/zone/{domain}/record` - `POST /domain/zone/{domain}/refresh` - `DELETE /domain/zone/{domain}/record/*` 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/. ```plaintext nano /root/.ovhapi ``` On rentre les identifiants sous cette forme : ```plaintext 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. ```plaintext chmod 600 /root/.ovhapi ``` # Génération du certificat Wildcard La génération du certificat s'effectue en une seule ligne de commande : ```plaintext 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. - Bash – **~/.bashrc** - ZSH – **~/.zshrc** - Fish – **~/.config/fish/config.fish** 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. ![](https://docs.khroners.fr/uploads/images/gallery/2022-02/9jUmvFsHNanwslmj-embedded-image-ebeomjp8.png) On autorise ensuite le transfert de zone vers les serveurs listés dans l’onglet Serveur de noms. ![](https://docs.khroners.fr/uploads/images/gallery/2022-02/dPGwz5KyA6mko5Mo-embedded-image-hjoujqs6.png) 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. ![](https://docs.khroners.fr/uploads/images/gallery/2022-02/EIIfby0wUDrUiRDe-embedded-image-k5lbvofy.png) On modifie aussi les options globales : ![](https://docs.khroners.fr/uploads/images/gallery/2022-02/QkcO1sovDJNgmTiF-embedded-image-bsunzs0i.png) On redémarre ensuite le service et on observe le statut : ![](https://docs.khroners.fr/uploads/images/gallery/2022-02/YhRquHHtb1IrKYZZ-embedded-image-v1pqgwdl.png) # 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