« Documentation » : différence entre les versions

De wikisio
Aucun résumé des modifications
Aucun résumé des modifications
 
(7 versions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
<strong>0 - Mise en place </strong>
= Déploiement d’une Infrastructure Web Sécurisée avec LXC =


- VPS:
== 0 - Mise en place de l’infrastructure ==


Aller sur pulseheberg.com et acheter le VPS EDU-2 dans Education Cloud.
=== VPS ===


- Nom de domaine
1. Aller sur https://pulseheberg.com


Aller sur ovhcloud.com et acheter un domaine, puis l'associer a son IP dans la section
2. Acheter le VPS '''EDU-2''' dans l’offre '''Education Cloud'''


=== Nom de domaine ===


1. Aller sur https://ovhcloud.com


2. Acheter un nom de domaine


<strong>1 - Sécurité</strong>
3. Associer le domaine à l’adresse IP du VPS via la gestion DNS


- bonnes pratiques SSH (Root, port, ...)
== 1 - Sécurité ==


Désactiver dans /etc/ssh/sshd_config l'acces root et changer le port par défaut.
=== Bonnes pratiques SSH ===


- Fail2Ban
Modifier le fichier :


Ajouter dans /etc/fail2ban/jail.local:
<pre>
/etc/ssh/sshd_config
</pre>


Recommandations :
<pre>
PermitRootLogin no
Port 2222
</pre>
Puis redémarrer le service :
<pre>
systemctl restart ssh
</pre>
=== Fail2Ban ===
Installer Fail2Ban :
<pre>
apt install fail2ban -y
</pre>
Modifier ou créer le fichier :
<pre>
/etc/fail2ban/jail.local
</pre>
Configuration :
<pre>
[sshd]
[sshd]
enabled = true
enabled = true
port = 2222
port = 2222
filter = sshd
filter = sshd
logpath = /var/log/auth.log
logpath = /var/log/auth.log
maxretry = 5
maxretry = 5
bantime = 3600  
bantime = 3600
</pre>
 
Redémarrer :
 
<pre>
systemctl restart fail2ban
</pre>
 
 


=== IPSet + Firewall ===


Enregistrer avec systemctl restart fail2ban
Créer une liste noire :


- IPSet
<pre>
ipset create blacklist hash:ip
</pre>


Creer une liste d'ip à bloquer avec ipset create blacklist hash:ip
Ajouter la règle iptables :


Integrer ipset au firewall avec iptables -I INPUT -m set --match-set blacklist src -j DROP
<pre>
iptables -I INPUT -m set --match-set blacklist src -j DROP
</pre>


Enregistrer la regle iptables avec netfilter-persistent save
Sauvegarder :


<pre>
netfilter-persistent save
</pre>






== 2 - Containerisation avec LXC ==


<strong>2 - Containerisation</strong>
=== Installation de LXC ===


- Mise en place de LXC
<pre>
apt-get install lxc lxc-templates -y
</pre>


apt-get install lxc lxc-templates
Créer les conteneurs :


<pre>
lxc-create -n nginx -t debian
lxc-create -n nginx -t debian
lxc-create -n monsite -t debian
lxc-create -n monsite -t debian
</pre>
Configurer les IP
Installer :
* Apache dans '''monsite'''
* Nginx dans '''nginx'''


Changer l'ip des deux contenaires en 10.0.3.10 et 101
=== Configuration NAT ===
Installer apache dans monsite, nginx dans nginx


iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 10.0.3.10:80
<pre>
iptables -t nat -A PREROUTING -p tcp --dport 443 -j DNAT --to-destination 10.0.3.10:443
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination *adresse ip*
iptables -t nat -A PREROUTING -p tcp --dport 443 -j DNAT --to-destination *adresse ip*
iptables -t nat -A POSTROUTING -j MASQUERADE
iptables -t nat -A POSTROUTING -j MASQUERADE
</pre>


- Reverse proxy configurer


=== Configuration Reverse Proxy (Nginx) ===


<pre>
server {
server {
     listen 80;
     listen 80;
     server_name *nom du site*;
     server_name mondomaine.tld;
   
 
     access_log off;  
     access_log off;
   
 
     # Autoriser uniquement GET, HEAD, POST
     # Autoriser uniquement GET, HEAD, POST
     if ($request_method !~ ^(GET|HEAD|POST)$) {
     if ($request_method !~ ^(GET|HEAD|POST)$) {
         return 444;
         return 444;
     }
     }
   
 
     location / {
     location / {
         proxy_pass http://10.0.3.101:80/;
         proxy_pass http://*adresse ip*/;
         proxy_set_header Host $host;
         proxy_set_header Host $host;
         proxy_set_header X-Real-IP $remote_addr;
         proxy_set_header X-Real-IP $remote_addr;
Ligne 82 : Ligne 153 :
     }
     }
}
}
</pre>






== 3 - Documentation interne ==


=== Installation de MediaWiki ===


<strong>3 - Documentation</strong>
Préparer la base de données (MySQL/MariaDB).


- Mise a disposition d'une base de connaissance (Mediawiki ou autre) sécurisé ("apache-auth")
Téléchargement :
 
Mettre en place une BDD


<pre>
cd /tmp
cd /tmp
wget https://releases.wikimedia.org/mediawiki/1.41/mediawiki-1.41.0.tar.gz
wget https://releases.wikimedia.org/mediawiki/1.41/mediawiki-1.41.0.tar.gz
tar -xzf mediawiki-1.41.0.tar.gz
</pre>


tar -xzf mediawiki-1.41.0.tar.gz
Déploiement :


<pre>
rm -rf /var/www/html/*
rm -rf /var/www/html/*
mv mediawiki-1.41.0/* /var/www/html/
chown -R www-data:www-data /var/www/html/
chmod -R 755 /var/www/html/
</pre>


mv mediawiki-1.41.0/* /var/www/html/
Finaliser l’installation via navigateur :
 
<pre>
http://mondomaine.tld
</pre>
 
 
 
=== Sécurisation ===
 
* Installer un certificat SSL (Let’s Encrypt recommandé)
* Activer l’authentification Apache (apache-auth)
* Ajouter une règle Fail2Ban pour protéger l’authentification
* Restreindre l’accès par IP si nécessaire
 
 
=== Mise en place des sauvegardes ===


chown -R www-data:www-data /var/www/html/
Sauvegarde locale simple :


chmod -R 755 /var/www/html/
<pre>
tar -czf /backup/wiki_$(date +%F).tar.gz /var/www/html
mysqldump -u root -p wikidb > /backup/wikidb_$(date +%F).sql
</pre>


Automatiser avec cron :


Securiser avec cerificat SSL
<pre>
crontab -e
</pre>


Securiser apache auth dans fail2ban
Exemple :


- mise en place d'une solution de backups (locale pour commencer)
<pre>
0 3 * * * /script/backup.sh
</pre>

Dernière version du 2 mars 2026 à 10:43

Déploiement d’une Infrastructure Web Sécurisée avec LXC

0 - Mise en place de l’infrastructure

VPS

1. Aller sur https://pulseheberg.com

2. Acheter le VPS EDU-2 dans l’offre Education Cloud

Nom de domaine

1. Aller sur https://ovhcloud.com

2. Acheter un nom de domaine

3. Associer le domaine à l’adresse IP du VPS via la gestion DNS

1 - Sécurité

Bonnes pratiques SSH

Modifier le fichier :

/etc/ssh/sshd_config

Recommandations :

PermitRootLogin no
Port 2222

Puis redémarrer le service :

systemctl restart ssh


Fail2Ban

Installer Fail2Ban :

apt install fail2ban -y

Modifier ou créer le fichier :

/etc/fail2ban/jail.local

Configuration :

[sshd]
enabled = true
port = 2222
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
bantime = 3600

Redémarrer :

systemctl restart fail2ban


IPSet + Firewall

Créer une liste noire :

ipset create blacklist hash:ip

Ajouter la règle iptables :

iptables -I INPUT -m set --match-set blacklist src -j DROP

Sauvegarder :

netfilter-persistent save


2 - Containerisation avec LXC

Installation de LXC

apt-get install lxc lxc-templates -y

Créer les conteneurs :

lxc-create -n nginx -t debian
lxc-create -n monsite -t debian

Configurer les IP

Installer :

  • Apache dans monsite
  • Nginx dans nginx


Configuration NAT

iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination *adresse ip*
iptables -t nat -A PREROUTING -p tcp --dport 443 -j DNAT --to-destination *adresse ip*
iptables -t nat -A POSTROUTING -j MASQUERADE


Configuration Reverse Proxy (Nginx)

server {
    listen 80;
    server_name mondomaine.tld;

    access_log off;

    # Autoriser uniquement GET, HEAD, POST
    if ($request_method !~ ^(GET|HEAD|POST)$) {
        return 444;
    }

    location / {
        proxy_pass http://*adresse ip*/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}


3 - Documentation interne

Installation de MediaWiki

Préparer la base de données (MySQL/MariaDB).

Téléchargement :

cd /tmp
wget https://releases.wikimedia.org/mediawiki/1.41/mediawiki-1.41.0.tar.gz
tar -xzf mediawiki-1.41.0.tar.gz

Déploiement :

rm -rf /var/www/html/*
mv mediawiki-1.41.0/* /var/www/html/
chown -R www-data:www-data /var/www/html/
chmod -R 755 /var/www/html/

Finaliser l’installation via navigateur :

http://mondomaine.tld


Sécurisation

  • Installer un certificat SSL (Let’s Encrypt recommandé)
  • Activer l’authentification Apache (apache-auth)
  • Ajouter une règle Fail2Ban pour protéger l’authentification
  • Restreindre l’accès par IP si nécessaire


Mise en place des sauvegardes

Sauvegarde locale simple :

tar -czf /backup/wiki_$(date +%F).tar.gz /var/www/html
mysqldump -u root -p wikidb > /backup/wikidb_$(date +%F).sql

Automatiser avec cron :

crontab -e

Exemple :

0 3 * * * /script/backup.sh