# 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'<br></br>`  
Quand on rentrera la commande "docker-restart", la commande 'docker-compose down &amp;&amp; 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 &amp;&amp; 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