Série RHCSA : Installation, configuration et sécurisation d’un serveur Web et FTP – Partie 9

A web server (also known as a HTTP server) is a service that handles content (most commonly web pages, but other types of documents as well) over to a client in a network.

A FTP server is one of the oldest and most commonly used resources (even to this day) to make files available to clients on a network in cases where no authentication is necessary since FTP uses username and password without encryption.

Le serveur web disponible dans RHEL 7 est la version 2.4 du serveur HTTP Apache. En ce qui concerne le serveur FTP, nous utiliserons le Very Secure Ftp Daemon (alias vsftpd) pour établir des connexions sécurisées par TLS.

RHCSA: Installing, Configuring and Securing Apache and FTP – Part 9

Dans cet article, nous expliquerons comment installer, configurer et sécuriser un serveur web et un serveur FTP dans RHEL 7.

Installation d’Apache et du serveur FTP

Dans ce guide, nous utiliserons un serveur RHEL 7 avec une adresse IP statique de 192.168.0.18/24. Pour installer Apache et VSFTPD, exécutez la commande suivante :

# yum update && yum install httpd vsftpd

Lorsque l’installation est terminée, les deux services seront désactivés initialement, nous devons donc les démarrer manuellement pour le moment et les activer pour qu’ils démarrent automatiquement à partir du prochain démarrage :

# systemctl start httpd
# systemctl enable httpd
# systemctl start vsftpd
# systemctl enable vsftpd

De plus, nous devons ouvrir les ports 80 et 21, où les démons web et ftp écoutent respectivement, afin de permettre l’accès à ces services depuis l’extérieur :

# firewall-cmd --zone=public --add-port=80/tcp --permanent
# firewall-cmd --zone=public --add-service=ftp --permanent
# firewall-cmd --reload

Pour confirmer que le serveur web fonctionne correctement, ouvrez votre navigateur et saisissez l’IP du serveur. Vous devriez voir la page de test :

Confirm Apache Web Server

Quant au serveur ftp, nous devrons le configurer davantage, ce que nous ferons dans un instant, avant de confirmer qu’il fonctionne comme prévu.

Configuration et sécurisation du serveur web Apache

Le fichier de configuration principal pour Apache se trouve dans /etc/httpd/conf/httpd.conf, mais il peut dépendre d’autres fichiers présents dans /etc/httpd/conf.d.

Bien que la configuration par défaut devrait être suffisante pour la plupart des cas, il est bon de se familiariser avec toutes les options disponibles telles que décrites dans la documentation officielle.

Comme toujours, faites une copie de sauvegarde du fichier de configuration principal avant de le modifier :

# cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.$(date +%Y%m%d)

Ensuite, ouvrez-le avec votre éditeur de texte préféré et recherchez les variables suivantes :

  1. ServerRoot : le répertoire où la configuration du serveur, les fichiers d’erreur et de journalisation sont conservés.
  2. Listen : indique à Apache d’écouter une adresse IP spécifique et/ou des ports spécifiques.
  3. Include : permet l’inclusion d’autres fichiers de configuration qui doivent exister. Sinon, le serveur échouera, contrairement à la directive IncludeOptional, qui est ignorée silencieusement si les fichiers de configuration spécifiés n’existent pas.
  4. User et Group : le nom de l’utilisateur/groupe sous lequel le service httpd s’exécute.
  5. DocumentRoot : le répertoire à partir duquel Apache servira vos documents. Par défaut, toutes les requêtes sont prises à partir de ce répertoire, mais des liens symboliques et des alias peuvent être utilisés pour pointer vers d’autres emplacements.
  6. ServerName : cette directive définit le nom d’hôte (ou l’adresse IP) et le port que le serveur utilise pour s’identifier.

La première mesure de sécurité consistera à créer un utilisateur et un groupe dédiés (c’est-à-dire tecmint/tecmint) pour exécuter le serveur Web et à changer le port par défaut pour un port plus élevé (9000 dans ce cas) :

ServerRoot "/etc/httpd"
Listen 192.168.0.18:9000
User tecmint
Group tecmint
DocumentRoot "/var/www/html"
ServerName 192.168.0.18:9000

Vous pouvez tester le fichier de configuration avec

# apachectl configtest

et si tout est OK, alors redémarrez le serveur Web

# systemctl restart httpd

et n’oubliez pas d’activer le nouveau port (et de désactiver l’ancien) dans le pare-feu :

# firewall-cmd --zone=public --remove-port=80/tcp --permanent
# firewall-cmd --zone=public --add-port=9000/tcp --permanent
# firewall-cmd --reload

Notez que, en raison des politiques de SELinux, vous ne pouvez utiliser que les ports renvoyés par

# semanage port -l | grep -w '^http_port_t'

pour le serveur Web.

Si vous souhaitez utiliser un autre port (c’est-à-dire le port TCP 8100), vous devrez l’ajouter au contexte de port SELinux pour le service httpd :

# semanage port -a -t http_port_t -p tcp 8100
Add Apache Port to SELinux Policies

Pour sécuriser davantage votre installation Apache, suivez ces étapes :

1. L’utilisateur sous lequel Apache s’exécute ne devrait pas avoir accès à un shell :

# usermod -s /sbin/nologin tecmint

2. Désactivez l’affichage de répertoire pour empêcher le navigateur d’afficher le contenu d’un répertoire s’il n’y a pas de index.html présent dans ce répertoire.

Modifiez le fichier /etc/httpd/conf/httpd.conf (et les fichiers de configuration des hôtes virtuels, le cas échéant) et assurez-vous que la directive Options, à la fois en haut et aux niveaux des blocs Directory, est définie sur None :

Options None

3. Masquez les informations sur le serveur Web et le système d’exploitation dans les réponses HTTP. Modifiez /etc/httpd/conf/httpd.conf comme suit :

ServerTokens Prod 
ServerSignature Off

Maintenant, vous êtes prêt à commencer à diffuser du contenu depuis votre répertoire /var/www/html.

Configuration et sécurisation du serveur FTP

Comme dans le cas d’Apache, le fichier de configuration principal pour Vsftpd (/etc/vsftpd/vsftpd.conf) est bien commenté et bien que la configuration par défaut devrait suffire pour la plupart des applications, vous devriez vous familiariser avec la documentation et la page de manuel (man vsftpd.conf) afin de pouvoir exploiter le serveur FTP de manière plus efficace (je ne peux pas insister assez là-dessus!).

Dans notre cas, voici les directives utilisées:

anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
chroot_local_user=YES
allow_writeable_chroot=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES

En utilisant chroot_local_user=YES, les utilisateurs locaux seront (par défaut) placés dans une prison chrootée dans leur répertoire personnel juste après la connexion. Cela signifie que les utilisateurs locaux ne pourront pas accéder à des fichiers en dehors de leurs répertoires personnels correspondants.

Enfin, pour permettre à FTP de lire les fichiers dans le répertoire personnel de l’utilisateur, définissez le paramètre SELinux suivant:

# setsebool -P ftp_home_dir on

Vous pouvez maintenant vous connecter au serveur FTP à l’aide d’un client tel que Filezilla:

Check FTP Connection

Notez que le journal des transferts /var/log/xferlog enregistre les téléchargements et les téléversements, ce qui concorde avec la liste des répertoires ci-dessus:

Monitor FTP Download and Upload

Voir aussi: Limiter la bande passante réseau FTP utilisée par les applications dans un système Linux avec Trickle

Résumé

Dans ce tutoriel, nous avons expliqué comment configurer un serveur web et un serveur FTP. En raison de l’ampleur du sujet, il n’est pas possible de couvrir tous les aspects de ces sujets (par exemple, les hébergements web virtuels). Je vous recommande donc de consulter également d’autres excellents articles sur ce site concernant Apache.

Source:
https://www.tecmint.com/rhcsa-series-install-and-secure-apache-web-server-and-ftp-in-rhel/