Isyweb est fermé et ne propose plus aucun de ses services !

Installer et sécuriser un serveur web complet, mail et ftp sur Debian 11 Bullseye

Installer et configurer l'application serveur linux : Installer et sécuriser un serveur web complet, mail et ftp sur Debian 11 Bullseye

Ce tutoriel est compatible avec les distributions suivantes : DebianDebian

Tutoriel

ATTENTION
ATTENTION
ATTENTION
ATTENTION
ATTENTION
ATTENTION
ATTENTION
CECI EST UNE VERSION POUR DEBIAN 10 BUSTER, la version DEBIAN 11 BULLSEYE EST EN COURS DE REDACTION...
ATTENTION
ATTENTION
ATTENTION
ATTENTION
ATTENTION
ATTENTION
ATTENTION
ATTENTION

Voici une page efficace vous permettant d'installer, configurer, sécuriser un serveur web complet sous debian bullseye (debian 11)
Il permet également d'installer, configurer un serveur FTP (sous proftpd) et un serveur mail (serveur exim4)

Nous allons lister une série de commandes à écrire en SSH. Elles sont pratiquement toutes suffisamment explicite pour se passer de les commenter. Vous pouvez tout faire sous votre compte root. ("# command" signifie que vous devez entrer "command" dans votre client SSH; putty par exemple; sous un compte root)

Si vous ne pouvez-pas utiliser le compte root pour une raison quelconque; vous pouvez tenter de sudoïser votre compte utilisateur :
éditez le fichier : /etc/sudoers
et ajoutez une ligne telle que ceci : monlogin ALL=(ALL) NOPASSWD: ALL
Ceci vous permettra d'utiliser la commande "sudo" sans devoir mettre de mot de passe à chaque fois.

Notez bien que si vous ne faites pas les commandes suivantes sous root, il faudrait ajouter "sudo" devant chacune de ces commandes.



1) C'est parti !

Changez votre mot de passe root fourni par votre hébergeur



# passwd

# echo > /root/.ssh/authorized_keys
Ou videz le dossier : /etc/ssh/ des fichiers ssh_host*

# rm -rf /root/scripts-d-initialisation-de-votre-hebergeur

Changez vos serveurs dns



# nano /etc/resolv.conf
Remplacez par ceux que vous souhaitez, par exemple :
nameserver 1.1.1.1 #rapide
nameserver 1.0.0.1 #rapide
#nameserver 9.9.9.9 #securise
#nameserver 149.112.112.112 #securise



Mises à jours et installations diverses



# apt-get update

# apt-get install aptitude

# aptitude update && aptitude full-upgrade

# date

Vérifiez que la date est correcte, sinon mettez-la à jour avec :

# dpkg-reconfigure tzdata

Si besoin, modifiez votre .bashrc


Via http://bashrcgenerator.com/ pour ajouter de la couleur ou activer des alias (exemple : alias ll='ls -lah’)

# nano ~/.bashrc

# source ~/.bashrc

# nano /etc/ssh/sshd_config
Modifiez le port SSH : Port 15839 (Attention, pensez à vous connecter à ce port à l’avenir)


Changez le nom d’hôte



# nano /etc/hostname
Ajoutez :
monsite.com

# nano /etc/hosts
Ajoutez ou vérifiez :
127.0.0.1 localhost
111.222.333.444 monsite.com monsite




Installation de divers paquets pour serveur web


# aptitude install unzip gcc mutt make ftp bzip2 curl perl openssl locate htop exim4 vnstat



Configurez votre serveur mail EXIM4 (pour postfix, allez plus bas)



# dpkg-reconfigure exim4-config
Utilisez un serveur internet, ne minimalisez pas les requêtes DNS, ne relayez aucun serveur externe.

(Optionnel) Désactivez la gestion IPV6 qui cause parfois des problèmes :
# nano /etc/exim4/update-exim4.conf.conf
Ajoutez :
dc_disable_ipv6='true'


# update-exim4.conf afin de recharger la configuration

# nano /etc/aliases
Modifiez éventuellement :
root : [email protected]


# newaliases

# nano /etc/mailname
monsite.com

# /usr/lib/sendmail -f [email protected] -v [email protected]
Entrez un texte et envoyez le mail via "CTRL+D"
..
Que dit le log, cela s’est bien passé ?

Quittez via "CTRL+C".




Générez une clé DKIM (pour EXIM4)


# openssl genrsa -out monsite.com.dkim.pkey 1024

# openssl rsa -in monsite.com.dkim.pkey -pubout -out monsite.com.dkim.key

# mkdir /etc/exim4/keys

# cp monsite.com.dkim.pkey /etc/exim4/keys/

# chown root:Debian-exim -R /etc/exim4/keys

# chmod 0644 /etc/exim4/keys/monsite.com.dkim.pkey

Ensuite créez un enregistrement DNS de type TXT avec un selecteur au hazard, par exemple :
exemple._domainkey IN TXT "k=rsa; p=PUB_KEY"
Veillez à remplacer PUB_KEY par votre clé publique (monsite.com.dkim.key) en pensant a supprimer retour chariot ou espace.

# nano /etc/exim4/exim4.conf.template
Ajoutez/Vérifier ceci :

IGNORE_SMTP_LINE_LENGTH_LIMIT = 1
REMOTE_SMTP_HELO_DATA=monsite.com
DKIM_CANON = relaxed
DKIM_DOMAIN = ${sender_address_domain}
DKIM_FILE = ${if exists{/etc/exim4/keys/${sender_address_domain}.dkim.pkey}{/etc/exim4/keys/${sender_address_domain}.dkim.pkey}{0}}
.ifdef DKIM_FILE
DKIM_PRIVATE_KEY = ${if exists{DKIM_FILE}{DKIM_FILE}{0}}
.endif
DKIM_SELECTOR = exemple #pour exemple._domainkey c'est donc : exemple
DKIM_STRICT = false # optional ; false= pass if no key available

Veillez toujours à remplacer "monsite.com" !






Installer POSTFIX comme serveur mail (plutot que exim4)



# aptitude install postfix
(Si nécessaire, répondez : "Site Internet" et "monsite.com".

# dpkg-reconfigure postfix
Répondez "Site Internet" ensuite "monsite.com" (ou mail.monsite.com, comme le hostname, sous une IP non masquée par cloudflare ou autre)
Il vous sera ensuite demandé où envoyer les mails système, répondez root (ou bien monlogin si vous en avez fait un).

Après, renseignez les domaines vers lesquels vous souhaitez recevoir des emails sur ce serveur : monsite.com, mail.monsite.com, localhost
Ensuite, cliquez "Oui" pour forcer les mises à jours synchrones.
Les machines à relayées : localhost, 127.0.0.1, ... (vous pouvez ajouter des IP externes si besoin, mais faites attention !!)
Limitez la taille si besoin, sinon 0.
Finalement, choisissez le protocol souhaité : tous (par défaut), ipv4 only ou ipv6 only.

# echo "Le contenu du mail" | mail -s "ceci est le sujet" [email protected]

# cat /var/mail/monlogin
Vous devriez voir votre email... Ceci est une distribution locale... donc ça fonctionne facilement !

Mais si ça ne fonctionne pas, vous pouvez vérifier les logs :
# tail -f /var/log/mail.log

Testez ensuite d'envoyer un mail à l'extérieur, sur votre gmail ou autre... Si tout est OK... c'est fait !


Si vous souhaitez recevoir tous vos email directement sur votre gmail, faites ceci

# nano /etc/aliases
et modifiez la ligne root pour :
root: [email protected]
# newaliases
pour mettre à jour les alias.



Générez une clé DKIM (pour POSTFIX)


# aptitude install opendkim opendkim-tools

# mkdir -p /etc/opendkim

# opendkim-genkey --directory /etc/opendkim/ --domain=monsite.com --selector=mail --verbose

# chown opendkim:opendkim -R /etc/opendkim

# nano /etc/opendkim.conf
Ajoutez/Vérifiez :
Domain monsite.com,mail.monsite.com,monautresite.com
KeyFile /etc/opendkim/mail.private
Selector mail
AutoRestart Yes
AutoRestartRate 10/1M
DNSTimeout 5
Socket inet:[email protected]
UserID opendkim


# nano /etc/postfix/main.cf
milter_default_action = accept
milter_protocol = 6
smtpd_milters = inet:localhost:8891
non_smtpd_milters = $smtpd_milters


# cat /etc/opendkim/mail.txt
Copiez le résultat de cette commande

Ensuite créez un enregistrement DNS de type TXT avec un selecteur au hazard, par exemple :
mail._domainkey IN TXT "k=rsa; p=PUB_KEY"
Veillez à remplacer PUB_KEY par votre clé publique (ce que vous avez copié juste avant)
Il se peut que vous devez ajouter l'enregistrement : mail._domainkey.subdomain avec la même valeur, ainsi que des enregistrements semblables pour vos autres domaines.

Ajoutez postfix dans le groupe opendkim, gérez les droits et redémarrez le serveur mail
# chown opendkim:opendkim -R /var/run/opendkim
# adduser postfix opendkim
# systemctl restart opendkim
# systemctl restart postfix
Si tout va bien, vous avez votre dkim fonctionnel, vérifiez via des outils en ligne et inspectez vos log.

Vous pouvez également tester votre clé DKIM via cette commande :
# opendkim-testkey -d monsite.com -s mail -vvv




Ajoutez un SPF


Super facile, ajoutez un enregistrement DNS de type TXT encore, comme ceci (remplacez par votre IP serveur) :
@ IN TXT "v=spf1 ip4:MONIP ~all"

Ajoutez un DMARC


Tout aussi simple que le SPF, ajoutez un enregistrement DNS de plus (remplacez par votre email:
_dmarc IN TXT "v=DMARC1; p=quarantine; rua=mailto:[email protected]; fo=0; adkim=r; aspf=r; pct=100; rf=afrf; ri=86400; sp=none"

Vérifiez et testez votre serveur mail


Plus d'infos ici : Configurer son serveur email avecc SPF DKIM DMARC

Installation du serveur Apache et configuration d’un site web sur Apache 2.4



# aptitude install apache2 php7.4 php7.4-dev php7.4-gd php7.4-curl php7.4-bcmath php7.4-mysql php7.4-opcache php-apcu php-pear

If you need to install some PHP extensions, do it in this way : (mcrypt for example)
# pecl install mcrypt-1.0.2

# nano /etc/apache2/conf-available/security.conf
Décommentez/ajoutez/modifiez :
ServerTokens Prod
ServerSignature Off


# a2enmod cgi rewrite expires headers

# nano /etc/apache2/mods-available/mpm_prefork.conf
Ajoutez/Vérifier ceci, à adapter selon vos besoins et le serveur (voir avec par exemple "apache2buddy") :

<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxRequestWorkers 200
ServerLimit 200
MaxConnectionsPerChild 0
</IfModule>


# nano /etc/apache2/apache2.conf
Modifiez/vérifiez :
<Directory /var/www/>
Options FollowSymLinks
AllowOverride None
Require all granted
</Directory>


# nano /etc/apache2/sites-available/monsite.conf
Ajoutez :
<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>


# a2ensite monsite

Si vous souhaitez ajouter HTTPS à votre site, vous pouvez suivre ces bons conseils :

# a2enmod ssl

# aptitude install certbot python-certbot-apache

Si vous utilisez (ou comptez utiliser) cloudflare, installez aussi ce paquet :

# aptitude install python3-certbot-dns-cloudflare
et lisez ceci à l'aide de google traduction car ceci nécessitera une connexion par API: https://certbot.eff.org/docs/using.html#dns-plugins

# certbot --dns-cloudflare --dns-cloudflare-credentials ~/.secret/.mdp-cloudflare-API.txt -d monsite.com,www.monsite.com

(ajoutez une tâche cron une fois par jour : crontab -e -> 1 1 * * * certbot renew --quiet )


Installation du serveur FTP



# aptitude install proftpd

# 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




Installation de MySQL - MariaDB



# aptitude install mariadb-server

# mysql_secure_installation
Appuyez "enter" à la première question, ensuite, oui et entrez votre mot de passe root, puis répondez oui à toutes les questions suivantes.

Maintenant on va configurer un utilisateur avec tous les privilèges :

# mysql -uroot -p
Entrez votre mot de passe root puis saisissez ces 4 lignes de commande une à une dans le terminal mysql :

CREATE USER 'monsite' IDENTIFIED BY 'monpass';
GRANT ALL PRIVILEGES ON *.* TO 'monsite'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

Ensuite, vous pouvez installer phpmysql ou plus simplement utiliser une page tel que adminer pour administrer vos bases de données.
Si vous utilisez adminer, pensez à sécuriser le dossier par htpasswd dans un dossier secret et de nom complexe dans lequel il se trouve.



Installation du monitoring serveurs



# aptitude install logwatch monit A ce jour, MONIT n'est toujours pas dispo pour debian 10 (utilisez les scripts shell fournis)

# nano /etc/monit/conf.d/isy
Créez ce fichier (configurez-le, au moins l’email et login :pass et disques !):
set daemon 60
set logfile syslog facility log_daemon
set mailserver localhost
set mail-format {
subject: [Monit] $HOST - $SERVICE $EVENT
}
set alert [email protected]
set httpd port 22334 #monit sera accessible via http://monsite.com:22334
allow monlogin:pass #vous pouvez aussi mettre allow @groupAdmin si vous avez un groupe unix
check system $HOST
if loadavg (5min) > 3 then alert
if memory usage > 80% for 4 cycles then alert
# Apache2
check process apache2 with pidfile /run/apache2/apache2.pid
group www-data
start program = "/bin/systemctl start apache2"
stop program = "/bin/systemctl stop apache2"
if failed host 127.0.0.1 port 80
protocol http then restart
if 5 restarts within 5 cycles then timeout
# MySQL
check process mysqld with pidfile /run/mysqld/mysqld.pid
group database
start program = "/bin/systemctl start mysqld"
stop program = "/bin/systemctl stop mysqld"
if failed host 127.0.0.1 port 3306 then restart
if 5 restarts within 5 cycles then timeout
# Disques (configurez votre disque selon le chemin indiqué via la commande : df)
check device rootfs with path /dev/sda1
if space usage > 80% then alert
group system




Installation de fail2ban



# 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




Configuration muttrc



# nano ~/.muttrc
Créez ce fichier (en remplaçant votre nom/ email) :
set from="monsite.com <[email protected]>"
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 backup des sites et du serveur



Si vous possédez le script de backup Isyweb, installez le comme ceci :

# wget http://machin/scriptbackup.sh (désolé pour ceux qui ne l’ont pas, le script n’est plus disponible... Voir un peu plus bas !)

# nano scriptbackup.sh
Configurez nom du site, serveur, email, heure cron, ftp, …

# sh scriptbackup.sh

# rm scriptbackup.sh


Si vous n'avez pas le script, un simple backup chaque heure de votre base de données pourrait être une simple ligne dans cron :
# crontab -e
Ajoutez :

10 * * * * mysqldump mabase | gzip > /chemin/local/secret/$(date +\%H)H_mabase.backup.sql.gz




Configurez un service anti-DDOS


Enregistrez-vous et protéger votre IP en bypassant vos visiteurs par CloudFlare (ou un autre service équivalant).

Cela peut apporter une sécurité supplémentaire et une facilité pour certaines choses, par exemple le changement d'IP(DNS) qui peut être instantané en cas de changement de serveur.

Cependant il peut arriver que l'IP client ait une IP CF... Petit correctif :
# aptitude install apache2-dev libtool git

# wget https://www.cloudflare.com/static/misc/mod_cloudflare/mod_cloudflare.c

# apxs -a -i -c mod_cloudflare.c

# systemctl restart apache2



Fini !


Redémarrez, votre serveur Debian 10 Buster est prêt à la production et complètement configuré!
# reboot

Envoyez vos fichiers via FTP, créer un utilisateur sql, des bases de données ou importez vos bdd avec adminer
Vous pouvez par exemple envoyer un fichier directement par SSH de votre ancien serveur vers le nouveau avec : # sudo rsync -azP -e 'ssh -p PORT-SSH-SECRET' /home/mondossier-ou-fichier/ [email protected]:/home/mondossier/
NB : finissez bien vos dossiers par un '/' final, sinon vos fichiers cachés risque de ne pas être copiés


Et vous devriez, à présent, avoir accès à votre site et tout le reste.


Par la suite il peut être intéressant d'installer mysqltuner et d'adapter certaines valeurs de fonctionnement :
# wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/mysqltuner.pl && perl mysqltuner.pl --user root --pass MONPASSSQL

Et également apache2buddy :
# curl -sL https://raw.githubusercontent.com/richardforth/apache2buddy/master/apache2buddy.pl | perl


Bonne chance !



Revenir aux listes des applications Linux

Créer un site web avec Isyweb.com © 1999 - 2020 - Tous les prix affichés sur Isyweb.com sont HTVA