Recherche de site Web

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


Un serveur Web (également appelé serveur HTTP) est un service qui gère le contenu (le plus souvent des pages Web, mais également d'autres types de documents) vers un client dans un réseau.

Un serveur FTP est l'une des ressources les plus anciennes et les plus couramment utilisées (même à ce jour) pour mettre des fichiers à la disposition des clients sur un réseau dans les cas où aucune authentification n'est nécessaire puisque FTP utilise le nom d'utilisateur et . mot de passe sans cryptage.

Le serveur Web disponible dans RHEL 7 est la version 2.4 du serveur HTTP Apache. Quant au serveur FTP, nous utiliserons le démon Ftp Very Secure (alias vsftpd) pour établir des connexions sécurisées par TLS.

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

Une fois l'installation terminée, les deux services seront initialement désactivés, nous devons donc les démarrer manuellement pour le moment et leur permettre de démarrer automatiquement au 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ù écoutent respectivement les démons web et ftp, 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, lancez votre navigateur et saisissez l'adresse IP du serveur. Vous devriez voir la page de test :

Quant au serveur FTP, nous devrons le configurer davantage, ce que nous ferons dans une minute, avant de confirmer qu'il fonctionne comme prévu.

Configuration et sécurisation du serveur Web Apache

Le fichier de configuration principal d'Apache se trouve dans /etc/httpd/conf/httpd.conf, mais il peut s'appuyer sur d'autres fichiers présents dans /etc/httpd /conf.d.

Bien que la configuration par défaut devrait suffire dans la plupart des cas, c'est une bonne idée de se familiariser avec toutes les options disponibles 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 dans lequel sont conservés les fichiers de configuration, d'erreur et de journalisation du serveur.
  2. Écouter : demande à Apache d'écouter sur une adresse IP et/ou des ports spécifiques.
  3. Inclure : permet l'inclusion d'autres fichiers de configuration, qui doivent exister. Sinon, le serveur échouera, contrairement à la directive IncludeOptional, qui est silencieusement ignorée si les fichiers de configuration spécifiés n'existent pas.
  4. Utilisateur et groupe : le nom de l'utilisateur/du groupe sous lequel exécuter le service httpd.
  5. DocumentRoot : le répertoire à partir duquel Apache servira vos documents. Par défaut, toutes les requêtes proviennent 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 en tant que et à remplacer le port par défaut par un port supérieur (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, 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 qu'en raison des politiques 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 du port SELinux pour le service httpd :


semanage port -a -t http_port_t -p tcp 8100

Pour sécuriser davantage votre installation Apache, procédez comme suit :

1. L'utilisateur Apache s'exécute comme ne devrait pas avoir accès à un shell :


usermod -s /sbin/nologin tecmint

2. Désactivez la liste des répertoires afin d'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 /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, en haut et en haut. aux niveaux de bloc du Répertoire, est défini sur Aucun :


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

Vous êtes maintenant prêt à commencer à diffuser du contenu à partir de votre répertoire /var/www/html.

Configuration et sécurisation du serveur FTP

Comme dans le cas d'Apache, le fichier de configuration principal de Vsftpd (/etc/vsftpd/vsftpd.conf) est bien commenté et alors 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 faire fonctionner le serveur ftp plus efficacement (je ne saurais trop insister 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 accéder à aucun fichier 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 booléen SELinux suivant :


setsebool -P ftp_home_dir on

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

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

Lire aussi : Limiter la bande passante du 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 FTP. En raison de l'immensité du sujet, il n'est pas possible de couvrir tous les aspects de ces sujets (c'est-à-dire les hébergeurs virtuels). Ainsi, je vous recommande également de consulter d’autres excellents articles sur ce site Web sur Apache.