Lundi 4 décembre 2017 (Modifié le Lundi 4 décembre 2017)

KVM Debian Stretch serveur (nginx+php7)

Package: 4 GB Mémoire, 2 CPU, 30 GB SSD, 100 Mbps
Selected Location: Paris
Debian Stretch 64
Livraison : vps-26381 93.115.96.97

  • Domaine : xoyize.xyz
  • IPv4 du serveur : 93.115.96.97
  • IPv6 du serveur : 2a03:75c0:35:670d::1
  • Certificats : Let’s Encrypt

Première connexion SSH

Via SSH
ssh root@93.115.96.97
Màj
apt update && apt upgrade
Nom de domaine xoyize.xyz et host
hostnamectl set-hostname "xoyize.xyz" Installer rsync, jq, figlet, curl et tmux
apt install rsync curl tmux jq figlet git -y

Locales

Locales : fr_FR.UTF-8
dpkg-reconfigure locales

Generating locales (this might take a while)...
  fr_FR.UTF-8... done
Generation complete.

TimeZone

Europe/Paris
dpkg-reconfigure tzdata

Current default time zone: 'Europe/Paris'
Local time is now:      Sun Dec  3 16:25:57 CET 2017.
Universal Time is now:  Sun Dec  3 15:25:57 UTC 2017.

Création utilisateur

Utilisateur stret
useradd -m -d /home/stret/ -s /bin/bash stret
Mot de passe stret
passwd stret
Visudo pour les accès root via utilisateur stret

apt install sudo
echo "stret     ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers

Déconnexion puis connexion ssh en mode utilisateur
ssh stret@93.115.96.97

DNS OVH

Configuration des champs DNS domaine xoyize.xyz

$TTL 3600
@	IN SOA dns200.anycast.me. tech.ovh.net. (2017062601 86400 3600 3600000 300)
                       IN NS     dns200.anycast.me.
                       IN NS     ns200.anycast.me.
                       IN A      93.115.96.97
                       IN AAAA   2a03:75c0:35:670d::1
*                      IN CNAME  xoyize.xyz.

SSH

connexion avec clé
sur l'ordinateur de bureau Générer une paire de clé curve25519-sha256 (ECDH avec Curve25519 et SHA2) nommé kvm-vps-26381 pour une liaison SSH avec le serveur KVM.
ssh-keygen -t ed25519 -o -a 100 -f ~/.ssh/kvm-vps-26381
Envoyer la clé publique sur le serveur KVM
scp ~/.ssh/kvm-vps-26381.pub stret@93.115.96.97:/home/stret/

sur le serveur KVM On se connecte
ssh stret@93.115.96.97
Copier le contenu de la clé publique dans /home/$USER/.ssh/authorized_keys
$ cd ~
Sur le KVM ,créer un dossier .ssh

pwd  #pour vérifier que l'on est sous /home/$USER
mkdir .ssh
cat /home/$USER/kvm-vps-26381.pub >> /home/$USER/.ssh/authorized_keys

et donner les droits
chmod 600 /home/$USER/.ssh/authorized_keys
effacer le fichier de la clé
rm /home/$USER/kvm-vps-26381.pub
Modifier la configuration serveur SSH
sudo nano /etc/ssh/sshd_config
Modifier

Port = 55026
PermitRootLogin no
PasswordAuthentication no
UsePAM no

session SSH ne se termine pas correctement lors d'un "reboot" à distance
Si vous tentez de redémarrer/éteindre une machine distance par ssh, vous pourriez constater que votre session ne se termine pas correctement, vous laissant avec un terminal inactif jusqu’à l’expiration d’un long délai d’inactivité. Il existe un bogue 751636 à ce sujet. Pour l’instant, la solution de contournement à ce problème est d’installer :
sudo apt-get install libpam-systemd #Installer par défaut sur debian stretch
cela terminera la session ssh avant que le réseau ne tombe.
Veuillez noter qu’il est nécessaire que PAM soit activé dans sshd.

Relancer openSSH
sudo systemctl restart sshd

Accès depuis le poste distant avec la clé privée
$ ssh -p 55026 -i ~/.ssh/kvm-vps-26381 stret@93.115.96.97

Exécution script sur connexion
Exécuter un fichier utilisateur nommé $HOME/.ssh/rc si présent
Pour tous les utilisateurs exécuter un fichier nommé /etc/ssh/sshrc si présent
Installer les utilitaires curl jq figlet

Le batch
nano ~/.ssh/rc

#!/bin/bash

#clear
PROCCOUNT=`ps -Afl | wc -l`  		# nombre de lignes
PROCCOUNT=`expr $PROCCOUNT - 5`		# on ote les non concernées
GROUPZ=`users`
ipinfo=$(curl -s ipinfo.io) 		# info localisation format json
publicip=$(echo $ipinfo | jq -r '.ip')  # extraction des données , installer préalablement "jq"
ville=$(echo $ipinfo | jq -r '.city')
pays=$(echo $ipinfo | jq -r '.country')
cpuname=`cat /proc/cpuinfo |grep 'model name' | cut -d: -f2 | sed -n 1p`

echo "\033[0m\033[1;31m"  
figlet "xoyize.xyz"
echo "\033[0m"
echo "\033[1;35m  \033[1;37mHostname \033[1;35m= \033[1;32m`hostname`
\033[1;35m  \033[1;37mWired Ip \033[1;35m= \033[1;32m`ip addr show eth0 | grep 'inet\b' | awk '{print $2}' | cut -d/ -f1`
\033[1;35m    \033[1;37mKernel \033[1;35m= \033[1;32m`uname -r`
\033[1;35m    \033[1;37mDebian \033[1;35m= \033[1;32m`cat /etc/debian_version`
\033[1;35m    \033[1;37mUptime \033[1;35m= \033[1;32m`uptime | sed 's/.*up ([^,]*), .*/1/' | sed -e 's/^[ \t]*//'`
\033[1;35m       \033[1;37mCPU \033[1;35m= \033[1;32m`echo $cpuname`
\033[1;35m\033[1;37mMemory Use \033[1;35m= \033[1;32m`free -m | awk 'NR==2{printf "%s/%sMB (%.2f%%)\n", $3,$2,$3*100/$2 }'`
\033[1;35m  \033[1;37mUsername \033[1;35m= \033[1;32m`whoami`
\033[1;35m  \033[1;37mSessions \033[1;35m= \033[1;32m`who | grep $USER | wc -l`
\033[1;35m\033[1;37mPublic Ip  \033[1;35m= \033[1;32m`echo $publicip $pays`
\033[0m"
curl fr.wttr.in/Paris?0

Effacer motd
sudo rm /etc/motd
Déconnexion puis connexion

Nginx PHP7

Définition des chemins et fichiers de configuration nginx
/etc/nginx/conf.d/xoyize.xyz.conf configuration de base du domaine
Création dossier /etc/nginx/conf.d/xoyize.xyz.d/ pour les fichiers de configuration supplémentaires
sudo mkdir -p /etc/nginx/conf.d/xoyize.xyz.d
Déplacer et renommer le fichier de configuration par défaut
sudo mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/xoyize.xyz.conf
Modifier le fichier
sudo nano /etc/nginx/conf.d/xoyize.xyz.conf

server {
    listen 80;
    listen [::]:80;
    root /var/www/ ;
        location ~ \.php$ {
           fastcgi_split_path_info ^(.+\.php)(/.+)$;
           fastcgi_pass unix:/run/php/php7.0-fpm.sock;    # PHP7.0
           fastcgi_index index.php;
           include fastcgi_params;
           fastcgi_param SCRIPT_FILENAME $request_filename;
        }

    include conf.d/xoyize.xyz.d/*.conf;

    access_log /var/log/nginx/xoyize.xyz.log;
    error_log /var/log/nginx/xoyize.xyz.log;
}

Recharger
sudo systemctl reload nginx

Certificats SSL letsencrypt (acme)

Certificats

[Sun Dec  3 17:03:33 CET 2017] Your cert is in  /root/.acme.sh/xoyize.xyz/xoyize.xyz.cer 
[Sun Dec  3 17:03:33 CET 2017] Your cert key is in  /root/.acme.sh/xoyize.xyz/xoyize.xyz.key 
[Sun Dec  3 17:03:33 CET 2017] The intermediate CA cert is in  /root/.acme.sh/xoyize.xyz/ca.cer 
[Sun Dec  3 17:03:33 CET 2017] And the full chain certs is there:  /root/.acme.sh/xoyize.xyz/fullchain.cer 

Création des liens sur /etc/ssl/private pour nginx

ln -s /root/.acme.sh/xoyize.xyz/fullchain.cer /etc/ssl/private/xoyize.xyz-fullchain.pem
ln -s /root/.acme.sh/xoyize.xyz/xoyize.xyz.key /etc/ssl/private/xoyize.xyz-key.pem
ln -s /root/.acme.sh/xoyize.xyz/xoyize.xyz.cer /etc/ssl/private/xoyize.xyz-chain.pem
ln -s /root/.acme.sh/xoyize.xyz/ca.cer /etc/ssl/private/xoyize.xyz-cert.pem

Mise à jour automatique (généré à l’installation acme)
crontab -e

8 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null

Nginx + SSL + header + diffie-hellmann

Structure serveur nginx

/etc/nginx/
├── conf.d/
│   ├── xoyize.xyz.conf
│   └── xoyize.xyz.d/
├── dh_param
├── fastcgi.conf
├── fastcgi.conf.default
├── fastcgi_params
├── fastcgi_params.default
├── header_params
├── koi-utf
├── koi-win
├── mime.types
├── mime.types.default
├── nginx.conf
├── nginx.conf.default
├── scgi_params
├── scgi_params.default
├── ssl_params
├── uwsgi_params
├── uwsgi_params.default
└── win-utf

ssl
Il faut préalablement demander des certificats (ca+key) SSL pour le domaine auprès d’une autorité de certification (let’s encrypt ou autre)
Le fichier de configuration
sudo nano /etc/nginx/ssl_params

    ssl_certificate /etc/ssl/private/xoyize.xyz-fullchain.pem;
    ssl_certificate_key /etc/ssl/private/xoyize.xyz-key.pem;
    ssl_session_timeout 5m;
    ssl_session_cache shared:SSL:50m;
    ssl_prefer_server_ciphers on;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ALL:!aNULL:!eNULL:!LOW:!EXP:!RC4:!3DES:+HIGH:+MEDIUM;

Entêtes
Le fichier de configuration
sudo nano /etc/nginx/header_params

    #HSTS est un dispositif de sécurité par lequel un site web peut déclarer aux navigateurs qu’ils doivent communiquer avec lui en utilisant exclusivement le protocole HTTPS, au lieu du HTTP
    add_header Strict-Transport-Security "max-age=31536000;";

    #se protéger contre le détournement de clic (clickjacking) 
    add_header X-Frame-Options "SAMEORIGIN" always;

    #faire une vérification stricte des types Mime. Elle n’accepte qu’une seule directive : nosniff.
    add_header X-Content-Type-Options nosniff;

    #activer les filtres anti-xss incorporés dans certains navigateurs.
    add_header X-XSS-Protection "1; mode=block";

    #CSP permet d’autoriser seulement les domaines déclarés à exécuter du script JavaScript, une feuille de style css, etc.
    # Content-Security-Policy : https://openweb.eu.org/articles/content-security-policy
    add_header Content-Security-Policy "default-src 'self'";

    # Désactiver les références pour les navigateurs qui ne prennent pas en charge strict-origin-when-cross-origin
    # Referrer-Policy : https://scotthelme.co.uk/a-new-security-header-referrer-policy/
    # Utilise strict-origin-when-cross-origin pour les navigateurs qui le font
    add_header Referrer-Policy "no-referrer, strict-origin-when-cross-origin";

Diffie-Hellmann
Générer une clé Diffie-Hellmann
En cryptographie, l’échange de clés Diffie-Hellman, du nom de ses auteurs Whitfield Diffie et Martin Hellman, est une méthode par laquelle deux agents nommés conventionnellement A etB peuvent se mettre d’accord sur un nombre (qu’ils peuvent utiliser comme clé pour chiffrer la conversation suivante) sans qu’un troisième agent appelé D puisse découvrir le nombre, même en ayant écouté tous leurs échanges.

ATTENTION : Génération clé Diffie-Hellmann très très longue en temps , 30 minutes minimum…

Générer une clé openssl dhparam -out /etc/ssl/private/dh4096.pem -outform PEM -2 4096
Déplacer la clé dans le répertoire
sudo mv dh4096.pem /etc/ssl/private/
Droits pour root
sudo chmod 600 /etc/ssl/private/dh4096.pem
Le fichier de configuration
sudo nano /etc/nginx/dh_param

    # Uncomment the following directive after DH generation
    # > openssl dhparam -out /etc/ssl/private/dh4096.pem -outform PEM -2 4096
    ssl_dhparam /etc/ssl/private/dh4096.pem;

Configuration de base avec SSL et sécurité + letsencrypt (renouvellement)
sudo nano /etc/nginx/conf.d/xoyize.xyz.conf

server {
    listen 80;
    listen [::]:80;

    ## redirect http to https ##
    return 301 https://$http_host$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name xoyize.xyz;

    ####    Locations
    # On cache les fichiers statiques
    location ~* \.(html|css|js|png|jpg|jpeg|gif|ico|svg|eot|woff|ttf)$ { expires max; }
    # On interdit les dotfiles
    location ~ /\. { deny all; }

    include ssl_params;
    include header_params;
    include dh_param;

    root /var/www/ ;
    index index.php index.html index.htm;
        location ~ \.php$ {
           fastcgi_split_path_info ^(.+\.php)(/.+)$;
           fastcgi_pass unix:/run/php/php7.0-fpm.sock;    # PHP7.0 
           fastcgi_index index.php;
           include fastcgi_params;
	   fastcgi_param SCRIPT_FILENAME $request_filename;
        }

    include conf.d/xoyize.xyz.d/*.conf;

    access_log /var/log/nginx/xoyize.xyz-access.log;
    error_log /var/log/nginx/xoyize.xyz-error.log;
}

Vérifier
sudo nginx -t
Relancer
sudo systemctl restart nginx
Test redirection http/https avec curl depuis un poste distant

$ curl -I xoyize.xyz
HTTP/1.1 301 Moved Permanently
Server: nginx/1.13.5
Date: Wed, 04 Oct 2017 06:46:26 GMT
Content-Type: text/html
Content-Length: 185
Connection: keep-alive
Location: https://xoyize.xyz/

Tester le lien https://xoyize.xyz

Vérification headers https://securityheaders.io
Vérification complète https://observatory.mozilla.org/analyze.html?host=xoyize.xyz

Parefeu iptables

Créer un script pour mettre en place des règles de base.
sudo nano parefeu

#!/bin/sh

# Vider les tables actuelles
iptables -t filter -F

# Vider les règles personnelles
iptables -t filter -X

# Interdire toute connexion entrante et sortante
iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
iptables -t filter -P OUTPUT DROP

# ---

# Ne pas casser les connexions etablies
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

# Autoriser loopback
iptables -t filter -A INPUT -i lo -j ACCEPT
iptables -t filter -A OUTPUT -o lo -j ACCEPT

# ICMP (Ping)
iptables -t filter -A INPUT -p icmp -j ACCEPT
iptables -t filter -A OUTPUT -p icmp -j ACCEPT

# ---

# SSH In/Out
iptables -t filter -A INPUT -p tcp --dport 55026 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 55026 -j ACCEPT

# DNS In/Out
iptables -t filter -A OUTPUT -p tcp --dport 53 -j ACCEPT
iptables -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 53 -j ACCEPT
iptables -t filter -A INPUT -p udp --dport 53 -j ACCEPT

# HTTP/HTTPS In/Out
iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 443 -j ACCEPT

fichier exécutable :
sudo chmod +x parefeu

Vous pourrez le tester en l’exécutant directement en ligne de commande. Assurez-vous d’avoir toujours le contrôle de votre machine (reconnectez-vous en SSH, vérifiez la disponibilité des services web, ftp, mail…).
sudo -s
./parefeu
En cas d’erreur, redémarrez le serveur, les règles seront oubliées et vous permettront de reprendre la main.
En revanche, si les tests s’avèrent concluants, ajoutez le script au démarrage pour que celui-ci protège le serveur dès le boot.
Après avoir exécuté le script précédent,vérifier la présence des règles
sudo -s
iptables -L

Lancement du parefeu au démarrage
apt install iptables-persistent
Faut-il enregistrer les règles IPv4 actuelles ? OUI
Faut-il enregistrer les règles IPv6 actuelles ? NON
Les tables sont enregistrés sous /etc/iptables/ , rules.v4 pour IPv4 et rules.v6 pour IPv6
Sauvegarde/Restauration manuelle des régles iptables
iptables-save > /etc/iptables/rules.v4
iptables-restore < /etc/iptables/rules.v4

Les règles /etc/iptables/rules.v4

# Generated by iptables-save v1.6.0 on Tue Oct  3 21:29:56 2017
*filter
:INPUT DROP [29:1537]
:FORWARD DROP [0:0]
:OUTPUT DROP [1:120]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -p tcp -m tcp --dport 55026 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 53 -j ACCEPT
-A INPUT -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -p icmp -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 55026 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 53 -j ACCEPT
-A OUTPUT -p udp -m udp --dport 53 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 443 -j ACCEPT
COMMIT
# Completed on Tue Oct  3 21:29:56 2017

Nextcloud

  • Nextcloud Debian Stretch
    • Installation sur /var/www
    • Pool php7-fpm /etc/php/7.0/fpm/pool.d/nextcloud.conf
    • Nginx virtual host /etc/nginx/conf.d/xoyize.xyz.d/nextcloud.conf
    • Accès https://xoyize.xyz/nextcloud
      • Créer un compte administrateur stret
      • Répertoire des données /var/www/nextcloud/data
      • Base MariaDb (MySql) nextcloud , utilisateur nextcloud + mot de passe accès
      • Installer et activer les caches APcache OPcu et Redis

Les fichiers log /var/www/nextcloud/data/nextcloud.log

Activer “External storage support” dans Applications (menu déroulant haut écran à droite)
Administration (menu déroulant haut écran à droite),”Stockages externes” Créer dossier:
Nom du dossier : Home
Stockage externe : Local
Configuration : /home/stret

Le dossier /home/stret/docs doit être accessible en lecture/écriture par nextcloud et en lecture par le groupe stret

mkdir $HOME/docs                         # création dossier 
sudo chown -R nextcloud.stret $HOME/docs # les droits

Sites statiques

https://staticsitegenerators.net/
https://github.com/dauxio/daux.io
https://3hg.fr/swx/

daux.io

https://github.com/dauxio/daux.io

Installer php composer

sudo apt install curl php7.0-cli git
curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin --filename=composer

Vérifier
$ composer

PHP et Composer sont présents, installer les dépendances composer global require daux/daux.io

Changed current directory to /home/stret/.composer
Using version ^0.7.0 for daux/daux.io
./composer.json has been created
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 19 installs, 0 updates, 0 removals
  - Installing symfony/yaml (v3.4.0): Downloading (100%)         
  - Installing webuni/front-matter (1.0.0): Downloading (100%)         
  - Installing league/commonmark (0.15.7): Downloading (100%)         
  - Installing webuni/commonmark-table-extension (0.6.1): Downloading (100%)         
  - Installing symfony/process (v3.4.0): Downloading (100%)         
  - Installing paragonie/random_compat (v2.0.11): Downloading (100%)         
  - Installing symfony/polyfill-php70 (v1.6.0): Downloading (100%)         
  - Installing symfony/polyfill-mbstring (v1.6.0): Downloading (100%)         
  - Installing symfony/http-foundation (v3.4.0): Downloading (100%)         
  - Installing psr/log (1.0.2): Downloading (100%)         
  - Installing symfony/debug (v3.4.0): Downloading (100%)         
  - Installing symfony/console (v3.4.0): Downloading (100%)         
  - Installing myclabs/deep-copy (1.7.0): Downloading (100%)         
  - Installing league/plates (3.3.0): Downloading (100%)         
  - Installing guzzlehttp/promises (v1.3.1): Downloading (100%)         
  - Installing psr/http-message (1.0.1): Downloading (100%)         
  - Installing guzzlehttp/psr7 (1.4.2): Downloading (100%)         
  - Installing guzzlehttp/guzzle (6.3.0): Downloading (100%)         
  - Installing daux/daux.io (0.7.0): Downloading (100%)         
webuni/front-matter suggests installing nette/neon (If you want to use NEON as front matter)
webuni/front-matter suggests installing yosymfony/toml (If you want to use TOML as front matter)
league/commonmark suggests installing league/commonmark-extras (Library of useful extensions including smart punctuation)
paragonie/random_compat suggests installing ext-libsodium (Provides a modern crypto API that can be used to generate random bytes.)
symfony/console suggests installing symfony/event-dispatcher ()
symfony/console suggests installing symfony/lock ()
Writing lock file
Generating autoload files

Se rendre dans le dossier docs et lancer
daux generate

Vous pouvez maintenant utiliser daux en ligne de commande pour générer la documentation.

Si la commande daux n’est pas trouvée, ajouter ~/.composer/vendor/bin à la variable $PATH
export PATH=$PATH:~/.composer/vendor/bin

Le dossier static est généré

Créer un virtualhost pour visualiser static

sudo nano /etc/nginx/conf.d/daux.xoyize.xyz.conf
server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name daux.xoyize.xyz;

    ####    Locations
    # On cache les fichiers statiques
    location ~* \.(html|css|js|png|jpg|jpeg|gif|ico|svg|eot|woff|ttf)$ { expires max; }
    # On interdit les dotfiles
    location ~ /\. { deny all; }

    include ssl_params;
    include header_params;
    include dh_param;

    root /home/stret/static/ ;
    index index.php index.html index.htm;
        location ~ \.php$ {
           fastcgi_split_path_info ^(.+\.php)(/.+)$;
           fastcgi_pass unix:/run/php/php7.0-fpm.sock;    # PHP7.0 
           fastcgi_index index.php;
           include fastcgi_params;
	   fastcgi_param SCRIPT_FILENAME $request_filename;
        }


    access_log /var/log/nginx/daux.xoyize.xyz-access.log;
    error_log /var/log/nginx/daux.xoyize.xyz-error.log;
}
sudo nginx -t
sudo systemctl reload nginx

Visualiser static https://daux.xoyize.xyz

grav

https://getgrav.org/

Installation avec php composer
composer create-project getgrav/grav ~/grav

virtualhost daux.xoyize.xyz

sudo nano /etc/nginx/conf.d/daux.xoyize.xyz.conf
server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    index index.html index.php;

    include ssl_params;
    include header_params;
    include dh_param;

    ## Begin - Server Info
    root /home/stret/grav;
    server_name daux.xoyize.xyz;
    ## End - Server Info

    ## Begin - Index
    # for subfolders, simply adjust:
    # `location /subfolder {`
    # and the rewrite to use `/subfolder/index.php`
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
    ## End - Index

    ## Begin - Security
    # deny all direct access for these folders
    location ~* /(\.git|cache|bin|logs|backup|tests)/.*$ { return 403; }
    # deny running scripts inside core system folders
    location ~* /(system|vendor)/.*\.(txt|xml|md|html|yaml|yml|php|pl|py|cgi|twig|sh|bat)$ { return 403; }
    # deny running scripts inside user folder
    location ~* /user/.*\.(txt|md|yaml|yml|php|pl|py|cgi|twig|sh|bat)$ { return 403; }
    # deny access to specific files in the root folder
    location ~ /(LICENSE\.txt|composer\.lock|composer\.json|nginx\.conf|web\.config|htaccess\.txt|\.htaccess) { return 403; }
    ## End - Security

    ## Begin - PHP

   location ~ \.php$ {
           fastcgi_split_path_info ^(.+\.php)(/.+)$;
           fastcgi_pass unix:/run/php/php7.0-fpm.sock;    # PHP7.0 
           fastcgi_index index.php;
           include fastcgi_params;
	   fastcgi_param SCRIPT_FILENAME $request_filename;
           #fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
        }
    ## End - PHP
}

Pelican

http://docs.getpelican.com

Installer python pip
sudo apt install python-pip
Installer pelican markdown
pip install pelican markdown
Chemin
export PATH=$PATH;~/.local/bin/pelican Se rendre dans le dossier
cd ~/
Les fichiers markdown dans dans le dossier docs

Créez un projet squelette via la commande pelican-quickstart, qui commence par poser quelques questions sur votre site:
pelican-quickstart
Pour les questions dont les valeurs par défaut sont indiquées entre parenthèses, n’hésitez pas à utiliser la touche Retour pour accepter ces valeurs par défaut[1]. Quand on vous demande votre préfixe URL, entrez votre nom de domaine comme indiqué (par exemple, http://example.com).


Résolveur DNS Unbound

Créer son résolveur DNS avec Unbound sur Debian
Installer son propre serveur DNS Unbound
Debian : Installer le serveur DNS Unbound
Installer et configurer son serveur DNS connecté aux serveurs root avec Unbound

Les serveurs DNS sont des machines discutant entre elles afin de se communiquer les correspondances entre nom de domaine et adresses IP. Lors des requêtes faites par un client, les serveurs DNS répondent de façon hiérarchisée pour résoudre les différents composants d’un nom de domaine. Typiquement, “homeserver-diy”, “.”, “net” (dans un ordre différent). Pour accélérer ces résolutions, les serveurs DNS peuvent s’appuyer sur un système de cache limitant le nombre de requêtes. De ce fait, les performances d’un serveur DNS augmentent dans le temps car celui-ci cherche d’abord à résoudre les noms de domaines via ce cache avant d’interroger ses comparses.

Monter son propre serveur DNS Unbound améliore la vitesse de vos requêtes (cache) tout en ayant un peu plus de confidentialité.

  • Vitesse des requêtes: Si la requête a déjà été effectuée, elle sera mise en cache. Si un autre utilisateur de votre réseau cherche à joindre le même nom de domaine, votre serveur ne devra plus contacter les serveurs root car la réponse sera déjà dans son cache. De plus, si vous mettez votre résolveur dans votre réseau local, les performances seront encore améliorées.
  • Confidentialité: Certains fournisseur de DNS peuvent stocker et analyser vos requêtes. En installant votre résolveur, vous seul pourrez les analyser.

1-Installation d’ Unbound

La première chose à faire est d’installer le paquet nécessaire. Dans notre cas, nous choisirons Unbound qui nous servira uniquement de résolveur DNS.
En effet, Unbound ne dispose pas de service pouvant héberger votre propre zone DNS.
Il pourra cependant être couplé à un autre service pour vous permettre d’héberger votre zone.
apt install unbound

2-Télécharger la liste des serveurs root

Nous allons maintenant télécharger la liste complète des serveurs root et la stocker sur notre serveur.
wget ftp://FTP.INTERNIC.NET/domain/named.cache -O /var/lib/unbound/root.hints

3-Editer le fichier de configuration

Editons maintenant notre fichier de configuration. Dans ce fichier, nous renseignerons des éléments comme l’adresse ip sur laquelle écoutera notre serveur, l’expiration du cache, les réseaux autorisés à effectuer des requêtes, etc.
nano /etc/unbound/unbound.conf.d/unbound-xoyize.conf

server:
statistics-interval: 0
extended-statistics: yes
statistics-cumulative: yes
verbosity: 3
interface: 127.0.0.1
#interface: 10.8.0.1 ## la passerelle VPN
port: 53
do-ip4: yes
do-ip6: no
do-udp: yes
do-tcp: no
access-control: 127.0.0.0/8 allow ## j'autorise mon serveur
#access-control: 10.8.0.0/24 allow ## j'autorise le réseau établie avec mon OpenVPN
access-control: 0.0.0.0/0 refuse ## j'interdis tout le reste de l'Internet !
auto-trust-anchor-file: "/var/lib/unbound/root.key"
root-hints: "/var/lib/unbound/root.hints"
hide-identity: yes
hide-version: yes
harden-glue: yes
harden-dnssec-stripped: yes
use-caps-for-id: yes
cache-min-ttl: 3600
cache-max-ttl: 86400
prefetch: yes
num-threads: 6
msg-cache-slabs: 16
rrset-cache-slabs: 16
infra-cache-slabs: 16
key-cache-slabs: 16
rrset-cache-size: 256m
msg-cache-size: 128m
so-rcvbuf: 1m
unwanted-reply-threshold: 10000
do-not-query-localhost: yes
val-clean-additional: yes
##je bloque cetaines pubs
local-zone: "doubleclick.net" redirect
local-data: "doubleclick.net A 127.0.0.1"
local-zone: "googlesyndication.com" redirect
local-data: "googlesyndication.com A 127.0.0.1"
local-zone: "googleadservices.com" redirect
local-data: "googleadservices.com A 127.0.0.1"
local-zone: "google-analytics.com" redirect
local-data: "google-analytics.com A 127.0.0.1"
local-zone: "ads.youtube.com" redirect
local-data: "ads.youtube.com A 127.0.0.1"
local-zone: "adserver.yahoo.com" redirect
local-data: "adserver.yahoo.com A 127.0.0.1"
local-zone: "ask.com" redirect
local-data: "ask.com A 127.0.0.1"
use-syslog: yes
logfile: /var/log/unbound.log
harden-dnssec-stripped: yes
cache-min-ttl: 3600
cache-max-ttl: 86400
prefetch: yes
prefetch-key: yes

4-On vérifie puis redémarre la configuration

ATTENTION! Serveur utilise bind9 , le désactiver
systemctl stop bind9 && systemctl disable bind9

Tester la configuration.
unbound-checkconf /etc/unbound/unbound.conf.d/unbound-xoyize.conf
unbound-checkconf: no errors in /etc/unbound/unbound.conf.d/unbound-xoyize.conf
Modifier le fichier /etc/resolv.conf :
echo "nameserver 127.0.0.1" > /etc/resolv.conf On redémarre Unbound
systemctl restart unbound

5-Vérification avec dig et nslookup

Installation des outils
apt install dnsutils
Vérifier la résolution de nom à partir du serveur :
dig @127.0.0.1 xoyize.xyz

; <<>> DiG 9.10.3-P4-Debian <<>> @127.0.0.1 xoyize.xyz
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 19334
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;xoyize.xyz.			IN	A

;; ANSWER SECTION:
xoyize.xyz.		3550	IN	A	93.115.96.97

;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Thu Oct 05 15:19:46 CEST 2017
;; MSG SIZE  rcvd: 58

La résolution fonctionne

Le résultat de la commande nslookup xoyize.xyz |grep Server doit être :
Server: 127.0.0.1

Maintenant, vous avez votre propre résolveur DNS en cours d’exécution.

Droits sur le dossier root web /var/www

Donner les droits à l’utilisateur de modifier le dossier /var/www

sudo chown root:www-data /var/www
sudo chmod 775 /var/www
sudo usermod -aG www-data $USER

Exim4, envoi de mail en ligne de commande

http://www.dmesg.fr/administration/126-configurer-exim-4-en-smarthost-pour-utiliser-le-serveur-smtp-de-votre-fai
http://elliptips.info/guide-debian-7-envoi-de-mails-ligne-de-commande/

Modification configuration
sudo nano /etc/exim4/update-exim4.conf.conf

# /etc/exim4/update-exim4.conf.conf
#
# Edit this file and /etc/mailname by hand and execute update-exim4.conf
# yourself or use 'dpkg-reconfigure exim4-config'
#
# Please note that this is _not_ a dpkg-conffile and that automatic changes
# to this file might happen. The code handling this will honor your local
# changes, so this is usually fine, but will break local schemes that mess
# around with multiple versions of the file.
#
# update-exim4.conf uses this file to determine variable values to generate
# exim configuration macros for the configuration file.
#
# Most settings found in here do have corresponding questions in the
# Debconf configuration, but not all of them.
#
# This is a Debian specific file

dc_eximconfig_configtype='satellite'
dc_other_hostnames=''
dc_local_interfaces='127.0.0.1 ; ::1'
dc_readhost='xoyize.xyz'
dc_relay_domains=''
dc_minimaldns='false'
dc_relay_nets=''
dc_smarthost='xoyize.xyz:465'
CFILEMODE='644'
dc_use_split_config='false'
dc_hide_mailname='true'
dc_mailname_in_oh='true'
dc_localdelivery='mail_spool'

Le mot de passe
sudo nano /etc/exim4/passwd.client

# password file used when the local exim is authenticating to a remote
# host as a client.
#
# see exim4_passwd_client(5) for more documentation
#
# Example:
### target.mail.server.example:login:password
*:cinay@xoyize.xyz:mot-de-passe

Recharger exim4
sudo update-exim4.conf
Test
echo "caractères accentués" | mail destinataire@domaine.fr
type d’encodage de jeu de caractères qui diffère d’un système à l’autre. Pour remédier à ce problème, passez simplement par un logiciel comme Mutt :
sudo apt install mutt
echo "caractères accentués" | mutt -s "test" -- destinataire@domaine.fr

Mises à jour de sécurité debian

Toutes les instructions suivantes sont exécutées après passage en mode su ou sudo
L’automatisation sera pris en charge par l’outil cron-apt. Cron-apt permet de vérifier à intervalle régulier, via le crontab , si des mises à jours sont disponibles et va les installer.
apt install cron-apt
Création du fichier security.sources.list utilisé par cron-apt et qui ne contiendra que le(s) dépôt(s) de sécurité Debian.
grep security /etc/apt/sources.list > /etc/apt/security.sources.list
On édite le fichier de configuration de cron-apt /etc/cron-apt/config

APTCOMMAND=/usr/bin/apt
OPTIONS="-o quiet=1 -o Dir::Etc::SourceList=/etc/apt/security.sources.list"
MAILTO="ne-pas-repondre@yanspm.com"
MAILON="always"

Pour déclencher la mise à jour automatique après téléchargement , supprimer option -d dans le fichier /etc/cron-apt/action.d/3-download
dist-upgrade -y -o APT::Get::Show-Upgraded=true
Test immédiat
cron-apt
Patienter quelques minutes
Par défaut l’exécution est programmée à 4h00 chaque jour, pour spécifier un créneau horaire modifier le fichier /etc/cron.d/cron-apt.