Un VPS : C'est QUOI ?

Gray Hat
1481 mots

Introduction

Dans cet article nous allons voir ce qu'est un VPS et comment s'en servir selon divers cas.

Définition

Un Virtual Private Server est comme son nom l'indique un serveur privé "virtuel". En gros c'est un serveur auquel vous vous connectez à distance selon divers protocoles, le plus souvent SSH. Vous pouvez en trouver chez plusieurs fournisseurs selon vos préférences :

Fournisseurs Grand Public

Fournisseurs Axés sur la Confidentialité (Selon leur dires)

Fournisseurs acceptant le Monero

Caractérisques Utiles

La RAM

Selon ce que vous allez faire tourner sur votre VPS la Mémoire RAM va être essentielle au bon fonctionnement de votre serveur.

CPUs

Le Processeur c'est le cerveau de l'ordinateur, il est possible qu'il ne soit pas capable de calculer assez rapidement certaines tâches coûteuses en énergie donc si vous comptez faire tourner pleins de trucs ce serait bien d'y mettre le prix.

Bande Passante

La bande passante sur un VPS (Virtual Private Server) fait référence à la quantité de données qui peuvent être transférées entre le serveur et les autres systèmes (comme les utilisateurs finaux ou d'autres serveurs) dans un certain laps de temps. Elle est généralement mesurée en megabits par seconde (Mbps) ou gigabits par seconde (Gbps).

Disons que si vous comptez héberger une plateforme de formation, va falloir un petit peu plus de bande passante que c'que vous avez à la maison pour éviter que les utilisateurs se retrouvent sur un site cassé en 5 minutes

Stockage

Bah j'ai pas trop besoin de l'ouvrir... c'est logique....

S'en Servir Avec Précautions

Selon votre cas vous allez utiliser votre VPS pour faire telle ou telle chose, comme héberger un site web ou mettre des sécurités lors de votre navigation douteuse en ligne ^^.

Pour Héberger Un Site

Vous allez héberger un site, partez du principe de ne faire confiance à aucun utilisateurs. Pour le côté développement c'est pas vraiment le sujet de l'article mais y'a quelques choses à prendre en compte.

Configurer Apache / Nginx

J'sais pas faire pour Apache alors les exemples seront fait avec Nginx.

Pensez à faire les bonnes configurations correctement :

  • Mettez les Headers HSTS
  • Redirigez tout le trafic HTTP (80) vers HTTPS (443) avec des 301 (Code d'erreur signifiant une redirection)
  • Vérifiez vos certificats SSL/TLS
  • N'autorisez que TLS 1.2 / 1.3 pas en dessous
  • Configurez les ciphers

Voici un exemple de configuration nginx:

server {
    listen 80;
    server_name example.com www.example.com;

    # Rediriger HTTP vers HTTPS
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name example.com www.example.com;

    # Chemin vers les certificats SSL
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;

    # Paramètres SSL pour renforcer la sécurité
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384';
    ssl_prefer_server_ciphers off;

    # HSTS pour forcer l'usage de HTTPS
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
    add_header X-Content-Type-Options "nosniff";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Frame-Options "SAMEORIGIN";

    #####CONFIGURATION RELATIVE A VOTRE TYPE DE DEV WEB ICI C'EST (((( DJANGO ))))
    
        # Répertoire des fichiers statiques
        location /static/ {
            alias /path/to/your/django/project/static/;
        }

        # Répertoire des fichiers médias
        location /media/ {
            alias /path/to/your/django/project/media/;
        }

        # Reverse proxy vers Gunicorn (Serveur WSGI)
        location / {
            proxy_pass http://127.0.0.1:8000;  # Assure-toi que Gunicorn tourne sur ce port
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_redirect off;
        }
}

Activer le pare-feu

Vous pouvez utiliser ufw assure-toi que seul le trafic nécessaire est autorisé, et bloque tout le reste.

# Activer UFW :
sudo ufw enable

# Autoriser HTTP et HTTPS :
sudo ufw allow 'Nginx Full'

# Vérifier l'état du pare-feu :
sudo ufw status

Désactiver les connexions SSH Root

Va dans /etc/ssh/sshd_config

PermitRootLogin no

# Redémarres ensuite le service SSH
sudo systemctl restart sshd

Configure aussi les permissions fichiers correctement pour desservir tous les fichiers médias / statiques.

Empêcher le BruteForce SSH

Installes Fail2Ban pour bannir les utilisateurs qui font trop de tentatives de connexions vers ton serveur (C'est très facile avec Python et Paramiko)

Créer des Cronjobs

Tu peux créer des cronjobs pour gérer la mise a jour des paquets au moins toutes les 24H :

  • Ouvre le fichier des sudoers
sudo visudo

Puis entres-y :

<username> ALL=(ALL) NOPASSWD: /usr/bin/apt update

C'est pour nous permettre d'utiliser sudo dans un cronjob les étapes précédentes, maintenant entres dans la crontab

crontab -e

Puis rajoutes le Cronjob

0 3 * * * <username> sudo /usr/bin/apt update && sudo /usr/bin/apt upgrade -y # Va s'éxecuter tous les jours a 3h du Matin

Outils Utiles

Suricata

Suricata est un moteur de détection et de prévention d'intrusion (IDS/IPS) open-source. Il peut analyser le trafic réseau pour identifier des activités suspectes et des tentatives d'attaque.

OSSEC

OSSEC est un autre outil open-source, mais il se concentre davantage sur la surveillance des journaux de sécurité, l'intégrité des fichiers et la détection des intrusions.

Pour Surfer """Anonymement""":

Déjà si tu souhaites utiliser un VPS pour ce cas-ci tu en prends un qui est payable en Monero ou tu arrêtes la lecture ici.

On évite d'entrer des mot de passes connu ou des infos sensibles sur son vps hein ^^.

Installer Tails

Tails The Amnesic Incognito Live System est une distribution uniquement utilisable en mode live (existe tant que votre clé qui contient la distribution est branchée à votre ordinateur et disparait ensuite). Tout ce que tu fais sur cet OS passe par Tor. On verra comment l'installer dans l'article suivant : Tails.

Connectez vous à votre VPS uniquement depuis Tails.

Configurer OpenVPN sur VPS

Installez OpenVPN

sudo apt update
sudo apt install openvpn

Génères les clés & certificats avec easy_rsa:

sudo apt install easy-rsa


make-cadir ~/openvpn-ca
cd ~/openvpn-ca
source vars
./clean-all
./build-ca

Configures OpenVPN
Tu vas copier le fichier d'exemple généré par OpenVPN puis l'éditer selon tes besoins Voir Ici :

cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/
gunzip /etc/openvpn/server.conf.gz
sudo nano /etc/openvpn/server.conf

Active le Routage IP
Édites le fichier /etc/sysctl.conf et appliques les changements

net.ipv4.ip_forward=1 # Ligne a changer dans le fichier

Dans le Terminal

sudo sysctl -p

Autoriser le traffic OpenVPN dans le Pare-Feu

sudo ufw allow 1194/udp
sudo ufw enable

Puis Démarres le Serveur

sudo systemctl start openvpn@server
sudo systemctl enable openvpn@server

Configurer les clients OpenVPN : Télécharge les fichiers de configuration OpenVPN sur ton appareil client, et configure-le pour qu'il se connecte à ton VPS.

Cela te permettra de te connecter à ton VPS comme un serveur VPN, en masquant ton adresse IP et en chiffrant ton trafic. Sans passer par un fournisseur externe.

Sécurités Additionnelles SSH

Configurer des clés

Utilise une authentification par clé publique plutôt que par mot de passe pour te connecter en SSH. On va utiliser ed25519 c'est du chiffrement militaire mdr.
Sur ta machine cliente :

# Générer une paire de clefs
ssh-keygen -t ed25519 -C "ton_email@domaine.com"


# Tu seras invité à rentrer un mot de passe (C'est mieux de le faire)
Enter passphrase (empty for no passphrase):
Enter same passphrase again:

# Copier la clé publique sur le VPS depuis le Client
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@vps_ip

Connectes toi pour vérifier le bon fonctionnement des clés

ssh user@vps_ip -i ~/.ssh/id_ed25519 <- Fichier clé Privée, ce sera un autre nom si vous l'avez choisi. 

Actives les bonnes permissions sur le fichier clé de ta machine cliente

chmod 600 ~/.ssh/id_ed25519 <- Accès uniquement en lecture

Changer le Port par Défault

Sur le Serveur
Modifie ou ajoute cette ligne dans /etc/ssh/sshd_config:

Port 2222

Active ce Port sur le Pare-Feu puis redémarres le service SSH:

sudo ufw allow 2222/tcp


sudo systemctl restart sshd

Sur le Client
Il faudra spécifier le port SSH pour te connecter comme ça n'est plus celui par défault

ssh -p 2222 user@vps_ip -i ~/.ssh/id_ed25519

(La commande commence à être bien longue mdr)

Configuration DoH

Utiliser DNS-over-HTTPS (DoH) ou DNS-over-TLS (DoT) pour éviter la surveillance des requêtes DNS. Et le filtrage eventuellement ^^. On va parler que de DoH ici car il fonctionne sur le même port que HTTPS (443) ce qui ne le rend pas suspect pour un admin système contrairement au DoT (Port 853) ou ca va se remarquer direct.

Configurer DNS Over HTTPS

Ouvre le fichier resolved:

sudo nano /etc/systemd/resolved.conf

# Ajoutes les lignes suivantes

[Resolve]
DNS=1.1.1.1 <- Ou l'IP de ton résolveur DNS
DNSOverHttps=true
DNSOverHttpsAllowFallback=true


# Fermes le fichier
## Redémarres le service
sudo systemctl restart systemd-resolved

## Vérifies le Statut
resolvectl status

Une liste de résolveur DNS qui supporte DoH et qui sont un peu plus respectueux que Google ou Cloudflare : Anonaddy (DNS), NextDNS, OpenDNS FamilyShield, AdGuard DNS, Mullvad DNS, DNS.Watch

Configurer DoH dans Firefox/TorBrowser

Exemple avec AnonDaddy :

Ouvre Firefox et entre about:preferences#general dans la barre d'URL.
Paramètres réseau > Paramètres...> Activer DNS sur HTTPS > Utiliser un fournisseur personnalisé

https://dns.anonaddy.com/dns-query

Surf Paranoïaque (Teaser pour un autre article)

  1. Remplacer le VPN par une autre couche Tor
  2. Chiffrer l'ensemble du disque avec LUKS
  3. Masquer les entêtes HTTP avec un proxy
  4. Utiliser une adresse email anonyme et sécurisée (Disposable ou Fournisseur sympa selon les besoins)
  5. Sécuriser les journaux de ton VPS
  6. Utiliser des outils de surveillance et d'audit sur le VPS
  7. Utiliser des versions minimales du système d’exploitation
  8. Vérifier les fuites DNS
  9. Configurer les IPTables pour envoyer Shodan et Zoomeye se faire enc*ler
sudo iptables -A INPUT -s 185.216.195.0/24 -j DROP  # Shodan
sudo iptables -A INPUT -s 54.208.0.0/14 -j DROP    # ZoomEye

  1. Configuration plus avancée d'ufw
  2. géofencing
  3. Gérer l'exposition des services