Installer et sécuriser un serveur web avec accès FTP sur Debian 8 Jessie
Installer et sécuriser un serveur web avec accès FTP sur Debian 8 Jessie
Ce tutoriel explique de manière simple et directe comment configurer un serveur web sur Debian Jessie avec un serveur FTP, SSH et des services de messagerie, ainsi que des outils de surveillance et de sécurité tels que fail2ban, logwatch ou monit.
La sécurité mise en place dans ce tutoriel ne sera pas optimale et pourra toujours être améliorée, mais c'est un bon point de départ.
Nous allons lister une série de commandes à exécuter en SSH. Elles sont pratiquement toutes suffisamment explicites pour se passer de commentaires.
Vous pouvez tout faire sous votre compte root.
Changer le mot de passe root fourni par votre hébergeur (par exemple : OVH, Kimsufi, SoYouStart).
# passwd
Supprimer les clés SSH autorisées pour le compte root.
# echo > /root/.ssh/authorized_keys
Supprimer les scripts d'initialisation de votre hébergeur.
# rm /root/scripts-d-initialisation-de-votre-hebergeur -rf
Mettre à jour et installer divers logiciels.
# apt-get update # apt-get install aptitude # aptitude update && aptitude full-upgrade # aptitude install nano ntp ntpdate
Vérifier que la date est correcte.
# date
Mettre à jour les serveurs NTP localisés en France, par exemple.
# dpkg-reconfigure tzdata
# whereis ntp
# nano /etc/ntp.conf
Ajouter les serveurs NTP suivants :
server fr.pool.ntp.org iburst dynamic
server 0.fr.pool.ntp.org iburst dynamic
server 1.fr.pool.ntp.org iburst dynamic
server 2.fr.pool.ntp.org iburst dynamic
server 3.fr.pool.ntp.org iburst dynamic
Modifier éventuellement le fichier .bashrc pour ajouter de la couleur ou activer des alias.
# nano ~/.bashrc
# source ~/.bashrc
# nano /etc/pam.d/su
Décommenter la ligne suivante :
auth required pam_wheel.so
Modifier le fichier de configuration SSH pour changer le port SSH par défaut.
# nano /etc/ssh/sshd_config
Modifier la ligne suivante :
Port 15839
(Notez que vous devrez vous connecter à ce nouveau port SSH à l'avenir.)
Changer le nom d'hôte de votre serveur.
# nano /etc/hostname
Ajouter le nom de domaine de votre site, par exemple :
monsite.com
Modifier le fichier /etc/hosts pour ajouter ou vérifier les entrées suivantes :
# nano /etc/hosts
127.0.0.1 localhost.localdomain localhost 111.222.333.444 monsite.com monsite
Remplacez 111.222.333.444
par l'adresse IP de votre serveur.
Installer les paquets nécessaires pour un serveur web.
# aptitude install binutils debian-goodies debianutils sudo spamassassin clamav clamav-daemon unzip gcc mutt ftp make bzip2 curl perl openssl locate
Vérification et redirection des e-mails
Ouvrir le fichier d'alias en utilisant l'éditeur de texte "nano" :
sudo nano /etc/aliases
Modifier si nécessaire l'adresse e-mail de l'utilisateur root en la remplaçant par votre propre adresse e-mail, par exemple :
root : [email protected]
Cela permettra de rediriger les e-mails destinés à l'utilisateur root vers votre adresse e-mail personnelle.
Enregistrer les modifications et fermer l'éditeur de texte.
Mettre à jour les alias en exécutant la commande suivante pour prendre en compte les modifications :
sudo newaliases
Cela permettra de mettre à jour la configuration des alias e-mails.
Ouvrir le fichier de configuration du nom de domaine de l'e-mail en utilisant l'éditeur de texte "nano" :
sudo nano /etc/mailname
Modifier le nom de domaine de l'e-mail en remplaçant "monsite.com" par le nom de domaine approprié pour votre site web.
Enregistrer les modifications et fermer l'éditeur de texte.
En suivant ces étapes, vous pouvez vérifier ou rediriger les e-mails liés à votre serveur et vous assurer qu'ils sont correctement configurés pour votre site web.
N'oubliez pas de toujours sauvegarder vos fichiers de configuration avant de les modifier, et de tester attentivement les modifications pour vous assurer qu'elles fonctionnent correctement sur votre système.
Installation du serveur Apache et configuration d'un site web sur Apache 2.4
Après avoir installé Apache avec la commande
aptitude install apache2
vous pouvez installer les modules PHP nécessaires en utilisant la commande suivante :
sudo aptitude install php5 php5-gd php5-curl php5-dev php5-mcrypt php5-gmp php5-apcu php5-memcached memcached apache2-dev php-pear php5-imagick php5-mysql
Ensuite, vous pouvez configurer certains paramètres de sécurité dans le fichier security.conf
en utilisant la commande suivante pour l'ouvrir avec l'éditeur de texte nano
:
sudo nano /etc/apache2/conf-available/security.conf
Décommentez, ajoutez ou modifiez les lignes suivantes pour améliorer la sécurité de votre serveur Apache :
ServerTokens Prod ServerSignature Off
Ces paramètres permettent de masquer les informations de version d'Apache dans les en-têtes de réponse du serveur, ce qui peut aider à renforcer la sécurité en ne divulguant pas d'informations sensibles.
Ensuite, activez les modules nécessaires pour Apache en utilisant la commande a2enmod
. Par exemple, pour activer les modules cgi
, rewrite
, expires
et headers
, utilisez la commande suivante :
sudo a2enmod cgi rewrite expires headers
Ensuite, vous pouvez modifier le fichier de configuration principal d'Apache en utilisant la commande suivante :
sudo nano /etc/apache2/apache2.conf
Assurez-vous que les paramètres suivants sont configurés ou modifiés comme suit dans le bloc <Directory /var/www/>
:
<Directory /var/www/>
Options FollowSymLinks
AllowOverride None
Require all granted
</Directory>
Cela permet d'autoriser les liens symboliques dans le répertoire de base du site web (/var/www/
) et d'autoriser les directives d'override pour les fichiers .htaccess
.
Ensuite, vous pouvez créer un fichier de configuration pour votre site web en utilisant la commande suivante :
sudo nano /etc/apache2/sites-available/monsite.conf
Ajoutez les lignes suivantes pour configurer un virtual host pour votre site web :
<VirtualHost *:80>
ServerName www.monsite.com
ServerAdmin [email protected]
DocumentRoot /var/www/monsite
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory /var/www/monsite>
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
Assurez-vous de remplacer www.monsite.com
et [email protected]
par le nom de domaine et l'adresse e-mail de votre site web respectivement. Le répertoire DocumentRoot
doit être configuré avec le chemin vers le répertoire racine de votre site web.
Ensuite, activez le virtual host que vous venez de créer en utilisant la commande suivante :
sudo a2ensite monsite
Installation du serveur FTP
Entrez la commande suivante et suivez les instructions
# aptitude install proftpd
répondez : Indépendamment (standalone)
# adduser monlogin -shell /bin/false -home /var/www/monsite
# nano /etc/proftpd/proftpd.conf
Ajoutez/Modifiez :
ServerName "Mon serveur FTP"
TimeoutStalled 3600
ListOptions "-latr"
AllowStoreRestart on
Décommentez :
RequireValidShell off
Ces étapes permettent d'installer et de configurer le serveur FTP ProFTPD sur votre système. Une fois que vous avez installé ProFTPD, vous pouvez créer un nouvel utilisateur pour accéder au serveur FTP en utilisant la commande adduser
. Dans l'exemple ci-dessus, nous avons créé un nouvel utilisateur avec le nom "monlogin", en utilisant /bin/false
comme shell pour restreindre son accès au serveur FTP seulement, et en définissant /var/www/monsite
comme répertoire principal.
Ensuite, vous pouvez modifier la configuration de ProFTPD en éditant le fichier de configuration /etc/proftpd/proftpd.conf
avec l'éditeur de texte nano
. Vous pouvez personnaliser la configuration en ajoutant ou modifiant les directives nécessaires. Dans l'exemple ci-dessus, nous avons ajouté/modifié les directives suivantes :
ServerName
: Cela permet de définir le nom du serveur FTP, qui sera affiché dans les messages de connexion et les réponses du serveur.TimeoutStalled
: Cela définit le délai d'attente en secondes pour les connexions FTP en mode passif qui sont inactives. Dans cet exemple, nous avons défini la valeur à 3600 secondes (1 heure).ListOptions
: Cela définit les options d'affichage pour la commande de liste (ls) utilisée par le serveur FTP. Dans cet exemple, nous avons configuré les options pour afficher les fichiers en utilisant le format long, triés par date de modification inversée et avec les fichiers cachés inclus.AllowStoreRestart
: Cela permet d'autoriser la reprise des transferts interrompus lors de l'envoi de fichiers via FTP. Dans cet exemple, nous avons activé cette fonctionnalité en la définissant sur "on".RequireValidShell
: Cela permet de spécifier si un shell de connexion valide est requis pour les utilisateurs FTP. En décommentant cette directive et en la définissant sur "off", vous autorisez les utilisateurs FTP à se connecter sans avoir besoin d'un shell de connexion valide.
N'oubliez pas de sauvegarder les modifications apportées au fichier de configuration et de redémarrer le service ProFTPD pour appliquer les modifications en utilisant la commande suivante :
sudo service proftpd restart
Vous avez maintenant installé et configuré un serveur FTP sur votre système. Vous pouvez maintenant utiliser un client FTP pour vous connecter au serveur FTP et transférer des fichiers vers/des répertoires configurés. Assurez-vous de prendre les mesures de sécurité appropriées pour protéger votre serveur FTP, par exemple en limitant les droits d'accès des utilisateurs, en activant le chiffrement SSL/TLS pour les connexions FTP, et en utilisant des mots de passe forts et en mettant à jour régulièrement le logiciel ProFTPD pour bénéficier des dernières mises à jour de sécurité.
Installation du serveur MySQL et de PhpMyAdmin
Pour installer MySQL et PhpMyAdmin, vous pouvez utiliser les commandes suivantes :
# aptitude install mysql-server-5.5 phpmyadmin
Notez que pour Debian Stretch (Debian 9 et versions ultérieures), vous devrez exécuter la commande suivante pour sécuriser l'installation de MySQL :
# sudo mysql_secure_installation
Ensuite, vous devez configurer PhpMyAdmin pour qu'il fonctionne avec Apache. Pour cela, vous pouvez modifier le fichier de configuration d'Apache avec la commande suivante :
# nano /etc/phpmyadmin/apache.conf
Dans ce fichier, modifiez la ligne suivante :
Alias /phpMyAdmin /usr/share/phpmyadmin
par
Alias /DOSSIER-secret phpMyAdmin /usr/share/phpmyadmin
Remarque : Remplacez DOSSIER-secret
par le nom de dossier secret que vous souhaitez utiliser pour accéder à PhpMyAdmin.
Ensuite, ajoutez les lignes suivantes après la ligne "DirectoryIndex index.php" :
AuthType Basic
AuthName "phpMyAdmin"
AuthUserFile /etc/phpmyadmin/htpasswd.setup #ou un autre fichier htpasswd (cf section plus bas, monitoring - login pass)
Require valid-user
Ces lignes ajoutent une authentification basée sur un mot de passe pour PhpMyAdmin.
Enfin, vous pouvez créer un fichier htpasswd pour définir les noms d'utilisateur et les mots de passe qui seront utilisés pour accéder à PhpMyAdmin. Vous pouvez utiliser la commande suivante pour créer ce fichier :
# htpasswd -c /usr/local/.monfichierpassword monlogin
Remarque : Remplacez monfichierpassword
par le nom de fichier que vous souhaitez utiliser pour stocker les noms d'utilisateur et les mots de passe, et monlogin
par le nom d'utilisateur que vous souhaitez créer.
Une fois que vous avez effectué ces modifications, enregistrez le fichier de configuration d'Apache et quittez l'éditeur de texte.
Maintenant, vous devriez être en mesure d'accéder à PhpMyAdmin en utilisant le dossier secret que vous avez configuré dans l'URL de votre site web, par exemple :
http://monsite.com/DOSSIER-secret/
Installation du monitoring serveurs et des statistiques serveur awstats
Installer les packages nécessaires avec la commande suivante :
# aptitude install logwatch monit awstats
Modifier les permissions du fichier de journal d'accès Apache :
# chmod 644 /var/log/apache2/access.log*
Modifier les permissions du répertoire de journaux d'Apache :
# chmod 755 /var/log/apache2/
Modifier le fichier de rotation des journaux d'Apache avec la commande suivante :
# nano /etc/logrotate.d/apache2
Vérifier que la ligne suivante est présente ou la modifier si nécessaire :
create 644 root adm
Ajouter les lignes suivantes à la fin du fichier :
prerotate
/usr/share/doc/awstats/examples/awstats_updateall.pl now -awstatsprog=/usr/lib/cgi-bin/awstats.pl >> /var/log/awstats.log
endscript
Créer un fichier de mot de passe pour accéder aux statistiques avec la commande suivante :
# htpasswd -c /usr/local/.monfichierpassword monlogin
Remplacer "monfichierpassword" par le nom de votre fichier de mot de passe et "monlogin" par le nom d'utilisateur de votre choix.
Modifier le fichier de configuration d'awstats avec la commande suivante :
# nano /etc/apache2/conf-available/awstats.conf
Créer le fichier si nécessaire et ajouter les lignes suivantes :
Alias /awstats-icon "/usr/share/awstats/icon/"
ScriptAlias /AWstats/ /usr/lib/cgi-bin/
<Location /AWstats>
AuthType Basic
AuthName "Statistiques awstats"
AuthUserFile /usr/local/.monfichierpassword
Require valid-user
Require user monlogin
</Location>
<Directory /usr/lib/cgi-bin/>
DirectoryIndex awstats.pl
UseCanonicalName off
Options +ExecCGI
AllowOverride None
</Directory>
Activer la configuration d'awstats avec la commande suivante :
# a2enconf awstats
Modifier le fichier de configuration d'awstats avec la commande suivante :
# nano /etc/awstats/awstats.conf
Vérifier les lignes suivantes ou les modifier si nécessaire :
LogType=W
LogFormat=1
SiteDomain="monsite.com"
DNSLookup=2
Créer un fichier de configuration pour monit avec la commande suivante :
# nano /etc/monit/conf.d/isy
Configurer le fichier en fonction de vos besoins, notamment l'adresse e-mail de notification, le port d'accès à monit, le nom d'utilisateur et mot de passe, ainsi que les seuils de surveillance pour la charge du système, l'utilisation de la mémoire, et l'espace disque. Un exemple de configuration est donné dans le tutoriel.
Si vous utilisez l'utilisateur "@adm", ajouter l'utilisateur à ce groupe avec les commandes suivantes :
# adduser monlogin
# adduser monlogin adm
Installation de fail2ban
Entrez les commandes
# aptitude install fail2ban
# nano /etc/fail2ban/jail.conf
Configurez vos prisons à activer et ajoutez par exemple, en général ou sur un module précis :
[ssh]
enabled = true
port = 65000
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
# durée du banissement en secondes
bantime = 20000
# durée de recherches entre plusieurs tentatives
findtime = 3600
Installer le serveur mail Postfix avec un serveur SMTP configuré pour GMAIL
Si vous utilisez exim4, il peut être utile de désactiver la gestion d'IPV6 qui peut causer des problèmes. Pour cela, ouvrez le fichier de configuration avec la commande suivante :
# nano /etc/exim4/update-exim4.conf.conf
Ajoutez la ligne suivante :
dc_disable_ipv6='true'
Enregistrez les modifications et rechargez la configuration avec la commande suivante :
# update-exim4.conf
Ajoutez les enregistrements DNS nécessaires sur votre fournisseur de domaine (ex: Godaddy, Namecheap, etc.) pour votre serveur mail. Voici un exemple d'enregistrements à ajouter :
smtp IN A 111.222.333.444
monsite.com. IN MX 10 smtp
Cela permet de lier l'adresse IP de votre serveur (111.222.333.444) à un enregistrement MX pour votre domaine (monsite.com).
Installez Postfix et les modules nécessaires avec la commande suivante :
# aptitude install postfix libsasl2-modules sasl2-bin
Lorsque vous êtes invité à choisir le type de configuration, sélectionnez "Site Internet" (Internet Site) et saisissez le nom de domaine de votre site (ex: monsite.com).
Ouvrez le fichier de configuration principal de Postfix avec la commande suivante :
# nano /etc/postfix/main.cf
Ajoutez ou vérifiez les lignes suivantes :
myorigin = /etc/mailname
smtpd_tls_security_level=encrypt
smtp_tls_security_level = may
smtp_tls_loglevel = 1
smtpd_tls_ask_ccert = yes
myhostname = monsite.com
mydestination = $myhostname, localhost.$mydomain $mydomain
mailbox_size_limit = 0
message_size_limit = 1024000000
#sasl conf
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_sasl_security_options = noanonymous
smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination
Créez un utilisateur pour l'adresse e-mail [email protected] avec la commande suivante :
# adduser webmaster
Ouvrez le fichier d'aliases avec la commande suivante :
# nano /etc/aliases
Ajoutez ou modifiez les lignes suivantes :
root: webmaster
webmaster: [email protected]
Enregistrez les modifications.
Testez l'envoi d'un e-mail à [email protected] avec la commande suivante :
# echo "Email test" | mail -s "test de mon serveur mail" [email protected]
Vérifiez les logs pour vous assurer que l'envoi s'est bien déroulé:
# tail –F /var/log/mail.log
Configurer le SMTP SASL pour l'envoi via SMTP TLS de Gmail
Ouvrez le fichier de configuration du daemon SASL pour le serveur SMTP :
# nano /etc/postfix/sasl/smtpd.conf
Ajoutez les lignes suivantes :
pwcheck_method: saslauthd
mech_list: PLAIN LOGIN
Copiez le fichier de configuration par défaut de saslauthd et éditez le nouveau fichier :
# cp /etc/default/saslauthd /etc/default/saslauthd-postfix
# nano /etc/default/saslauthd-postfix
Modifiez les lignes suivantes :
START=yes
DESC="SASL Auth. Daemon for Postfix"
NAME="saslauthd-postf"
OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd"
Modifiez les droits d'accès pour le répertoire saslauthd :
# dpkg-statoverride --add root sasl 710 /var/spool/postfix/var/run/saslauthd
Ajoutez l'utilisateur postfix au groupe sasl :
# adduser postfix sasl
Redémarrez le daemon saslauthd :
# service saslauthd restart
Redémarrez le service postfix :
# service postfix restart
Configurer Gmail avec votre serveur SMTP pour envoyer des e-mails depuis l'adresse [email protected]
1. Accédez aux paramètres de votre compte Gmail, puis à "Comptes et importations", et cliquez sur "Envoyer des e-mails en tant que : Ajouter une autre adresse e-mail".
2. Décochez l'option "Traiter comme un alias".
3. Configurez les paramètres suivants :
- Serveur SMTP : smtp.monsite.com
- Port : 25
- Utilisateur : webmaster
- Mot de passe : le mot de passe que vous avez défini lors de la création de l'utilisateur "webmaster"
- Connexion sécurisée : TLS
Configurer muttrc
Ouvrez le fichier de configuration muttrc :
# nano ~/.muttrc
Ajoutez le contenu suivant en remplaçant les valeurs par les vôtres :
set from="monsite.com <[email protected]>"
set locale="fr_FR"
set date_format="%A %d %b %Y à %H:%M:%S (%Z)"
set attribution="Le %d, %n a écrit :"
set forward_format="[Fwd: %s]"
set forward_quote
set pager_index_lines=7
set pager_stop
set copy = no
Installation d'un script de sauvegarde des sites et du serveur
Si vous possédez le script de sauvegarde Isyweb, vous pouvez l'installer comme suit :
Téléchargez le script de sauvegarde :
# wget http://machin/scriptbackup.sh (désolé pour ceux qui ne l'ont pas, le script n'est plus disponible !)
Éditez le fichier scriptbackup.sh :
# nano scriptbackup.sh
Configurez les noms des sites, du serveur, l'adresse e-mail, l'heure de la tâche cron, les informations FTP, etc.
Exécutez le script de sauvegarde
# sh scriptbackup.sh
Ensuite vous pouvez le supprimer, tout s'est installé sur votre serveur.
rm scriptbackup.sh
Redémarrez, votre serveur Debian 8 Jessie est prêt à la production et complètement configuré!
# reboot
Selon vos besoins ou préférences, vous pouvez également envisager d'installer d'autres logiciels complémentaires tels que :
- amavisd-new : un framework pour l'analyse antivirus et antispam des courriers électroniques.
- nginx : un serveur web alternatif à Apache, connu pour sa performance élevée et sa consommation de ressources réduite.
- php-fpm : un gestionnaire de processus PHP qui peut être utilisé en conjonction avec nginx pour améliorer les performances de sites web PHP.
Ces logiciels peuvent offrir des fonctionnalités supplémentaires ou des performances améliorées pour votre serveur, en fonction de vos besoins spécifiques.
En bonus, voici quelques ajouts pour mettre en place SPF, DKIM et DMARC afin d'éviter que vos e-mails soient classés comme SPAM :
- SPF (Sender Policy Framework) : SPF est un mécanisme d'authentification des e-mails qui permet de spécifier les serveurs de messagerie autorisés à envoyer des e-mails au nom de votre domaine. Cela peut aider à prévenir la falsification de l'adresse d'expéditeur et à améliorer la délivrabilité des e-mails.
- DKIM (DomainKeys Identified Mail) : DKIM est une méthode d'authentification des e-mails qui permet de signer les messages sortants avec une clé cryptographique pour garantir leur authenticité. Cela peut aider à prouver que les e-mails proviennent réellement de votre domaine et à éviter qu'ils soient classés comme SPAM.
- DMARC (Domain-based Message Authentication, Reporting, and Conformance) : DMARC est un protocole qui permet de spécifier comment les serveurs de messagerie doivent traiter les e-mails en fonction des résultats SPF et DKIM. Cela peut aider à renforcer l'authentification des e-mails et à améliorer la délivrabilité des messages.
N'hésitez pas à consulter la documentation officielle de ces protocoles pour en savoir plus sur leur mise en place et leur configuration appropriée.
J'espère que ces informations supplémentaires vous seront utiles pour améliorer la sécurité et la délivrabilité de vos e-mails. N'hésitez pas à les mettre en œuvre en fonction de vos besoins spécifiques.
En conclusion, votre serveur Debian 8 Jessie est maintenant prêt à être utilisé en production avec Apache, ProFTPD et autres logiciels installés et configurés selon vos besoins. Assurez-vous de bien comprendre les concepts et les commandes que vous utilisez, et de prendre les mesures de sécurité appropriées pour protéger votre serveur et les données qu'il contient. Si vous avez des questions supplémentaires, n'hésitez pas à demander de l'aide à la communauté ou à des experts en la matière.
Bonne utilisation de votre serveur Debian 8 Jessie !
Lisez aussi...
- Installer et securiser un serveur web complet mail et ftp sur Debian 12 Bookworm
- Installer et securiser un serveur web complet mail et ftp sur Debian 11 Bullseye
- Le petit lexique du webmaster (designer, développeur, admin système)
- Hébergement web : Tout ce que vous devez savoir pour choisir le bon service de hosting
- Installer et sécuriser un serveur web complet, mail et ftp sur Debian 10 Buster
- Pourquoi et comment vérifier les connexions sur son serveur web
- Comprendre les principaux concepts du développement web
- Comment Créer un Site Web Gratuitement
- Devenir un pro du développement web sans même coder : les derniers outils à connaître !
- Les dernières tendances de design web : Du minimalisme au maximalisme