Sommaire Sécurité : Différence entre versions

De Analyse Développement Hacking
Sauter à la navigation Sauter à la recherche
 
(Aucune différence)

Version actuelle datée du 27 juillet 2020 à 03:34

Glider.png

Le wiki : Accueil - Administrateur - Bureautique - Développeur - Intégrateur - Marketing - Multimédia - Objets numériques - Jeux - We make Hack

Le site : Accueil du site - Annuaire - Blog - Forum - Outils - Utilisateur
Le FTP : Accueil du FTP - Le privatebin : Accueil du privatebin
Le Redmine : Accueil du Redmine

Sommaire

Sécurité

Générer un mot de passe fort pour chaque compte à utiliser

Utiliser des assemblages de mots ou utiliser un générateur de mot de passe pour créer un mot de passe fort.

Pwgen

sudo apt install pwgen
Lancer pwgen pour obtenir des mots de passe de 15 caractères aléatoires.
pwgen -ysBv 15
(Noter que l'option -v supprime les voyelles. Cette option n'est donc pas nécessaire.)
 _x@)R4c&k^?sz#9 s`9CjR%VCWw-mT) xCp%/#z:X3NJp%J ckhLkt7Kmk|q"=< _brbc{(N7!"pV(W
 ]bvj.3&,7n?CR37 X9<T_%R<]K[/d>( z*t>kMP>gr/c;9W `=[@"v]]t7"f7Vc ?!htcN9~bd]*%w/
 cc..@;vzH3:pR*+ /JvJKHP\W_k\3CM 4|9hd9@%%Xk<`(H 7W:g</<3K`7vd(< $h9<V^f"N)|XV}{
 ,p4%3x\'RcsX?JW xX\v*x7gz#Xj;zx "!jz?$vL7""RP7. #&ks-Jh4dx3jfXb "}f&f%-{Cg3RR)]
 ^Czg4[&)/{z>dMM .xj.p3RwpW;THkh */qHvxL'z3{r=P~ p]H4_!r`%c;m4d7 s]4?qCtV([}3"-L
 ^R@F/9pkh~"mz@q $xPX'J{9RcV4&h& #-H/~n#t%9xtj(q tk^[Fvmg(gW!Nx9 R3-^mVJr`h,-=~#
 ''`L`(%!~9-(9LT n{7;J\wxbrnXm}K ].FL'9"t!=r=g\* ^]<}4W-kW?L|[v+ Tp4~(RW[!4/c\RF
 ?K]7fVdW%W)%.&! nV`q%%=zvJ3tT%v Kd^fxk"7;K[\+|` @.\+Fr&)Rv}zn9~ hbwRsL{:]p'q:L9
 RRj"=h<T\_3)f-v >vk@Ht;4wTq4cRr ^@N*-3H%.XV~=n+ <`4`(kF]$bFXqtz 7vMN4`m,9=-|WW@
 X?gjL-,<$t9!(9[ P~dx{9hgf9"9!/F vK@7R4TbfjnrM:h `b-<zdXj3[&p=cv #){J!q$C4jsV`P@
 CXP.f)W|^=?(4j? 79J''Kt*`n]ws$H r@WLX??cRJ@^9cp FfRX>pJd@*Tzj4~ bNdrP7;x#k/Vs:p
 N9C*p}(|$}-,}wW t`$3#7MtFwHn_Fv MHKh/~n[4>)/$3n Kt[$R!}FWT9($(c Ncm4,q/39WjtM7F
 x%@4XT*?qn%)h_! c%X{4-7$T*mK73X Vc)F^b9zN:fhs.C `+7K')9p%#]4]v/ %3;4bX.n3'd$b{~
 }|fRgk#9md~F]N7 m;j[f-7HM.,N*T& ?n-H@=3M3-)P?:$ h;+{C+sw],34Mr[ Jhg[#7bmz7J_)@~
 Rj4<(f+z%W|s@~g qpnr7C\j?*9):hd kb"K-{9V'xqN4N: jCc&F%~C{dqHK7j ~`sf~P]~_s4+CnP
 ~H>3'>ts7#'W$k9 *3=~WHxpp{#49"* +7/L\RtH/*9P}!( Thm]KmR]9W^:rr@ 9~hKp{CT_3pw>#P
 gPq44H`<"*W@4t/ k!]rK^9'+WMRF|p (s\v-h/F4NFm%%s "rL9],}`"vP9|"~ n9|qHbf"g,pMsH,
 L*VNtF}}4Ht@,b{ >q{Kdp.[d"KF9N] vrfJ?R~s+rF7.Mr 7fLmkss3`MrHvtC 9{=pfs{c<dHNMRx
 ?&(P[4<{([npj&R JNq%`&@\HX&=94J qmc/~-wqq-Mxn)9 cdCr~4d&tm)z&F} +cPr(<txV4z"J{_
 gw$T)WCbfqt;;4m P,L{L.!$pt7.|q` JwT\>Pk^j+);9,n Npf'.wPJ~fz9Tt< 7T)z(.fR*X}'7dn

xkcdpass

sudo apt install xkcdpass
Lancer la commande : xkcdpass va générer 6 mots aléatoires en anglais : two-piece washbasin forelimb Roethke Ryazan Thackeray.
Les mots générés sont basés sur : http://wordlist.aspell.net/12dicts-readme/
xkcdpass utilise par défaut dict2 et dict6.

Diceware

sudo aptitude install diceware
diceware -v
Lancer la commande : diceware va générer des mots aléatoires en anglais mis bout à bout sans espace.
MalignPreyOiledPalmFireSome

Revelation

sudo apt install revelation
Lancer la commande : revelation va ouvrir une fenêtre pour générer les mots de passe.

En ligne de commande

# Générer un mot de passe complexe aléatoire de 20 caractères :
tr -cd [:alnum:][:punct:] < /dev/urandom | head -c 20 ; echo

Stocker les mots de passe

KeePass

KeePass 2 pour Linux

Le gestionnaire de mots de passe KeePass sert à stocker les mots de passe.
Il permet également de générer des mots de passe aléatoire.
Installer KeePass 2 depuis les dépôts
apt-get install keepass2
Si KeePass 2 n'est pas présent dans les dépôts
Installer KeePass 2 pour GNU/Linux à l'aide du dépôt par ppa.
$ sudo add-apt-repository ppa:eugenesan/ppa
$ sudo apt-get update
$ sudo apt-get install keepass2
Installer KeePass 2.43 depuis les dépôts
wget -c - O keepass2_2.45+dfsg-1_all.deb http://ftp.de.debian.org/debian/pool/main/k/keepass2/keepass2_2.45+dfsg-1_all.deb
wget -c - O keepassx_2.0.3+git20190121.1682ab9-2.1+b1_amd64.deb http://ftp.fr.debian.org/debian/pool/main/k/keepassx/keepassx_2.0.3+git20190121.1682ab9-2.1+b1_amd64.deb
sudo gdebi keepass2_2.45+dfsg-1_all.deb
sudo gdebi keepassx_2.0.3+git20190121.1682ab9-2.1+b1_amd64.deb
Plugins pour KeePass
Liste de plugins pour KeePass : https://keepass.info/plugins.html
Installer KeeAgent pour stocker les clés SSH
KeeAgent est un plugin pour KeePass pour stocker et charger les clés SSH.
Site officiel : https://lechnology.com/software/keeagent/
Source : https://github.com/dlech/KeeAgent

Supprimer KeePass 2

$ sudo apt-get remove keepass2

KeePass 2 pour Windows

Ok.png Installer Keepass2 sur Windows : https://sourceforge.net/projects/keepass/files/KeePass%202.x/

Les mots de passe à usage unique : One Time Password

Utilisation

# L'utilisateur utilise le programme opiepasswd avec WinKey.

Les failles des mots de passe à usage unique

# Les mots de passe à usage unique comportent des failles exploitables.

Social engineering

# L'utilisateur, l'éternelle faiblesse. Quelquefois, il est possible de récupérer le mot de passe de l'utilisateur en regardant sous le clavier, dans ses tiroirs, ou même en fouillant ses poubelles.
# Une fois que vous avez le mot de passe, vous pouvez répondre au challenge...

Certains programmes, comme WinKey, comportent un trou de sécurité

# Tant que le programme de calcul n'est pas fermé, celui-ci garde en mémoire le mot de passe, visible sous forme d'étoiles.
# Il existe des programmes dans l'environnement Win32 qui permettent de rendre clair le contenu des étoiles.

Attaque par cheval de Troie et keylogger

# Il suffit de mettre un cheval de Troie ou un keylogger sur le poste de l'utilisateur victime, pour essayer de récupérer le mot de passe de celui-ci.

Le fichier skeykeys

# Si le hacker a la main sur le serveur, il est possible qu'il exploite une faille : Si le fichier /etc/skeykeys est disponible en lecture pour le hacker, 

Attaque par sniffing

# L'OTP est envoyé vers le serveur en clair. Il est donc possible de récupérer la réponse du challenge et de faire une attaque par dictionnaire ou par force brute (voir ci-dessous).

Attaque par dictionnaire

# L'attaque par dictionnaire permet de calculer la réponse au challenge en fonction d'un nombre de mots préalablement stockés dans un gros fichier.
# Ces mots serons utilisés comme mot de passe de l'utilisateur.
# Si le résultat du calcul est identique à la réponse d'un challenge passé, alors c'est que le mot utilisé dans le dictionnaire est le mot de passe de l'utilisateur.

Attaque par force brute

# Exactement le même principe que pour l'attaque par dictionnaire. C'est plus long, mais cela reste toujours possible...

Attaque par le milieu

# Cette attaque consiste pour l'attaquant à avoir la main sur une machine qui transmet l'authentification de la session.
# C'est une machine intermédiaire. Dans ce cas, l'attaquant peut écouter les trames qui transitent et repérer le challenge et la réponse du challenge.
# Là aussi il devra utiliser le cracking par dictionnaire ou par brute force. Cette méthode revient à du sniffing.

Attaque par spoofing

# La technique du spoofing, dans ce cas, est de se faire passer pour le serveur.
# C'est une attaque par le milieu (voir ci-dessus), mais un peu plus évolué.
# En effet, il faut en plus simuler exactement le comportement du serveur.
# On récupère ainsi le compteur (numéro de séquence) et la réponse au challenge Il est alors possible d'exploiter cela par deux techniques différentes :
# Soit essayer de trouver le mot de passe utilisateur par dictionnaire et brute force
# Soit l'attaquant a utilisé sciemment un numéro de séquence inférieur à ce qu'attend vraiment le serveur. Dans ce cas, l'attaquant peut alors utilisé un nombre de connexion, au détriment de l'utilisateur, égal à la différence entre le vrai numéro de séquence serveur, et le faux numéro de séquence de l'attaquant.
# Cette attaque est facilement décelable pour l'utilisateur victime, car il se rend compte que le serveur ne fonctionne pas correctement.
# Par contre, pour l'attaquant, les données récupérées sont directement exploitables. Cette attaque est donc à prendre très au serieux, d'autant plus qu'elle n'est pas très difficile à réaliser.

Attaque par faille temps réel

# Il se peut qu'il y ait un problème dans l'implémentation d'un OTP.
# Il est possible que, lorsque deux ouverture de session arrivent en même temps sur le serveur, celui-ci ne sache pas comment les gérer.
# C'est un problème purement temps réel. Il y a alors trois cas de figures :
# Le serveur rejette les deux connexions. L'attaquant n'a aucune chance d'avoir accès. L'utilisateur non plus ! Ce cas est peu probable.
# Le serveur accepte une connexion (la première arrivée en général), et refuse la seconde. Dans ce cas, l'attaquant a 50% de chance de réussir. Ce cas est probable par l'utilisation d'une sémaphore.
# Le serveur accepte les deux connexions. L'attaquant a 100% de chance de réussir. Ce cas est peu probable.

Attaque par Hi-Jacking

# L'authentification se fait au moment de la connexion.
# Passé cette authentification, il n'y a plus d'autres moyens de vérifier si l'authentification est toujours correcte.
# Aussi, il est possible de détourner la communication TCP/IP.
# C'est une attaque de type Hi-jacking.
# Une fois le détournement effectué, le serveur dialogue avec l'attaquant,et l'attaquant utilise la session de la victime. 

Ressources complémentaires sur OTP

Ok.png Les mots de passe à usage unique : One Time Password : https://www.securiteinfo.com/cryptographie/otp.shtml
Ko.png Mot de passe à usage unique : https://fr.wikipedia.org/wiki/Mot_de_passe_%C3%A0_usage_unique
Ko.png L'authentification forte par SMS avec le One Time Password (OTP) : https://www.smsmode.com/authentification-forte-otp-sms/
Ko.png Définition et usage du One Time Password (OTP) : https://idento.fr/one-time-password-otp/
Ko.png OTP (One Time Password) : http://www.cardelya.fr/otp-one-time-password.php

Gestion des comptes utilisateurs

Gestion des comptes utilisateurs.

Prendre une photo avec la webcam en cas d'échec de connexion au système

# Prendre une photo avec la webcam quand il y a un échec de connexion, que ce soit sur la fenêtre de login ou depuis le terminal avec un sudo.
# Fonctionnel sous Linux Mint 19.2 Tina.
# Installer streamer :
sudo apt install streamer
# Créer un dossier .backup dans le répertoire utilisateur :
sudo mkdir /home/.backup
# Créer le fichier /usr/local/bin/grabcam
sudo touch /usr/local/bin/grabcam
# Ajouter le script dans le fichier :
sudo nano /usr/local/bin/grabcam
#!/bin/bash
# Ce script va capturer une image de la webcam qui sera stockée dans le répertoire /home/.backup au format jpeg :
streamer -s 1600x900 -o "/home/.backup/capture-`date --rfc-3339=seconds`.jpeg" 2>/dev/null
exit 0
# Rendre le script exécutable :
sudo chmod +x /usr/local/bin/grabcam
# Faire une copie de sauvegarde du fichier de config PAM :
sudo cp /etc/pam.d/common-auth /etc/pam.d/common-auth.old
# Modifier le fichier /etc/pam.d/common-auth
sudo nano /etc/pam.d/common-auth
# Repérer la ligne :
auth	[success=1 default=ignore]	pam_unix.so nullok_secure
# Remplacer par :
# Capture de la cam suite à une erreur de mot de passe à la connexion :
auth	[success=2 default=ignore]	pam_unix.so nullok_secure
auth	optional pam_exec.so	seteuid /usr/local/bin/grabcam
Le success=2 veut dire, en cas de réussite, "Aller à la seconde ligne en cas de succès" donc sans faire la capture.
En cas d'échec, la ligne suivante sera donc exécutée : pam_exec.so lancera donc votre script, faisant une capture d'écran.
Vous n'avez plus qu'a collecter les photos dans /home/.backup
Certaines webcam mettent quelques secondes pour obtenir une image correcte après s'être allumée.
Il faudra peut-être capturer plusieurs images. Exemple pour prendre 1 image par seconde pendant 4 secondes :
streamer -r 1 -t 4 -s 1600x900 -o "/home/.backup/capture-`date --rfc-3339=seconds`.jpeg" 2>/dev/null
Ok.png Source : https://sebsauvage.net/wiki/doku.php?id=mint_customization_17_3&redirect=1#notes_diverses
Pour améliorer ce système de surveillance, il faudrait pouvoir synchroniser immédiatement une copie des captures ayant été effectuées vers un cloud distant.
Vérifier également le contexte de mise à jour du fichier /etc/pam.d/common-auth pour qu'il ne soit pas écrasé lors d'une mise à jour.

Anonymat

Anonymat.

Nettoyer Debian

Nettoyer Debian.

Autodétruire ses données en cas de vol avec BusKill

BusKill : ce câble USB permet d'initier une procédure d'auto-destruction d'un laptop Linux s'il est volé en public.
https://securite.developpez.com/actu/289512/BusKill-ce-cable-USB-permet-d-initier-une-procedure-d-auto-destruction-d-un-laptop-Linux-s-il-est-vole-en-public-chacun-peut-le-mettre-au-point-pour-une-somme-allant-de-20-a-45/

Antivol pour localiser votre ordinateur

Pombo

Pombo fait un travail en tâche de fond qui envoie des informations de traçage à un serveur web.
Si votre ordinateur est perdu ou volé, il suffit de se connecter sur votre serveur web.
Récupérer le dernier fichier envoyé par Pombo, le décrypter et le fournir à la police.
Il faut pour cela qu'une connexion internet soit effectuée avec votre machine.
Installer Pompo : http://sebsauvage.net/pombo/index.fr.html

Preyproject

Un projet similaire mais payant, qui propose tout de même une offre gratuite.
Source : https://www.preyproject.com/download

Utiliser ses logiciels dans un bac à sable avec Firejail

Le programme firejail permet d'isoler les applications et restreindre ce à quoi elles ont accès (Système de fichier, réseau, API…).
# Installer Firejail :
sudo apt install firejail
# Lancer une application :
firejail firefox
# Si un profile existe pour cette application, le profile sera utilisé. Les profiles sont situés dans :
/etc/firejail
~/.config/firejail
# Lancer une application en lui donnant un répertoire /home vide fait que tout ce que l'application écrit sera détruit à la fin de l'exécution :
firejail --private firefox
# Lancer une application en lui donnant un répertoire /home précis fait que tout ce que l'application écrit sera conservé dans ce répertoire à la fin de l'exécution :
firejail --private=~/mon_repertoire gedit
# Afficher une notification au lancement du programme pour se souvenir qu'on le lance avec Firejail :
notify-send -i info -t 5000 "Firefox" "Lancement par Firejail !" ; firejail --private firefox
# Interdire l'accès réseau à un logiciel :
firejail --net=none vlc
# Voir quels programmes lancés sont actuellement pris en main par Firejail :
firejail --list
# Consulter le manuel :
man firejail
# Notes pour les fichiers de profile :
# Interdire l'accès à vos documents :
blacklist ${HOME}/Documents
# Autoriser un sous-dossier spécifique:
noblacklist ${HOME}/Documents/Screenshots
Source complémentaire : https://forums.linuxmint.com/viewtopic.php?t=202735
Source : Utiliser ses logiciels dans un bac à sable avec Firejail : https://ownyourbits.com/2017/10/29/sandbox-your-applications-with-firejail/

Configurer et utiliser SSH

Configurer et utiliser SSH.

Configurer le fichier /etc/hosts

Introduction au fichier hosts

Le fichier hosts est l'ancêtre des DNS, utilisé dans ARPANET, servant à adresser les adresses des réseaux.

Emplacement du fichier hosts sur différents systèmes d'exploitation

Système d'exploitation Chemin du fichier hosts
Windows 3.1 C:\windows\hosts
Windows 95 C:\Windows\hosts
Windows 98 C:\Windows\hosts
Windows ME C:\Windows\hosts
Windows NT C:\WinNT\hosts
Windows 2000 C:\WinNT\system32\drivers\etc\hosts
Windows XP Home C:\Windows\System32\drivers\etc\hosts
Windows XP Pro C:\Windows\System32\drivers\etc\hosts
Windows 2003 C:\Windows\System32\drivers\etc\hosts
Windows Vista C:\Windows\System32\drivers\etc\hosts
Windows Seven C:\Windows\System32\drivers\etc\hosts
Windows 8 C:\Windows\System32\drivers\etc\hosts
Windows 10 C:\Windows\System32\drivers\etc\hosts
FreeBSD /etc/hosts
Linux /etc/hosts
Unix et dérivés /etc/hosts
Mac OS X /etc/hosts

Le fichier /etc/hosts sur Linux Debian

# La modification du fichier /etc/hosts est instantanément prise en compte par le système.
# Avant de modifier le fichier /etc/hosts, faire une copie du fichier hosts existant :
cp /etc/hosts /etc/hosts.backup
# Le fichier hosts par défaut :
# <localhost>
127.0.0.1 localhost localhost.localdomain
127.0.0.1 le-nom-de-machine le-nom-de-machine.localdomain

255.255.255.255 broadcasthost
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
# </localhost>
# Cette section ne fait pas partie de la section par défaut et est propre à l'écran de veille Sonar :
# <sonar>
# 139.99.173.195 visionduweb.fr
# 91.216.107.158 visionduweb.eu
# 139.99.173.195 green-adn.com
# 213.186.33.5 tiger-green.fr
# </sonar>
# Ajouter un enregistrement DNS dans le fichier /etc/hosts pour mettre en place un domaine virtuel vers son serveur local.
# Le nom de domaine ne répondra plus vers le site en ligne mais vers le site local !
# 127.0.0.1 visionduweb.eu www.visionduweb.eu

Mettre à jour le fichier /etc/hosts automatiquement sur Linux Debian

Différents sites pour obtenir un fichier hosts complet

Ok.png Version légère de moins de 370 ko pour le fichier hosts : http://winhelp2002.mvps.org/hosts.txt
Ok.png Version moyenne de 450 ko Source IPv4 : http://someonewhocares.org/hosts/
Ok.png Version moyenne de 450 ko Source IPv6 : http://someonewhocares.org/hosts/ipv6/
Ok.png Ultimate Hosts Blacklist, la liste noire pour votre fichier hosts ou hosts.deny : https://www.securiteinfo.com/administration-systeme-et-reseau/outils/ultimate-hosts-blacklist.shtml
Ok.png Version complète de plus de 15 Mo pour le fichier hosts : https://hosts.ubuntu101.co.za/hosts
# Note sur le fichier hosts et hosts.deny pouvant être chargé. Le domaine ssl0.ovh.net est présent dans la liste noire ce qui empêche de relever les mails en local depuis OVH.
# Il faudra supprimer cette ligne du fichier hosts.

Mettre à jour le fichier /etc/hosts automatiquement tous les mois

# Créer le script de mise à jour mensuel :
sudo touch /etc/cron.monthly/hosts
sudo nano /etc/cron.monthly/hosts
#!/bin/bash
# Faire une copie du fichier /etc/hosts initial :
cp /etc/hosts /etc/host.backup

# Vider le fichier /etc/hosts si des données existent !
echo "# Production" > /etc/hosts
echo "" >> /etc/hosts
echo "##############################################################################################################################" >> /etc/hosts

# IPv4 :
echo "" >> /etc/hosts
echo "# Le fichier /etc/hosts par défaut :" >> /etc/hosts
echo "# <localhost>" >> /etc/hosts
echo "127.0.0.1 localhost.localdomain localhost" >> /etc/hosts
echo "127.0.0.1 le-nom-de-machine le-nom-de-machine.localdomain" >> /etc/hosts
echo "255.255.255.255 broadcasthost" >> /etc/hosts

# IPv6 :
echo "" >> /etc/hosts
echo "::1 localhost.localdomain localhost ip6-localhost ip6-loopback" >> /etc/hosts
echo "fe80::1%lo0 localhost" >> /etc/hosts
echo "fe00::0 ip6-localnet" >> /etc/hosts
echo "ff00::0 ip6-mcastprefix" >> /etc/hosts
echo "ff02::1 ip6-allnodes" >> /etc/hosts
echo "ff02::2 ip6-alllrouters" >> /etc/hosts
echo "# </localhost>" >> /etc/hosts
echo "# Fin du fichier /etc/hosts par défaut" >> /etc/hosts
echo "0.0.0.0 0.0.0.0" >> /etc/hosts
echo "" >> /etc/hosts
echo "##############################################################################################################################" >> /etc/hosts

# Écran de veille Sonar :
echo "" >> /etc/hosts
echo "# Écran de veille Sonar :" >> /etc/hosts
echo "<sonar>" >> /etc/hosts
echo "139.99.173.195 visionduweb.fr" >> /etc/hosts
echo "91.216.107.158 visionduweb.eu" >> /etc/hosts
echo "139.99.173.195 green-adn.com" >> /etc/hosts
echo "213.186.33.5 tiger-green.fr" >> /etc/hosts
echo "</sonar>" >> /etc/hosts
echo "# Fin de la configuration de l'écran de veille sonar" >> /etc/hosts
echo "" >> /etc/hosts
echo "##############################################################################################################################" >> /etc/hosts

# Télécharger le fichier /etc/hosts complet de plus de 15Mo :
wget --directory-prefix=/tmp https://hosts.ubuntu101.co.za/hosts ||exit
# Ajouter le fichier téléchargé à la suite de la configuration par défaut :
echo "" >> /etc/hosts
cat /tmp/hosts >> /etc/hosts
# Supprimer la copie temporaire du fichier téléchargé :
rm /tmp/hosts

# Certaines informations dans le fichier /etc/hosts initial sont en double du fait de notre configuration personnalisée :
# Suppression de l'intervalle compris entre les lignes 58 et 92 :
sed -i '58,92d' /etc/hosts
# Enregistrer et fermer l'éditeur de texte.
# Rendre le script exécutable :
sudo chmod +x /etc/cron.monthly/hosts
# Ce script peut être exécuter n'importe quand avec la commande :
sudo /etc/cron.monthly/hosts
# La mise à jour est maintenant effectuée automatiquement tous les mois.
# Ce script ne modifie rien si il n'arrive pas à télécharger le fichier.
# Ce script ajoute les lignes par défaut en fonction de notre configuration.
# Ce script est exécuté automatiquement tout les mois sans intervention de l'utilisateur.
# Tester différents navigateurs avec des adresses interdites provenant du fichier hosts.
# Si tout est correctement paramétré, les domaines dans le fichier hosts sont maintenant censurés.
# Dans mon cas, cela n'a pas fonctionné avec Firefox car une fonctionnalité anti censure en utilisant les DNS de Cloudflare est paramétrée.
# Concernant la réécriture du fichier /etc/hosts, j'ai supprimé des lignes en double entre ma configuration et la configuration téléchargée, avec sed qui supprime une plage de numéros de ligne.
# Il serait préférable d'identifier un modèle qui supprimera la zone de texte que je veux supprimer, plutôt que de supprimer une plage de numéros de ligne.
# Si la configuration de mon hôte change, les lignes à supprimer ne seront plus au même endroit.

Héberger simultanément un site local et une page spéciale de blocage

# Un site est hébergé en local sur votre ordinateur sera accessible à l'adresse 127.0.0.1 ou localhost.
# On ne souhaite pas forcément que ce soit ce site qui s'affiche en cas de consultation d'une url bloquée par le fichier /etc/hosts.
# La première chose à faire est une page en php qui va analyser l'adresse et rediriger vers votre site si l'adresse appartient à une liste définie, localhost, votre adresse IP locale, le nom de la machine...
# Toutes les autres adresses, soit celles contenues dans le fichier host, seront redirigées vers une page spéciale pour informer du blocage.
Ok-ko.png Source : https://doc.ubuntu-fr.org/hosts#heberger_simultanement_un_site_local_et_une_page_speciale_de_blocage

Ressources complémentaires sur le fichier /etc/hosts

Ok-ko.png Source : https://doc.ubuntu-fr.org/hosts
Ko.png Autre lien pour script automatique : http://fl4t.blogspot.com/2009/05/script-pour-linuxien-adzhosts.html
Ko.png Le fil de discussion http://forum.ubuntu-fr.org/viewtopic.php?pid=2575813#p2575813
Ko.png Introduction et personnalisation de l’hosts http://kerio.probb.fr/securiser-un-peu-plus-son-ordinateur-f9/le-fichier-hosts-securiser-et-ameliorer-t473.htm
Ko.png Comment en finir avec l’édition du fichier hosts : https://chstudio.fr/2016/02/comment-en-finir-avec-ledition-du-fichier-hosts/

Protéger son serveur avec DenyHosts

Introduction à DenyHosts

# DenyHosts établit des règles pour les tentatives de connexions sur le serveur distant.
# Denyhosts est un daemon qui analyse en permanence le fichier de log /var/log/auth.log.
# Au bout de plusieurs tentatives de connexion infructueuses l'adresse IP est blacklistée dans le fichier /etc/hosts.deny.
# Avec un fichier hosts.deny trop lourd, Denyhosts devient un gros consommateur de CPU car il va lire et relire le fichier hosts.deny pour chaque adresse IP affichée dans le journal.
# DenyHosts peut utiliser des wrappers TCP et utilise maintenant Iptables par défaut. DenyHosts met également à jour le fichier /etc/hosts.deny quand une adresse IP est à bannir.
# Rien n'est mis en cache mémoire ce qui n'est pas optimisé.
# Fail2ban est plus adapté que DenyHosts mais pour une protection facile et rapide à mettre en oeuvre, rien ne vaut DenyHosts.
# La différence notable est que Fail2ban utilise iptables et gère la mise en ban sur une certaine durée uniquement.
# Fail2Ban utilise environ 10 Mo de mémoire de plus que DenyHosts, donc, pour un petit VPS, privilégier DenyHosts.
# DenyHosts agit en amont de Fail2ban. ( A confirmer. ) 
# DenyHosts permet une synchronisation de la liste de ban avec d'autres services.
# Une liste de blocage peut facilement être importée ou exportée.
Le Github officiel de DenyHosts : https://github.com/denyhosts/denyhosts
Le wiki officiel de DenyHosts : https://github.com/denyhosts/denyhosts/wiki

Installer le paquet DenyHosts

Installer DenyHosts sur Debian Buster

# Pré-requis :
# Avoir installé le paquet openssh-server.
# Installer DenyHosts sur Debian Buster :
sudo apt install denyhosts
# E: Impossible de trouver le paquet denyhosts

Installer DenyHosts depuis le paquet .deb de la version SID de Debian

# Denyhosts a été retirée du projet Debian car la version qui était dans le dépôt SID utilisait encore Python2.
Différentes informations concernant DenyHosts, mais, rien sur son retrait : https://search.debian.org/cgi-bin/omega?DB=fr&P=denyhosts
Consulter les archives des paquets DenyHosts pour Debian : http://snapshot.debian.org/package/denyhosts/
# Si le paquet n'est pas présent dans la distribution stable de Debian 10 Buster, installer DenyHosts 2.10.2 depuis le paquet .deb provenant de la version SID de Debian :
cd ~/
# Télécharger DenyHosts 2.10.2 depuis le dépôt de Debian SID :
wget http://snapshot.debian.org/archive/debian/20151021T213439Z/pool/main/d/denyhosts/denyhosts_2.10-2_all.deb
# Équivalent avec les options de wget : -c permet de reprendre le chargement en cas d'arrêt et -O permet de définir la destination.
wget -c -O denyhosts_2.10-2_all.deb http://snapshot.debian.org/archive/debian/20151021T213439Z/pool/main/d/denyhosts/denyhosts_2.10-2_all.deb
# Les paquets supplémentaires suivants peuvent être installés : 
sudo apt install bzip2 file libmagic-mgc libmagic1 libpython-stdlib libpython2-stdlib libpython2.7-minimal
sudo apt install libpython2.7-stdlib libreadline7 libsqlite3-0 mime-support python python-minimal python2
sudo apt install python2-minimal python2.7 python2.7-minimal readline-common xz-utils
# Ajouter son adresse IP dans la liste blanche avant d'installer DenyHosts !
sudo nano /etc/hosts.allow
sshd: xx.xx.xx.xx
# Installer le paquet .deb :
sudo dpkg -i denyhosts_2.10-2_all.deb

Sélection du paquet denyhosts précédemment désélectionné.
(Lecture de la base de données... 28060 fichiers et répertoires déjà installés.)
Préparation du dépaquetage de denyhosts_2.10-2_all.deb ...
Dépaquetage de denyhosts (2.10-2) ...
Paramétrage de denyhosts (2.10-2) ...
Created symlink /etc/systemd/system/multi-user.target.wants/denyhosts.service → /lib/systemd/system/denyhosts.service.
Traitement des actions différées (« triggers ») pour systemd (241-7~deb10u3) ...
# LA CONNEXION AU SERVEUR EST COUPÉE !
# En cas de blocage, utiliser VPNGate pour pouvoir se reconnecter au serveur.
# Il faut ajouter son adresse IP publique dans la liste blanche des utilisateurs autorisés /etc/hosts.allow avant d'installer DenyHosts !
# Ce n'est pas normal que l'administrateur se fasse blacklister lors de l'installation. J'ouvre une issue dans ce sens : https://github.com/denyhosts/denyhosts/issues/128
# Il faudrait tester la branche suivante du projet, pour voir si l'adresse IP publique est correctement ajoutée dans le fichier hosts.allow : https://github.com/denyhosts/denyhosts/tree/bug_128

# Ajouter son adresse IP dans la liste blanche :
sudo nano /etc/hosts.allow
sshd: xx.xx.xx.xx

# Retirer son adresse IP de la liste noire :
sudo nano /etc/hosts.deny

# Retirer son adresse IP bloquée de Iptables :
sudo iptables -S
sudo iptables -D INPUT -s xx.xx.xx.xx/32 -j DROP
# Redémarrer DenyHosts :
sudo service denyhosts restart
# Supprimer le ficher .deb :
cd ~/
sudo rm denyhosts_2.10-2_all.deb

Installer DenyHosts depuis le .deb 3.1.2-2 proposé depuis le dépôt officiel sur Github

# Une version .deb est disponible : https://github.com/denyhosts/denyhosts/releases/tag/v3.1
# Téléchargement direct du .deb de DenyHosts 3.1.2-2 : https://github.com/denyhosts/denyhosts/releases/download/v3.1/denyhosts_3.1.2-2_all.deb
sudo wget -c -O denyhosts_3.1.2-2_all.deb https://github.com/denyhosts/denyhosts/releases/download/v3.1/denyhosts_3.1.2-2_all.deb
sudo dpkg -i denyhosts_3.1.2-2_all.deb
# Le service ne démarre pas !

Installer DenyHosts depuis le dépôt officiel sur Github

# La documentation officielle pour installer DenyHosts sur Debian Buster Stable est la synthèse du travail de recherche réalisé à partir du wiki de visionduweb :
# Consulter la documentation officielle en anglais : https://github.com/ZerooCool/denyhosts/blob/master/documentation/README-Installation-Debian-Buster.txt
# Cette installation est effectuée depuis l'utilisateur root, mais, il est préférable d'utiliser un utilisateur sudoers.
# Prérequis !
# Installer les paquets suivants :
apt-get install git
# Le fichier auth.log n'est pas toujours renseigné suite à une tentative d'identification par SSH, hors, Denyhosts se base sur ce fichier !
# Consulter cette page pour en savoir plus : https://wiki.visionduweb.fr/index.php?title=Gestion_des_logs#auth.log
# Rsyslog n'est pas toujours installé par défaut. Installer ce paquet pour renseigner le fichier de log auth.log !
apt install rsyslog

# Le fichier /var/log/auth.log n'existe pas par défaut sur un VPS LWS, ce qui empêche DenyHosts de redémarrer.
# Vérifier si le fichier existe :
cd /var/log
ls
# Si /var/log/auth.log n'existe pas, le créer :
touch /var/log/auth.log
# Installer les paquets et modules python suivants :
apt-get install python
apt-get install python-pip
# Les 4 modules suivants peuvent être installés en une seule ligne de commande, tout en respectant les spécificités des versions.
# pip install ipaddr
# pip install mock
# pip install requests
# pip install configparser
# Utiliser la commande suivante, le fichier de prérequis est présent à la racine du dépôt Github de DenyHosts :
pip install requirements.txt
# Ordre dans lequel j'ai installé les packages.
# J'ai installé python3 en dernier, mais je suppose qu'il peut être installé en même temps que python.
apt-get install python3
# DenyHosts fonctionne avec Iptables.
# Iptables est activé par défaut, mais je ne dirais pas que c'est une condition préalable. Il peut être désactivé en commentant iptables dans le fichier de configuration, il doit donc être considéré comme facultatif. Cela fait simplement partie du processus d'installation que quelqu'un devrait faire lors de la configuration initiale de denyhosts.
# apt-get install iptables
# DenyHosts fonctionne avec EXIM.
# Vérifier si EXIM est réellement un prérequis indispensable ! ( #155 ) ?
# Un nouveau système d'envoi de mail a été intégré ( #100 )
# apt-get install exim4-base exim4-config exim4-daemon-light
# Installer Denyhosts depuis la branche master de Github :
git clone https://github.com/denyhosts/denyhosts.git

# Basculer sur la branche bug_128 de Denyhosts pour tester les correctifs proposés :
# git checkout bug_128

cd denyhosts
# -->
# Nouvelle syntaxe avec le -r à tester !
pip install -r requirements.txt
### Could not install packages due to an EnvironmentError: 404 Client Error: Not Found for url: https://pypi.org/simple/requirements-txt/
<-- #
python setup.py install
cp denyhosts.conf /etc
cp daemon-control-dist daemon-control

# Choix 1 :
# Attention aux  guillemets quand on copie les 3 lignes de configuration depuis un tutoriel mal formé " et  ce n'est pas la même chose !
nano daemon-control

# Commenter et remplacer les 3 lignes suivants :
###############################################
#### Edit these to suit your configuration ####
###############################################
#DENYHOSTS_BIN = "/usr/sbin/denyhosts.py"
#DENYHOSTS_LOCK = "/run/denyhosts.pid"
#DENYHOSTS_CFG = "/etc/denyhosts.conf"

# Conserver le sbin au lieu du bin proposé dans un ancien tutoriel m'a permis de refaire fonctionner la synchronisation :
DENYHOSTS_BIN = "/usr/sbin/denyhosts.py"
DENYHOSTS_LOCK = "/var/lock/subsys/denyhosts"
DENYHOSTS_CFG = "/etc/denyhosts.conf"
# Le daemon est ajouté dans le dossier /etc/init.d
cd /etc/init.d
ln -s /usr/share/denyhosts/daemon-control denyhosts
cd ~
mv denyhosts /usr/share/
cd /usr/share/denyhosts/
cp denyhosts.py /usr/sbin/
# Dans le tutoriel utilisé initialement, denyhosts.py était copié dans le répertoire /usr/bin, mais, la synchronisation semble fonctionner uniquement si je le met dans /usr/sbin/.
# Recharger les daemon pour utiliser des valeurs à jour en cas de changement dans la configuration : systemctl daemon-reload
# Choix 2 :
# Il serait plus cohérent d'ajouter le service denyhosts.service dans /etc/systemd/system/denyhosts.service depuis /usr/share/denyhosts/. (#156)
# Le fichier de service est créé au format que SystemD peut utiliser.
# Dans les deux cas, l'exécution de denyhosts fonctionne correctement.
# La simple utilisation de la méthode de service empêchera les erreurs de se produire en disant qu'il n'y a pas de niveaux d'exécution ou de problèmes lsb.
# Le fichier de service doit être ajouté à /etc/systemd/system/denyhosts.service plutôt que de l'ajouter à /etc/init.d.
# L'ajout à /etc/systemd/system permettra aux services denyhosts de commencer à fonctionner avec la commande systemctl start denyhosts.

# Déjà fait à l'étape 1 :
# cd ~
# mv denyhosts /usr/share/
# cd /usr/share/denyhosts/
# cp denyhosts.py /usr/sbin/
# Dans le tutoriel utilisé initialement, denyhosts.py était copié dans le répertoire /usr/bin, mais, la synchronisation semble fonctionner uniquement si je le met dans /usr/sbin/.
# Recharger les daemon pour utiliser des valeurs à jour en cas de changement dans la configuration : systemctl daemon-reload
cp /usr/share/denyhosts/denyhosts.service /etc/systemd/system/
# Recharger le service :
systemctl restart denyhosts
# Cette commande pourrait être inutile, a vérifier !
systemctl enable denyhosts
denyhosts.service is not a native service, redirecting to systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable denyhosts
update-rc.d: error: denyhosts Default-Start contains no runlevels, aborting.
systemctl status denyhosts
systemctl restart denyhosts
systemctl status denyhosts
htop
# Copier la configuration proposée par après, pour renforcer les règles de Denyhosts.
# Redémarrer Denyhosts pour prendre en compte les changements.
# Si je htop puis kill le pid du daemon de denyhosts, alors, le status est en exit et Denyhosts ne fonctionne plus.
service denyhosts status
# Par contre, la commande start ne semble alors pas démarrer Denyhosts !
service denyhosts start
# Denyhosts va bien redémarrer avec restart :
service denyhosts restart
# Maintenant, les adresses IP qui tentent de se connecter en SSH sur le serveur seront bloquées !
# La synchronisation avec le serveur officiel de DenyHosts fonctionne !
Deux point restent à vérifier
# 1 :
# Sur mon serveur de production avec la version de DenyHosts 2.10-2 :
starting DenyHosts:  /usr/bin/env python /usr/sbin/denyhosts.py --daemon --purge --config=/etc/denyhosts.conf
# Sur mon serveur de test LWS avec la version de DenyHosts 3.2.2-2 de la branche master de Github, je n'ai pas la commande --purge :
starting DenyHosts:  /usr/bin/env python /usr/sbin/denyhosts.py --daemon --config=/etc/denyhosts.conf
# Je lis que --purge ne fonctionne pas en mode deamon :
# When run in --daemon mode the following flags are ignored:
# --file, --purge, --migrate, --sync, --verbose
# Comment faire alors pour prendre en compte la configuration qui permet de purger, fonctionne t'elle malgré tout ?
# D'après le manpage, l'option --sync ne peut pas être passée également, pourtant, le serveur synchronise correctement.
# Je ne comprend pas le fonctionnement actuel qui permet la synchronisation sans voir apparaître l'option.
# Est ce que la purge sera quand même effectuée ?
#
# Faudrait t'il lancer DenyHosts autrement ?
# Usage: /usr/sbin/denyhosts [-f logfile | --file=logfile] [ -c configfile | --config=configfile] [-i | --ignore] [-n | --noemail] [--purge] [--migrate] [--daemon] [--sync] [--version]

# 2 :
# Sur le site en ligne qui affiche les adresses bloquées, je ne retrouve pas toutes ses adresses IP dans mon hosts.deny, suite à une synchronisation.
# Si je demande de rafraichir la liste toutes les 5m pour prendre en compte les adresses IP dès qu'il y a eu 1 blocage, sur une plage de 1h, je suppose que toutes les adresses devraient être écrites.
# Ça ne semble pas être le cas.

Configurer DenyHosts

# Éditer le fichier de configuration de DenyHosts :
sudo nano /etc/denyhosts.conf
# Le fichier journal qui contient les informations de journalisation du serveur SSH.
# Identifier le fichier avec la commande : grep "sshd:" /var/log/*
SECURE_LOG = /var/log/auth.log
# Le fichier qui contient des informations d'accès restreint à l'hôte.
HOSTS_DENY = /etc/hosts.deny
# Ne jamais purger le fichier :
# PURGE_DENY =
# 'y' = years 'w' = weeks 'd' = days 'h' = hours 'm' = minutes
# Purger le fichier /etc/hosts.deny toutes les 4 semaines :
PURGE_DENY = 4w
# Si la valeur est définie un hôte bloqué sera purgé au moins autant de fois.
# Si cette valeur est définie sur 3, DenyHosts purgera un hôte au maximum 4 fois.
# Après que l'hôte ait été purgé 3 fois, l'hôte restera bloqué dans le HOSTS_DENY pour toujours.
# Si la valeur est définie sur 0, DenyHosts purgera chaque hôte indéfiniment sans le bloquer de façon permanente.
PURGE_THRESHOLD = 3
# Bloquer les tentatives d'intrusion avec l'option ALL empêchera le serveur ne répondre aux adresses IP attaquantes.
# Bloquer uniquement les attaques sur le serveur SSH avec la commande : BLOCK_SERVICE  = sshd
BLOCK_SERVICE = ALL
# Bloquer un hôte qui tente de se connecter avec un compte d'utilisateur inexistant après 2 tentatives.
DENY_THRESHOLD_INVALID = 2
# Bloquer un hôte qui tente de se connecter avec un compte d'utilisateur valide après 3 tentatives.
# L'utilisateur root n'est pas concerné.
DENY_THRESHOLD_VALID = 3
# Bloquer un hôte qui tente de se connecter avec le compte root après 1 tentative.
DENY_THRESHOLD_ROOT = 1
# Les utilisateurs dans le fichier d'utilisateurs restreints sont limités par DENY_THRESHOLD_RESTRICTED.
# Il est défini sur DENY_THRESHOLD_ROOT par défaut.
DENY_THRESHOLD_RESTRICTED = 1
# Le chemin absolu utilisé par DenyHosts pour écrire les données.
WORK_DIR = /var/lib/denyhosts
# Le chemin pour lire une configuration.
ETC_DIR = /etc
# Si une tentative de connexion suspecte résulte d'un hôte autorisé alors il est considéré comme suspect.
SUSPICIOUS_LOGIN_REPORT_ALLOWED_HOSTS=YES
# Bloquer le nom de l'hôte lorsque qu'il est possible de le récupérer.
HOSTNAME_LOOKUP=YES
# Verrouiller le fichier PID de DenyHosts pour qu'il y ait que une seule instance en fonctionnement.
LOCK_FILE = /run/denyhosts.pid
# Bloquer les connexions entrantes en utilisant le pare-feu Linux IPTABLES.
# Définir la variable vers le chemin de l'exécutable iptables "/sbin/iptables".
# Si cette option n'est pas définie ou commentée, le pare-feu n'est pas utilisé.
IPTABLES = /sbin/iptables
# Ne pas bloquer tous les ports avec ALL mais uniquement les ports indiqués.
# BLOCKPORT = 22
# Si iptables est renseigné et activé, désactiver les deux options suivantes.
# PFCTL_PATH = /sbin/pfctl
# PF_TABLE = blacklist
# Mail de l'administrateur à prévenir lors d'un nouveau blocage.
# Les mails de root peuvent être redirigés par le système.
ADMIN_EMAIL = root@localhost
# Hôte SMTP. Par défaut :
# SMTP_HOST = localhost
# Port SMTP. Par défaut :
# SMTP_PORT = 25
# Renseigner les paramètres suivants si le serveur SMTP nécessiste une authentification.
# SMTP_USERNAME=Username
# SMTP_PASSWORD=Password
# Si le mail émetteur par défaut du message n'est pas spécifié, le mail utilisé sera "nobody@localhost".
# Je tente de définir le mail, sinon, le message va finir dans les mails rejetés : need fully-qualified address
# J'utilise le mail de l'administrateur du serveur pour envoyer le mail, et, root@localhost recevra ce mail.
# En fait, admin envoi depuis le serveur, et, admin réceptionne depuis son client de messagerie.
# SMTP_FROM = DenyHosts <nobody@localhost>
SMTP_FROM = DenyHosts Alerte <administrateur@domaine.ext>
# Sujet du message.
SMTP_SUBJECT = DenyHosts Report
# Date du message.
SMTP_DATE_FORMAT = %a, %d %b %Y %H:%M:%S %z
# Activer la journalisation dans le fichier syslog.
SYSLOG_REPORT=YES
# Si la configuration du serveur SSH et tcp_wrappers enregistrent des noms d'hôtes plutôt que des adresses IP,
# DenyHosts peut résoudre chaque adresse IP du fichier hosts.allow pour déterminer le nom d'hôte correspondant.
# Tout hôte correspondant à cette adresse IP résolue ou au nom d'hôte ne sera pas bloqué.
# Si les noms d'hôtes n'apparaissent jamais dans le SECURE_LOG, définir ce paramètre sur NO.
ALLOWED_HOSTS_HOSTNAME_LOOKUP=NO
# Période pour la remise à zéro du compteur de tentative de connexion invalide, sauf pour l'utilisateur root.
AGE_RESET_VALID=4h
# Période pour la remise à zéro du compteur de tentative de connexion invalide pour l'utilisateur root.
AGE_RESET_ROOT=4w
# Période pour la remise à zéro du compteur de tentative de connexion invalide pour les utilisateurs dans le
# fichier "WORK_DIR/restricted-usernames".
AGE_RESET_RESTRICTED=4w
# Période pour la remise à zéro du compteur de tentative de connexion invalide pour les utilisateurs invalides.
# Ceux qui n'apparaissent pas dans "/etc/passwd".
AGE_RESET_INVALID=4w
# Le nombre d'échecs pour une adresse IP sera réinitialisé à 0 suite à une connexion réussie.
RESET_ON_SUCCESS = yes
# Si elle est définie, cette valeur doit pointer vers un programme exécutable qui sera invoqué lorsqu'un hôte sera
# ajouté au fichier HOSTS_DENY.
#PLUGIN_DENY=/usr/bin/true
# Si elle est définie, cette valeur doit pointer vers un programme exécutable qui sera invoqué lorsqu'un hôte sera
# supprimé au fichier HOSTS_DENY. 
#PLUGIN_PURGE=/usr/bin/true
# Si définie, cette valeur doit contenir une expression régulière qui peut être utilisée pour identifier des pirates
# pour votre configuration ssh particulière. Cette fonctionnalité étend les expressions régulières intégrées 
# utilisées par DenyHosts. Ce paramètre peut être spécifié plusieurs fois.
#USERDEF_FAILED_ENTRY_REGEX=
# Fichier journal utilise pour signaler l'état de DenyHosts en mode démon (--daemon).
# Laisser vide pour désactiver la journalisation.
DAEMON_LOG = /var/log/denyhosts
# Format de la date dans les logs.
DAEMON_LOG_TIME_FORMAT = %b %d %H:%M:%S
# Spécifie le format de message de chaque entrée de journal en mode démon (--daemon).
# Par défaut, le format suivant est utilisé :
#DAEMON_LOG_MESSAGE_FORMAT = %(asctime)s - %(name)-12s: %(levelname)-8s %(message)s
# Durée pendant laquelle DenyHosts dormira entre les interrogations en mode démon (--daemon).
# Valeur par défaut de 30s que je ralonge un peu pour économiser les ressources du système.
DAEMON_SLEEP = 1m
# Fréquence de purge en mode démon (--daemon).
DAEMON_PURGE = 1h

# Synchronisation entre plusieurs DenyHosts.
# Dès qu'un de vos serveurs subis une attaque, tous vos serveurs blacklistent cette adresse IP.
# Le serveur central qui communique avec le démon DenyHost.
# Pour activer la synchronisation, décommenter la ligne suivante :
SYNC_SERVER = http://sync.denyhosts.org:9911
# Activer un proxy HTTP.
# SYNC_PROXY_SERVER = http://mon.serveur.proxy:3128
# Intervale de temps entre chaque synchronisation.
SYNC_INTERVAL = 1h
# Autoriser le démon DenyHosts à transmettre des hôtes qui ont été refusé.
# Cette option ne s'applique que si SYNC_SERVER n'a pas été commenté.
SYNC_UPLOAD = yes
# Autoriser le démon DenyHosts à recevoir des hôtes qui ont été refusés par d'autres.
# Cette option ne s'applique que si SYNC_SERVER n'a pas été commenté.
SYNC_DOWNLOAD = yes
# Définir un filtre pour des adresses bloquées reçues par d'autres serveurs.
# Le chiffre indique le nombre de fois que l'adresse IP aura été bloquée au minimum.
SYNC_DOWNLOAD_THRESHOLD = 4
# Durée minimum de la période d'attaque observée sur d'autres serveurs.
SYNC_DOWNLOAD_RESILIENCY = 8h
# Les serveur de synchronisation :
# http://sync.denyhosts.org:9911
# http://deny.resonatingmedia.com:9911
# Ancienne configuration :
# http://xmlrpc.denyhosts.net:9911
# La version 3.1.x intègre au minimum une nouvelle option de configuration :
# SMTP_SSL = yes
# SMTP_SSL = no

Redémarrer DenyHosts

# Redémarrer DenyHosts :
sudo /etc/init.d/denyhosts restart
sudo service denyhosts restart
# Préférer cette commande pour redémarrer DenyHosts :
sudo systemctl restart denyhosts

Notes post installation de DenyHosts

En cas d'erreurs, consulter les issues du Github officiel

https://github.com/denyhosts/denyhosts/issues

Erreur fichier inexistant

# Cette erreur est rencontrée avec la version de DenyHosts 2.10-2.
# Le fichier de log de DenyHosts affiche le message d'erreur suivant :
sudo nano /var/log/denyhosts
AllowedHosts: WARNING  Couldn't load warned hosts from /var/lib/denyhosts/allowed-warned-hosts
# Je ne sais pas pourquoi ce fichier est demandé par DenyHosts.
# Je crée ce fichier qui n'existe pas pour éviter d'avoir le message d'erreur :
sudo touch /var/lib/denyhosts/allowed-warned-hosts

Erreur après le redémarrage

# Cette erreur est rencontrée avec la version de DenyHosts 2.10-2.
sudo service denyhosts restart
sudo service denyhosts status
# L'erreur suivante est affichée : denyhosts.service: Can't open PID file /run/denyhosts.pid (yet?) after start: No such file or directory
# L'erreur n'est pas affichée si j'arrête DenyHosts et le démarre :
sudo service denyhosts stop
sudo service denyhosts start
sudo service denyhosts status
# Le message d'erreur est également affiché dans /var/log/daemon.log :
sudo tail -150f /var/log/daemon.log
# Redémarrer rsyslog règle le problème :
sudo systemctl restart rsyslog
sudo service denyhosts restart
sudo service denyhosts status
Source : https://bugs.mageia.org/show_bug.cgi?id=23551

Les mails ne sont pas envoyés

Tester si des mails sont envoyés
To get DenyHosts to send you a test email.
Login to your Linux system containing the sshd server and switch to root user.
Append the following line to the file /etc/hosts.deny - sshd: 127.0.0.1
Save the file
Attempt to connect to the local sshd server: - $ ssh localhost (if you are connecting on a port other than 22, use the -p switch)
You should receive the following error message: - ssh_exchange_identification: Connection closed by remote host
You should also have been sent an email from DenyHosts [Nobody@yourserver]
Remember to remove the line you added to the file /etc/hosts.deny - save the file.
Source : https://superuser.com/questions/363974/how-to-test-if-the-denyhosts-can-send-me-an-email
# Je test et j'obtiens ceci :
ssh localhost
kex_exchange_identification: read: Connection reset by peer
# Je suppose que la configuration du serveur SSH par clé privée peut être en cause.
# Depuis auth.log :
sshd[8743]: refused connect from 127.0.0.1 (127.0.0.1)
sshd[8823]: refused connect from 127.0.0.1 (127.0.0.1)
# Je ne reçois aucun mail, ni en local, ni distant.
# Avancée sur la problématique de réception de mail venant de Denyhosts : https://github.com/denyhosts/denyhosts/issues/168
Optimisation SSL pour des mails chiffrés avec avec Stunnel
# Renseigner les accès vers un serveur SMTP distant pour envoyer les mails de DenyHosts.
# DenyHosts ne gère pas le port 465 chiffré pour l'envoie de mails.
# Ajouter une fonctionnalité SSL à DenyHosts en installant Stunnel4.
sudo apt-get install stunnel4
# Stunel4 Configuration
sudo touch /etc/stunnel/stunnel.conf
cat > /etc/stunnel/stunnel.conf <<EOF
[ssmtp]
client = yes
accept = 25
connect = mail.example.com:465
EOF
# Changer ENABLED de "0" à "1" pour démarrer le tunnel au démarrage du serveur :
sudo nano /etc/default/stunnel4
ENABLED=1
FILES="/etc/stunnel/*.conf"
OPTIONS=""
PPP_RESTART=0
# Redémarrer le service Stunnel4 :
sudo /etc/init.d/stunnel4 restart
# Vérifier avec netstat si Stunnel4 est à l'écoute du port 25 :
netstat -nltp | grep :25
tcp  0   0 0.0.0.0:25   0.0.0.0:*   LISTEN   24687/stunnel4
# Paquet Stunel4 sur Debian : https://packages.debian.org/fr/buster/stunnel4

Adresse IP non bloquée avec une restriction par clé publique

# IP xx.xx.xx.xx is not bloqued with auth restricted by public key : https://github.com/denyhosts/denyhosts/issues/162

Ressources complémentaires sur DenyHosts

Publication de cet article sur le wiki de Debian : https://wiki.debian.org/fr/DenyHosts#preview
Faq officielle de Denyhost - Ancienne : http://denyhost.sourceforge.net/faq.php
Wiki officiel de Denyhost - Nouveau : https://github.com/denyhosts/denyhosts/wiki
Informations complémentaires sur le paramétrage du fichier de configuration : https://flexion.org/posts/2012-11-ssh-brute-force-defence/
Informations complémentaires sur le paramétrage du fichier de configuration : http://www.desmoulins.fr/index.php?pg=informatique!linux!denyhosts
Informations complémentaires sur le paramétrage du fichier de configuration : https://www.it-connect.fr/proteger-son-acces-ssh-avec-denyhosts%EF%BB%BF/
Informations complémentaires sur le paramétrage du fichier de configuration : https://www.it-connect.fr/proteger-son-acces-ssh-avec-denyhosts%ef%bb%bf/
Informations complémentaires sur le paramétrage du fichier de configuration : https://www.tecmint.com/block-ssh-server-attacks-brute-force-attacks-using-denyhosts/
Informations complémentaires sur le paramétrage du fichier de configuration : https://www.cyberciti.biz/faq/how-to-install-denyhosts-intrusion-prevention-security-for-ssh-on-ubuntu/

hosts.allow et hosts.deny

Pour restreindre l'accès à votre machine Unix ou Linux, vous devez modifier les fichiers /etc/hosts.allow et /etc/hosts.deny. Ces fichiers sont utilisés par les programmes tcpd (tcp wrapper) et sshd pour décider d'accepter ou non une connexion provenant d'une autre adresse IP. ITS recommande que, pour commencer, vous restreignez l'accès aux seules adresses de réseau que vous êtes certain devrait avoir accès. Les deux exemples de fichiers suivants permettent les connexions à partir de n'importe quelle adresse dans le domaine de réseau visionduweb.eu, mais pas d'autres.
Le mécanisme de TCP_wrappers permet de contrôler et de restreindre l'accès à certain service réseau : http://jean-luc.massat.perso.luminy.univ-amu.fr/ens/admunix/cours-linux/outils-tcp-ip/Linux-TCP-wrappers.html
Installer le paquet denyhosts pour autoriser des adresses IP SSH avec hosts.allow.
Installer le paquet denyhosts pour protéger ssh avec hosts.deny.

/etc/hosts.allow

# Ce fichier décrit les noms des hôtes autorisés à utiliser les services INET locaux, comme décidé par le serveur '/usr/sbin/tcpd'.
# Tout autoriser.
# ALL : ALL
ALL: localhost
# Autoriser uniquement le domaine visionduweb.eu à se connecter.
# ALL: .visionduweb.eu
# Autoriser une adresse IP.
# Ajouter son adresse IP publique pour ne pas se retrouver exclus du serveur distant.
sshd: 127.0.0.1
sshd: 127.0.1.1
sshd: xx.xx.xx.xx
# Autoriser plusieurs adresses IP.
# sshd : IP-Address1, IP-Address2, IP-Address3
# Autoriser une plage d'adresses IP.
# sshd : 33.*.*.*
# sshd : 66.66.*.*
# Autoriser toutes les adresses.
# sshd : ALL

/etc/hosts.deny

# Avec cette configuration, l'accès à votre machine par n'importe quel hôte est refusé, sauf ceux spécifiés dans hosts.allow.
# hosts.deny This file describes the names of
#      the hosts that are *not* allowed 
#      to use the local INET services, as 
#      decided by the '/usr/sbin/tcpd' 
#      server.
#
# deny all by default, only allowing hosts or 
# domains listed in hosts.allow.

ALL: ALL
sshd: ALL
# Une autre possibilité serrait de tout interdire sauf une adresse IP, directement depuis hosts.deny :
sshd : ALL EXCEPT 127.0.0.1
Utiliser la commande --purge permet de vider les adresses en mémoire dans hosts.deny.
You must set the PURGE_DENY parameter in your configuration file and invoke DenyHosts with the --purge command line flag:
denyhosts.py --purge
Ko.png TCP Wrappers hosts allow deny : https://www.cyberciti.biz/faq/tcp-wrappers-hosts-allow-deny-tutorial/
Télécharger une version à jour du fichier hosts.deny
# Télécharger une version à jour du fichier hosts.deny depuis le site Sécurité Info : https://www.securiteinfo.com/administration-systeme-et-reseau/outils/ultimate-hosts-blacklist.shtml
# Proposition pour créer manuellement le nouveau fichier hosts.deny depuis un script lancé par sudo :
# Utiliser le lien direct vers le fichier host.deny (Moins de 3Mo) : https://hosts.ubuntu101.co.za/hosts.deny
sudo cp /etc/hosts.deny /etc/hosts.deny.bak
# On peut télécharger le fichier dans le répertoire /tmp en tant que simple utilisateur.
# Arrêter le script si le fichier ne peut pas être téléchargé.
wget https://hosts.ubuntu101.co.za/hosts.deny -P /tmp || exit 1
sudo -s
cat /tmp/hosts.deny > /etc/hosts.deny
exit
rm /tmp/hosts.deny
# Proposition pour créer manuellement le nouveau fichier hosts.deny depuis un script lancé par sudo :
# Utiliser le lien direct vers le fichier superhosts.deny (Plus de 15Mo) : https://hosts.ubuntu101.co.za/superhosts.deny
sudo cp /etc/hosts.deny /etc/hosts.deny.bak
# On peut télécharger le fichier dans le répertoire /tmp en tant que simple utilisateur.
# Arrêter le script si le fichier ne peut pas être téléchargé.
wget https://hosts.ubuntu101.co.za/superhosts.deny -P /tmp || exit 1
sudo -s
cat /tmp/superhosts.deny > /etc/hosts.deny
exit
rm /tmp/superhosts.deny
# Proposition pour créer le nouveau fichier hosts.deny depuis une tâche cron lancée avec la crontab de root :
# Utiliser le lien direct vers le fichier superhosts.deny (Plus de 15Mo) : https://hosts.ubuntu101.co.za/superhosts.deny
cp /etc/hosts.deny /etc/hosts.deny.bak
# On peut télécharger le fichier dans le répertoire /tmp en tant que simple utilisateur.
# Arrêter le script si le fichier ne peut pas être téléchargé.
sudo - utilisateur_normal
wget https://hosts.ubuntu101.co.za/superhosts.deny -P /tmp || exit 1
# On quitte le simple utilisateur pour copier le contenu du fichier temporaire vers le fichier appartenant à root:root
exit
cat /tmp/superhosts.deny > /etc/hosts.deny
# On supprime le fichier temporaire avec le simple utilisateur :
sudo - utilisateur_normal
rm /tmp/superhosts.deny
# On quitte, deux fois (?)
exit
exit
# Ici il me faut faire confiance au contenu téléchargé.
# Cela pourrait être affiné, je suppose, avec des contrôles de certificats, ou, une politique de contrôle basée sur md5sum, ou les deux, et, peut être encore d'autres méthodes.
# Vérifier dans le fichier temporaire si des adresses IP bloquées ne sont pas également dans la liste blanche ou tout autre fichier souhaité, pour retirer ces valeurs de la liste des adresses bloquées !
# Cette méthode permettrait d'exclure l’adresse de OVH ssl0.ovh.com qui se retrouve proposée dans la liste noire, mais, qui va bloquer le chargement de mes mails. 
for w in /etc/hosts.allow
do
  sed -i '/$w/d' /tmp/hosts.deny
done
# Le fichier hosts.deny sera copié par après.
cp /tmp/hosts.deny /etc/hosts.deny
# Le fichier superhosts.deny est mis à jour tous les jours ! 	Début    	Fin
# Central Repository (GitHub) 	                                ≈ 19:05 	≈ 19:15
# API / Search engine 	                                        19:05    	≈ 19:20
# Central Mirror (hosts.ubuntu101.co.za) 	                19:20   	≈ 19:25
# DNS Server (#293) 	                                        19:20   	≈ 19:30
D'après ma question : https://github.com/mitchellkrogza/Ultimate.Hosts.Blacklist/issues/580
# Redémarrer DenyHosts :
sudo service denyhosts restart
# La version du fichier hosts.deny proposée par https://www.securiteinfo.com est régulièrement mise à jour à l'aide des sources suivantes :
2o7.net
Adblock No-Coin List
Add_Risk
Add_Spam
Ads_Disconnect.me
Airelle's Anti-Sex Hosts
Anti-PopAds
Bad JAV Sites
Badd Boyz Hosts
BadIPS.com
Barbock filter list
Blocklist.de
Cameleon
DShield.org Suspicious Domain List
Firehol
Global Advert Servers Blocklist - Personal Edition
Hosts ADBlock
JustDomains
KADHosts
malc0de
Malware Domain List
Michael Trimm's Hosts
MoaAB adblock.makala.is
Phishing.Database
pl-host file
Quidsup NoTrack Malicious Sites
Quidsup NoTrack
Ransomware Tracker Domain Blocklist
ShallaList
SMed79 - Various Lists
somewhocares.org
Spam404
Suspicious.Snooping.Sniffing.Hacking.IP.Addresses
The Big List of Hacked Malware Web Sites
Top Attacking Wordpress IP's
uBlock Filters Plus
WaLLy3K_Blacklist
YousList
YoYo.org
ZeroDot1 - CoinBlocker Lists
ZeusTracker

Tester le paramétrage

# Tester le paramétrage avec tcpdmatch.
# Va retourner "access: granted" ou "access: denied".
tcpdmatch sshd www.visionduweb.fr
client:   hostname visionduweb.fr
client:   address  139.99.173.195
server:   process  sshd
access:   denied
tcpdmatch in.telnetd www.visionduweb.fr
client:   hostname visionduweb.fr
client:   address  139.99.173.195
server:   process  in.telnetd
access:   denied

Sauvegarder Linux

Sauvegarder et réinstaller Linux.

Désactiver les fichiers binaires SUID et SGID indésirables

# Parfois très pratiques, le SUID vous permet de faire fonctionner une application en tant qu'un autre utilisateur.
# Tous les fichiers activés avec les bits SUID / SGID peuvent être mal utilisés lorsque l'exécutable SUID / SGID présente un problème de sécurité ou un bogue.
# Imaginez que quelqu'un ai accès à l'une de ces applications (via un shell, apache), et puisse lire votre /etc/shadow, toute la sécurité de votre serveur serait compromise.
# Pour trouver tous les binaires qui utilisent un SUID, tapez la ligne suivante :
sudo find / -ignore_readdir_race -perm -4000
sudo find / \( -perm -4000 -o -perm -2000 \) -print
# Désactiver le SUID sur ces binaires empêche tout autre utilisateur que le propriétaire de l'exécuter.
# Savoir que la plupart de ces services auront besoin d'être exécutés en tant que root pour fonctionner.
sudo chmod -s /chemin/du/binaire
# La plupart des administrateurs systèmes recommandent de désactiver les services comme ping ou traceroute lorsque vous n'en avez pas besoin.
# Désactiver aussi /usr/bin/chfn, /usr/bin/chsh, /bin/mount, /bin/umount, /usr/bin/gpasswd, /usr/bin/newgrp, /usr/sbin/ping6 et /usr/bin/ping.

Fichiers inscriptibles dans le monde sur un serveur Linux

Tout le monde peut modifier un fichier inscriptible dans le monde, entraînant un problème de sécurité. (World-Writable Files.)
Rechercher tous les fichiers inscriptible et collants du monde.
Examiner chaque fichier signalé et définir une autorisation d'utilisateur ou de groupe approprié ou le supprimer.

Fichiers de propriétaire

Les fichiers n'appartenant à aucun utilisateur ou groupe peuvent poser un problème de sécurité.
Il convient de trouver ceux qui n'appartiennent pas à un utilisateur valide et à un groupe valide.

Compresser des fichiers

Quelques paquets à installer pour pouvoir compresser

xarchiver
unrar p7zip p7zip-full

Comparer les différents formats de compression

Ok.png Source : http://rlwpx.free.fr/WPFF/comploc.htm

Compresser en .zip en ligne de commande

# Installer :
sudo apt-get install zip
# Compresser :
zip archive.zip fichiers
# Décompresser :
unzip archive.zip
Ajouter un mot de passe à une archive zip n'est pas considéré comme sécurisé.
L’algorithme de chiffrement utilisé par la commande zip est PKZIP.
L’algorithme PKZIP est connu pour être non sécurisé.
zip -e <file_name>.zip <list_of_files>
Créer une archive zip avec un mot de passe en utilisant 7z.
7z soutient AES-256 algorithme de chiffrement avec hachage SHA-256.
7z peut produire des archives zip format avec système de cryptage plus sécurisé.
7z a -pMY_SECRET -mem=AES256 secure.zip test.txt
Décompresser avec la commande 7za e secure.zip

Compresser en .tar en ligne de commande

Tar est généralement installé par défaut.
On peut l'utiliser avec différents algorithmes de compression.
C'est le programme d'archivage de fichiers le plus populaire sous GNU/Linux et les systèmes Unix.
À l'origine tar était utilisé pour archiver sur bande : Tape archiver en anglais, archiveur pour bande en français.
On notera principalement que tar préserve les permissions et les propriétaires des fichiers, ainsi que les liens symboliques. 
Pour archiver plusieurs fichiers ou un dossier, la commande est la même :
tar cvf mon_archive.tar fichier1 fichier2
tar cvf mon_archive.tar dossier1/
Sauvegarder deux répertoires vers un répertoire distant avec SSH et en compressant en .tar lors du transfert.
sudo tar -cf - /mon_dossier_1 /dossier/dossier_2 | ssh -2 user@votre-serveur tar -xf - -C /dossier_de_destination/sur_serveur_distant/
Créer l'archive .tar du dossier.
sudo tar cvf archive.tar dossier/
Pour extraire une archive tar :
tar xvf mon_archive.tar
Les principales options de tar sont les suivantes :
c / x : construit / extrait l'archive.
v : mode bavard.
f : utilise le fichier donné en paramètre.
Source complémentaire : http://lea-linux.org/documentations/Archivage_tar_pax_zip_rar

Compresser en .tar.gz en ligne de commande

cd /home/user/Documents
tar -czvf $(date +\%A)_Documents.tar.gz *
# Corriger le message d'information suivant "tar: Suppression de « / » au début des noms des membres"
# Se placer dans le dossier cd /home/user
# tar -czvf Documents.tar Documents
# tar: /home/user/Documents : fichier modifié pendant sa lecture.
# Le script est lancé depuis le dossier à sauvegarder.
# Lancer plutôt le script depuis le répertoire utilisateur ou le Bureau.
# La commande Tar conserve les droits utilisateur lors de chaque compression.
# Il est donc possible de les réapproprier aux fichiers et dossiers lors d'une décompression.
tar xvfz fichier.tgz --preserve --same-owner
# Compresser et ajouter un mot de passe.
# L'option avec mot de passe n'existe pas pour tar.gz mais elle existe pour d'autres formats, par exemple zip qui est déprécié ainsi que pour 7z.
# La solution de chiffrement suivante est robuste et permet d'ajouter un mot de passe à une archive. Voir également le paragraphe par après pour chiffrer avec 7z.
7z a -t7z -m0=lzma2 -mx=9 -mfb=64 -md=32m -ms=on -mhe=on -p'LEPASS' archive.7z save.tar.gz|tar zcvf save.tar.gz dossier/

Exclure un répertoire de la sauvegarde

tar zcvf $JOOMLA_REPERTOIRE_BACKUP_FICHIERS/$JOOMLA_NOM_SAUVEGARDE_MENSUELLE_FICHIERS_EXTENSION_TAR_GZ --exclude="$JOOMLA_REPERTOIRE_A_EXCLURE" $REPERTOIRE_PROGRAMME_JOOMLA_A_SAUVEGARDER
Commandes complémentaires : https://www.computerhope.com/unix/utar.htm

Décompresser des fichiers tar.gz

tar -zxvf fichier.tar.gz

Décompresser des fichiers .gz

gzip -d fichier.*.gz
gzip -d fichier.gz
gzip -d *.gz

Compresser avec KGB Archiver

Source : https://packages.debian.org/jessie/utils/kgb

Chiffrement

Introduction

# La compression est un travail pour tar et gzip ou bzip2.
# Chiffrer un fichier est un travail pour gpg ou openssl.
# 7z semble égalent être pertinent comme solution pour le chiffrement.

Chiffrer un fichier avec gpg

# Avec la commande suivante, une passephrase sera demandée dans le terminal, pour chiffrer le fichier.
gpg -c fichier

Chiffrer une archive avec openssl et tar.gz

tar cz fichier_ou_dossier|openssl enc -aes-256-cbc -e > out.tar.gz.enc
tar cz fichier_ou_dossier|openssl enc -aes-256-cbc -pass pass:LeMotDePasse -e > out.tar.gz.enc
# Un mot de passe est demandé.
*** WARNING : deprecated key derivation used.
Using -iter or -pbkdf2 would be better.
# Déchiffrer un fichier :
openssl aes-256-cbc -d -in out.tar.gz.enc|tar xz
# Cette méthode fonctionne bien depuis GNU/Linux Debian, mais, l'archive ne semble pas pouvoir être décompressée depuis GNU/Linux Mint.
Chiffrement symétrique avec openSSL : http://www.fil.univ-lille1.fr/~wegrzyno/portail/PAC/Doc/TP2/tp2002.html
Chiffrer un fichier avec OpenSSL sous GNU/Linux : https://angristan.fr/chiffrer-fichier-openssl-linux/
Je n'arrive pas à décompresser l'archive chiffrée depuis un système d'exploitation GNU/Linux Mint.
L'archive n'est pas corrompue, puisque, si j'utilise une autre machine Debian, j'arrive bien à décompresser l'archive.
Pour éviter ce genre de difficultés et permettre la décompression de l'archive, il est sûrement préférable d'utiliser une autre méthode pour chiffrer la sauvegarde.

Chiffrer une archive avec 7z

# Installation de 7-zip sous Linux :
apt-get install p7zip-full
# Lors de mon essai sur Debian SID, le mot de passe ne m'est pas redemandé lors de la décompression de l'archive.
# Les exemples suivants demandent bien un mot de passe à la création mais ne demandent pas le mot de passe lors de la décompression de l'archive !
# Utilisation de 7z pour protéger une archive :
# 7z a /tmp/secure.7z /tmp/test.txt -p
# Il n'est jamais conseillé d'indiquer directement un mot de passe dans un script :
# 7z a /tmp/secure.7z /tmp/test.txt fichier1 fichier2 -pMonp@ssword
# Cet exemple est fonctionnel et permet de compresser une archive en lui ajoutant un mot de passe :
7z a -pMOTDEPASSE -mx=9 -mhe -t7z test.7z test.txt
7z : Command
a : Add
-p : Set Password
-mx=9 : Ultra compression
-mhe : Encrypt file names
AES : Advanced Encryption Standard.
Le chiffrage AES 256 est utilisé pour sécuriser les échanges VPN.
Le chiffrage AES 256 est une référence dans le domaine de la sécurité.
Les applications qui demandent des niveaux de sécurité important l’utilisent.
D'après Wikipedia, AES est le seul algorithme répertorié par l’Institut national des normes et de la technologie (NIST) pour la protection des données classifiées.
# Exemple de chiffrement AES 256 :
7z a \
 -t7z -m0=lzma2 -mx=9 -mfb=64 \
 -md=32m -ms=on -mhe=on -p'eat_my_shorts' \
  archive.7z test.txt
Tester si l'archive est bien en AES-256 :
7z l -slt archive.7z
Dans les lignes retournées, il faut lire la ligne suivante pour s'assurer que l'archive était bien chiffrée en AES-256 :
Method = LZMA2:14 7zAES:19
# Ne pas utiliser le format 7-zip pour sauvegarder des données de production depuis Linux / Unix car 7-zip ne stocke pas le propriétaire ni le groupe du fichier.
Source : https://askubuntu.com/questions/928275/7z-command-line-with-highest-encryption-aes-256-encrypting-the-filenames
La protection d'une archive par mot de passe est utile lorsque l'on souhaite faire transiter l'archive par des réseaux qui ne sont pas de confiance ou sur une clé USB pouvant être perdue.
Le stockage des sauvegardes peut également faire l'objet d'une protection pour se protéger d'un vol ou d'une modification.
Attention !
Les fichier chiffrés par un mot de passe peuvent toujours être attaqués par Brute Force.

Le chiffrement ainsi que la force du mot de passe utilisé consomme de la RAM

# Risque d'avoir le message suivant : ERROR: Can't allocate required memory!
# La commande suivante peut soulager la RAM, sans plus si la RAM disponible est déjà limitée.
free -h && sudo sysctl vm.drop_caches=3 && free -h
Par contre, on constate alors que la swap est à 0 sur le VPS.
Il peut être intéressant de créer une mémoire d'échange, pour permettre au script de chiffrement d'aboutir sans erreur.

Déchiffrer une archive chiffrée avec 7z

7z x fichier.7z
7z x /path/fichier.7z

Cryptsetup

Ok-ko.png Source : https://doc.ubuntu-fr.org/cryptsetup

Ecryptfs

Ecryptfs est un outil pour créer un dossier privé (~/Private), chiffré et inaccessible aux autres utilisateurs.
Il est destiné à contenir tous les fichiers "sensibles" que vous pourriez avoir : vos fichiers contenant des mots de passe, les données confidentielles relatives à vos comptes bancaires, vos mails.
Ok-ko.png Source : https://doc.ubuntu-fr.org/ecryptfs

Mcrypt

Source : https://www.cyberciti.biz/tips/linux-or-unix-password-protecting-files.html

Off-the-Record (OTR) Messaging

OTR permet d'avoir des conversations privées sur de multiples protocoles (XMPP/Jabber, IRC, MSN...)
Ok-ko.png Source : https://doc.ubuntu-fr.org/off-the-record_messaging

Système de chiffrement EncFS

Apprendre à installer et utiliser le système de chiffrement EncFS.
Les informations qu'elle contient n'ont pas été vérifiées pour les dernières versions LTS depuis Ubuntu 14.04 LTS.
Ok-ko.png Source : https://doc.ubuntu-fr.org/encfs

Veracrypt

VeraCrypt est un logiciel de chiffrement de fichiers et de partitions qui reprend la suite de TrueCrypt.
Ce fork, principalement développé par le Français Mounir Idrassi, a débuté quelques mois avant la fermeture brutale de son prédécesseur. 
Ok-ko.png Source : https://doc.ubuntu-fr.org/veracrypt

Zulucrypt

Outil pour créer un dépôt de stockage chiffré de taille variable.

Somme de contrôle checksum

# Contrôler le checksum pour vérifier l'intégrité d'un fichier ou d'un programme.
# Générer le fichier checksum SHA256 :
md5sum fichier.sql > lefichieraveclessommes
# D'autres commandes de somme de contrôle :
MD5 avec md5sum
SHA-1 avec sha1sum
sha224sum
# Utiliser sha256 ou supérieur lorsque vous avez besoin d'un certain degré de sécurité :
SHA-256 avec sha256sum
sha384sum
sha512sum
# Ajouter le fichier a contrôler et le fichier contenant la somme de contrôle dans le même dossier.
# Lancer la commande suivante pour vérifier si la somme de contrôle correspond au fichier.
md5sum -c lefichieraveclessommes
Générer une somme de contrôle md5 depuis Windows : http://www.md5summer.org
Source : Hash (MD5, SHA1, SHA256…) : Vérifier l’intégrité et empreinte d’un fichier sous Windows : https://www.malekal.com/verifier-integrite-empreinte-fichier-windows/
Source complémentaire pour Windows, Linux, Mac : https://www.lecoindunet.com/comment-verifier-hash-md5-fichier-1765
Source : https://doc.ubuntu-fr.org/md5sum

Comprendre et utiliser systemd

Une alternative à systemd avec /etc/rc.local

# De nombreuses distributions Linux possédaient avant systemd le fichier /etc/rc.local dans lequel on plaçait les commandes à exécuter une fois le système Linux démarré.
Source :https://www.linuxtricks.fr/wiki/lancer-des-scripts-personnalises-au-demarrage

Les version les plus récentes de Debian utilisent systemd

La première chose est de savoir quel est le système utilisé pour démarrer la machine : SysVInit ou systemd ?
Manuel : http://debian-facile.org/doc:system:systemd
# Désactiver un service au démarrage :
sudo systemctl disable apache2.service
# Démarrer un service au démarrage :
sudo systemctl enable apache2.service
# Obtenir le statut du service :
sudo systemctl status apache2.service

Exemples pour activer ou désactiver le service mysql

<sudo systemctl status> permet d'avoir un aperçu du status des services qui sont démarrés ;
<sudo systemctl status mysql.service> permet de savoir quel est le statut du service mysql.service (pour autant qu'il soit installé) ;
<sudo systemctl stop mysql.service> permet de l'arrêter ;
<sudo systemctl disable mysql.service> permet de le déactiver et évite qu'il ne démarre quand tu bootes ;
<sudo systemctl start mysql.service> permet de le démarrer ;
<sudo systemctl enable mysql.service> permet de l'activer pour qu'il démarre automatiquement au boot ;

Afficher la liste des services avec la liste des niveaux d'exécution configurés ou désactivés

sudo systemctl list-unit-files --type=service
sudo systemctl list-dependencies graphical.target

Firewall Iptables

Configurer le pare-feu Iptables.

Sécurité du serveur physique

# Activer l'authentification pour le mode mono-utilisateur.
# Désactiver l'édition du menu du Grub (Touche "e" par défaut.)
# Définir un mot de passe pour le chargeur de démarrage Grub. (Modifier un mot de passe utilisateur depuis Grub ne sera plus possible.)
# Chiffrer le disque en intégral permet de réduire considérablement les risques liés à l'accès des fichiers de configuration.

Activer l'authentification pour le mode mono-utilisateur

Le mode mono-utilisateur est utilisé pour une récupération du système.
Au démarrage de la machine, le choix du Grub propose le démarrage en mode récupération.
Debian demande une authentification par défaut si le mode mono-utilisateur est sélectionné.
Autoriser l'accès au mode mono-utilisateur sous Linux constitue un risque majeur pour la sécurité.
Cette méthode de connexion peut être utilisé pour contourner la sécurité sur la machine et obtenir un accès root.
Il est judicieux de configurer le mode mono-utilisateur pour demander un mot de passe root pour éviter un éventuel démarrage en mono-utilisateur.
Si le choix de démarrage en mode récupération n'est pas disponible :
Éditer le menu du Grub avec la touche "e".
Ajouter le mot clé "single" pour démarrer en mono-utilisateur.
CTRL X ou F10 devrait permettre de continuer le chargement du système.
Le mode mono-utilisateur peut être contourné avec le mot clé "init=/bin/sh".
Le mode mono-utilisateur peut être lancé en urgence avec le mot clé "emergency".
# Pour activer l'authentification par mot de passe root en mode mono-utilisateur, ouvrir le fichier /etc/inittab :
# Je ne retrouve pas ce fichier sur GNU / Linux Mint, le principe restant le même, à définir.
sudo nano /etc/inittab
# Ajouter la ligne suivante au fichier :
~~:S:wait:/sbin/sulogin
# Enregistrer et fermer le fichier.
Ok.png Source : https://blog.sleeplessbeastie.eu/2014/05/01/how-to-access-single-user-mode-without-password/

BIOS

Liste des touches pour accéder au BIOS et au BOOT MENU

Accéder au BIOS : https://doc.ubuntu-fr.org/tutoriel/modifier_ordre_amorcage_du_bios

Sécuriser le BIOS par mot de passe

# Accéder au BIOS pour définir un mot de passe administrateur.
# Éventuellement, un mot de passe utilisateur peut également être défini.
# Pour supprimer ce mot de passe, retourner dans le menu BIOS, valider les champs mot de passe sans les remplir, puis enregistrer les changements.
# Le BIOS peut également être configuré pour simplement désactiver le démarrage à partir de périphériques externes tels que des DVD / CD / clé USB.

Ajouter un cadenas à votre serveur

Protéger l'accès physique à l'unité centrale à l'aide d'un cadenas.
Il est facile de réinitialiser les réglages du BIOS et par la même occasion, le mot de passe du BIOS précédemment paramétré en retirant un cavalier ou la pile présente sur la carte mère.
De plus, cela évite que quelqu'un puisse retirer le disque dur de l'ordinateur, outrepassant ainsi les mesures de sécurité prises précédemment.
Chiffrer vos disques durs.
Le chiffrement fera en sorte que dans l'éventualité où un OS est chargé en mode live ou les disques durs sont retirés de la machine et raccordés à une autre machine, le contenu des disques sera illisible sans fournir une phrase pour décrypter et accéder aux données.

Grub

Le fichier de configuration :
sudo nano /etc/default/grub
Paramétrages manuels : https://doc.ubuntu-fr.org/tutoriel/grub2_parametrage_manuel

Améliorer la vitesse de démarrage

Améliorer la vitesse de démarrage.

Exemple de désinstallation / réinstallation de grub

# Désinstaller grub-pc et grub.
# Attention ne pas rebooter avant d'avoir réinstallé grub-pc et le bootloader sur le MBR.
sudo apt-get remove grub-pc
sudo apt-get purge grub-pc
sudo apt-get remove grub
sudo apt-get purge grub
# Réinstaller grub-pc.
sudo apt-get install grub-pc
# Réinstaller le bootloader sur le MBR.
sudo update-grub
puis
sudo grub-install /dev/sda
# Sinon pour booter sur windows, voir a adapter la méthode manuelle :
set prefix=(hd0,6)/boot/grub
insmod /boot/grub/linux.mod
set root=(hd0,1)
chainloader+1
boot
Réinstaller le grub en mode rescue
Démarrer l'installateur en mode rescue.
Exécuter un shell à la racine du système installé.
Pas de commandes, cela ce fait dans l'installateur.
mount /boot/efi
grub-install --removable
Et comme /boot/grub/grub.cfg sera probablement manquant,
update-grub
Grub et --removable
# Revoir cette option :
# L'option --removable a deux effets :
# Installer GRUB en tant que EFI/boot/bootx64.efi (si EFI PC 64 bits), qui est le chemin de support amovible reconnu par défaut sans enregistrement d'une entrée d'amorçage EFI, donc utilisé notamment par tous les installateurs et systèmes live, au lieu de l'emplacement normal EFI/debian/grubx64.efi ;
# N'appelle pas efibootmgr pour enregistrer une entrée dans les variables d'amorçage du firmware EFI, opération dont l'échec provoque l'erreur d'installation de GRUB.
# Installer systématiquement GRUB avec --removable sur tous les systèmes EFI afin de moins dépendre des caprices des firmwares UEFI et de leur gestion calamiteuse des variables d'amorçage.
Erreur affichée sur Debian lors de la mise à jour du grub avec update-grub
# L'errreur affichée sur Debian lors de la mise à jour du Grub avec update-grub :
/dev/sdb: open failed: No medium found
# La commande lsblk ne montre aucune partition sdb.
# La commande "sudo dmesg |grep sdb" affiche :
[3.48717] sd 6:0:0:0 [sdb] Attached SCSI removable disk
# Je suppose donc que c'est le multi-lecteur de carte SD connecté en interne à la machine.
# Si ce lecteur n'est pas utilisé pour des fonctions lvm, l'ajouter au global_filter dans "/etc/lvm/lvm.conf".
sudo nano /etc/lvm/lvm.conf
# Ajouter la ligne suivante permettra de retirer les lignes "/dev/sdb: open failed: No medium found" :
global_filter = ["r|/dev/sdb|"]
# Exemple complémentaire :
# Accepte chaque périphériques de blocs :
# filter = [ "a|.*/|" ]
# Rejeter le lecteur de CD :
# filter = [ "r|/dev/cdrom|" ]

Changer de mot de passe utilisateur ou root depuis Grub

En cas de perte du mot de passe il est possible de changer le mot de passe oublié depuis le Grub, si celui ci n'a pas été protégé.
On supposera que vous avez le droit légal de faire la modification du mot de passe administrateur.
Relire article 323-1 et suivants du code pénal si ce n'est pas le cas : https://www.legifrance.gouv.fr/affichCodeArticle.do?idArticle=LEGIARTI000006418316&cidTexte=LEGITEXT000006070719
Le fait d'accéder ou de se maintenir, frauduleusement, dans tout ou partie d'un système de traitement automatisé de données est puni de deux ans d'emprisonnement et de 60 000 € d'amende.
Lorsqu'il en résulte une suppression ou modification de données contenues dans le système, ou, une altération du fonctionnement de ce système, la peine est de trois ans d'emprisonnement et de 100 000 € d'amende.
Lorsque les infractions prévues aux deux premiers alinéas ont été commises à l'encontre d'un système de traitement automatisé de données à caractère personnel mis en œuvre par l’État, la peine est portée à cinq ans d'emprisonnement et à 150 000 € d'amende.
Grub2 peut permettre de contourner l’authentification Linux afin de changer le mot de passe utilisateur ou le mot de passe root oublié.
Récupérer le mot de passe utilisateur ou root depuis Grub : https://memo-linux.com/grub2-contourner-lauthentification-linux-mot-de-passe-utilisateur-ou-root-oublie/
Au démarrage, appuyer sur la touche "e".
Une fois dans le fichier du grub, appuyer à nouveau sur e puis ajouter en fin de page : init=/bin/bash ou init=/bin/sh
Touche entrée puis touche b pour arriver à un prompt
Monter le système en lecture / écriture : mount -n -o remount,rw /
Mettre à jour le mot de passe du root, lancer la commande passwd
reboot

Changer la résolution de GRUB2 au démarrage

# La résolution par défaut est au maximum et affiche un texte trop petit dans le menu multiboot de GRUB.
# Lors de l'affichage du menu du GRUB, appuyer sur c pour faire apparaître la console.
# Lancer la commande videoinfo fonctionnelle avec un EFI GRUB pour connaître les résolutions acceptées par le GRUB.
# La commande vbeinfo ne fonctionne pas puisque le GRUB est un EFI GRUB.
# Éditer :
sudo nano /etc/default/grub
# Ajouter :
GRUB_GFXMODE=800x600
# Appliquer les changements :
sudo update-grub
sudo update-grub2
# Au redémarrage, le GRUB est parfaitement lisible et occupe correctement l'écran.

Changer le thème de GRUB2

Thème Ubuntu Mate
Thème Ubuntu Mate : apt://grub2-themes-ubuntu-mate
Liste de thèmes
Liste de thèmes : https://www.gnome-look.org/search/projectSearchText/grub2+theme/
Thème Alienware
Télécharger le thème officiel : https://www.gnome-look.org/p/1111263/
Télécharger la version modifiée proposée par Vision du web : https://1drv.ms/u/s!AKtUsyUfGwC9hEs
# Créer le dossier themes dans le dossier /boot/grub/ :
sudo mkdir /boot/grub/themes
# Copier le contenu des données du thème alienware, après avoir décompressé alienware.zip, vers le dossier "/boot/grub/themes/alienware".
# Pour la version de Vision du web, c'est le contenu du dossier /Thème Alienware personnalisé pour le Grub/boot/grub/themes/alienware/ qui doit être copié dans le dossier "/boot/grub/themes/alienware".
# Modifier l'affichage personnalisé du thème, l'emplacement des images, les textes, depuis le fichier "boot/grub/themes/alienware/theme.txt".
# Faire une sauvegarde du fichier grub par défaut dans le dossier /etc/default/.
sudo cp grub grub.old.bak
# Aller dans le dossier qui contient le nouveau fichier du grub, après avoir décompressé alienware.zip, et copier ce nouveau fichier grub.
# Depuis la version de Vision du web, le fichier ce trouve dans "/Thème Alienware personnalisé pour le Grub/etc/default/".
sudo cp grub /etc/default/grub
# Modifier le Grub en ajoutant les lignes "Redémarrer le système" et "Éteindre le système".
# Faire une copie du fichier 40_custom par défaut dans le dossier /etc/grub.d/.
sudo cp 40_custom 40_custom.old.bak
# Aller dans le dossier qui contient les fichiers, après avoir décompressé alienware.zip, et copier le nouveau fichier 40_custom.
# Depuis la version de Vision du web, le fichier ce trouve dans "/Thème Alienware personnalisé pour le Grub/etc/grub.d/".
sudo cp 40_custom /etc/grub.d/40_custom
# Noter que les droits du fichier sont en 0755 :
sudo chmod 0755 /etc/grub.d/40_custom
# Le fichier 40_custom a été traduit en français dans la version proposée par Vision du web :
#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.
menuentry 'Arrêter le système' {
halt
echo 'Le système va être arrêté...'
}

menuentry 'Redémarer le système' {
reboot
echo 'Le système va être redémarré...'
}
# Mettre à jour le grub :
sudo update-grub
sudo update-grub2
# Vérifier que le thème alienware soit bien chargé au démarrage :
cd /etc/default/grub.d
sudo nano 60_mint-theme.cfg
# C'est le thème alienware qui doit être indiqué :
GRUB_THEME="/boot/grub/themes/alienware/theme.txt"
# Protéger éventuellement le fichier grub pour le rendre uniquement accessible en lecture, pour éviter qu'il ne soit modifié suite à une mise à jour.
# Cette action devrait être testé depuis une machine virtuelle pour voir si cela n'affecte pas négativement la mise à jour.
Changer de boot screen
# Le service qui va lancer le boot screen / splash screen est plymouth.
Changer de bootscreen.
Chargement sans bootscreen
Ouvrir le fichier d’édition du grub :
sudo xed /etc/default/grub
À la ligne GRUB_CMDLINE_LINUX_DEFAULT, retirez le quiet splash.
Mettre à jour la configuration de Grub :
sudo update-grub

Protéger le Grub de Linux par mot de passe

# Par défaut Grub est accessible en pressant ESC ou Shift lors du démarrage et n'importe qui peut alors démarrer en mode récupération.
# Protéger l'édition des menus Grub (Touche e) et l'accès à certains menus, y compris ceux de récupération :
# Générer un mot de passe grub avec la commande linux "grub-mkpasswd-pbkdf2" dédié à Grub.
# Entrer deux fois un mot de passe et récupérer le hash ainsi obtenu :
grub.pbkdf2.sha512.10000.E87FA7E3D21…
# Ajouter à la fin du fichier /etc/grub.d/40_custom :
set superusers="adm"
password_pbkdf2 adm grub.pbkdf2.sha512.10000.E87FA7E3D21...
# Le login grub sera 'adm' avec le mot de passe défini.
# Appliquer les modifications :
sudo update-grub
sudo update-grub2
Attention car la saisie du mot de passe depuis le Grub de Debian ou de Mint se fera en Qwerty
Passer le clavier du Grub de Qwerty vers Azerty
Paramétrer la disposition azerty
# Créer le dossier layouts
sudo mkdir /boot/grub/layouts
# Ajouter le paramètre GRUB_TERMINAL_INPUT=at_keyboard au fichier /etc/default/grub
sudo nano /etc/default/grub
# Ajouter la ligne :
GRUB_TERMINAL_INPUT=at_keyboard
# Ajouter les lignes suivantes au fichier /etc/grub.d/40_custom :
sudo nano /etc/grub.d/40_custom
# Ajouter les 3 lignes :
# Clavier fr
insmod keylayouts
keymap fr
# Générer la disposition du clavier dans un fichier reconnu par Grub :
sudo grub-kbdcomp -o /boot/grub/layouts/fr.gkb fr
# Le message suivant est retourné :
Code de touche 0x54 inconnu
Code de touche 0x65 inconnu
Code de touche 0x7f inconnu
# Au redémarrage, le clavier USB n'est plus fonctionnel.
# Seul les touches Ctrl Alt Suppr me permettent de redémarrer, pour passer sur mon second Grub, puis, de corriger le premier Grub depuis le fichier /boot/grub/grub.cfg
# Cette solution ne fonctionne donc pas dans mon cas.
Grub azerty 2016 : https://forums.archlinux.fr/viewtopic.php?t=17913
Grub azerty 2019 : https://doc.ubuntu-fr.org/tutoriel/grub2_parametrage_manuel
Substitution de caractères
Sauvegarder puis éditer le fichier « menu.lst » si il existe déjà :
sudo nano /boot/grub/menu.lst
# Emulation d'un clavier azerty_FR
setkey less backquote
setkey greater tilde
setkey ampersand 1
setkey 1 exclam
setkey tilde 2
setkey 2 at
setkey doublequote 3
setkey 3 numbersign
setkey quote 4
setkey 4 dollar
setkey parenleft 5
setkey 5 percent
setkey minus 6
setkey 6 caret
setkey backquote 7
setkey 7 ampersand
setkey underscore 8
setkey 8 asterisk
setkey backslash 9
setkey 9 parenleft
setkey at 0
setkey 0 parenright
setkey parenright minus
setkey numbersign underscore
# no change for equal
# no change for plus
setkey a q
setkey A Q
setkey z w
setkey Z W
setkey caret bracketleft
# no equivalent for diaresis => we keep the US braceleft
setkey dollar bracketright
# no equivalent for pound => we keep the US braceright
setkey q a
setkey Q A
setkey m semicolon
setkey M colon
setkey bracketleft quote 
setkey percent doublequote
setkey asterisk backslash
setkey bracketright bar
setkey w z
setkey W Z
setkey comma m
setkey question M
setkey semicolon comma
setkey period less
setkey colon period
setkey slash greater
setkey exclam slash
setkey bar question
Cette substitution devrait indiquer à Grub qu'il doit changer chacune des touches d'un clavier QWERTY par son équivalent en AZERTY.
Au prochain démarrage, le clavier dans Grub devrait être un AZERTY.
Ajouter un menu au fichier « /boot/grub/menu.lst » pour repasser sous clavier QWERTY en ajoutant le code suivant à la fin du fichier :
# Repasser le clavier en qwerty
title Repasser le clavier en qwerty
setkey
Cette méthode ne semble pas fonctionner dans mon cas depuis Linux Mint 19.3.
Grub azerty 2008 : https://melodie.citrotux.org/2008/06/07/grub-clavier-azerty/
Grub azerty 2010 : https://www.mail-archive.com/debian-french@lists.debian.org/msg10579.html
Grub azerty 2016 : https://doc.ubuntu-fr.org/grub_legacy
Recherches complémentaires
Le mappage clavier n’est prévu que pour at_keyboard et pas pour usb_keyboard.
Il est bien précisé :
" If at_keyboard freeze your system, you may have to use use usb_keyboard or console, so you could not use your layout..."
Source : https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=741464
Source : https://www.debian-fr.org/t/grub-pc-usb-keyboard-keymap-fr/74865/17
Recherches complémentaires : grub-kbdcomp grub-mklayout azerty
Cette proposition ne correspond pas à mon attente, qui est de pouvoir saisir le mot de passe du Grub avec un clavier USB et non pas de rentrer dans la console du Grub pour y travailler en Azerty.
Grub azerty 2018 : https://www.developpez.net/forums/d1883244/systemes/linux/administration-systeme/clavier-azerty-grub/
Cette proposition ne correspond pas à mon attente, qui est de pouvoir saisir le mot de passe du Grub avec un clavier USB et non pas de rentrer dans la console du Grub pour y travailler en Azerty.
Pour passer le clavier en azerty, depuis un terminal en Qwerty, utiliser la commande setxkbmap fr
Depuis un clavier Qwerty, saisir cette commande ainsi : setxkb,qp fr
Tester éventuellement (Sans certitude) :
J'ai lu que pour que les clavier USB soient reconnus il faut changer une ou plusieurs options dans le bios selon les cas, 'usb legacy' ou 'usb legacy support' en 'all device' et sur certains mettre périphériques USB en premier dans l'ordre de démarrage du bios.
Compiler le Grub pourrait permettre de régler ce problème
Pour le moment, je me contenterais du mot de passe en Azerty : https://github.com/mmalecki/grub/blob/master/include/grub/keyboard_layouts.h?fbclid=IwAR2IABpFoflVcZDGzCmf2dzIr7iNStfEQ5tDVgJZ2MxNMx7ENgXs3cN-EZk
Solution retenue pour le mot de passe Grub
À défaut d'arriver à configurer un clavier azerty pour la saisie du mot de passe du Grub, on peut enregistrer le mot de passe en Qwerty, pour le saisir normalement avec un clavier Azerty.
À ce moment la, ne pas ajouter de caractères spéciaux dans le mot de passe.
Définir une option pouvant démarrer sans avoir à saisir un mot de passe
Pour laisser la première option du menu Grub, le boot par défaut, accessible sans mot de passe, ajouter l'option –unrestricted à la première ligne menuentry :
sudo mv /boot/grub/grub.cfg /boot/grub/grub.cfg.old
sudo bash -c "sed '0,/--class ubuntu/s//--unrestricted --class ubuntu/' /boot/grub/grub.cfg.old > /boot/grub/grub.cfg"
grub.cfg est écrasé par la commande update-grub et donc à chaque mise à jour du paquet grub ou du noyau, il faudra relancer les deux commandes précédentes.
La machine démarre normalement sur la première option de grub (démarrage du système) pour arriver sur l'écran de login utilisateur.
Toute autre action (sélection d'une autre option du menu grub ou édition d'une option de menu) exigera le login/mot de passe.
Source complémentaire : Protéger le changement de mot de passe utilisateur ou root depuis Grub: https://www.justegeek.fr/proteger-ledition-du-grub-avec-mot-de-passe/
Renforcer la sécurité au démarrage de Windows
1- Protéger le bios pour éviter un démarrage malveillant à l'aide d'un clé USB.
2- Ajouter un mot de passe de chiffrement à Windows, avant la connexion au compte administrateur ou utilisateur.
Le passage au niveau 3 du chiffrement de vos mots de passe va accroître la sécurité des comptes Windows.
Un mot de passe sera demandé avant même que le système devienne disponible aux utilisateurs.
Ce mot de passe viendra en plus du mot de passe de votre session.
Il ne doit absolument pas être perdu !
Cliquer sur le bouton Démarrer puis sur Exécuter sous Windows XP.
Sous Windows 8.1, presser simultanément sur les touches Windows et R.
Saisir la commande syskey et valider par Entrée.
Cliquer sur Oui.
Dans la fenêtre qui s'ouvre, cliquer sur Mettre à jour.
Choisir le type de protection à mettre en place.
Sélectionner l'option "Mot de passe de démarrage" et saisir un nouveau mot de passe pour protéger votre clé de cryptage.
Confirmer le mot de passe et valider avec OK.
Finaliser avec OK.
Dès lors, au démarrage de Windows, un premier mot de passe sera demandé. 
La fenêtre de connexion de session sera alors accessible.
Saisir le mot de passe de session pour l'ouvrir.
Syskey n'est plus pris en charge par Windows 10.
Syskey est une clé de chiffrement racine interne Windows utilisée pour chiffrer d'autres données d'état sensibles du système d'exploitation, telles que les hachages du mot de passe du compte d'utilisateur. L'utilitaire SysKey peut être utilisé pour ajouter une couche de protection supplémentaire en cryptant la clé système pour utiliser un mot de passe externe. Dans cet état, le système d'exploitation bloque le processus de démarrage et invite les utilisateurs à entrer le mot de passe (de manière interactive ou en le lisant sur une disquette).

Malheureusement, la clé de chiffrement syskey et l’utilisation de syskey.exe ne sont plus considérées comme sécurisées. Syskey est basé sur une cryptographie faible qui peut facilement être brisée à notre époque. Les données protégées par syskey sont très limitées et ne couvrent pas tous les fichiers ni toutes les données du volume du système d'exploitation. L'utilitaire syskey.exe a également été utilisé par les pirates dans le cadre des escroqueries par ransomware.
Pour utiliser la sécurité du système d’exploitation au démarrage, utiliser Bitlocker, VeraCrypt, DiskCryptor, Jetico BestCrypt Volume Encryption, ou des technologies similaires au lieu de l'utilitaire syskey.exe.
Source : https://support.microsoft.com/fr-fr/help/4025993/syskey-exe-utility-is-no-longer-supported-in-windows
Les 3 niveaux de syskey
L'utilitaire Syskey va permettre de configurer le chiffrement de vos mots de passe.
3 niveaux de protection sont possibles :
Niveau 1 : Windows utilise une clé aléatoire générée par l'ordinateur en tant que clé système et la stocke sur le système local.
La clé étant stockée sur le système d’exploitation, elle permet un démarrage du système sans assistance.
C'est le niveau activé par défaut dans Windows.
Niveau 2 : Windows utilise une clé aléatoire générée par l'ordinateur en tant que clé système et la stocke sur une disquette.
La disquette doit obligatoirement être insérée pour que Windows puisse démarrer et que vous et les autres utilisateurs puissiez accéder à votre session.
Si la disquette contenant la clé est perdue ou illisible, vous ne pourrez plus démarrer Windows c'est pourquoi ce niveau de protection est peu recommandé.
Les disquettes ne sont presque plus utilisées et sont trop sensibles à l'environnement extérieur pour pouvoir les utiliser pour des données sensibles.
Niveau 3 : Vous définissez un nouveau mot de passe qui vous sera demandé au démarrage de Windows, avant que le système ne devienne disponible aux utilisateurs souhaitant ouvrir une session.
Le mot de passe de session sera bien sûr nécessaire par la suite.
Le mot de passe n'est pas stocké sur l'ordinateur : un hachage MD5 du mot de passe est utilisé comme clé principale pour protéger la clé de cryptage du mot de passe de votre session.
En cas de perte du mot de passe, vous ne pourrez plus démarrer Windows. Ce niveau offre une sécurité accrue à vos données et est fortement recommandé.
Source : https://www.pcastuces.com/pratique/windows/proteger_demarrage_windows/page2.htm

Désactivez la génération des entrées de menu en mode de récupération

# Depuis le menu de Grub, appuyer sur la touche e permet d'éditer la configuration.
# Renforcer la sécurité en désactivant cette option.
# Noter que cette option peut être utile !

Problèmes d'hibernation et résolution avec GRUB

Le clavier ne sort pas d'hibernation correctement
# Forcer Grub a réinitialiser le clavier à la sortie de veille :
# Éditer le fichier /etc/default/grub :
sudo nano /etc/default/grub
# Ajouter "atkbd.reset" :
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash atkbd.reset"
# Actualiser le grub :
sudo update-grub
sudo update-grub2
Le clavier ne sort pas d'hibernation correctement et ne fonctionne pas immédiatement avec Firefox
# La méthode précédente ne fonctionne pas.
# J'ai tenté de diminuer les paramètres de performances de différentes façons, mais, sans succès :
# Préférences / Général / Performances
# Désactiver : Utiliser les paramètres de performance recommandés
# - Utiliser l’accélération graphique matérielle si disponible. (Je passe à non)
# - Nombre maximum de processus de contenu. (Je passe à 1)
Source : https://support.mozilla.org/fr/kb/parametres-performance-firefox
# Alternative :
# En sortant de veille, ouvrir un terminal et le fermer.
# Le clavier fonctionnera à nouveau immédiatement depuis le navigateur Firefox.

Outil de configuration ou de réparation

Grub customizer
# Comment utiliser Grub customizer :
Source : http://tipsonubuntu.com/2018/03/11/install-grub-customizer-ubuntu-18-04-lts/
Source : http://ubuntuhandbook.org/index.php/2016/04/install-grub-customizer-ubuntu-16-04-lts/
Source : https://blablalinux.wordpress.com/2016/05/17/grub-customizer
Source : https://memo-linux.com/personnaliser-le-grub-avec-grub-customizer/
Source : https://doc.ubuntu-fr.org/grub-customizer
# Ajouter le ppa :
deb http://ppa.launchpad.net/danielrichter2007/grub-customizer/ubuntu trusty main
Boot info
# Créer un rapport de démarrage avec boot-info :
Source : https://doc.ubuntu-fr.org/boot-info
Source : https://doc.ubuntu-fr.org/tutoriel/boot-info
Boot repair
Source : https://doc.ubuntu-fr.org/boot-repair
Source : https://blablalinux.wordpress.com/2016/05/16/boot-repair-reparateur-de-demarrage
Attention boot-repair peut casser votre système de démarrage
Non résolu : écran noir avec des points blancs au démarrage
Suite à une mise à jour de Windows 10 ( 2 mises à jour en simultanée, une pour le système, l'autre pour la sécurité ) windows a redémarré sur le choix de GNU/Linux par défaut.
Depuis, au démarrage, je n'ai plus de GRUB, mais, un écran noir avec 3 points blancs qui forment un trait.
J'ai update-grub et update-grub2 sans succès.
Installation de grub-repair, sans succès. ( sudo add-apt-repository -y ppa:yannubuntu/boot-repair && sudo apt update && sudo apt install -y boot-repair boot-info && sudo boot-repair )
Décendu et supprimé 2 noyau, sans succès.
Je suis 2 versions de noyau au dessous de la version courante et l'écran noir avec tiret blanc statique s'affiche toujours.
Je relance boot-repair
Finalement, " je casse tout ".
Au démarrage par défaut, j'ai une erreur : grub rescue
Je dois passer par f12 et lancer le disque dur 3.
Je réinstalle un OS sur le 1er disque dur et le grub sur le 3ème disque dur.
Je récupère un grub fonctionnel mais mon temps de chargement passe de 50 secondes à 3 minutes 40.
Je n'ai pas réussi a réparer mon Grub avec boot-repair.
Source : http://doc.ubuntu-fr.org/boot-repair
Source : https://sourceforge.net/p/boot-repair/home/fr/
Réparer la MBR
Source : https://www.easytutoriel.com/comment-reparer-demarrage-mbr-xp-7-windows-ordinateur.html
Modifier l'ordre de démarrage du dual boot en uefi
# Afficher les options de démarrage :
sudo efibootmgr
# Si notre option Linux existe ou n'existe pas, installer Grub doit fonctionner :
sudo grub-install
# Si l'option Linux a simplement été déplacée, on peut modifier l'ordre des options :
sudo efibootmgr -o 0005,0000,0001,0002,0003,0004
Réparer un dual-boot en uefi après une mise à jour de Windows 8 ou 10 : http://ikewdu.free.fr/reparer-un-dual-boot-en-uefi-apres-une-mise-a-jour-de-windows-8-ou-10/

Supprimer des entrées obsolètes de boot-efi qui apparaissent dans le BIOS EFI

# Deux entrées de Debian présentes dans les choix de périphériques de mon BIOS EFI sont erronées car elles proviennent de l'installation de Debian Buster qui a finie en écran noir, puis, qui a été supprimé.
# Identifier les lignes erronées :
sudo efibootmgr -v
...
Boot0004* linuxmint	HD(1,GPT,2273ee...ab0,0x800,0x82000)/File(\EFI\LINUXMINT\GRUBX64.EFI)
Boot0005* debian	HD(1,GPT,2273ee...ab0,0x800,0x82000)/File(\EFI\DEBIAN\SHIMX64.EFI)
Boot0006* debian	HD(1,GPT,2273ee...ab0,0x800,0x82000)/File(\EFI\DEBIAN\GRUBX64.EFI)..BO
# Supprimer les entrées de boot-efi qui n'ont pas été supprimées lors de la suppression de Debian.
# Ce qui serait supprimé, c'est une entrée dans la table bcd qui se trouverait dans une partition efi.
# Utiliser un live-usb d'installation pour saisir les commandes suivantes.
# Les deux lignes à supprimer correspondent au numéro de Boot Boot0005 et Boot0006.
# D'après le man page, utiliser la commande suivante :
efibootmgr -b 6 -B
efibootmgr -b 5 -B
# Ou
efibootmgr -b 0006 -B
efibootmgr -b 0005 -B
# Attention !
# J'aurais du actualiser la liste, entre deux actions de suppression.
# Il est indispensable de commencer par le chiffre le plus élevé si on souhaite enchaîner les commandes !
# En commençant par le 5, puis, le 6, j'ai l'impression que j'ai fais sauter l'entrée de la distribution Linux Mint qui était sur le disque secondaire SATA.
# Au démarrage, F2, dans le BIOS, je constate que une des deux lignes concernant Debian a bien été supprimée, mais, la seconde est toujours présente.
# L'utilitaire Windows Easy UEFI Trial m'a permis d'ajouter manuellement une ligne "Linuxmint" pour le disque SATA, qui va pointer sur le Grub du SSD.
# Je ne suis pas convaincu que cela soit forcément utile ainsi, mais bon, la ligne du Linux Mint du deuxième disque dur est présente pour signifier que ce système est installé.
# La Mint du deuxième disque dur est également bien présente dans le Grub qui est chargé depuis le disque SSD.
Source : https://doc.ubuntu-fr.org/os-uninstaller
Comment faire réapparaître la ligne du CD-Rom dans le BIOS EFI
Exemple pour un ordinateur asus/8.0 :

Dans l'onglet BOOT
Inhiber Fast Boot et autoriser Launch CSM
Dans Launch CSM autoriser Launch PXE OpROM

Dans l'onglet Security :
Inhiber Secure Boot Control

Dans l'onglet BOOT :
Le Graveur DVD doit apparaître en 3èmè position, le laisser en place

Dans l'onglet Save & Exit :
Sélectionner Lanch EFI from file system device et valider
Rebooter en maintenant ESC appuyé (sélection du Boot device pour un ASUS)
Le Graveur y est maintenant présent, le sélectionner en ayant placé un DVD system en 64 Bits uniquement
Le Boot s'effectue alors à partir du DVD

Si j'en crois la nécessité d'activer le pxe c'est que le cd/dvd rom doit être compris dans les lecteurs réseau et non plus dans les périphériques au lancement.
Fonctionnel avec mon Bios UEFI BIOS Utility :
Désactiver le démarrage rapide
Message ROM en option : Éventuellement le passer en Keep Current

Redémarrer avec un CD bootable, c'est le plus important, voir, essentiel, peut être que les deux étapes précédentes sont facultatives.
Le CD apparaît dans la liste des choix disponibles, via le menu de démarrage appelé avec F8.
Monter la partition EFI depuis Linux pour y supprimer une entrée
# Lister les partitions :
sudo fdisk -l
# Monter la partition EFI :
sudo mount /dev/sdX EFI/
Supprimer alors le dossier debian.
Supprimer alors, depuis un live USB de linux, l'entrée correspondant à debian, comme précédemment, avec la commande efibootmgr.
Monter la partition EFI depuis Windows pour y supprimer une entrée
Étape 1 : Localiser et monter la partition EFI avec cmd.exe
Lancer cmd.exe en tant qu'administrateur
Saisir "diskpart" --> une nouvelle fenêtre de commande s'ouvre.
Saisir list disk --> la liste des disques apparait. Noter le numéro du disque. Par exemple, pour la suite le "1"
Saisir select disk 1 --> le disque 1 est alors actif
Saisir list partition --> pour afficher les numéros de partition. En général l'EFI est la première partition. Pour la retrouver c'est facile, elle fait dans les 200 Mo
Saisir select partition 1 --> La partition est alors active.
Sans fermer la fenêtre diskpart, ouvrir l'explorateur Windows et consulter la liste des disques (disque internes, externes, usb...) branchés au PC. Chacun est identifié par une lettre comme C: ...
Dans la fenêtre diskpart:
Saisir assign letter= une lettre ; par exemple assign letter=T
A ce moment là, si toutes les étapes se sont déroulées correctement et que la lettre du disque n'a pas déjà été utilisée, vous pouvez voir la partition EFI montée et accessible depuis l'explorateur sous T.
Étape 2 : Écrire sur la partition
La partition est formatée en FAT32, il n'y a donc pas de problème pour lire/écrire dessus. Sauf que pour une raison étrange, si on passe par l'explorateur de Windows on un des messages d'erreur qui empêchent d'accéder au disque ! On le sait tous, Windows peut parfois être tordu, dans ce cas la solution pour y remédier l'est tout autant.
■ Lancer le gestionnaire de tâche en mode administrateur
■ Cliquer Fichier > Créer une nouvelle tâche
■ Cocher la case "Créer cette tâche avec des privilèges d'administration"
■ Cliquer Parcourir --> Une fenêtre d'explorateur s'ouvre et vous pouvez naviguer sans souci dans la partition EFI montée précédemment.
Supprimer alors, depuis un live USB de Linux, l'entrée correspondant à Debian, comme précédemment, avec la commande efibootmgr.
Source : https://forum.macbidouille.com/index.php?showtopic=396092

Changer l'ordre de démarrage proposé par Grub

sudo gedit /boot/grub/grub.cfg

Changer l'ordre de démarrage EFI

Depuis Linux
https://papy-tux.legtux.org/doc1251/index.html
http://ikewdu.free.fr/quatre-methodes-pour-ajouter-une-entree-nvram-en-uefi/
Depuis Windows
Avec Easy UEFI
# Fonctionne très bien et permet de recréer la ligne manquante pour pointer vers le Grub de linux, depuis un système Windows.
# La configuration du Grub doit exister pour pouvoir cibler le Grub existant.
# Attention, la période d'essai expire au bout de quelques jours.
Site officiel : https://www.easyuefi.com/index-us.html
Grub 2 Win
# Créer un Grub depuis Windows.
https://sourceforge.net/projects/grub2win/files/latest/download
https://sourceforge.net/p/grub2win/discussion/general/thread/a14ab3ccc4/?limit=25#cdc4

Chiffrer le disque en intégral

Permet de réduire considérablement les risques liés à l'accès des fichiers de configuration.
Le chiffrement du disque dur peut être sélectionné lors de l'installation.
Permet notamment de renforcer les configurations précédentes.
Anticiper tout problème de panne en sauvegardant régulièrement vos fichiers !
Le chiffrement seul protège contre la divulgation des données en cas de perte ou de vol, mais pas contre une intervention illicite non détectée sur la partie du système qui doit inévitablement rester non chiffrée.
Ne pas oublier qu'une installation standard de Debian avec chiffrement laisse l'intégralité de /boot en clair, ce qui inclut le chargeur d'amorçage, l'image du noyau et l'initramfs.
GRUB et le noyau peuvent être protégés par le secure boot UEFI, mais pas l'initramfs ni la configuration de GRUB. 

Luks

Source : https://www.cyberciti.biz/hardware/howto-linux-hard-disk-encryption-with-luks-cryptsetup-command/

Chiffrer la SWAP

.

Désactiver les périphériques USB / Firewire / Thunderbolt

su
echo 'install usb-storage /bin/true' >> /etc/modprobe.d/disable-usb-storage.conf
echo "blacklist firewire-core" >> /etc/modprobe.d/firewire.conf
echo "blacklist thunderbolt" >> /etc/modprobe.d/thunderbolt.conf
Les utilisateurs ne peuvent plus copier rapidement de données sensibles sur des périphériques USB, installer des logiciels malveillants, des virus ou une porte dérobée sur votre système Linux.
Source complémentaire : https://www.cyberciti.biz/faq/linux-disable-modprobe-loading-of-usb-storage-driver/

Mot de passe sur la session utilisateur

Concept bien connu maintenant, avant de pouvoir utiliser le système d'exploitation, il faudra se connecter à son compte avec son identifiant et son mot de passe utilisateur.
La sécurité de premier niveau sur un ordinateur consiste à définir un nom d'utilisateur (login ou identifiant) et un mot de passe (password) pour votre session.
Si le mot de passe utilisateur n'est pas défini, il est recommandé de définir un mot de passe utilisateur pour exiger le mot de passe à la connexion.
Il n'est donc pas conseillé de désactiver le mot de passe utilisateur pour accéder plus rapidement au système.
Une fois connecté au système en mode graphique, le raccourci clavier pour verrouiller la session utilisateur sous Linux est Ctrl + Alt + L.

Ouvrir une session sécurisée sous Linux ou Windows

Sous Linux et Windows, il existe une combinaison de touches permettant de se protéger des tentatives d'interception des identifiants lors de l'ouverture d'une session.
Cette combinaison de sécurité est appelée en anglais "Secure Attention Key" (SAK) ou "Secure Attention Sequence" (SAS).
Sous Linux : Ctrl + Alt + Break/Pause
Sous Windows : Ctrl + Alt + Suppr
Il faudra appuyer sur ces touches à chaque fois pour ouvrir une session d'ordinateur sécurisée.
Une fois cette combinaison activée, l'accès à un écran sécurisé pour ouvrir une session sécurisée sera proposé.
Obliger la combinaison Ctrl + Alt + Suppr sous Windows
Appuyer sur la touche Windows de votre clavier puis taper Outils dans la zone de recherche du menu Démarrer (Windows 7) ou dans l'écran d’accueil (Windows 8).
Cliquer sur Outils d'administration dans la liste des résultats.
Stratégie de sécurité locale.
Faire défiler la fenêtre suivante jusqu'à trouver "Ouverture de session interactive : ne pas demander la combinaison de touche Ctrl + Alt + Suppr". Double-cliquez dessus.
Ouverture de session interactive, cliquer sur Désactiver puis sur OK.
Autoriser combinaison Ctrl + Alt + Del
Désormais, quand vous voudrez vous connecter ou déverrouiller votre session, Windows vous obligera à appuyer sur cette combinaison de touches.

Désactiver le Bureau à distance

Désactiver le Bureau à distance :
Le "Bureau à distance" est une fonctionnalité permettant de contrôler graphiquement votre ordinateur de l'extérieur. Avoir cette fonctionnalité activée peut être dangereux, surtout si le mot de passe utilisé n'est pas suffisamment efficace. Un utilisateur malveillant pourrait alors prendre le contrôle de votre ordinateur (avec les droits d'utilisateur normaux) et accéder à vos fichiers. Il est conseillé de le désactiver lorsqu'il ne vous est pas utile. Pour le désactiver, entrez la commande suivante dans un terminal : gsettings set org.gnome.Vino enabled false.

Désactiver le Bluetooth

# Installer rfkill :
apt-get install rfkill
# La commande rfkill ne liste que les adaptateur réseau WIFI ou BLUETOOTH externes PCMCIA ou USB.
# Les chipsets internes ne sont pas listés.
# Éditer le fichier /etc/rc.local avec les droits d'administrateur pour désactiver en permanence le Bluetooth au démarrage du système Linux, sous Ubuntu.
# Ajouter la ligne suivante pour désactiver le Bluetooth au démarrage avant la ligne "exit 0" :
rfkill block bluetooth
# Enregistrer le fichier.
# Lors du prochain démarrage, le module Bluetooth ne sera plus chargé.
# Pour ce périphérique ou tout autres périphériques, en cas de message d'erreur :
Operation not possible due to RF-kill
Opération impossible du fait de RF-kill
# Lister les périphériques bloqués :
rfkill list
# Débloquer un périphérique donné :
rfkill unblock 0
# Débloquer tous les périphériques :
rfkill unblock all
# Sous Linux Mint je constate que l'icône Bluetooth est toujours présent dans la barre d'action et activé au démarrage.
# Pour désactiver le chargement automatique au démarrage, aller dans le menu, Session et démarrage, Démarrage automatique d'applications, désactiver Applet Blueman et Bluetooth OBEX.
# L'icône sera toujours présent mais le Bluetooth sera désactivé au démarrage. Cliquer sur l'icône pour activer le Bluetooth. (Vérifier que le Bluetooth soit bien fonctionnel.)
# Une autre option doit restée présente dans le menu, Session et démarrage, Démarrage automatique d'applications, il s'agit de blueberry (Blueberry tray icon) qui doit être chargé au boot pour être fonctionnelle.
Ok-ko.png Source : https://doc.ubuntu-fr.org/bluetooth

Journalisation et audit des fichiers de logs

Gestion des logs.
Les fichiers de logs sur Debian.

Analyser et afficher un visuel des statistiques de fréquentation de votre site

Awstats

Site officiel : https://awstats.sourceforge.io

Port Knocking

Le Port Knocking est une méthode simple pour autoriser un accès distant sur un port qui n'est pas constamment ouvert. Cela permet d'éviter les scans de ports et certaines attaques automatiques.
Il permet de modifier le comportement d'un pare-feu en temps réel pour ouvrir un port suite au lancement préalable d'une suite de connexions dans le bon ordre sur des ports distincts.
En savoir plus sur le Port Knocking.

Crontab

Pour automatiser les tâches de sécurité et de maintenance.
La crontab.
a1- Une instruction(script) nocturne qui monte un point de montage réseau
a2- Une autre (qlq min plus tard) qui arrête le serveur sql, mais ça peut aller jusqu'à présenter une jolie page d'accueil de maintenance avec un sablier.
a3- Une autre (qlq min plus tard) qui fait le dump en écrivant sur le point de montage.
a4- Une autre (qlq min plus tard) qui redémarre le serveur sql.
a5- Éventuellement remet l'application web en service et démonte le point de montage.

Fail2ban

Installer et utiliser Fail2ban.

IPQ BDB filter

Peut être considéré comme un fail2ban allégé.
Ko.png Source : https://savannah.nongnu.org/projects/ipqbdb/

SSHGuard

https://forums.freebsd.org/threads/fail2ban-or-sshguard-and-brute-force-prevention.44255/
https://wiki.archlinux.org/index.php/Sshguard

Antivirus

Beaucoup de personnes disent que les systèmes d’exploitation Linux ne sont pas sensible au virus mais c'est faux !
Les virus peuvent être présent et inactifs car conçus pour attaquer un système Windows.
D'autres peuvent fonctionner sous GNU/Linux et réellement infecter votre machine.

ClamAV

Installer ClamAV

# Installer ClamAV :
sudo apt install clamav
# Mettre a jour la base de donnée des antivirus :
sudo freshclam

# En cas d'erreur :
ERROR: /var/log/clamav/freshclam.log is locked by another process
# Ce comportement semble normal sur Debian, un service s'occupe de ma mise à jour :
sudo service clamav-freshclam status

# Vérifier le nombre d'exécution de ClamAV :
ps aux | grep fresh
sudo ps aux | grep fresh
# Tuer freshclam :
sudo killall freshclam

# Relancer la mise à jour de la base de données des antivirus :
sudo bash
freshclam
# L'étape de test semble se figer :
# -> Testing database: '/var/lib/clamav/tmp.f6868/clamav-53ce49da068d9bcfab2cb04fbcd87f80.tmp-daily.cvd' ...
# CTRL C pour aborder cette étape.
# J'arrête les services php7.3-fpm mysql et apache2 pour avoir d'avantage de ram disponible.
# Je relance freshclam qui va s'exécuter instantanément, mais, une erreur est retournée sur l'absence d'un fichier de configuration :
freshclam
-> Testing database: '/var/lib/clamav/tmp.37fcc/clamav-ca05c0978f692bc5d714c278a6063ae8.tmp-bytecode.cvd' ...
-> Database test passed.
-> bytecode.cvd updated (version: 331, sigs: 94, f-level: 63, builder: anvilleg)
-> !NotifyClamd: Can't find or parse configuration file /etc/clamav/clamd.conf
# Debian n'installe pas comme dépendance le paquet clamav-daemon hors c'est avec lui qu'est intégré le fichier /etc/clamav/clamd.conf.
sudo apt install clamav-daemon

# Relancer le service qui a été tué :
sudo service clamav-freshclam start
freshclam
# Arrêter ClamAV :
# Conserver le service éteint en cas de ressources insuffisantes :
sudo service clamav-freshclam stop
# Le fichier freshclam.conf permet de définir la périodicité de la mise à jour :
sudo nano /etc/clamav/freshclam.conf

Analyser les fichiers avec ClamAV

# Consulter les options de ClamAV :
sudo clamscan --help
# Lancer l'antivirus avec la commande suivante pour faire une analyse récursive :
cd /
sudo clamscan -r
# Lancer l'antivirus avec la commande suivante pour supprimer immédiatement les éléments identifiés :
sudo clamscan -r --remove /
# Créer une tâche Cron pour automatiser l'analyse de virus, par exemple tout les jours a 2 heures du matin !
sudo crontab -e
02 1 * * * root clamscan -ri --remove /
# L'antivirus a été installé, mis a jour et planifié !

Sources complémentaires pour ClamAV

Source complémentaire : blog.avis-planethoster.com/trucs-astuces/installer-clamav-sur-cpanel-centos-3118
Source complémentaire : https://wiki.auf.org/wikiteki/RogerYerbanga/Exim4
Source complémentaire : https://debian-facile.org/doc:systeme:clamav
Source complémentaire : https://florianlaloge.fr/2018/02/07/installer-lantivirus-clamav-sous-debian-9/
Source complémentaire : https://www1.zonewebmaster.eu/serveur-debian-securite:installation-clamav
Source complémentaire : https://doc.ubuntu-fr.org/clamav

LMD avec ClamAV

Site officiel : https://www.rfxn.com/projects/linux-malware-detect/
How to Install and Use Linux Malware Detect (LMD) with ClamAV as Antivirus Engine : https://www.tecmint.com/install-linux-malware-detect-lmd-in-rhel-centos-and-fedora/
Ce tutoriel est écrit pour Fedora. Préférer une ressource disponible pour Debian.

ClamTK

# ClamTK est une interface graphique pour utiliser ClamAV.
# Installer ClamTK :
sudo apt-get install clamtk
Source : https://packages.debian.org/jessie/utils/clamtk
Tutoriel : https://debian-facile.org/doc:systeme:clamav
Complément : https://doc.ubuntu-fr.org/antivirus

Antivirus en ligne

Antivirus en ligne de Bitdefender - FR : http://www.bitdefender.fr/scanner/online/analyse-gratuite.html
Antivirus en ligne de Bitdefender - Ang : http://www.bitdefender.com/scanner/online/free.html
AVG : https://www.avg.com/en/signal/website-safety (Informations pour l'extension du navigateur permettant de vérifier un site.)
AVG : https://www.avg.com (Téléchargement.) 
Eset scanner antivirus en ligne : http://www.eset.com/fr/home/products/online-scanner/
Safety Scanner Antivirus de Microsoft : http://www.microsoft.com/security/scanner/fr-fr/default.aspx
Scanner Antivirus Kaspersky : http://www.kaspersky.com/virus-scanner
ScanURL : https://scanurl.net
Secuser Antivirus en ligne pour Windows : http://www.secuser.com/antivirus/index.htm
Urlvoid : http://www.urlvoid.com/
Antivirus Virus total permet de scanner un fichier spécifique en ligne : https://www.virustotal.com/fr/
Télécharger les antivirus et autres outils de Secuser pour protéger votre ordinateur : http://www.secuser.com/telechargement/index.htm
Live CD et Live USB antivirus : http://www.commentcamarche.net/faq/34318-les-live-cd-et-live-usb-antivirus

Anti Rootkits

Source : https://www.cyberciti.biz/faq/howto-check-linux-rootkist-with-detectors-software/

Zeppoo

Zeppoo vous permet de détecter les rootkits sous les architectures i386 et x86_64 sous Linux, en utilisant /dev/kmem et /dev/mem.
Il peut également détecter des tâches cachées, des connexions, des symboles corrompus, des appels système et bien d'autres choses encore.
Télécharger le code source : https://sourceforge.net/projects/zeppoo/

Chkrootkit

# Contre les rootkit.
# Installer Chkrootkit :
sudo apt-get install chkrootkit
# Démarrer le programme :
sudo chkrootkit
# Chercher les chaînes suspectes :
sudo chkrootkit -x | less
# Analyser un répertoire spécifique :
sudo chkrootkit -p /mnt/safe

Rkhunter

# Rkhunter permet d'informer l'administrateur en cas de modification de fichiers sensibles.
# Rkhunter permet de réduire les risques de dégradations par rootkit.
sudo apt-get install rkhunter

Commandes de Rkhunter

# Mettre le programme Rkhunter à jour.
sudo rkhunter --update 
# Lancer une analyse.
sudo rkhunter -c --rwo --sk
sudo rkhunter --check
# Analyser un répertoire spécifique :
sudo rkhunter --check --bindir /mnt/safe
# Les options de l'analyse.
# -c                           : vérifier le système entier
# --rwo (report-warnings-only) : n'afficher que les erreurs ou alertes
# --sk (skip-keypress)         : ne pas attendre d'intervention de la part de l'utilisateur
# -l rkhunter.log              : insérer un résumé dans un fichier log

Paramétrage de rkhunter

Ouvrir le fichier /etc/rkhunter.conf
# Ou :
Vérifier dans son fichier de configuration /etc/default/rkhunter que report_email est sur root et cron_daily_run à yes.
# Spécifier une ou plusieurs adresses mails, vous recevrez des mails si des fichiers sensibles sont modifiées.
MAIL-ON-WARNING=root@localhost mail@administrateur.fr
# Envoyer les informations à Syslog-NG :
USE_SYSLOG=authpriv.warning
# (...)
ALLOW_SYSLOG_REMOTE_LOGGING=1
Comprendre et sécuriser les erreurs une à une
# Attention toutefois, car il peut générer des faux positifs.
/usr/bin/lwp-request                                     [ Warning ]
Source : https://unix.stackexchange.com/questions/373718/rkhunter-gives-me-a-warning-for-usr-bin-lwp-request-what-should-i-do-debi

Audit de sécurité

Scanner de vulnérabilité Bastille

Bastille Linux est un outil de renforcement de la sécurité pour GNU/Linux. Il aide à améliorer la sécurité soit en désactivant des services, s'ils ne sont pas indispensables, ou en modifiant leur configuration.
Quand il est utilisé dans le mode interactif (ce qui est recommandé), Bastille aide l'administrateur durant le processus de sécurisation ; à chaque étape du processus, une description détaillée des notions de sécurité impliquées est donnée. Chaque étape est optionnelle. Lorsqu'il est utilisé dans le mode automatique, plus rapide, Bastille sécurise le système selon le profil choisi.
Bastille Linux fonctionne avec plusieurs distributions Linux, mais ce paquet a été spécialement modifié pour Debian GNU/Linux.

Installer Bastille

Installer le paquet bastille avec la commande apt install bastille.

Désinstaller Bastille

Pour supprimer cette application, il suffit de supprimer son paquet. Selon la méthode choisie, la configuration globale de l'application est conservée ou supprimée.
Les journaux du système, et, les fichiers de préférence des utilisateurs dans leurs dossiers personnels, sont toujours conservés.
Ok-ko.png Source : https://doc.ubuntu-fr.org/bastille
Ok-ko.png Site officiel : http://bastille-linux.sourceforge.net
Ok-ko.png Définition Wikipédia : https://fr.wikipedia.org/wiki/Bastille_UNIX

Scanner de vulnérabilité Lynis

# Installer Lynis :
sudo apt install lynis
Le site officiel de Lynis : https://cisofy.com/lynis/
Le Github officiel de Lynis : https://github.com/CISOfy/lynis
Détail du paquet Debian de Lynis : https://packages.debian.org/stretch/lynis
# Lancer l'une des deux commandes suivantes pour obtenir le même rapport de sécurité.
# Devrait fonctionner sans le sudo, et, il devrait être préférable de lancer la commande sans sudo.
sudo lynis audit system
sudo lynis --pentest

Exemple de rapport Lynis depuis une machine virtuelle avec une installation minimaliste de GNU/Linux Mint 18.3

[+] System Tools
------------------------------------
 - Scanning available tools...
 - Checking system binaries...
[+] Plugins (phase 1)
------------------------------------
Note: plugins have more extensive tests, which may take a few minutes to complete
 
 - Plugin: debian
   [
[+] Debian Tests
------------------------------------
 - Checking for system binaries that are required by Debian Tests...[-8C
   - Checking /bin...                                        [ FOUND ]
   - Checking /sbin...                                       [ FOUND ]
   - Checking /usr/bin...                                    [ FOUND ]
   - Checking /usr/sbin...                                   [ FOUND ]
   - Checking /usr/local/bin...                              [ FOUND ]
   - Checking /usr/local/sbin...                             [ FOUND ]
 - Authentication:
   - PAM (Pluggable Authentication Modules):
     - libpam-tmpdir                                         [ Not Installed ]
     - libpam-usb                                            [ Not Installed ]
 - File System Checks:
   - DM-Crypt, Cryptsetup & Cryptmount:
     - Checking / on /dev/sda1                               [ NOT ENCRYPTED ]
     - Checking /media/sf_Téléchargements on /home/zencool/Téléchargements�[-18C [ NOT ENCRYPTED ]
   - Ecryptfs                                                [ INSTALLED ]
     - Home for zencool                                      [ NO ]
     - Home for vboxadd                                      [ NO ]
 - Software:
   - apt-listbugs                                            [ Not Installed ]
   - apt-listchanges                                         [ Not Installed ]
   - checkrestart                                            [ Not Installed ]
   - debsecan                                                [ Not Installed ]
   - debsums                                                 [ Not Installed ]
   - fail2ban                                                [ Not Installed ]
[ Press [ENTER] to continue, or [CTRL]+C to stop ]
[+] Boot and services
------------------------------------
 - Service Manager                                           [ UNKNOWN ]
   - Checking presence GRUB2                                 [ FOUND ]
   - Checking for password protection                        [ WARNING ]
 - Check running services (systemctl)                        [ DONE ]
       Result: found 27 running services
 - Check enabled services at boot (systemctl)                [ DONE ]
       Result: found 50 enabled services
 - Check startup files (permissions)                         [ OK ]
[ Press [ENTER] to continue, or [CTRL]+C to stop ]
[+] Kernel
------------------------------------
 - Checking default run level                                [ RUNLEVEL 5 ]
 - Checking CPU support (NX/PAE)
   CPU support: PAE and/or NoeXecute supported               [ FOUND ]
 - Checking kernel version and release                       [ DONE ]
 - Checking kernel type                                      [ DONE ]
 - Checking loaded kernel modules                            [ DONE ]
     Found 58 active modules
 - Checking Linux kernel configuration file                  [ FOUND ]
 - Checking default I/O kernel scheduler                     [ FOUND ]
 - Checking for available kernel update                      [ OK ]
 - Checking core dumps configuration                         [ DISABLED ]
   - Checking setuid core dumps configuration                [ DEFAULT ]
 - Check if reboot is needed                                 [ NO ]
[ Press [ENTER] to continue, or [CTRL]+C to stop ]
[+] Memory and processes
------------------------------------
 - Checking /proc/meminfo                                    [ FOUND ]
 - Searching for dead/zombie processes                       [ OK ]
 - Searching for IO waiting processes                        [ OK ]
[ Press [ENTER] to continue, or [CTRL]+C to stop ]
[+] Users, Groups and Authentication
------------------------------------
 - Search administrator accounts                             [ OK ]
 - Checking for non-unique UIDs                              [ OK ]
 - Checking consistency of group files (grpck)               [ OK ]
 - Checking non unique group ID's                            [ OK ]
 - Checking non unique group names                           [ OK ]
 - Checking password file consistency                        [ OK ]
 - Query system users (non daemons)                          [ DONE ]
 - Checking NIS+ authentication support                      [ NOT ENABLED ]
 - Checking NIS authentication support                       [ NOT ENABLED ]
 - Checking sudoers file                                     [ FOUND ]
   - Check sudoers file permissions                          [ OK ]
 - Checking PAM password strength tools                      [ SUGGESTION ]
 - Checking PAM configuration files (pam.conf)               [ FOUND ]
 - Checking PAM configuration files (pam.d)                  [ FOUND ]
 - Checking PAM modules                                      [ FOUND ]
 - Checking LDAP module in PAM                               [ NOT FOUND ]
 - Checking accounts without expire date                     [ OK ]
 - Checking accounts without password                        [ OK ]
 - Checking user password aging                              [ DISABLED ]
 - Determining default umask
   - Checking umask (/etc/profile)                           [ OK ]
   - Checking umask (/etc/login.defs)                        [ SUGGESTION ]
   - Checking umask (/etc/init.d/rc)                         [ SUGGESTION ]
 - Checking LDAP authentication support                      [ NOT ENABLED ]
[ Press [ENTER] to continue, or [CTRL]+C to stop ]
[+] Shells
------------------------------------
 - Checking shells from /etc/shells
   Result: found 5 shells (valid shells: 5).
   - Session timeout settings/tools                          [ NONE ]
[ Press [ENTER] to continue, or [CTRL]+C to stop ]
[+] File systems
------------------------------------
 - Checking mount points
   - Checking /home mount point                              [ OK ]
   - Checking /tmp mount point                               [ SUGGESTION ]
   - Checking /var mount point                               [ SUGGESTION ]
 - Checking LVM volume groups                                [ NONE ]
 - Querying FFS/UFS mount points (fstab)                     [ NONE ]
 - Query swap partitions (fstab)                             [ OK ]
 - Testing swap partitions                                   [ OK ]
 - Checking for old files in /tmp                            [ OK ]
 - Checking /tmp sticky bit                                  [ OK ]
 - ACL support root file system                              [ ENABLED ]
 - Checking Locate database                                  [ FOUND ]
[ Press [ENTER] to continue, or [CTRL]+C to stop ]
[+] Storage
------------------------------------
 - Checking usb-storage driver (modprobe config)             [ NOT DISABLED ]
 - Checking firewire ohci driver (modprobe config)           [ DISABLED ]
[ Press [ENTER] to continue, or [CTRL]+C to stop ]
[+] NFS
------------------------------------
 - Check running NFS daemon                                  [ NOT FOUND ]
[ Press [ENTER] to continue, or [CTRL]+C to stop ]
[+] Name services
------------------------------------
 - Checking default DNS search domain                        [ NONE ]
 - Checking search domains                                   [ FOUND ]
 - Checking /etc/resolv.conf options                         [ NONE ]
 - Searching DNS domain name                                 [ FOUND ]
     Domain name: MintTesting
 - Checking nscd status                                      [ NOT FOUND ]
 - Checking BIND status                                      [ NOT FOUND ]
 - Checking PowerDNS status                                  [ NOT FOUND ]
 - Checking ypbind status                                    [ NOT FOUND ]
 - Checking /etc/hosts
   - Checking /etc/hosts (duplicates)                        [ OK ]
   - Checking /etc/hosts (hostname)                          [ OK ]
   - Checking /etc/hosts (localhost)                         [ OK ]
[ Press [ENTER] to continue, or [CTRL]+C to stop ]
[+] Ports and packages
------------------------------------
 - Searching package managers
   - Searching dpkg package manager                          [ FOUND ]
     - Querying package manager
   - Query unpurged packages                                 [ FOUND ]
 - Checking security repository in sources.list.d directory  [ OK ]
W: https://minergate.com/repo/deb/dists/stable/InRelease: Signature by key 33BDA78F1D398B52D01438F603F0D99C2EC4C39D uses weak digest algorithm (SHA1)
 - Checking vulnerable packages (apt-get only)               [ DONE ]
 - Checking package audit tool                               [ NONE ]
[ Press [ENTER] to continue, or [CTRL]+C to stop ]
[+] Networking
------------------------------------
 - Checking configured nameservers
   - Testing nameservers
       Nameserver: 127.0.0.1                                 [ OK ]
 - Checking default gateway                                  [ DONE ]
 - Getting listening ports (TCP/UDP)                         [ DONE ]
     * Found 25 ports
 - Checking promiscuous interfaces                           [ OK ]
 - Checking waiting connections                              [ OK ]
 - Checking status DHCP client                               [ RUNNING ]
[ Press [ENTER] to continue, or [CTRL]+C to stop ]
[+] Printers and Spools
------------------------------------
 - Checking cups daemon                                      [ RUNNING ]
 - Checking CUPS configuration file                          [ OK ]
   - File permissions                                        [ WARNING ]
 - Checking CUPS addresses/sockets                           [ FOUND ]
 - Checking lp daemon                                        [ NOT RUNNING ]
[ Press [ENTER] to continue, or [CTRL]+C to stop ]
[+] Software: e-mail and messaging
------------------------------------
 - Checking Exim status                                      [ NOT FOUND ]
 - Checking Postfix status                                   [ NOT FOUND ]
 - Checking Qmail status                                     [ NOT FOUND ]
 - Checking Sendmail status                                  [ NOT FOUND ]
[ Press [ENTER] to continue, or [CTRL]+C to stop ]
[+] Software: firewalls
------------------------------------
 - Checking iptables kernel module                           [ NOT FOUND ]
   - Checking pflogd status                                  [ NOT FOUND ]
 - Checking pf                                               [ NOT FOUND ]
 - Checking host based firewall                              [ NOT ACTIVE ]
[ Press [ENTER] to continue, or [CTRL]+C to stop ]
[+] Software: webserver
------------------------------------
 - Checking Apache                                           [ NOT FOUND ]
 - Checking nginx                                            [ NOT FOUND ]
[ Press [ENTER] to continue, or [CTRL]+C to stop ]

[+] SSH Support
------------------------------------
 - Checking running SSH daemon                               [ FOUND ]
   - Searching SSH configuration                             [ FOUND ]
   - Checking defined SSH options                            [ DONE ]
   - SSH option: PermitRootLogin                             [ DEFAULT ]
   - SSH option: Protocol                                    [ OK ]
   - SSH option: StrictModes                                 [ OK ]
   - SSH option: AllowUsers                                  [ NOT FOUND ]
   - SSH option: AllowGroups                                 [ NOT FOUND ]
[ Press [ENTER] to continue, or [CTRL]+C to stop ]
[+] SNMP Support
------------------------------------
 - Checking running SNMP daemon                              [ NOT FOUND ]
[ Press [ENTER] to continue, or [CTRL]+C to stop ]
[+] Databases
------------------------------------
 - MySQL process status                                      [ NOT FOUND ]
 - PostgreSQL processes status                               [ NOT FOUND ]
 - Oracle processes status                                   [ NOT FOUND ]
[ Press [ENTER] to continue, or [CTRL]+C to stop ]
[+] LDAP Services
------------------------------------
 - Checking OpenLDAP instance                                [ NOT FOUND ]
[ Press [ENTER] to continue, or [CTRL]+C to stop ]
[+] PHP
------------------------------------
 - Checking PHP                                              [ NOT FOUND ]
[ Press [ENTER] to continue, or [CTRL]+C to stop ]
[+] Squid Support
------------------------------------
 - Checking running Squid daemon                             [ NOT FOUND ]
[ Press [ENTER] to continue, or [CTRL]+C to stop ]
[+] Logging and files
------------------------------------
 - Checking for a running log daemon                         [ OK ]
   - Checking Syslog-NG status                               [ NOT FOUND ]
   - Checking systemd journal status                         [ FOUND ]
   - Checking Metalog status                                 [ NOT FOUND ]
   - Checking RSyslog status                                 [ FOUND ]
   - Checking RFC 3195 daemon status                         [ NOT FOUND ]
   - Checking minilogd instances                             [ NOT FOUND ]
 - Checking logrotate presence                               [ OK ]
 - Checking log directories (static list)                    [ DONE ]
 - Checking open log files                                   [ DONE ]
 - Checking deleted files in use                             [ FILES FOUND ]
[ Press [ENTER] to continue, or [CTRL]+C to stop ]
[+] Insecure services
------------------------------------
 - Checking inetd status                                     [ NOT ACTIVE ]
[ Press [ENTER] to continue, or [CTRL]+C to stop ]
[+] Banners and identification
------------------------------------
 - /etc/motd                                                 [ NOT FOUND ]
 - /etc/issue                                                [ FOUND ]
   - /etc/issue contents                                     [ WEAK ]
 - /etc/issue.net                                            [ FOUND ]
   - /etc/issue.net contents                                 [ WEAK ]
[ Press [ENTER] to continue, or [CTRL]+C to stop ]
[+] Scheduled tasks
------------------------------------
 - Checking crontab/cronjob                                  [ DONE ]
 - Checking atd status                                       [ NOT RUNNING ]
[ Press [ENTER] to continue, or [CTRL]+C to stop ]
[+] Accounting
------------------------------------
 - Checking accounting information                           [ NOT FOUND ]
 - Checking sysstat accounting data                          [ NOT FOUND ]
 - Checking auditd                                           [ NOT FOUND ]
[ Press [ENTER] to continue, or [CTRL]+C to stop ]
[+] Time and Synchronization
------------------------------------
 - NTP daemon found: ntpd                                    [ FOUND ]
 - Checking event based ntpdate (if-up)                      [ FOUND ]
 - Checking for a running NTP daemon or client               [ OK ]
 - Checking valid association ID's                           [ FOUND ]
 - Checking high stratum ntp peers                           [ WARNING ]
 - Checking unreliable ntp peers                             [ FOUND ]
 - Checking selected time source                             [ OK ]
 - Checking time source candidates                           [ OK ]
 - Checking falsetickers                                     [ OK ]
 - Checking NTP version                                      [ FOUND ]
[ Press [ENTER] to continue, or [CTRL]+C to stop ]
[+] Cryptography
------------------------------------
 - Checking SSL certificate expiration                       [ OK ]
[ Press [ENTER] to continue, or [CTRL]+C to stop ]
[+] Virtualization
------------------------------------
[ Press [ENTER] to continue, or [CTRL]+C to stop ]
[+] Containers
------------------------------------
[ Press [ENTER] to continue, or [CTRL]+C to stop ]
[+] Security frameworks
------------------------------------
 - Checking presence AppArmor                                [ NOT FOUND ]
 - Checking presence SELinux                                 [ NOT FOUND ]
 - Checking presence grsecurity                              [ NOT FOUND ]
 - Checking for implemented MAC framework                    [ NONE ]
[ Press [ENTER] to continue, or [CTRL]+C to stop ]
[+] Software: file integrity
------------------------------------
 - Checking file integrity tools
 - Checking presence integrity tool                          [ NOT FOUND ]
[ Press [ENTER] to continue, or [CTRL]+C to stop ]
[+] Software: System tooling
------------------------------------
 - Checking automation tooling
 - Automation tooling                                        [ NOT FOUND ]
[ Press [ENTER] to continue, or [CTRL]+C to stop ]
[+] Software: Malware scanners
------------------------------------
 - Checking Rootkit Hunter                                   [ FOUND ]
[ Press [ENTER] to continue, or [CTRL]+C to stop ]
[+] File Permissions
------------------------------------
 - Starting file permissions check
   /etc/lilo.conf                                            [ NOT FOUND ]
   /root/.ssh                                                [ OK ]
[ Press [ENTER] to continue, or [CTRL]+C to stop ]
[+] Home directories
------------------------------------
 - Checking shell history files                              [ OK ]
[ Press [ENTER] to continue, or [CTRL]+C to stop ]
[+] Kernel Hardening
------------------------------------
 - Comparing sysctl key pairs with scan profile
   - kernel.core_uses_pid (exp: 1)                           [ DIFFERENT ]
   - kernel.ctrl-alt-del (exp: 0)                            [ OK ]
   - kernel.kptr_restrict (exp: 1)                           [ OK ]
   - kernel.sysrq (exp: 0)                                   [ DIFFERENT ]
   - net.ipv4.conf.all.accept_redirects (exp: 0)             [ DIFFERENT ]
   - net.ipv4.conf.all.accept_source_route (exp: 0)          [ OK ]
   - net.ipv4.conf.all.bootp_relay (exp: 0)                  [ OK ]
   - net.ipv4.conf.all.forwarding (exp: 0)                   [ OK ]
   - net.ipv4.conf.all.log_martians (exp: 1)                 [ DIFFERENT ]
   - net.ipv4.conf.all.mc_forwarding (exp: 0)                [ OK ]
   - net.ipv4.conf.all.proxy_arp (exp: 0)                    [ OK ]
   - net.ipv4.conf.all.rp_filter (exp: 1)                    [ OK ]
   - net.ipv4.conf.all.send_redirects (exp: 0)               [ DIFFERENT ]
   - net.ipv4.conf.default.accept_redirects (exp: 0)         [ DIFFERENT ]
   - net.ipv4.conf.default.accept_source_route (exp: 0)      [ DIFFERENT ]
   - net.ipv4.conf.default.log_martians (exp: 1)             [ DIFFERENT ]
   - net.ipv4.icmp_echo_ignore_broadcasts (exp: 1)           [ OK ]
   - net.ipv4.icmp_ignore_bogus_error_responses (exp: 1)     [ OK ]
   - net.ipv4.tcp_syncookies (exp: 1)                        [ OK ]
   - net.ipv4.tcp_timestamps (exp: 0)                        [ DIFFERENT ]
   - net.ipv6.conf.all.accept_redirects (exp: 0)             [ DIFFERENT ]
   - net.ipv6.conf.all.accept_source_route (exp: 0)          [ OK ]
   - net.ipv6.conf.default.accept_redirects (exp: 0)         [ DIFFERENT ]
   - net.ipv6.conf.default.accept_source_route (exp: 0)      [ OK ]
[ Press [ENTER] to continue, or [CTRL]+C to stop ]
[+] Hardening
------------------------------------
   - Installed compiler(s)                                   [ FOUND ]
   - Installed malware scanner                               [ FOUND ]

Scanner de vulnérabilité OpenVAS

# Le résultat d'un scan Openvas fournira :
- La liste des vulnérabilités par niveaux critique.
- Une description des vulnérabilités.
- La méthode ou un lien pour corriger le problème.
Source : https://doc.ubuntu-fr.org/openvas
Source complémentaire : https://fr.wikipedia.org/wiki/OpenVAS
Source Github : https://github.com/greenbone/openvas

Scanner de vulnérabilité Nessus

Installer le scanner de vulnérabilité Nessus.

Scanner de vulnérabilité Netsparker

https://www.netsparker.com/penetration-testing-tool

Scanner de vulnérabilité Nikto

Nikto est un scanner de vulnérabilité pour les serveurs web, et est programmé en langage P.E.R.L.
Ses fonctionnalités sont d'auditer vos serveurs web à la recherche de failles diverses, de tester potentiellement près de 6000 vulnérabilités CGI et fichiers dangereux, de vérifier l'obsolescence du serveur et ses composants logiciels, de rechercher les dossiers pouvant contenir des informations sensibles. 
Source : https://doc.ubuntu-fr.org/nikto
Analyse des serveurs Web et acheminement vers Nikto pour analyse.
nmap -p80 192.168.1.2/24 -oG - | /path/to/nikto.pl -h -
nmap -p80,443 192.168.1.2/24 -oG - | /path/to/nikto.pl -h -

Scanner de vulnérabilité MaxPatrol

.

Scanner de vulnérabilité Retina

.

Scanner de vulnérabilité Shadow Security Scanner

.

Scanner de vulnérabilité Net Clarity Auditor

.

Scanner de vulnérabilité w3af

.

Scanner de vulnérabilité web wapiti

File Handling Errors (Local and remote include/require, fopen, readfile…)
Database Injections (PHP/JSP/ASP SQL Injections and XPath Injections)
XSS (Cross Site Scripting) Injection
LDAP Injection
Command Execution detection (eval(), system(), passtru()…)
CRLF Injection (HTTP Response Splitting, session fixation…)
Wapiti : http://www.ict-romulus.eu/web/wapiti/home

Scanner de vulnérabilité Netdiscover

Netdiscover - Active / Passive ARP Scanner.

Scanner de vulnérabilité web-douleur

Un scanner Web à distance pour la version Détection, Misconfiguration et Server Enumeration.

Scanner de vulnérabilité Secapps

Application en ligne payante en démonstration durant 14 jours.
Secapps : https://secapps.com

Détecteur d'intrusion - NIDS

AIDE

Ok-ko.png Source : https://www.cyberciti.biz/faq/debian-ubuntu-linux-software-integrity-checking-with-aide/

psad - Port Scan Attack Detector

Ok-ko.png Source : http://manpages.ubuntu.com/manpages/bionic/man8/psad.8.html

Snort

Snort est un IDS qui vous permettra de détecter d'éventuelles intrusions, de gérer vos logs et sniffer votre réseau.
# Installation
aptitude install mysql-server snort-mysql 
# Choisir le réseau qui vous convient, ici je choisis par exemple de ne surveiller que la plage d'adresses allant de 192.168.0.0 à 192.168.0.255.
# Il va falloir créer une base de données :
root@serveur # mysql -u root -p -h localhost
mysql > CREATE DATABASE `snort` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
mysql > CREATE USER `snortu`@`localhost`;
mysql > SET PASSWORD FOR `snortu`@`localhost`=PASSWORD('snortp');
mysql > GRANT CREATE, DELETE, INSERT, SELECT, UPDATE on `snort`.* to `snortu`@`localhost`;
mysql > quit 
Ainsi qu'y créer les tables :
# root@serveur # cd /usr/share/doc/snort-mysql/
# root@serveur # zcat create_mysql.gz | mysql -u root -p -h localhost snort 
Copier le fichier de configuration de snort tel que :
# root@serveur # cp /etc/snort/snort.conf /etc/snort/snort.interface.conf 
# Note : remplacer interface par votre interface réseau, chez moi eth0. 
Configuration
# Ouvrir le fichier /etc/snort/snort.eth0.conf.
# Modifier le réseau surveillé
var HOME_NET 192.168.0.0/24
# Commenter la ligne suivante :
output log_tcpdump: tcpdump.log
# Appliquer les règles sur les SellCodes
include $RULE_PATH/virus.rules
include $RULE_PATH/shellcode.rules
# Optionnel : commenter certaines règles qui, ici, ne sont d'aucune utilité :
#include $RULE_PATH/web-cgi.rules
#include $RULE_PATH/web-coldfusion.rules
#include $RULE_PATH/web-iis.rules
#include $RULE_PATH/web-frontpage.rules
#include $RULE_PATH/community-web-iis.rules
#include $RULE_PATH/x11.rules
#include $RULE_PATH/oracle.rules
#include $RULE_PATH/community-oracle.rules
#include $RULE_PATH/pop2.rules
#include $RULE_PATH/nntp.rules
#include $RULE_PATH/community-nntp.rules
#include $RULE_PATH/community-sip.rules
# Ouvrir le fichier /etc/snort/database.conf et modifer la dernière ligne :
output database: alert, mysql, dbname=snort user=snortu password=snortp host=localhost
Lancement
# Un fichier a peut-être été automatiquement créé afin de bloquer le démarrage du démon, on va le supprimer.
rm /etc/snort/db-pending-config 
# Lancer snort.
root@serveur # service snort start 
# Note : lorsque l'on utilise une autre interface qu'eth0 (par exemple wlan1), il faut lancer snort manuellement.
root@serveur # snort -u utilisateur -c /etc/snort/snort.wlan1.conf -i wlan1 -D 
Ok-ko.png https://wiki.monitoring-fr.org/securite/snort/snort-ubuntu-install
Ok-ko.png https://www.unixmen.com/install-snort-nids-ubuntu-15-04/
Ko.png La documentation Ubuntu est obsolète : https://doc.ubuntu-fr.org/snort
Il est possible d'obtenir de plus amples informations concernant ce logiciel sur Wikipédia.

Acid

ACID est un analyseur de log pour Snort.
Il permet de visualiser facilement les log de Snort par l'intermédiaire d'une interface web.
# Installation
apt install acidbase
# Configuration
Copier le fichier de configuration d'acidbase pour pouvoir se rendre sur l'interface web :
root@serveur # cp /etc/acidbase/apache.conf /etc/apache2/sites-available/acidbase 
Éditer ce fichier pour donner accès à une machine distante de confiance, ajouter ceci en dessous de allow from 127.0.0.0/255.0.0.0 :
allow from 192.168.0.3
Commenter les 3 premières lignes :
#<IfModule mod_alias.c>
#  Alias /acidbase "/usr/share/acidbase"
#</IfModule>
Ouvrir le fichier /etc/acidbase/base_conf.php et modifier tel que :
$BASE_Language = 'french';
$colored_alerts = 1;
Ouvrir le fichier /etc/acidbase/database.php et modifier tel que :
$alert_user='snortu';
$alert_password='snortp';
$basepath=;
$alert_dbname='snort';
$alert_host=;
$alert_port=;
$DBtype='mysql';
Lancement, activer acidbase :
root@serveur # a2ensite acidbase 
Relancer apache :
root@serveur # service apache2 reload 
Maintenant, vous pouvez vous rendre à l'adresse www.test.sec/acidbase/ pour terminter l'installation d'ACID(BASE) et décortiquer les alertes.

Base remplace Acid

Tutoriel : http://wiki.livois.com/mediawiki/index.php?title=Gestion_des_logs

Suricata

https://doc.ubuntu-fr.org/suricata

Tests de montées en charge

Pour Apache2

Consulter Jmeter pour Apache2.

Scanner le réseau

Installer Nmap et scanner le réseau.
Installer Wireshark et scanner le réseau.

Portsentry

Bloquer les adresses qui scannent les ports de la machine avec portsentry.
Pour qu'une adresse soit bloquée, il faut qu'il y est eu un scann.
Cette méthode n'empêche pas le scann. 
Source : https://www.it-connect.fr/bloquer-les-individus-qui-scannent-votre-machine-avec-portsentry/
Source : https://fr.ikoula.wiki/fr/Se_prot%C3%A9ger_contre_le_scan_de_ports_avec_portsentry
Source : https://zb2oby.fr/installer-portsentry
Source : https://wiki.debian-fr.xyz/Portsentry

Scanner Angryip

Site officiel : http://angryip.org
Télécharger : http://angryip.org/download/

AutoScan-Network

Autoscan-network.png
Le développement du logiciel semble arrêté depuis 2010 date de la version 1.5.
Vérifier si AutoScan-Network fonctionne toujours.
AutoScan-Network est un scanner de réseau sous licence GNU General Public License (GPL) v2.
L’objectif principal d’AutoScan-Network est de scanner votre réseau et d’afficher la liste des équipements connectés.
# Télécharger.
wget https://superb-dca2.dl.sourceforge.net/project/autoscan/AutoScan/autoscan-network%201.50/AutoScan-Network-Linux-1.50.bin.tar.gz
# Décompresser.
tar xzvf AutoScan-Network-Linux-1.50.bin.tar.gz
# Démarrer.
sudo ./AutoScan-Network-Linux-1.50.sh
Installer AutoScan-Network en 64bits : http://edgargr.com/network/how-to-install-autoscan-network-in-64-bits/

Activer - Désactiver la réponse du ping sur le réseau

# Désactiver
$sudo sysctl -w net.ipv4.icmp_echo_ignore_all=1
Maintenant, tenter de faire un ping sur la machine. Elle ne devrait plus répondre.
# Activer
$sudo sysctl -w net.ipv4.icmp_echo_ignore_all=0
-w permet de passer des options supplémentaires. A vérifier, peut être lié au Kernel.

Prelude

Prelude, ou Prelude-IDS, est un système de détection d'intrusion (IDS) hybride composé de types de détecteurs hétérogènes :
un NIDS : NetWork Intrusion Detection System ;
un HIDS : Host based Intrusion Detection System
un LML : Log Monitoring Lackey.
Site officiel : http://www.prelude-ids.com/index.php/fr/
Source : https://doc.ubuntu-fr.org/prelude

Interdire l'accès à la console

Ne donner l'accès à une console qu'aux seuls utilisateurs qui en ont besoin, root et utilisateurs de travail, en modifiant le fichier /etc/passwd.
Par défaut, la console est définie tel quel à la fin de chaque ligne :
/bin/sh ou /bin/*sh (En fonction du shell utilisé.)
Pour interdire l'accès, modifier en : /bin/false

Protéger les dossiers et les fichiers

umask

// Mes umask sont systématiquement en 077 (En mode parano.) donc quoi que je fasse après un upload les droits sont incorrects, il faut que je les corrige. 
// Basculer les droits avant l'upload vu qu'il faut de toutes façons que je le fasse après.
// Il y a sûrement moyen d'attribuer un umask 027 à un utilisateur spécifique (dont la seule fonction serait d'uploader sur (S)FTP, et dont le groupe primaire serait www-data).
// En fonction de la méthode de login, les réglages viennent de différents fichiers de config.)
// C'est trop "ouvert", si cet utilisateur se fait cracker, il a forcément le contrôle sur le contenu du serveur web.
// Avec root je suis relativement tranquille : pas d’accès extérieur direct et un mot de passe long.
Source : https://www.debian-fr.org/t/apache-reglage-des-droits/52588/9

Protéger un fichier en écriture même contre root avec chattr

# Protéger en écriture le fichier appelé par exemple data.txt afin qu'aucun autre utilisateur ne puisse le modifier, y compris l'utilisateur root.
# Il est nécessaire de se connecter en tant qu'utilisateur root pour utiliser la commande chattr :
sudo chattr +i data.txt
# Revenir à un état normal :
sudo chattr -i data.txt
# Protéger les fichiers de configuration, pour commencer, celles de Apache, PHP, et, MySQL :
sudo chattr +i /etc/
sudo chattr +i /etc/php/*
# Protéger les fichiers de configuration et les dossiers de son site :
sudo chattr +i /var/www/html/
sudo chattr +i /var/www/html/fichier.php
# Empêcher la suppression ou le renommage d'un répertoire :
sudo chattr +i -R www/
# Revenir en arrière :
sudo chattr -i -R www/
Ok-ko.png Source : http://www.tux-planet.fr/empecher-la-suppression-dun-fichier-ou-dun-repertoire/

Protéger un dossier avec chroot

Chroot un dossier utilisateur pour interdire la navigation dans le système.
Placer PHP et / ou Apache dans une prison chroot minimise les dommages causés par une intrusion potentielle en isolant le serveur Web dans une petite section du système de fichiers.
Chroot Apache2 (Centos) : https://www.cyberciti.biz/tips/chroot-apache-under-rhel-fedora-centos-linux.html
Chroot OpenSSH pour pour restreindre les utilisateurs à leur répertoire home : https://www.techrepublic.com/blog/linux-and-open-source/chroot-users-with-openssh-an-easier-way-to-confine-users-to-their-home-directories/
SFTP only + Chroot : https://www.server-world.info/en/note?os=Debian_9&p=ssh&f=5
OpenSSH SFTP chroot() with ChrootDirectory : https://web.archive.org/web/20190316222106/https://debian-administration.org/article/590/OpenSSH_SFTP_chroot_with_ChrootDirectory
Debian/Ubuntu Linux: Restrict an SSH user session to a specific directory by setting chrooted jail : https://www.cyberciti.biz/faq/debian-ubuntu-restricting-ssh-user-session-to-a-directory-chrooted-jail/
Au delà de chroot on peut recommander les jails FreeBSD avec ezjail, la virtualisation XEN, la virtualisation KVM ou la virtualisation OpenVZ qui utilise le concept de conteneurs.
Ko.png : https://fr-wiki.ikoula.com/fr/Chrooter_ses_utilisateurs_Debian?_ga=2.210683221.1926689590.1588606542-33164542.1588606542
Ko.png : Source complémentaire : https://www.cyberciti.biz/faq/howto-setup-freebsd-jail-with-ezjail/
Ko.png : https://www.cyberciti.biz/tips/rhel-centos-xen-virtualization-installation-howto.html
Ko.png : https://www.cyberciti.biz/faq/centos-rhel-linux-kvm-virtulization-tutorial/
Ko.png : https://www.cyberciti.biz/faq/openvz-rhel-centos-linux-tutorial/

Appliquer des limitations avec SELinux

Introduction à SELinux

# Par défaut, un programme exécuté hérite du domaine de l'utilisateur qui l'a démarré.
# Utiliser SELinux (Security Enhanced Linux) pour appliquer des limitations au réseau et à d'autres programmes.
# Pour la plupart des programmes importants, les règles SELinux standards prévoient de les faire fonctionner dans un domaine dédié.
# Ce mécanisme de changement automatique de domaine permet de ne donner que les droits nécessaires au bon fonctionnement de chaque programme.
# Ces exécutables sont étiquetés avec un type dédié. SSH est étiqueté avec ssh_exec_t et quand le programme est démarré, il bascule automatiquement dans le domaine ssh_t.
# SELinux est un module permettant une gestion très fine de la sécurité de votre système d'exploitation.
# Si une erreur d'accès liée à SELinux survient, elle sera retranscrite dans /var/log/messages.
# Sur des configurations poussées ou spécifiques, SELinux peut devenir bloquant.
# C'est un élément de sécurité fiable mais qui n'est pas une nécessité propre au système.
# Il est le plus souvent à activer lorsqu'on le gère totalement ou sur des environnements finaux après l'installation des éléments/services du serveur.
# SELinux et Redhat :
# SELinux est installé et activé par défaut sur les distributions de la famille de RedHat.
# SELinux et Debian :
# SELinux n'est pas présent par défaut sur les systèmes Debian.
# Pour l'utiliser, il faut au minimum installer les paquets selinux-basics et selinux-policy-default

Contexte de sécurité

Connaître le contexte de sécurité actuellement actif dans un terminal de commande avec id -Z. 
id -Z
id: --context (-Z) ne fonctionne qu'avec un noyau avec SELinux activé
Connaître le contexte de sécurité appliqué à un processus avec l'option Z de ps.
ps axZ | grep vstfpd
Connaître le type affecté à un fichier avec ls -Z.
ls -Z test /usr/bin/ssh

Mise en route de SELinux

14.5.2. La mise en route :
https://www.debian.org/doc/manuals/debian-handbook/sect.selinux.fr.html
https://debian-handbook.info/browse/fr-FR/stable/sect.selinux.html
https://www.cyberciti.biz/faq/rhel-fedora-redhat-selinux-protection/
https://en.wikipedia.org/wiki/Security-Enhanced_Linux
https://linux.goffinet.org/13-gestion-securisee/
https://www.microlinux.fr/selinux/
Manuel PDF : https://books.google.fr/books?id=xeBjWEy6yL4C&pg=SA5-PA10&lpg=SA5-PA10&dq=debian+selinux+v%C3%A9rifier+si+activ%C3%A9&source=bl&ots=Jv7Tarna9r&sig=ACfU3U3kSjweHX8NOOphL36pDf7eYs90Og&hl=fr&sa=X&ved=2ahUKEwi_yZnLmcrnAhXtzIUKHQByBXUQ6AEwCHoECAkQAQ#v=onepage&q=debian%20selinux%20v%C3%A9rifier%20si%20activ%C3%A9&f=false
Si SELinux est activé
Configurer SELinux puis redémarrer le système pour appliquer les changements
# Éditer /etc/selinux/config pour désactiver SELINUX avec la valeur de variable 'disabled'.
# La valeur enforcing signifie que la politique de sécurité SELinux est appliquée.
SELINUX=enforcing
# La valeur permissive signifie que la politique de sécurité SELinux n'est pas appliquée.
# SELinux se contentera d'écrire dans les logs.
SELINUX=permissive
# Désactiver totalement SELinux :
SELINUX=disabled
# Vérifier le mode opératoire de SELinux via la commande getenforce.
Désactiver temporairement SELinux sans avoir à redémarrer le système
# Désactiver SELinux sans avoir à redémarrer :
setenforce 0
# Ou :
echo "0" > /selinux/enforce
# Réactiver SELinux sans avoir à redémarrer :
setenforce 1
# Ou :
echo "1" > /selinux/enforce
audit2allow - Créer une exception pour un programme présent dans les logs en erreur
grep apache2 /var/log/audit/audit.log | audit2allow -M passenger
# Par défaut, le fichier /var/log/audit/audit.log n'existe pas sous Debian.

Afficher le contexte de sécurité SELinux pour le dossier de sessions PHP

# La commande suivante devrait afficher le contexte de sécurité SELinux tel que le mode de fichier, l'utilisateur, le groupe, le contexte de sécurité et le nom du fichier.
# Le retour d'information de cette commande semble pourtant ici très limité sur ce dossier de sessions de PHP que nous devons sécuriser : "/var/lib/php/sessions".
# Le "?" est sans doute affiché car SELinux n'est pas installé sur le système.
ls -Z /var/lib/php
? modules  ? sessions
# Test pour la commande -lZ :
ls -lZ /var/lib/php
drwxr-xr-x 4 root root ?   4096 juil. 27 19:25 modules
drwx-wx-wt 2 root root ? 581632 juil. 28 14:26 sessions
# Test pour la commande -la :
ls -la /var/lib/php
drwxr-xr-x  4 root root   4096 déc.   1  2018 .
drwxr-xr-x 36 root root   4096 mars  31 15:51 ..
drwxr-xr-x  4 root root   4096 juil. 27 19:25 modules
drwx-wx-wt  2 root root 581632 juil. 28 14:26 sessions

Protéger Apache2 avec SELinux

On peut renforcer ou diminuer la politique d'accès aux fichiers partagés par Apache grâce aux commandes chcon et restorecon fournies par SELinux.
SELinux fournit diverses stratégies de sécurité pour le noyau Linux et le serveur Web Apache.
Répertorier toutes les variables de protection Apache SELinux :
# getsebool -a | grep httpd
# Exemple de sortie :
allow_httpd_anon_write --> off
allow_httpd_mod_auth_ntlm_winbind --> off
allow_httpd_mod_auth_pam --> off
allow_httpd_sys_script_anon_write --> off
httpd_builtin_scripting --> on
httpd_can_check_spam --> off
httpd_can_network_connect --> off
httpd_can_network_connect_cobbler --> off
httpd_can_network_connect_db --> off
httpd_can_network_memcache --> off
httpd_can_network_relay --> off
httpd_can_sendmail --> off
httpd_dbus_avahi --> on
httpd_enable_cgi --> on
httpd_enable_ftp_server --> off
httpd_enable_homedirs --> off
httpd_execmem --> off
httpd_read_user_content --> off
httpd_setrlimit --> off
httpd_ssi_exec --> off
httpd_tmp_exec --> off
httpd_tty_comm --> on
httpd_unified --> on
httpd_use_cifs --> off
httpd_use_gpg --> off
httpd_use_nfs --> off
Exemple pour désactiver le support Apache cgi :
# setsebool -P httpd_enable_cgi off

Ressources complémentaires pour SELinux

SELinux : http://tvaira.free.fr/esimed/admin/SELinux.pdf

Appliquer des limitations avec ACL

# Si plusieurs personnes développent le site, il peut être intéressant d'utiliser des droits ACL via les commandes getfacl et setfacl.
# Les droits ACL sont symbolisés par un "+" à droite des droits habituels.
# Pour plus d'informations consulter le manuel : man setfacl
ACL : https://doc.ubuntu-fr.org/acl

Appliquer des limitations avec Apparmor

Comparaison entre Apparmor SELinux et Grsecurity : https://www.cyberciti.biz/tips/selinux-vs-apparmor-vs-grsecurity.html

Appliquer des limitations avec Grsecurity

Comparaison entre Apparmor SELinux et Grsecurity : https://www.cyberciti.biz/tips/selinux-vs-apparmor-vs-grsecurity.html

Virtualisation avec XEN

Source : https://howto.biapy.com/fr/debian-gnu-linux/systeme/virtualisation-avec-xen/installer-xen-sur-debian
Source : https://blog.debugo.fr/virtualisation-xen-4-4/
Source : https://doc.ubuntu-fr.org/xen

Protéger et chiffrer des scripts Bash en production avec SHc

SHc : https://www.synetis.com/proteger-et-chiffrer-des-scripts-bash-en-production/
UnSHc : https://connect.ed-diamond.com/MISC/MISC-089/UnSHc-dechiffrer-des-scripts-shell-compiles-et-chiffres-par-SHc

Pile TCP/IP

# La pile TCP/IP du système d'exploitation GNU/Linux est reconnue comme étant une des plus stables.
# Appliquer quelques principes de précaution complémentaires.
# Éditer le fichier /etc/sysctl.conf :
sudo nano /etc/sysctl.conf
# Se protéger de l'IP Spoofing' (Vol d'adresse IP) :
net.ipv4.conf.default.rp_filter=1
net.ipv4.conf.all.rp_filter=1
# Se protéger des attaques 'SYN Flood' :
net.ipv4.tcp_syncookies = 1
# Limite le SYN flood avec 1024 connexions non confirmées max.
net.ipv4.tcp_max_syn_backlog = 1024
# Uncomment the next line to enable packet forwarding for IPv4
# net.ipv4.ip_forward=1
# Uncomment the next line to enable packet forwarding for IPv6
# Enabling this option disables Stateless Address Autoconfiguration
# based on Router Advertisements for this host
# net.ipv6.conf.all.forwarding=1
# Ignorer les messages 'ICMP Redirects' :
net.ipv4.conf.all.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0
# Accept ICMP redirects only for gateways listed in our default
# gateway list (enabled by default)
net.ipv4.conf.all.secure_redirects = 1
# Do not send ICMP redirects (we are not a router)
net.ipv4.conf.all.send_redirects = 0
# Interdire 'Source Routing' :
net.ipv4.conf.all.accept_source_route = 0
net.ipv6.conf.all.accept_source_route = 0
# Surveiller 'martians' (adresse source falsifiée ou non routable) :
net.ipv4.conf.all.log_martians = 1
# Ignorer les messages 'ICMP Echo Request' :
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.icmp_echo_ignore_all = 1
# Enable TCP timestamps as SYN cookies utilize this TCP
net.ipv4.tcp_timestamps=1
# Ignorer les messages 'ICMP Bogus Responses' :
net.ipv4.icmp_ignore_bogus_error_responses = 1
# Configuration spécifique en cas d'utilisation de mémoire swap :
vm.swappiness=10
vm.vfs_cache_pressure=50
# Redémarrer le service :
sudo sysctl -p /etc/sysctl.conf

Limiter le temps de connexion à internet

Timekpr

Ok-ko.png Source : https://doc.ubuntu-fr.org/timekpr

Workrave

Workrave est un programme pour lutter contre les troubles musculosquelettiques (TMS).
Il signale régulièrement de faire des micro-pauses, de prendre des temps de pause et empêche de dépasser une limite quotidienne. 

Il inclut une appliquette de barre système fonctionnant avec GNOME et KDE, et peut être utilisé à travers le réseau pour surveiller l'activité d'un utilisateur si celui-ci est amené à travailler sur plusieurs ordinateurs. 

Workrave propose plus d'options de configuration que d'autres outils similaires.
Site : http://www.workrave.org/

Système de contrôle parental

Une rapide recherche sur le critère « système de contrôle parental sous Debian » sur un moteur de recherche donne d’intéressantes pistes.
Il en ressort le projet « CTparental » qui pourrait bien répondre à vos interrogations :
https://wiki.debian-fr.xyz/Contrôle_parental
https://doc.ubuntu-fr.org/tutoriel/comment_mettre_en_place_un_controle_parental

Sécurité du matériel

Effacer les données d'un disque dur

En cas de don, de vente, ou, de la mise au rebus d'un disque dur, ne pas y laisser ses données !
L'outil ddblank permet d'effacer le contenu d'un disque de manière définitive.
Source : http://easy.open.and.free.fr/ddblank/index.html

Secure delete

Remplir l'espace vide par des zéros pour empêcher la récupération des fichiers :
sudo apt install secure-delete

Surveiller la santé du disque dur

Activer le service smartd :
sudo apt install smart-notifier gsmartcontrol
Dans /etc/default/smartmontools, mettre start_smartd=yes
Lancer le service :
sudo service smartmontools start
Le programme smart-notifier affichera automatiquement une notification en cas de problème détecté sur le disque dur.
Examiner les paramètres du disque dur pour rechercher des signes de défaillances depuis l'onglet Error (Erreurs de lecture, écriture...) log avec la commande :
gksu gsmartcontrol

Autoriser les installeurs et compilateurs uniquement pour root

# Le numéro de version est à adapter selon la fraîcheur de votre installation :
chmod o-x /usr/bin/gcc-4.1
chmod o-x /usr/bin/make
chmod o-x /usr/bin/apt-get
chmod o-x /usr/bin/aptitude
chmod o-x /usr/bin/dpkg

Désinstaller une installation effectuée avec make

# Avec un peu de chance, utiliser make uninstall permet de désinstaller une installation effectuée avec make.
# Si vous n'avez pas de chance, vous devrez le désinstaller manuellement.
# Lancer make -n install peut être utile, car il montrera les étapes que le logiciel prendrait pour s'installer, mais ne fera rien. Vous devrez inverser ces étapes manuellement.
# Au lieu de faire make install ou après avoir fait make install, utiliser checkinstall !
sudo apt -y install checkinstall
# Depuis le dossier ou la compilation sera lancée, utiliser sudo checkinstall pour créer un fichier .deb qui sera automatiquement installé.
# Une fois terminé, vous pouvez installer et finalement désinstaller:
sudo dpkg -i $PACKAGE_NAME_YOU_ENTERED 
sudo dpkg -r $PACKAGE_NAME_YOU_ENTERED
# En complément : Désinstaller une installation effectuée avec make.

Définir la priorité d'un programme

# Il est conseillé de donner une priorité faible à un programme avec la commande nice ou renice si la machine doit être utilisée pendant ce temps.
Manuel : https://linux.die.net/man/1/nice
# Lancer un processus avec la priorité CPU et un accès disque le plus bas possible.
nice -n 19 ionice -c3 NomDuProgramme

Processeur

Concernant les processeurs, on peut utiliser « spectre-meltdown-checker » pour vérifier les failles.
Ce script vérifie aussi d'autres failles comme « zombieload, foreshadow et ridl ».
« apticron » envoie un courriel quand des mise à jour sont disponibles et les télécharge.
Sinon il y a « unattended-upgrades » qui lui installe les mise à jour.

Renforcer la sécurité du noyau

# Le fichier /etc/sysctl.conf est utilisé pour configurer les paramètres du noyau au moment de l'exécution.
# Linux applique les paramètres de /etc/sysctl.conf au démarrage.
# Exemple de fichier /etc/sysctl.conf :
# Activer execshield
kernel.exec-shield = 1
kernel.randomize_va_space = 1
# Activer la protection contre l'usurpation d'adresse IP
net.ipv4.conf.all.rp_filter = 1
# Désactiver le routage source IP
net.ipv4.conf.all.accept_source_route = 0
# Ignorer la demande d'émissions
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.icmp_ignore_bogus_error_messages = 1
# Assurez-vous que les paquets falsifiés sont enregistrés
net.ipv4.conf.all.log_martians = 1

Supprimer les systèmes X Window - X11

# Les systèmes X Window sur le serveur ne sont pas requis.
# Vous pouvez désactiver et supprimer X Windows pour améliorer la sécurité et les performances du serveur.
# Il n’y a aucune raison d’exécuter X11 sur votre messagerie Linux dédiée et votre serveur Web Apache / Nginx.

Disques et partitions

Informations sur une partition de démarrage

sudo fdisk -l
sudo blkid /dev/sda2
/dev/sda2: UUID="66...0C" TYPE="vfat" PARTLABEL="EFI system partition" PARTUUID="6bd59e1d-0...9-2bb2e0cceaf0"

Optimiser la swap

# Vérifier si il existe déjà un fichier de swap :
## swapon --show
/sbin/swapon --show
# Vérifier une nouvelle fois s'il existe un fichier de swap actif et consulter des informations sur la disponibilité de la RAM :
free -h
Si il n'existe aucun swap actif sur notre système, nous allons pouvoir en ajouter un.
# Connaître l'espace de swap actuel :
more /proc/swaps
# Connaître les informations mémoire du système (CTRL+C pour sortir.) :
more /proc/meminfo
Sys. de fichiers Taille Utilisé Dispo Uti% Monté sur.
df -h
# Connaître l'espace disque disponible des différentes partitions :
df -ah
# Activer ou désactiver le fichier d'échange à la volée à l'aide de 2 simples commandes :
# Allouer la partition de swap qui s'ajoute à l'existante si elle existe.
# La commande « more /proc/swaps » vue plus haut devrait vous montrer le nouvel espace de swap nommé file.swap.
sudo swapon /var/tmp/maswap
# Désallouer l'espace utilisé par le fichier d'échange qui pourra être effacé en toute sécurité.
sudo swapoff /var/tmp/maswap
(OK) Source : https://standartux.fr/astuces-ajout-de-swap-a-la-mano/

Créer un périphérique bloc basé sur la RAM qui agit en tant que swap avec zRam

Le programme zRam est un code dans le noyau qui crée un périphérique bloc basé sur la RAM qui va agir en tant que disque d'échange compressé et stocké en mémoire.
Cela permet des entrées et des sorties très rapides et augmente la quantité de mémoire disponible avant que le système ne commence à permuter sur le disque.
Quand le système commence à s'étouffer, le disque dur commence à copier les données au format SWAP, ce qui provoque un ralentissement total.
Désormais, après avoir activé zRam, au lieu de se figer après une panne de mémoire vive, le système fonctionne comme si rien ne s'était passé.
Ce programme zRam est utile pour les personnes utilisant des ordinateurs avec 1 Go ou 2 Go de RAM.
Étant donné que zRam compresse les données, certaines ressources du processeur sont nécessaires.
Si vous avez 4 Go de RAM ou plus, il ne sera probablement pas nécessaire de l'utiliser. 
# Pour l'activer sur Ubuntu :
sudo apt-get install zram-config
# Pour l'installer sur Debian :
sudo apt install zram-tools
Informations complémentaires : https://wiki.debian.org/ZRam
# Pour supprimer :
sudo dpkg --purge zramswap-enabler sudo dpkg --purge zram-config
# Le service s'activera instantanément lors de l'installation :
cat /proc/swaps
# Si le service ne démarre pas immédiatement, redémarrer la machine avec reboot et vérifier que le service démarre.
# Si vous ne voyez pas vos périphériques d'échange zram dans la liste, lister zRam en tant que service de démarrage avec la commande suivante :
sudo su update-rc.d zramswap defaults

Ajouter de la mémoire SWAP

Allouer un fichier swap pour avoir un serveur plus réactif et le prémunir contre les erreurs out-of-memory des services.
Le swap sert a conserver des données temporaires sur le disque dur quand il ne peut plus les stocker dans la RAM.
Les informations seront cependant écrites sur le disque beaucoup moins rapidement qu'avec la RAM.
Les VPS utilisent une partition unique qui occupe tout l'espace.
Il n'est pas possible de modifier le schéma de partitionnement.
Linux accepte deux types de swap :
- Une partition dédiée.
- Un fichier d'échange.
# Ici c'est un fichier d'échange qui va être ajouté.
# La commande dd crée et copie des zéros dans le fichier maswap contenant 512000 blocs de 1024 octets chacun, soit un fichier approximatif de 512 Mo (voir 524 Mo).
# bs=1024 count=512000
# Pourquoi utiliser des blocs de 1024 octets ?
# Ce n'est pas recommandé de rajouter 2048Mo en un bloc, il se peut que la RAM n'ait pas assez d'espace pour créer ce fichier en un seul morceau.
# Créer un fichier d'échange de 2 Go :
# dd if=/dev/zero of=/var/tmp/maswap bs=1024 count=2048000
# Créer un fichier d'échange de 4Go.
dd if=/dev/zero of=/var/tmp/maswap bs=1024 count=4096000
# Forcer la synchronisation des disques (Écrire sur le disque les données présentes dans les tampons en mémoire.)
sync
# Ce fichier sera uniquement lisible par l'utilisateur root, pour des raisons de sécurité.
chmod 0600 /var/tmp/maswap
# Ce fichier appartient à root.
chown 0:0 /var/tmp/maswap
# Vérifier les permissions et l'espace réservé :
ls -lh /var/tmp/maswap
# Initialiser le fichier d'échange pour le rendre utilisable comme extension de mémoire.
# Le fichier qui avait l'étiquette SELinux user_tmp_t va changer d'étiquette pour swapfile_t.
sudo /sbin/mkswap -c /var/tmp/maswap
# Activer la nouvelle swap.
sudo /sbin/swapon /var/tmp/maswap
# Faire une copie du fichier /etc/fstab
sudo cp /etc/fstab /etc/fstab.bak
# Rendre l'utilisation du fichier swap permanent en ajoutant une ligne à la fin du fichier /etc/fstab.
# Ouvrir le fichier /etc/fstab :
sudo nano /etc/fstab
# Éditer le fichier /etc/fstab
# C'est la même ligne que pour une partition d'échange, mis à part le chemin absolu du fichier, renseigné avec le chemin absolu du périphérique.
/var/tmp/maswap swap swap defaults 0 0
# Cette dernière commande peut aussi être ajoutée ainsi à la fin du /etc/fstab :
sudo -s
cat >>/etc/fstab<< EOF
/var/tmp/maswap swap swap defaults 0 0
EOF
# Comment lancer l'opération d'écriture de cette commande ?
(OK) Source : https://www.tartarefr.eu/ajouter-de-la-swap-sur-un-vps/

Optimiser les réglages du swap

# Le swappiness configure la fréquence du système à sortir des données de la RAM pour les mettre dans le swap.
# Plus la valeur est proche de zéro, et plus les opérations sont gérées et traitées rapidement par la RAM.
# Il faut donc indiquer une valeur assez basse. La valeur par défaut est 60, on la met à 10 sur le VPS :
sudo sysctl vm.swappiness=10
Avec la valeur 0 : le swap est désactivé.
Avec la valeur 1 : quantité minimale de permutation sans la désactiver complètement.
Avec la valeur 10 : valeur recommandée pour améliorer les performances lorsqu'il y a suffisamment de mémoire dans un système.
Avec la valeur 100 : échange agressif.
# Le vfs_cache_pressure configure comment le système va supprimer les informations inode et dentry par rapport aux autres données.
# La valeur d'origine est 100, on la passe à 50 pour éviter que le système ne supprime les informations relatives aux inodes du cache trop rapidement :
sudo sysctl vm.vfs_cache_pressure=50
# Rendre les deux changements permanents :
sudo nano /etc/sysctl.conf
# Ajouter en fin de fichier :
vm.swappiness=10
vm.vfs_cache_pressure=50
Si cela ne suffit pas, il faudra penser à allouer plus de ressources matérielles au serveur.
Ok.png Source : https://www.skyminds.net/linux-creer-fichier-echange-swap-optimiser-vps/

Réduction de l'utilisation de la swap

Le paramètre système vm.swappiness indique la tendance qu'a le système a commencer à swapper en fonction de l'occupation mémoire.
Il est par défaut à 60, mais, pour une machine desktop, il est plus judicieux de le descendre à 10.
En le mettant à 10%, le système attendra que 90% de la mémoire soit remplie avant de commencer à exploiter la mémoire du disque. Cela réduit donc le swapping.
Pour voir la valeur actuelle :
cat /proc/sys/vm/swappiness
Pour changer la valeur dans les paramètres système :
sudo bash -c 'echo "vm.swappiness=10" >> /etc/sysctl.conf'
Redémarrer ou faire sudo sysctl -p pour prendre en compte ce paramètre.

Séparer les partitions pour le système de fichiers

# La séparation de partitions pour le système de fichiers améliore et sécurise le système.
# Les systèmes de fichiers suivants doivent être montés sur des partitions distinctes :
/usr
/home
/var and /var/tmp
/tmp
# Créer des partitions distinctes pour les racines de serveur Apache et FTP.
# Éditer le fichier /etc/fstab et s'assurer d’ajouter les options de configuration suivantes :
noexec - Empêche l'exécution de fichiers binaires mais autorise les scripts.
nodev - Empêche l'utilisation de fichiers de périphérique tels que zéro, sda...
nosuid - Ne pas définir d'accès SUID / SGID sur cette partition, empêche le bit setuid.
Exemple :
/etc/fstab Limite l'accès utilisateur à la partition /dev/sda5 pour le répertoire du serveur FTP :
/dev/sda5  /ftpdata    ext3 defaults,nosuid,nodev,noexec 1 2

Quotas de disque

Assurez-vous que le quota de disque est activé pour tous les utilisateurs. Pour implémenter des quotas de disque, procédez comme suit:
Activer les quotas par système de fichiers en modifiant le fichier /etc/fstab
Remonter le (s) système (s) de fichiers.
Créer les fichiers de base de données de quotas et générez la table d'utilisation du disque.
Attribuer des politiques de quota.

Bibliographie

Ok.png Documentation Ubuntu sur la sécurité : https://doc.ubuntu-fr.org/securite
Ko.png Documentation Ubuntu sur la sécurité - Pages complémentaires : https://doc.ubuntu-fr.org/securite#liste_des_pages_sur_la_securite

Liens complémentaires sur la sécurité

Ko.png How to secure an Ubuntu 16.04 LTS server - Part 1 The Basics : https://www.thefanclub.co.za/how-to/how-secure-ubuntu-1604-lts-server-part-1-basics
Ok-ko.png Security Debian How To : https://web.archive.org/web/20191222195554/https://www.debian.org/doc/manuals/securing-debian-howto/
Ok-ko.png Sécurité des systèmes d'information : https://fr.wikipedia.org/wiki/S%C3%A9curit%C3%A9_des_syst%C3%A8mes_d'information
Ok-ko.png The /etc/securetty file : tldp.org/LDP/solrhe/Securing-Optimizing-Linux-RH-Edition-v1.3/chap5sec41.html
Ok-ko.png Lire depuis Wikipédia : Le risque informatique : https://fr.wikipedia.org/wiki/Risque_(informatique)
Ok-ko.png https://web.archive.org/web/20190621162526/www.coursinforev.org/doku.php/securite_linux
Ko.png https://unix.stackexchange.com/questions/41840/effect-of-entries-in-etc-securetty
Ok-ko.png https://fr.wikipedia.org/wiki/S%C3%A9curit%C3%A9_des_donn%C3%A9es
Ko.png http://man7.org/linux/man-pages/man5/securetty.5.html

Les agences gouvernementales de sécurité informatique

Ok.png ANSSI : http://www.ssi.gouv.fr
Ok.png Les conseils de la CNIL pour un bon mot de passe : https://www.cnil.fr/fr/les-conseils-de-la-cnil-pour-un-bon-mot-de-passe
Ok.png Faire un signalement en ligne : https://www.internet-signalement.gouv.fr/PortailWeb/planets/Accueil!input.action
Ok.png Liste des alertes de sécurité du CERT : Site gouvernemental français officiel : https://www.cert.ssi.gouv.fr
Ok.png Fichiers .pdf des bonnes pratiques par ssi.gouv.fr : http://www.ssi.gouv.fr/administration/bonnes-pratiques/
Ok.png Déposer une plainte auprès de l'IC3 (Internet Crime Complaint Center 3) : https://www.ic3.gov/default.aspx
Ok-ko.pnghttps://www.ncsc.gov.uk/collection/end-user-device-security?curPage=/collection/end-user-device-security/platform-specific-guidance/ubuntu-18-04-lts

Sites spécialisés

Ko.png The OWASP Foundation - The free and open software security community : https://www.owasp.org
Ko.png Spécialiste des malwares, virus, désinfections, type d'attaques : http://www.malekal.com
Ko.png Exploit BD - Exploits sur les bases de données : https://www.exploit-db.com
Ko.png Portail Security Focus - En anglais : http://www.securityfocus.com

Les forums sur la sécurité

Ok.png Zenk Security : https://www.zenk-security.com
Ko.png Forum de sécurité AntiOnline : http://www.antionline.com

Sites complémentaires

Ok.png Securitycompass : https://blog.securitycompass.com
Ok.png Linux Security : https://www.cyberciti.biz/tips/linux-security.html

Informations complémentaires sur la sécurité avec Debian

Liste pour les annonces de sécurité de Debian : https://lists.debian.org/debian-security-announce/
Liste pour les annonces de sécurité de Debian pour 2019 : https://www.debian.org/security/2019/index.fr.html

Informations complémentaires sur la sécurité avec RedHat

Source - Comprendre la sécurité : https://www.redhat.com/en/topics/security?sc_cid=70160000000ldR5AAI
Source - Guide de sécurité : https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/security_guide/chap-overview_of_security_topics
Source - Selinux : https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/selinux_users_and_administrators_guide/index

Magazines et presse en ligne sur la sécurité

Ko.png ActuSecu par XMCO : https://www.xmco.fr/actusecu/

La sécurité en vidéo

Ko.png  Youtube permet de trouver de très nombreuses vidéos de sécurité et de hacking : https://www.youtube.com/results?search_query=s%C3%A9curit%C3%A9+informatique

Ressources utilisées sur cette page pour la Sécurité de GNU/Linux

Ok.png Générer des mots de passe avec GNU/Linux : https://itsfoss.com/password-generators-linux/
Ok.png Des logs colorés avec ccze : https://blogmotion.fr/systeme/couleurs-logs-ccze-linux-17453
Ok.png Des logs colorés avec ccze : http://linux-attitude.fr/post/lire-les-logs-en-couleur

NAVIGATION

PARTICIPER ET PARTAGER

Bienvenue sur le wiki de Vision du Web.
De nombreuses pages sont partagées sur ce wiki.
Créer un compte utilisateur pour participer sur le wiki.
Les pages présentées sur le wiki évoluent tous les jours.
Certaines recherches sont peu abouties et incluent des erreurs.
Utiliser la recherche interne du wiki pour trouver votre contenu.
La page de discussion de VisionDuWeb vous permet de poser une question.
Utiliser la recherche interne du site pour chercher dans tout le contenu.
Ce contenu ne doit pas servir à nuire à autrui ou à un système informatique.
Protéger votre système Linux ou Windows en lisant la page dédié à la sécurité.
Améliorer le contenu des pages avec vos propositions depuis l'onglet discussion.

SOUTENIR CE WIKI

Soutenir le wiki avec un don en monnaie numérique :
AEON - Bitcoins - Bitcoins Cash - Bitcoins Gold - Bitcore - Blackcoins - Basic Attention Token - Bytecoins - Clams - Dash - Monero - Dogecoins - Ğ1 - Ethereum - Ethereum Classique - Litecoins - Potcoins - Solarcoins - Zcash

OBTENIR DE LA MONNAIE NUMERIQUE

Obtenir gratuitement de la monnaie numérique :
Gagner des Altcoins - Miner des Altcoins.