Mini réseau – Version 2 – VPS

Mini réseau web avec

  • Reverse proxy
  • Serveur apache/mariadb
  • serveur annexe de service
infra_home_web_V2

Ajouter au plan liaison WordPress avec github

Le plan au format : infra_home_web_V2

Résumé

VPS

  • Nom d’utilisateur : root
  • Mot de passe :      XXXXXX
  • Lien : www.ovh.com

Proxmox

  • OS : Proxmox VE 5
  • Login : root
  • Mot de passe : XXXXXX
  • Lien : https://164.XXX.XXX.XXX:8006/

• Proxmox node – 192.168.0.1
• Container1 – Nginx reverse proxy – 192.168.0.2
• Container2 – MySQL – 192.168.0.3
• Container3 – Apache2 – 192.168.0.4

Le but de cette installation est de posséder un système d’hébergement :

  • Pas cher
  • Sécurisé
  • Open source
  • Simple ( tout est relatif J )

Fiche d’identité

  • Compétence : Intermédiaire
  • Temps : une après midi

Le tuto

Etape 0 : Louer votre VPS

Installer par défaut : Debian 9

Etape 1 : (Facultatif) Ajouter un disque dur

Si vous avez besoin de place vous pouvez ajouter un disque dur sur votre VPS.

Il faudra le formater et l’ajouter à votre système.

Tuto : https://www.it-connect.fr/debian-partitionner-un-disque-avec-fdisk-et-mkfs/

A) Proxmox

Etape 1 : Installer Proxmox

Installer proxmox sur le debian 9 (Ne pas utiliser l’ISO )

Shell

Etape 2 : Modification du VPS

Certaines modifications sont à effectuer sur un VPS OVH

  • Modifier le fichier /etc/cloud/templates/hosts.tmpl
  • change or remove the value of ‘manage_etc_hosts’ in /etc/cloud/cloud.cfg or cloud-config from user-data
  • Mettre “/etc/hosts” sur false :Manage_et_hosts :false
Shell

Etape 3 : Créer un bridge

Vmbr0 : 192.168.1.1 et masque 255.255.255.0 pour le reste voir config de l’annexe 1

B ) Création des containers

  • Télécharger le Template « Debian 9 »
  • Créer le container CT-BLOP-RP

Ce container sera un reverse proxy, il permettra de rediriger les flux vers CT-BLOP-WEB et CT-BLOP-SERVICE

  • Créer le container CT-BLOP-WEB

Ce container sera un serveur Web, il pourra héberger vos sites internets, blog.

  • Créer le container CT-BLOP-SERVICE

Ce container sera un le serveur que vous souhaitez, il pourra héberger divers test ou application de service

C) Configuration générale de vos containers

Pour mettre en place les étapes ci-dessous un playbook Ansible existe ici : https://github.com/blop03/ansible-infra-perso

Etape 1 : Mise à jour automatique

Si vous souhaitez que vos serveurs soient un petit peu automatisé vous pouvez mettre en place des mises à jours automatique

Ça s’appelle unattended-upgrades

Shell

Pour activer les mises à jour automatiques, il faut ensuite lancer cette commande, et choisir « Yes » :

Shell

Sources: https://tuxicoman.jesuislibre.net/2015/08/mise-a-jour-automatique-des-patch-de-securite-sur-debian.html

Etape 2 : Installer ZSH

Afin de maximiser le confort vous pouvez installer un shell différent ZSH

Sources : http://denisrosenkranz.com/installation-et-configuration-de-zsh/

Etape 3 : Installer Vim

Afin de profiter d’un éditeur performant :

Apt install vim

Etape 4 : Mise en place des dépots

Vous pouvez générer votre fichier grace a : https://debgen.simplylinux.ch

Shell
Voici ma config :
Shell

Etape 5 : Mise a jour du système

Shell

Etape 6 : Les paquets

Shell

Etape 7 : Changer le MOTD

Shell

créer dans /etc/update-motd.d/ le fichier 10-logo et 10-system

cat > /etc/update-motd.d/10-logo <<EOF #!/bin/sh figlet $(hostname) EOF
cat > /etc/update-motd.d/10-system <<EOF
#!/bin/sh
#Color
BLUE='�33[0;34m'
NC='�33[0m' # No Color
#Distribution
KERNEL="$(uname -srmo)"
DISTRIBUTION="$(cat /etc/debian_version)"
#Uptime
upSeconds="$(/usr/bin/cut -d. -f1 /proc/uptime)"
secs=$((${upSeconds}%60))
mins=$((${upSeconds}/60%60))
hours=$((${upSeconds}/3600%24))
days=$((${upSeconds}/86400))
#System information
date="$(date)"
load="$(cat /proc/loadavg | awk '{print $1}')"
root_usage=`df -h / | awk '/// {print $(NF-1)}'`
memory_usage=`free -m | awk '/Mem/ { printf("%3.1f%%", $3/$2*100) }'`
users=`users | wc -w`
UPTIME=`printf "%d days, %02dh%02dm%02ds" "$days" "$hours" "$mins" "$secs"`
echo
echo "Kernel :" $KERNEL
echo "Distribution : Debian" $DISTRIBUTION
echo "Date: $date"
echo "Uptime : ${UPTIME}"
echo
printf "System load:t%stMemory usage:t%sn " $load $memory_usage
printf "Usage on:t%stLocal users:t%sn " $root_usage $users
EOF
20-updates
apt install python-apt

Etape 5 : Logrotate : Configuration

Afin que votre serveur ne soit pas engorgé par les logs, vous pouvez utiliser le logiciel Logrotate

  • Modifier le fichier /etc/logrotate.conf et mettre le nombre de rotate a 4

Etape 5 : Fail2ban : Configuration

Pour que votre serveur stop l’accés a quelqu’un de malveillant essayant de faire du brut force, vous pouvez installer fail2ban sur votre serveur.

D) Container CT-BLOP-RP

Voici les différentes étapes de l’installation de nginx sur le container

Etape 1 : Installation de Nginx

Vous pouvez lancer la commande : apt-get install nginx

Etape 2 : Déployer les vhosts de vos sites

Dossier des configurations : /etc/nginx/sites-enabled/*

A mettre dans le nginx.conf pour les ocnfigurations globale :

Shell

Pour vos sites :

Nous allons maintenant éditer /etc/nginx/sites-available/default pour ajouter la configuration de nos domaines. Chaque bloc serveur est un nouveau domaine, notez que nous incluons proxy.conf dans la partie location.

Shell

Voir (Annexe 3 pour les vhosts Nginx)

Redémarrez Nginx pour activer votre configuration.

Shell

Etape 3 : Sécuriser vhost en HTTPS

Configuring NGINX as a reverse proxy

Most of the configuration take place in the following file/folder :
/etc/nginx/nginx.conf
/etc/nginx/sites-enabled/*

Start by editing /etc/nginx/nginx.conf and paste the following config.

# Two processes work well for a single CPU
user www-data;
worker_processes 2;

error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;

events {
worker_connections 1024;
use epoll;
}

http {
include /etc/nginx/mime.types;

# Nginx does the logging
access_log /var/log/nginx/access.log;

# TCP
sendfile on;
keepalive_timeout 65;
tcp_nodelay on;
server_names_hash_bucket_size 64;
server_tokens off;

# Have nginx do the compression, turn off Apache’s mod_deflate
gzip on;
gzip_vary on;
gzip_http_version 1.1;
gzip_disable « MSIE [1-6].(?!.*SV1) »;
gzip_comp_level 6;
gzip_min_length 1400;
gzip_proxied any;
# text/html mime type is automatically included for gzip, have to add the rest
gzip_types text/plain text/css application/x-javascript text/xml application/xml application/rss+xml text/javascript;

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers ‘EECDH+AESGCM:EDH+AESGCM:ECDHE-RSA-AES128-GCM-SHA256:AES256+EECDH:DHE-RSA-AES128-GCM-SHA256:AES256+EDH:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4’;
ssl_session_cache shared:SSL:10m;

proxy_cache_path /var/cache/nginx levels=2:2:2 keys_zone=STATIC:1000m inactive=24h max_size=1g;
proxy_temp_path /var/lib/nginx/proxy;

include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}

You can also create separate config files and include them in your main config, this will help you keep your main config files tidy. Let’s create /etc/nginx/proxy.conf and paste the following config in it.

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_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection « upgrade »;
proxy_read_timeout 900s;

We will now edit /etc/nginx/sites-available/default to add our domains configuration. Each server block is a new domain, note that we include proxy.conf in the location part.

server {
listen 80;
listen [::]:80;
server_name website1.mydomain.com;

access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;

location / {
include proxy.conf;
proxy_pass http://192.168.0.4:80/;
}
}

server {
listen 80;
listen [::]:80;
server_name website2.mydomain.com;

access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;

location / {
include proxy.conf;
proxy_pass http://192.168.0.4:80/;
}
}

The important parts here are server_name which is your domain name, and proxy_pass, which triggers the reverse proxy to the URL next to it, note also the location block which is in this example the root of your website but you can add multiple location blocks and assign them a different behaviour we will see that in a future article on SSL configuration.

Restart Nginx to activate your configuration.
service nginx restart

After configuring Apache, typing your domain in a browser should redirect you to your website folder on your apache server.

E) Container CT-BLOP-WEB

Si vous regardez l’infrastructure réseau, vous pouvez voir que nous sommes en train de tout rediriger de Nginx vers notre serveur Apache en 192.168.1.3. Cela signifie que nous devrons également le configurer pour gérer les noms de domaine.

Etape 1 : Installation d’un LAMP

Package :

  • Mariadb,
  • Apache2,
  • PHP7
  • Phpmyadmin

Tuto : http://www.itzgeek.com/how-tos/linux/debian/how-to-install-lamp-server-on-debian-9-stretch.html

Etape 2 : Letsencrypt avec certbot

https://certbot.eff.org/

Etape 3 : Adminer : Installation

Tuto a trouver

Etape 4 : Adminer : Configuration

Afin de pouvoir uploader BDD assez lourde, il faut modifier la taille de l’upload autorisé. J’ai choisi 100mo

Suive le tuto : https://wpchannel.com/augmenter-taille-maximale-envoi-fichiers-php-ini-wordpress/Augmentation

Etape 5 : PHPmyadmin : Activer le SSL

Afin de sécuriser phpmyadmin il faut le mettre en HTTPS

  • Dans un premier temps il faut récupérer le fichier de /etc/conf-available et le placer/adapter dans le /etc/apache2/sites-enabled

Etape 6: La sauvegarde : Base de données

Afin de garder une copie de ses BDD il est important de les sauvegarder.

Etape 7 : La sauvegarde : Les fichiers

Tuto  : http://www.nas-forum.com/forum/topic/55118-tuto-sauvegarde-hyper-backup-vers-un-serveur-distant-rsync-avec-chiffrement-du-transfert/

Etape 8 : Installation des sites

Allez dans /etc/apache2/sites-available/ et créez un nouveau fichier de configuration avec le nom de votre site. Dans notre cas, nous utiliserons website1.conf
Définissez ensuite une configuration de base d’hôte virtuel.

  • Faire les Vhosts ( Voir Annexe 2 )
  • Déposer les dossiers dans /var/www
  • Créer user de bdd
  • Lancer les installations
  • Sauvegardez le fichier et activez le nouveau Virtualhost en tapant a2ensite website1 enfin le domaine sera redirigé vers votre dossier /var/www/website1

Voici des exemples de sites internet :

  • CMS ( Blog WordPress, Drupal )
  • Piwik pour analyser vos sites

Etape 9 (Facultatif): Mise à jour automatique WordPress

https://www.malekal.com/activer-les-mises-a-jour-automatiques-sur-wordpress/ Mise a jour automatique

Etape 10 (Facultatif) : Créer des sauvegardes à distance

  • Monter un NFS pour save des containers
  • Content en VZDUMp File

Attention le reste marche mal (Container ou autre )

F) Container CT-BLOP-SERVICE

Etape 1 : Installation Nginx

https://www.digitalocean.com/community/tutorials/how-to-host-multiple-websites-securely-with-nginx-and-php-fpm-on-ubuntu-14-04

Etape 2 : Installation mariadb 10.3

apt-get install -y -q software-properties-common dirmngr
apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xF1656F24C74CD1D8
add-apt-repository "deb [arch=amd64,i386,ppc64el] http://mariadb.mirror.nucleus.be/repo/10.3/debian stretch main"
apt-get update
apt-get install mariadb-server

Etape 3 : Installer php-fpm

https://www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-on-ubuntu-12-04

Etape 4 : PHPmyadmin : Installation

https://www.howtoforge.com/tutorial/install-apache-with-php-and-mysql-on-ubuntu-16-04-lamp/

Etape 5 : PHPmyadmin : Configuration

Afin de pouvoir uploader BDD assez lourde, il faut modifier la taille de l’upload autorisé. J’ai choisi 100mo

Suive le tuto : https://wpchannel.com/augmenter-taille-maximale-envoi-fichiers-php-ini-wordpress/Augmentation

Etape 6 : PHPmyadmin : Activer le SSL

Afin de sécuriser phpmyadmin il faut le mettre en HTTPS

Etape 7: Logrotate : configuration

Logrotate a 52 pour place

Etape 8 : Installation des services exemple

Pour la partie Web PHP/Apache

Exemple :

  • Dolibarr
  • Limesurvey
  • Xibo

Pour le reste

  • Collectd, influxdb, Grafana -> Voir ci-dessous
  • Rundeck -> http://rundeck.org/
  • Script-server
  • Kresus

E ) Supervision

Etape 0 : Monit : Installation

Afin de surveiller les services de la machine vous pouvez utiliser Monit

Suivre ce tuto : https://www.it-connect.fr/monit-installation-et-configuration/

Etape 1 : Monit : Configuration

Etape 2 : (Facultatif) Monit : Interface web

Si vous souhaitez activer l’interface web de Monit, il faudra créer les vhost pour vos serveurs sur le CT-BLOP

  • CT-BLOP-RP -> monit-rp.xxx.com
  • CT-BLOP-WEB -> monit-web.xxx.com
  • CT-BLOP-SERVICE -> monit-service.xxx.com

G) Metrologie

Afin d’avoir des infos et de garder et de tracer la valeur numérique d’une charge, et d’avoir des graphiques. La solution choisi est d’utiliser collectd, influxd, grafana.

Etape 0 : Collectd

Installation de collectd sur

  • CT-BLOP-RP
  • CT-BLOP-SERVICE
  • CT-BLOP-WEB

Etape 1 : Grafana : Installation

Installation de Grafana sur ct-blop-service

Tuto : https://yann.me/monitoring-de-serveur-avec-collectd-influxdb-et-grafana/

Etape 2 : Vider la métrologie.

Si vous avez des problèmes de taille Vider : DROP SERIES FROM /.*/ Voilà le tuto est terminé J, n’hésitez pas à poster vos commentaires.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Résoudre : *
34 ⁄ 17 =