Installer et sécuriser un serveur web complet, mail et ftp sur Debian 10 Buster


263 views
Temps de lecture 22min 50s
4/12/2023, 11:21:35 AM
Auteur : Michael

Installer et sécuriser un serveur web complet, mail et ftp sur Debian 10 Buster

 

Ce tutoriel vous guide à travers l'installation et la sécurisation d'un serveur web complet, incluant un serveur mail et un serveur ftp, sur Debian 10 Buster. Il est conçu comme une liste de commandes à exécuter en SSH, avec des explications claires pour vous permettre de mettre en place votre serveur rapidement.

Compatibilité : Ce tutoriel est compatible avec les distributions suivantes : Debian 10 Buster.

 

 

Préparation

a) Changez le mot de passe root fourni par votre hébergeur :

# passwd

b) Videz le dossier /root/.ssh/authorized_keys ou /etc/ssh/ des fichiers ssh_host* :

# echo > /root/.ssh/authorized_keys
# rm -rf /root/scripts-d-initialisation-de-votre-hebergeur

c) Modifiez les serveurs DNS dans le fichier /etc/resolv.conf en remplaçant les valeurs par celles de votre choix :

# nano /etc/resolv.conf

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 à jour et installations diverses

a) Mettez à jour la liste des paquets disponibles :

# apt-get update

b) Installez le gestionnaire de paquets aptitude :

# apt-get install aptitude

c) Mettez à jour les paquets installés :

# aptitude update && aptitude full-upgrade

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

# date # dpkg-reconfigure tzdata

e) (Optionnel) Modifiez votre .bashrc pour ajouter de la couleur ou activer des alias :

# nano ~/.bashrc

f) Sourcez le fichier .bashrc pour appliquer les modifications :

# source ~/.bashrc

g) Modifiez le port SSH dans le fichier /etc/ssh/sshd_config (par exemple, Port 15839) :

# nano /etc/ssh/sshd_config

 

Configuration du nom d'hôte

a) Modifiez le nom d'hôte dans le fichier /etc/hostname en ajoutant le nom de votre site :

# nano /etc/hostname

b) Modifiez le fichier /etc/hosts pour ajouter ou vérifier l'adresse IP et le nom d'hôte de votre site :

# nano /etc/hosts

Exemple :

127.0.0.1 localhost 
111.222.333.444 monsite.com monsite

 

Installation de divers paquets pour le serveur web

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

 

Configuration du serveur mail EXIM4 (pour postfix, voir plus bas)

Exécutez la commande suivante pour reconfigurer EXIM4 :

# dpkg-reconfigure exim4-config

Sélectionnez "Serveur internet" et ne minimalisez pas les requêtes DNS. Ne relayez aucun serveur externe.

 

(OPTIONNEL) Désactivation de la gestion IPV6 qui peut causer des problèmes :

# nano /etc/exim4/update-exim4.conf.conf

Ajoutez la ligne suivante :

dc_disable_ipv6='true'

 

Rechargez la configuration avec la commande :

# update-exim4.conf

 

Modifiez éventuellement le fichier d'alias :

# nano /etc/aliases

Par exemple, vous pouvez changer la ligne pour rediriger les emails de root vers votre adresse Gmail :

root : [email protected]

Appliquez les changements avec la commande :

# newaliases

 

Modifiez le fichier de nom d'hôte de messagerie :

# nano /etc/mailname

Remplacez monsite.com par le nom de votre site.

 

Envoyez un email de test avec la commande suivante :

# /usr/lib/sendmail -f [email protected] -v [email protected]

Entrez le texte de l'email et envoyez-le en appuyant sur CTRL+D.

 

Vérifiez les journaux pour vous assurer que l'envoi s'est bien déroulé :

Que dit le log, cela s'est bien passé ?

Quittez avec CTRL+C.

 

Génération d'une clé DKIM pour EXIM4

Générez une paire de clés DKIM avec les commandes suivantes :

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

 

Créez un répertoire pour stocker les clés :

# mkdir /etc/exim4/keys

 

Copiez la clé privée dans le répertoire des clés :

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

 

Définissez les permissions appropriées pour les clés :

# chown root:Debian-exim -R /etc/exim4/keys
# chmod 0644 /etc/exim4/keys/monsite.com.dkim.pkey

 

Enregistrez la clé publique monsite.com.dkim.key comme enregistrement DNS de type TXT avec un sélecteur aléatoire, par exemple :

exemple._domainkey IN TXT "k=rsa; p=PUB_KEY"

Assurez-vous de remplacer PUB_KEY par votre clé publique et de supprimer les retours chariots ou espaces.

 

Modifiez le fichier de configuration d'EXIM4 :

# nano /etc/exim4/exim4.conf.template

Ajoutez ou vérifiez les lignes suivantes :

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 (plutôt 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 à jour synchrones.

Les machines à relayer : 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 protocole 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 !

 

NB : Les logs postfix ne spécifient pas le sujet du mail et c'est parfois utile pour repérer certains problèmes, faites simplement ceci :

# echo 'header_checks = regexp:/etc/postfix/header_checks' >> /etc/postfix/main.cf 
# echo '/^Subject:/ WARN' > /etc/postfix/header_checks 
# postmap /etc/postfix/header_checks && systemctl restart postfix

Il vous suffira de lire vos logs de cette façon :

# cat /var/log/mail.log | perl -MEncode=decode -ne 'print (decode("MIME-Header", "$_"))'

 

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

# nano /etc/aliases

et modifiez la ligne root pour :

root: [email protected]

 

pour mettre à jour les alias :

# newaliases

 

 

Générez une clé DKIM pour Postfix :

Installez les outils OpenDKIM en utilisant la commande suivante :

# aptitude install opendkim opendkim-tools

Créez le répertoire pour OpenDKIM et naviguez dedans :

# mkdir -p /etc/opendkim && cd /etc/opendkim/

Générez la clé DKIM en spécifiant le domaine et le sélecteur appropriés. Répétez cette étape pour chaque domaine que vous souhaitez ajouter.

Remplacez monsite1.com et mail par vos propres valeurs :

# opendkim-genkey --directory /etc/opendkim/ --domain=monsite1.com --selector=mail --verbose && rename 's/mail/monsite1/' *

 

Éditez le fichier KeyTable pour ajouter les informations de clé générées pour chaque domaine :

# nano /etc/opendkim/KeyTable

Ajoutez les lignes suivantes en remplaçant les noms de domaine et les chemins de clé par vos propres valeurs :

mail._domainkey.monsite1.com monsite1.com:mail:/etc/opendkim/monsite1.private
mail._domainkey.monsite2.com monsite2.com:mail:/etc/opendkim/monsite2.private

 

Éditez le fichier SigningTable pour spécifier les domaines et les clés à signer :

# nano /etc/opendkim/SigningTable

Ajoutez les lignes suivantes en remplaçant les noms de domaine par vos propres valeurs :

monsite1.com mail._domainkey.monsite1.com
monsite2.com mail._domainkey.monsite2.com

 

Modifiez les droits du répertoire OpenDKIM pour qu'ils soient appropriés :

# chown opendkim:opendkim -R /etc/opendkim

Éditez le fichier de configuration d'OpenDKIM pour spécifier les paramètres de configuration :

# nano /etc/opendkim.conf

Ajoutez ou vérifiez les lignes suivantes :

Domain monsite1.com,mail.monsite.com,monautresite.com
KeyTable /etc/opendkim/KeyTable
SigningTable /etc/opendkim/SigningTable
Selector mail
AutoRestart Yes
AutoRestartRate 10/1M
DNSTimeout 5
Socket inet:8891@localhost
UserID opendkim

 

Éditez le fichier de configuration de Postfix pour ajouter les paramètres de milter et de taille de message :

# nano /etc/postfix/main.cf

Ajoutez ou vérifiez les lignes suivantes :

milter_default_action = accept
milter_protocol = 6
smtpd_milters = inet:localhost:8891
non_smtpd_milters = $smtpd_milters
message_size_limit = 51200000
inet_protocols = ipv4

 

Copiez le contenu du fichier de clé générés dans le fichier mail.txt en utilisant la commande suivante :

cat /etc/opendkim/mail.txt

Ensuite, créez un enregistrement DNS de type TXT avec un sélecteur au hasard, par exemple :

mail._domainkey IN TXT "k=rsa; p=PUB_KEY"

Veillez à remplacer PUB_KEY par votre clé publique que vous avez copiée juste avant. Il se peut que vous deviez ajouter également l'enregistrement mail._domainkey.subdomain avec la même valeur, ainsi que des enregistrements similaires 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 maintenant configuré DKIM sur votre serveur de messagerie. Vous pouvez vérifier cela en utilisant des outils en ligne et en inspectant les journaux.

 

Vous pouvez également tester votre clé DKIM via cette commande :

opendkim-testkey -d monsite.com -s mail -vvv

 

Ajoutez un SPF

Pour ajouter un enregistrement SPF, il vous suffit d'ajouter un enregistrement DNS de type TXT avec votre adresse IP de serveur, par exemple :

@ IN TXT "v=spf1 ip4:MON_IP ~all"

Remplacez MON_IP par votre adresse IP réelle du serveur.

 

Ajoutez un DMARC

Pour ajouter un enregistrement DMARC, vous pouvez utiliser la même approche en ajoutant un enregistrement DNS de type TXT, par exemple :

_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"

Remplacez [email protected] par votre propre adresse e-mail.

 

Vérifiez et testez votre serveur de messagerie.

Pour plus d'informations sur la configuration de votre serveur de messagerie avec SPF, DKIM et DMARC, vous pouvez consulter ce page : Configurer son serveur email avecc SPF DKIM DMARC

 

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

 

# apt install -y apache2 php8.0-{mysql,cli,common,snmp,ldap,curl,mbstring,zip,bcmath,mcrypt,dev,gd,opcache} php-pear

 

Si vous avez besoin d'installer certaines extensions PHP, vous pouvez le faire de cette manière : (mcrypt par exemple)

# 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 mod_reqtimeout
# nano /etc/apache2/mods-available/mpm_prefork.conf

Ajoutez/Vérifiez 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

Vérifiez/modifiez :

Timeout 30
<Directory /var/www/>
Options FollowSymLinks
AllowOverride None
Require all granted
</Directory>

 

# nano /etc/apache2/mods-available/reqtimeout.conf

Vérifiez/modifiez :

<IfModule mod_reqtimeout.c>
RequestReadTimeout header=10-20,MinRate=500 body=10,MinRate=500
</IfModule>

 

# 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 cela 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 )

 

Pour parfaire la sécurité, il serait intéressant d'installer un WAF (Web-Application Firewall), tel que mod_security2 et facultativement mod_qos, qui pourrait aider lors de certaines attaques DDOS... mais pourrait faire "double-emploi" avec le module reqtimeout. Il semblerait que mod_qos soit contre-performant aux côtés de mod_reqtimeout.

 

Pour mod_security, c'est parti :

# aptitude install libapache2-mod-security2

 

Ensuite on copie la configuration par défaut

cp /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf
nano /etc/modsecurity/modsecurity.conf

Ajoutez/vérifiez :

SecRuleEngine On
SecResponseBodyAccess Off
SecRequestBodyLimit 1024000 #pour des upload de 1mb max
<Directory /var/www/monsite/DossierSecretPourAdminerOuAutre/>
SecRuleEngine Off
</Directory>

 

a2enmod security2 && systemctl reload apache2

Après avoir ajouté le module et redémarré Apache2, on peut tester !

 

curl localhost/index.html?exec=/bin/bash

Devrait afficher une erreur 403.

tail -f /var/log/apache2/error.log

devrait nous montrer un "ModSecurity: Warning".

 

Pour mod_qos :

# aptitude install libapache2-mod-qos

# nano /etc/apache2/mods-available/qos.conf

Ajoutez en fin de fichier :

<IfModule mod_qos.c>

QS_ClientEntries 100000

#vérifie jusqu'a 100000 ips

QS_SrvMaxConnPerIP 50

#max 50 connections par ip

MaxClients 256

#max 256 ip differentes

QS_SrvMaxConnClose 180

#desactive keep-alive lorsqu'on atteint 180 ip differentes connectees

QS_SrvMinDataRate 150 1200

#requière minimum 150 bytes/secondes et limite a 1200 bytes/secondes lorsque MaxClients est atteint

</IfModule>

# a2enmod qos && systemctl reload apache2

 

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

 

Sécurisation du serveur FTP

On peut éventuellement sécuriser nos connexions ftp avec TLS.

C'est très simple, on crée un dossier pour commencer :

# mkdir /etc/proftpd/ssl

Ensuite on crée un certificat (vous pouvez compléter le certificat par vos données ou juste laisser vide) :

# openssl req -new -x509 -days 365 -nodes -out /etc/proftpd/ssl/proftpd.cert.pem -keyout /etc/proftpd/ssl/proftpd.key.pem

Ensuite on vérifie le fichier de configuration :

# nano /etc/proftpd/proftpd.conf

Il faudra décommenter la ligne :

Include /etc/proftpd/tls.conf

 

On modifie ensuite ce fichier tls :

# nano /etc/proftpd/tls.conf

Ajoutez/décommentez ceci :

<IfModule mod_tls.c>
TLSEngine on
TLSLog /var/log/proftpd/tls.log
TLSProtocol TLSv1.2
TLSOptions NoCertRequest EnableDiags
TLSRSACertificateFile /etc/proftpd/ssl/proftpd.cert.pem
TLSRSACertificateKeyFile /etc/proftpd/ssl/proftpd.key.pem
TLSVerifyClient off
TLSRequired on
</IfModule>

 

C'est fait, redémarrez proftpd pour mettre la configuration à jour :

# /etc/init.d/proftpd restart

 

Installation de MySQL - MariaDB

# aptitude install mariadb-server
# mysql_secure_installation

Appuyez sur "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 telle 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 disponible pour Debian 10 (utilisez les scripts shell fournis)

 

# nano /etc/monit/conf.d/isy

Créez ce fichier (configurez-le, au moins le mail et le login : pass et disk !) :

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 (ou CSF plus bas!)

# aptitude install fail2ban
# nano /etc/fail2ban/jail.d/myjails.conf

 

Créons une jail supplémentaire pour les erreurs 408 (telles que bloquées par mod_req_timeout)

# nano /etc/fail2ban/filter.d/apache-408.conf

Ajoutez ceci :

# Fail2Ban filter to block web requests ended by a 408 error
[Definition]
failregex = ^ -.*"(GET|POST|HEAD|-).*" 408 .*$

 

Configurez vos prisons à activer et ajoutez par exemple, en général ou sur un module précis :

[DEFAULT]
bantime = 3600
findtime = 600
[sshd]
enabled = true
port = ssh,65000
maxretry = 2
bantime = 20000
findtime = 3600
[apache-auth]
enabled = true
[apache-noscript]
enabled = true
[apache-overflows]
enabled = true
[apache-nohome]
enabled = true
[apache-botsearch]
enabled = true
[apache-modsecurity]
enabled = true
[apache-shellshock]
enabled = true
[php-url-fopen]
enabled = true
[proftpd]
enabled = true
[mysqld-auth]
bantime=600
findtime=3600
enabled = true
[apache-408]
enabled = true
maxretry = 3
bantime = 300
findtime = 60
port = http,https
logpath = %(apache_access_log)s

 

Rechargez la nouvelle configuration :

# systemctl reload fail2ban

Vous pouvez vérifier vos jails :

# fail2ban-client status

ou un jail en particulier, tel que : fail2ban-client status sshd

 

 

Installation de CSF (ConfigServer Security & Firewall) à la place de Fail2ban

Si vous préférez CSF à F2B, suivez ces étapes :

# aptitude install libwww-perl
# cd /tmp && wget http://download.configserver.com/csf.tgz
# tar -xvzf csf.tgz
# cd csf && sh install.sh
# perl /usr/local/csf/bin/csftest.pl

Si tout est OK, vous pouvez continuer :

# nano /etc/csf/csf.conf

Cherchez/modifiez TESTING = 0 puis sauvegardez le fichier.

 

Les commandes de CSF sont simples : Désactiver CSF :

# csf -x

Activer CSF :

# csf -e

Redémarrer CSF :

# csf -r

Si vous utilisez Clouflare, whitelistez les IP CF :

# nano /etc/csf/csf-cloudflare.sh

Ajoutez ceci :

#!/usr/bin/env bash

IPS=`curl -s https://www.cloudflare.com/ips-v4`
IPS+=`echo -e "\n" && curl -s https://www.cloudflare.com/ips-v6`

for ip in ${IPS}; do
sudo csf -a $ip
done

sudo csf -r

 

Lancez ce fichier :

# sh csf-cloudflare.sh

CSF devrait être opérationnel.

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

Inscrivez-vous et protégez votre IP en redirigeant vos visiteurs via CloudFlare (ou tout autre service équivalent).

Cela peut offrir une sécurité supplémentaire et faciliter certaines choses, comme le changement instantané d'IP(DNS) en cas de changement de serveur.

Cependant, il peut arriver que l'adresse IP du client apparaisse comme une adresse IP de CloudFlare... Voici un 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

 

Pour peaufiner un peu, voici quelques petits détails à améliorer :

# nano /etc/sysctl.conf
Ajoutez ceci :
# Activer la protection contre l'usurpation d'IP, activer la vérification de l'adresse source
net.ipv4.conf.all.rp_filter = 1
# Activer la protection des cookies TCP SYN
net.ipv4.tcp_syncookies = 1
# Réduire le délai d'attente TCP_WAIT
# (par défaut : 60)
net.ipv4.tcp_fin_timeout = 30
# Recycler et réutiliser les sockets TIME_WAIT plus rapidement
# (par défaut : 0)
net.ipv4.tcp_tw_reuse = 1
# Intervalle de KeepAlive : détermine le temps d'attente entre les sondages d'intervalle isAlive.
# (par défaut : 75 secondes, recommandé : 15-30 secondes)
net.ipv4.tcp_keepalive_intvl = 30
# Sondages KeepAlive : détermine le nombre de sondages avant expiration
# (par défaut : 9, recommandé : 5)
net.ipv4.tcp_keepalive_probes = 5
# Désactiver les horodatages pour éviter les frais généraux de l'en-tête TCP de 12 octets
# (par défaut : 1)
net.ipv4.tcp_timestamps = 0
# Désactiver les accusés sélectifs
# (par défaut : 1)
net.ipv4.tcp_sack = 0
# Activer la mise à l'échelle de la fenêtre
# (par défaut : 1)
net.ipv4.tcp_window_scaling = 1

 

Appliquer les changements :

# sysctl -p

 

Il serait intéressant d'ajouter une couche supplémentaire de protection anti-DDOS... Soit via un ensemble de règles iptables, soit via un outil comme ddos-deflate. Mais pour l'instant, voici deux exemples de règles iptables pour bloquer plus de 50 connexions à partir de la même IP sur HTTPS ou plus de 20 connexions sur le port 443 :

# iptables -A INPUT -p tcp --syn --dport 8443 -m connlimit --connlimit-above 20 -j REJECT --reject-with tcp-reset
# iptables -A INPUT -p tcp --syn -m connlimit --connlimit-above 50 -j REJECT --reject-with tcp-reset

 

Et n'oubliez pas d'installer le petit outil qui sauvegarde vos règles :

# aptitude install iptables-persistent

Ensuite, pour sauvegarder :

# netfilter-persistent save

 

... Après, il faut prendre une pause et se détendre un peu... ou peut-être aussi installer un petit équilibreur de charge, comme HAProxy ? On verra ! En attendant c'est fini !

 

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

# reboot

 

Envoyez vos fichiers via FTP, créez un utilisateur SQL, des bases de données ou importez vos bases de données avec Adminer.

 

Par exemple, vous pouvez 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/ root@IPNEWSERVER:/home/mondossier/

 

NB : assurez-vous de terminer vos dossiers par un '/' final, sinon vos fichiers cachés risquent de ne pas être copiés.

Et vous devriez maintenant 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 !

Ce tutoriel explique brièvement les commandes et opérations. Si vous voulez creuser en profondeur dans l'une ou l'autre section, vous pourrez le faire par la suite; le but étant ici de mettre son serveur en route "rapidement"... Le tuto comporte tout de même près de 4000 mots, on a fait ce qu'on a pu !