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

Installer et sécuriser un serveur web complet mail et ftp sur Debian 9 Stretch

Installer et configurer l'application serveur linux : Installer et sécuriser un serveur web complet mail et ftp sur Debian 9 Stretch

Ce tutoriel est compatible avec les distributions suivantes : DebianDebian

Tutoriel

Petit tuto concis pour installer et configurer un serveur complet, web + mail + ftp sur un serveur Debian Stretch.
Le tuto a été testé avec succès sous Debian 9.4.
Des programmes de surveillance, de backup, de protection et configurations de sécurité sont incorporés dans ce tuto.
La sécurité ici ne sera bien entendu pas optimale car elle dépend de beaucoup de choses et pourra toujours être améliorée mais vous permettra de mettre en place un serveur rapidement sur ... pied? ou sur le net !


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)

1) Faites-vous un petit café....
Prêt? C'est parti !

Changez votre mot de passe root fourni par votre hébergeur (exemple : OVH, Kimsufi, SoYouStart)



# passwd

# echo > /root/.ssh/authorized_keys

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



Mises à jours et installations diverses



# apt-get update

# apt-get install aptitude

# aptitude update && aptitude full-upgrade

# aptitude install nano ntp

# date

Vérifiez que la date est correcte

Update des serveurs NTP localisé en FR par exemple



# dpkg-reconfigure tzdata

# whereis ntp

# nano /etc/ntp.conf (selon son emplacement)
On ajoute ces serveurs là :

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


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 ftp make bzip2 curl perl openssl locate htop exim4



Configurez votre serveur mail



# 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


# openssl genrsa -out monsite.com.dkim.pkey.pem 1024 -outform PEM

# openssl rsa -in monsite.com.dkim.pkey.pem -out monsite.com.dkim.pem -pubout -outform PEM

# mkdir /etc/exim4/keys

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

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

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.

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

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.pem}{/etc/exim4/keys/${sender_address_domain}.dkim.pkey.pem}{0}}
.ifdef DKIM_FILE
DKIM_PRIVATE_KEY = ${if exists{DKIM_FILE}{DKIM_FILE}{0}}
.endif
DKIM_SELECTOR = example #pour exemple._domainkey c'est donc : exemple
DKIM_STRICT = false # optional ; false= pass if no key available

Veillez toujours à remplacer "monsite.com" !

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"



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



# aptitude install apache2 php7.0 php7.0-gd php7.0-curl php7.0-mcrypt php7.0-mysql php7.0-opcache php-apcu

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


# a2enmod cgi rewrite expires headers

# 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

# nano /etc/apt/sources.list
Ajoutez :

deb http://ftp.debian.org/debian stretch-backports main


# aptitude update

# aptitude install python-certbot-apache -t stretch-backports

# certbot --authenticator webroot --installer apache



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;
exit

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

# 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 9 Stretch 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 : # scp -P PORT-SSH-SECRET /dossier/local/backupsql.sql [email protected]:/dossier/versvotresite/adminer.sql )

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.

Bonne chance !



Revenir aux listes des applications Linux

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