informatique:serveur-web-linux-apache:preparer-le-serveur-linux

Préparer son serveur Web

Je vous propose une solution pour préparer votre serveur fonctionnant sour Debian 10. Je vous donne quelques conseils pour le sécuriser.

Pour créer un utilisateur , c'est la commande adduser.

Par exemple :

$ sudo adduser cedric
 

Ajouter le groupe sudo à un utilisateur

Le groupe sudo est un cas particulier. Il s'agit du groupe administrateur de certaines distribution.

Pour ajouter les droits sudo, il faut ajouter l'utilisateur au groupe sudo

On ajoute l'utilisateur au groupe sudo. Il héritera ainsi des droits sudo :

$ USER_DO=cedric
$ sudo usermod -aG sudo $USER_DO
 

Il faut ajouter l'option NOPASSWD:ALL dans la configuration sudoers.

$ USER_DO=cedric
$ echo "$USER_DO ALL=(ALL:ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/010-$USER_DO-nopassword
 

Commandes Linux

Dans les blocs de codes ci-dessous, les variables suivantes sont référencées. On considère :

  • $CURRENT_HOSTNAME, le nom actuel de machine
  • $NEW_HOSTNAME, le nom de machine à affecter

Je souhaite modifier le nom de l'ordinateur, fixé par défaut sur rasbperrypi ($CURRENT_HOSTNAME), par la valeur de mon choix ($NEW_HOSTNAME).

Pour connaître le nom courant de la machine, il suffit soit :

  • de lire la valeur dans le fichier /etc/hosntame
cat /etc/hostname
  • d’exécuter la commande hostname
hostname

Dans un script nous pourrons écrire la ligne suivante. Elle permet de lire la valeur contenu dans le fichier /etc/hostname, en supprimant les caractères indésirables : retours à la ligne, tabulations, sauts de lignes…

CURRENT_HOSTNAME=`cat /etc/hostname | tr -d " \t\n\r"`

Le nom de la machine doit être des lettres [a-z], insensible à la casse et des chiffres [0-9]. Seul le - (tiret) est admis comme caractère supplémentaire. Toutefois le nom de la machine ne doit ni commencer, ni finir par le - (tiret).

Exécuter la commande hostnamectl 1)

Le commande hostnamectl permet de modifier le nom de la machine avec une prise en compte immédiate. Il faudra toutefois fermer la session puis l'ouvrir de nouveau.

sudo hostnamectl set-hostname $NEW_HOSTNAME

Toutefois, vous pouvez modifier le nom de dans le fichier /etc/hostname. Il sera nécessaire de redémarrer la machine.

echo $NEW_HOSTNAME > /etc/hostname

Modifier le nom dans le fichier /etc/hosts. Il sera nécessaire de redémarrer la machine.

sed -i "s/127.0.1.1.*$CURRENT_HOSTNAME/127.0.1.1\t$NEW_HOSTNAME/g" /etc/hosts

Associer le nom de domaine au DNS

Se déconnecter puis se connecter de nouveau

 

Pour utiliser la clé, il faut copier la clé publique vers le poste distant. Votre clé publique se trouve dans un fichier présent dans le dossier .ssh du dossier utilisateur. Elle doit être ajoutée au fichier .ssh/authorized_keys de l'ordinateur distant.

Par exemple :

  • ~/.ssh/id_rsa.pub est mon fichier de clé publique que je veux envoyer
  • srvprod.aceinternet.fr est le serveur dans lequel on pose le fichier

La commande ssh-copy-id permet ces opérations :

chloe$ ssh-copy-id -i ~/.ssh/id_rsa.pub chloe@srvprod.aceinternet.fr

L'équivalent avec la commande ssh :

cat ~/.ssh/id_rsa.pub | ssh adminsrv@srvprod.aceinternet.fr "cat - >> ~/.ssh/authorized_keys"

 

Dans le fichier ~/.bashrc, ajouter la ligne suivante si elle n'existe pas. Dans Debian 9, cela n'était pas nécessaire.

# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

Dans le fichier .bash_aliases :

if [ -x /usr/bin/dircolors ]; then
    test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"i
fi

alias ls='ls --color=auto'
alias ll='ls -l'
alias la='ls -A'
alias l='ls -CF'
alias vi='vim'

alias aptlist='cat /etc/apt/sources.list{,.d/*} 2>/dev/null | grep -v "^#"'
alias agu='sudo apt-get update'
alias agg='sudo apt-get upgrade'
alias agd='sudo apt-get dist-upgrade'
alias maj='agu && agg && agd'

alias less='less -R'
alias grep='grep --color'

Une fois le fichier modifié, rechargez le script en exécutant source ~/.bash_aliases

 
sudo apt update
sudo apt install apt-transport-https ca-certificates
sudo apt upgrade
 

Si vous être propriétaire d’un serveur quelconque connecté à Internet, vous n’êtes pas sans savoir qu’il est exposé à de nombreuses attaques. Parmi elles, le brute-force. Cette attaque consiste à trouver votre mot de passe SSH en les essayant tous les uns à la suite des autres ou en utilisant des dictionnaires (ce sont des listes contenant les mots de passe les plus utilisés comme admin, 123456, etc…). Ces attaques sont généralement menées par des robots qui visent des dizaines de serveurs en même temps. Il se connectent sans cesse à votre serveur grâce à votre port SSH et essayent beaucoup de combinaisons de mot de passe jusqu’à trouver le bon (généralement, une tentative est menée toutes les 2 à 3 secondes).

Enfin, fois que les pirates ont accès à un serveur, ils peuvent par exemple s’en approprier pour exécuter d’autres attaques brute-force contre d’autres serveurs, ou bien utiliser votre serveur pour spammer des gens (par mail, par exemple). De plus, le responsable, si il y a une plainte car des attaques ont été menées depuis votre serveur, c’est vous (à moins que vous ne démontriez que vous avez vous-même été victime d’attaque et que vous n’avez plus le contrôle sur votre serveur, d’où l’importance de conserver vos logs).

Il existe beaucoup de solutions, celle que je vais vous présenter aujourd’hui, c’est Fail2ban (d’autres méthodes seront proposés dans de futurs articles). Fail2ban est un programme qui analyse vos logs système afin de détecter les attaques brute-force et ainsi bloquer l’adresse IP attaquante.

Vous pouvez consulter la manuel en anglais Fail2Ban Configuration

La commande suivante permet d'installer fail2ban avec les systèmes Debian et dérivées :

sudo apt install fail2ban

Exemple d'installation de fail2ban sous Raspbian 10

Éditons le fichier /etc/fail2ban/jail.local

Liste des fichiers et dossier de configuration par défaut de fail2ban sous Raspbian 10 :

action.d/            fail2ban.d/          jail.conf            paths-arch.conf      paths-debian.conf
fail2ban.conf        filter.d/            jail.d/              paths-common.conf    paths-opensuse.conf

Il y a deux fichiers principaux de configuration pour fail2ban : /etc/fail2ban/fail2ban.conf et /etc/fail2ban/jail.conf. D'autres fichiers complémentaires peuvent être dans /etc/fail2ban/filter.d/*.conf et /etc/fail2ban/action.d/*.conf

/etc/fail2ban/fail2ban.conf est le fichier de configuration pour le paramétrage du démon fail2ban. Il s'agit des paramètres loglevel, fichier log, port, socket et pid.

/etc/fail2ban/jail.conf est le fichier des recettes avec des filtres et des actions. Il permet de définir les règles de bannissements.

Les filtres qui spécifient les règles de détections d'échec d'identification sont à ajouter au dossier filter.d

Les actions qui définissent les règles de bannissement ou non des adresses IP sont à ajouter au dossier filter.d

Il est vivement conseillé d'apporter des modifications de configuration dans des fichiers nommés fail2ban.local et jail.local. Ou ajoutez des fichiers aux dossiers fail2ban.d/ et jail.d/.

L'ordre de chargement des fichiers de configuration est le suivant :

  1. jail.conf
  2. jail.d/*.conf (dans l'ordre alphabétique)
  3. jail.local
  4. jail.d/*.
  5. local (dans l'ordre alphabétique).
sudo nano /etc/fail2ban/jail.local

Pour ajouter les options suivantes :

[DEFAULT]
ignoreip = 127.0.0.1/8 
bantime  = 600
maxretry = 2
destemail = root@localhost
action = %(action_mwl)s

[sshd]
enabled  = true

Avec ignoreip, les IPs qui seront spécifiées sur cette ligne ne seront par bloquées. Je vous conseille de laisser l’adresse actuelle (qui doit être 127.0.0.1/8), d’y ajouter un espace afin de la séparer et d’y mettre votre adresse (ainsi que celles de toutes les personnes qui sont susceptibles d’accéder à votre serveur sans pour autant l’attaquer)

bantime est le nombre de secondes qu’une adresse va être bloquée si elle attaque votre serveur. 10 minutes est très peu suffisant, un rapide calcul vous permet d’en être sûr. Admettons que vous êtes attaqué par 20 machines différentes, toutes à 1 mot de passe toutes les 2 secondes. Vous avez donc 10 tentatives par seconde. Si fail2ban bloque au bout de 6 tentatives par IP, 120 mots de passe sont essayés toutes les 10 minutes, soit 16 800 par jour. Donc, 10 minutes ne représentent pas grand chose face au nombre de machines qui vous attaquent.

maxretry est le nombre de tentatives auxquelles a le droit un utilisateur avant de se faire bloquer.

destemail est l’adresse mail à laquelle seront envoyés les mails de notification (quand une adresse sera bloquée)

action permet d'effectuer des actions.
action = %(action_mw)s permet de bannir et d'envoyer un mail avec le pays ou l’email d’abuse concernant l’IP qui a été bannie.
action = %(action_mwl)s ajoute les lignes de logs ou apparaissent l’IP correspondante

Ajouter les règles spécifiques

[sshd]
enabled = true
port = 1234


[postfix]
port = smtp,submission
enabled = true

[dovecot]
port = imaps
enabled = true

N'oubliez pas de redémarrer le service sudo service fail2ban restart

 

Entrer votre commentaire. La syntaxe wiki est autorisée:
   ___    _  __   ____   __    _  __
  / _ |  / |/ /  / __/  / /   | |/_/
 / __ | /    /  / _/   / /__ _>  <  
/_/ |_|/_/|_/  /_/    /____//_/|_|
 
  • informatique/serveur-web-linux-apache/preparer-le-serveur-linux.txt
  • Dernière modification: 2021/01/16 05:10
  • de Cédric ABONNEL