Outils pour utilisateurs

Outils du site


serveur_site_internet

Serveur site internet

Configuration du CT Proxmox

  • Nom de l'hôte: snn-fprod-ct-apache
  • OS : Debian 8
  • CPU : 1
  • RAM : 1024
  • SWAP : 512
  • IP publique: statique

L'accès root par ssh sera désactivé, il faudra faire login via un utilisateur sans droits admin sur un port SSH différent au port par défaut (SSH) et ensuite s’authentifier comme utilisateur root pour effectuer des tâches sysadmin.

Installation

La première connexion au CT doit se faire par la console de Proxmox. On commence par la création de/des utilisateurs sans droits admin. Si vous êtes sur Debian 8, la définition du mot de passe et quelques données (facultatif) de l'utilisateur seront ensuite demandées:

#adduser utilisateur

J’effectue ensuite une vérification des dépôts de Debian pré-configurés et je aperçoit qu’il manque les « non-free ».

#less /etc/apt/sources.list

deb http://ftp.debian.org/debian jessie main contrib
deb http://ftp.debian.org/debian jessie-updates main contrib
deb http://ftp.debian.org/debian jessie/updates main contrib

On édite le fichier pour qu'il ressemble à ceci:

deb http://ftp.debian.org/debian jessie main contrib non-free
deb http://ftp.debian.org/debian jessie-updates main contrib non-free
deb http://ftp.debian.org/debian jessie/updates main contrib non-free

Ensuite on met a jour la liste des dépôts et le système aussi.

#apt-get update

#apt-get upgrade

On prépare SSH : je commence par modifier le port d'accès par défaut.

#nano /etc/ssh/sshd_config
# Package generated configuration file
# See the sshd_config(5) manpage for details

# What ports, IPs and protocols we listen for
Port NOTRE_NUMERO_DE_PORT
...

Il faut ensuite relancer le daemon SSH:

#service ssh restart

Nous pouvons nous connecter ensuite depuis notre console habituelle.

#ssh -p NUMERO_DE_PORT utilisateur@IP_DU_SERVEUR

On continue avec quelques petits ajustements pour sécuriser l'accès à notre serveur. On ajoute la clé publique SSH de notre utilisateur:

#mkdir .ssh

#chmod 700 .ssh

On ajoute notre clé publique dans le fichier “authorized_keys”, je sauvegarde et modifie les droits du fichier “authorized_keys”:

#nano .ssh/authorized_keys

#chmod 600 .ssh/authorized_keys

On continue les configuration de SSH. Nous avons déjà modifié le port de connexion, il faut maintenant désactiver l’accès root et l’accès par mot de passe. Seulement les utilisateurs avec une double clé SSH publique/privé pourront se connecter.

#su
//je change a l'utilisateur root

#apt-get -y install vim-nox
//J’installe mon éditeur de texte préféré : vim.

#vim /etc/ssh/sshd_config

Nous allons chercher les lignes de texte suivantes et le modifier comme indiqué ci-dessous:

PermitRootLogin no
//L’authentification SSH par root est désactivée

PasswordAuthentication no
//On désactive l’authentification par mot de passe. Seulement le login avec des cléfs RSA fonctionnera.

Sans oublier de redémarrer le service SSH:

#service ssh restart

Je vérifie et configure les noms d’hôtes:

#vim /etc/hosts

Le contenu est pour la machine que je mets en service maintenant:

127.0.0.1       localhost
::1             localhost ip6-localhost ip6-loopback
ff02::1         ip6-allnodes
ff02::2         ip6-allrouters
# --- BEGIN PVE ---
#10.10.20.84 snn-fprod-ct-apache.80.67.169.12 snn-fprod-ct-apache

10.10.20.84 snn-fprod-ct-apache.swissneutral.net snn-fprod-ct-apache
212.101.27.43 snn-fprod-ct-apache.swissneutral.net snn-fprod-ct-apache

On vérifie la bonne configuration du nom d’hôte comme suit :

#hostname

#hostname -f

Pour éviter des problèmes avec l’installation de ISPConfig on doit faire pointer le lien symbolique /bin/sh vers /bin/bash, pour cela :

#dpkg-reconfigure dash
// Il faut choisir non comme réponse.

Configuration de l’horloge système et synchro avec les serveurs NTP:

#apt-get install ntp

#dpkg-reconfigure tzdata
//Pour sélectionner la bonne configuration

#date
//Pour vérifier la config.

On fait une parenthèse et on assure notre système contre les rootkits. C’est important de le faire lors de la mise en place du serveur.

Donc :

#apt-get install rkhunter
//pour installer rkhunter

#rkhunter --update
//mise-à-jour de la base de données

#rkhunter --propupd
//mise-à-jour des propriétés du système de fichiers

#rkhunter --check --sk
//exécution de l'analyse

Nous pouvons maintenant nous lancer dans l'installation de Postfix, Dovecot, MySQL et Binutils:

#apt-get install postfix postfix-mysql postfix-doc mariadb-client mariadb-server openssl getmail4 binutils dovecot-imapd dovecot-pop3d dovecot-mysql dovecot-sieve dovecot-lmtpd

Il faut maintenant sécuriser un peu l'installation de de MariaDB/MySQL :

#mysql_secure_installation

Si le mot de passe root de MySQL a déjà été définit lors de l'installation, il n'y aura pas besoin de le redéfinir. La réponse aux autres questions doit être affirmative.

Change the root password? [Y/n] <-- n
Remove anonymous users? [Y/n] <-- y
Disallow root login remotely? [Y/n] <-- y
Remove test database and access to it? [Y/n] <-- y
Reload privilege tables now? [Y/n] <-- y

Ensuite, nous ouvrons les ports TLS/SSL et de submission pour Postfix:

#vim /etc/postfix/master.cf

Il faut éliminer le caractère de commentaire et ajouter les lignes de texte comme suit dans le fichier master.cf :

[...]
submission inet n - - - - smtpd
 -o syslog_name=postfix/submission
 -o smtpd_tls_security_level=encrypt
 -o smtpd_sasl_auth_enable=yes
 -o smtpd_client_restrictions=permit_sasl_authenticated,reject
# -o smtpd_reject_unlisted_recipient=no
# -o smtpd_client_restrictions=$mua_client_restrictions
# -o smtpd_helo_restrictions=$mua_helo_restrictions
# -o smtpd_sender_restrictions=$mua_sender_restrictions
# -o smtpd_recipient_restrictions=
# -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
# -o milter_macro_daemon_name=ORIGINATING
smtps inet n - - - - smtpd
 -o syslog_name=postfix/smtps
 -o smtpd_tls_wrappermode=yes
 -o smtpd_sasl_auth_enable=yes
 -o smtpd_client_restrictions=permit_sasl_authenticated,reject
# -o smtpd_reject_unlisted_recipient=no
# -o smtpd_client_restrictions=$mua_client_restrictions
# -o smtpd_helo_restrictions=$mua_helo_restrictions
# -o smtpd_sender_restrictions=$mua_sender_restrictions
# -o smtpd_recipient_restrictions=
# -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
# -o milter_macro_daemon_name=ORIGINATING
[...]

Il faut relancer postfix :

#service postfix restart

Il faut que MariaDB écoute sur toutes les interfaces: il faut éliminer la ligne ou bien ajouter le symbole commentaire sur la ligne bind-address = 127.0.0.1 :

#vim /etc/mysql/my.cnf

Ça devrait ressembler à ceci:

[...]
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
#bind-address           = 127.0.0.1
[...]

On relance MySQL :

#service mysql restart

Pour vérifier l'écoute sur toutes les interfaces :

#netstat -tap | grep mysql

La sortie devrait être :

tcp6 0 0 [::]:mysql [::]:* LISTEN 7522/mysqld

Installation de Amavisd-new, SpamAssassin et ClamAV

#apt-get install amavisd-new spamassassin clamav clamav-daemon zoo unzip bzip2 arj nomarch lzop cabextract apt-listchanges libnet-ldap-perl libauthen-sasl-perl clamav-docs daemon libio-string-perl libio-socket-ssl-perl libnet-ident-perl zip libnet-dns-perl postgrey

ISPConfig charge les bibliothèques de SpamAssassin, on désactive maintenant SpamAssassin :

#service spamassassin stop
#systemctl disable spamassassin

Installation de Apache2, PHP, FCGI, suExec, Pear, phpMyAdmin et mcrypt :

#apt-get install apache2 apache2.2-common apache2-doc apache2-mpm-prefork apache2-utils libexpat1 ssl-cert libapache2-mod-php5 php5 php5-common php5-gd php5-mysql php5-imap phpmyadmin php5-cli php5-cgi libapache2-mod-fcgid apache2-suexec php-pear php-auth php5-mcrypt mcrypt php5-imagick imagemagick libruby libapache2-mod-python php5-curl php5-intl php5-memcache php5-memcached php5-pspell php5-recode php5-sqlite php5-tidy php5-xmlrpc php5-xsl memcached libapache2-mod-passenger

Le script d'installation nous demandera “Please choose the web server that should be automatically configured to run phpMyAdmin”. Il faut choisir “apache2”.

Ensuite :

Configure database for phpmyadmin with dbconfig-common? <- yes
Enter the password of the administrative user? <- Le mot de passe root de MySQL
Enter the phpmyadmin application password? <-  Simplement continuer avec "Enter"

Pour activer les modules suexec, rewrite, ssl, actions et include d'Apache, on execute la commande suivante :

#a2enmod suexec rewrite ssl actions include dav_fs dav auth_digest cgi headers

Pour éviter des attaques exploitant la vulnérabilité HTTP_PROXY, on édite le fichier “/etc/apache2/conf-available/httpoxy.conf” et ajoute :

<IfModule mod_headers.c>
    RequestHeader unset Proxy early
</IfModule>

On active le module avec :

a2enconf httpoxy
service apache2 restart

Pour installer la HHVM (HipHop Virtual Machine) :

# apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0x5a16e7281be7a449

#echo deb http://dl.hhvm.com/debian jessie main | tee /etc/apt/sources.list.d/hhvm.list

#apt-get update

#apt-get install hhvm

On installe Let's Encrypt :

#mkdir /opt/certbot

#cd /opt/certbot

#wget https://dl.eff.org/certbot-auto

#chmod a+x ./certbot-auto

On exécute certbot-auto, qui va télécharger et installer les paquets nécessaires et leurs dépendances :

#./certbot-auto

Lors de l’exécution de certbot, on ne configure pas les certificats TLS/SSL pour les domaines, on le fera depuis ISPConfig.

On installe le module PHP-FPM :

#apt-get install libapache2-mod-fastcgi php5-fpm

#a2enmod actions fastcgi alias

#service apache2 restart

Installation de PureFTPd et configuration:

#apt-get install pure-ftpd-common pure-ftpd-mysql

On édite le fichier “/etc/default/pure-ftpd-common” et s'assure que le “start mode” est défini a “standalone” et “VIRTUALCHROOT=true” :

[...]
STANDALONE_OR_INETD=standalone
[...]
VIRTUALCHROOT=true
[...]

Maintenant, nous configurons PureFTPd pour autoriser les sessions FTP et TLS. FTP est un protocole peu sûr car tous les mots de passe et toutes les données sont transférés en clair. En utilisant TLS, l'ensemble de la communication peut être crypté, rendant ainsi FTP beaucoup plus sûr.

Pour permettre les sessions FTP et TLS :

#echo 1> /etc/pure-ftpd/conf/TLS

#mkdir -p /etc/ssl/private/

#openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem

Aux questions pour la génération du certificat SSL :

Country Name (2 letter code) [AU]: <-- CH
State or Province Name (full name) [Some-State]: <-- Vaud
Locality Name (eg, city) []: <-- Aigle
Organization Name (eg, company) [Internet Widgits Pty Ltd]: <-- SwissNeutral.Net
Organizational Unit Name (eg, section) []: <-- IT Department
Common Name (eg, YOUR name) []: <-- snn-fprod-ct-apache.swissneutral.net
Email Address []: <-- info@swissneutral.net

Ensuite on adapte les permissions du certificat et relance PureFTPd :

#chmod 600 /etc/ssl/private/pure-ftpd.pem

#service pure-ftpd-mysql restart

Installation de fail2ban and UFW

#apt-get install fail2ban ufw

Pour permettre à fail2ban de contrôler PureFTPd et Dovecot, il faut créer le fichier “/etc/fail2ban/jail.local” avec le contenu suivant :

[pureftpd]
enabled  = true
port     = ftp
filter   = pureftpd
logpath  = /var/log/syslog
maxretry = 3

[dovecot-pop3imap]
enabled = true
filter = dovecot-pop3imap
action = iptables-multiport[name=dovecot-pop3imap, port="pop3,pop3s,imap,imaps", protocol=tcp]
logpath = /var/log/mail.log
maxretry = 5

[postfix-sasl]
enabled  = true
port     = smtp
filter   = postfix-sasl
logpath  = /var/log/mail.log
maxretry = 3

On va créer aussi le fichier “/etc/fail2ban/filter.d/pureftpd.conf” avec :

[Definition]
failregex = .*pure-ftpd: (.*@<HOST>) [WARNING] Authentication failed for user.*
ignoreregex =

Et le fichier “/etc/fail2ban/filter.d/dovecot-pop3imap.conf” avec le contenu suivant :

[Definition]
failregex = (?: pop3-login|imap-login): .*(?:Authentication failure|Aborted login \(auth failed|Aborted login \(tried to use disabled|Disconnected \(auth failed|Aborted login (d+ authentication attempts).*rip=(?P<host>\S*),.*
ignoreregex =

Finalement on execute :

#echo "ignoreregex =">> /etc/fail2ban/filter.d/postfix-sasl.conf

#service fail2ban restart

Et nous voilà à l'étape finale pour préparer notre serveur : ISPConfig. Pour télécharger et installer :

#cd /tmp

#wget http://www.ispconfig.org/downloads/ISPConfig-3-stable.tar.gz

#tar xfz ISPConfig-3-stable.tar.gz

#cd ispconfig3_install/install/

#php -q install.php

Pour télécharger un manuel de ISPConfig, les créateurs demandent de faire un don. Je l'ai déjà fait dans le passé et je cède ma copie du manuel à l'association. Je le dépose dans le Nextcloud de SNN.

serveur_site_internet.txt · Dernière modification: 2018/02/26 19:54 par 138.190.133.6