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
- FlokiNET <- Interréssant celui-ci
- Vultr
- BitLaunch
- ScalaHosting
- GreenHost
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)
- Remplacer le VPN par une autre couche Tor
- Chiffrer l'ensemble du disque avec LUKS
- Masquer les entêtes HTTP avec un proxy
- Utiliser une adresse email anonyme et sécurisée (Disposable ou Fournisseur sympa selon les besoins)
- Sécuriser les journaux de ton VPS
- Utiliser des outils de surveillance et d'audit sur le VPS
- Utiliser des versions minimales du système d’exploitation
- Vérifier les fuites DNS
- 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
- Configuration plus avancée d'ufw
- géofencing
- Gérer l'exposition des services