nohup et scp, comment détacher un processus du terminal

nohup et scp, comment détacher un processus du terminal

Aller, un petit billet pour vous parler des commandes nohup et scp et donner une solution à un problème que j’ai rencontré.

Il m’arrive souvent de vouloir transférer des fichiers volumineux d’un serveur à un autre et qui ne se trouvent pas sur le même réseau, plusieurs solutions existent, mais je parlerai ici de la commande SCP.
En résumé, le SCP (Secure Copy Protocol) permet de transférer en toute sécurité des fichiers entre deux machines via le protocole sécurisé SSH.

Le souci c’est que plus les fichiers sont lourds, plus le temps de transfert augmente, et si vous avez une connexion merdique, comme c’est mon cas, le temps d’attente s’allonge considérablement, et pendant ce temps vous ne pouvez pas fermer le terminal ou éteindre la machine, car le processus du scp et lié à celui du shell qui l’a lancé.

nohup et scp

Vous allez me dire, rien de plus simple, la commande nohup permet justement de détacher le processus fils du processus père.
Ok, nous pouvons utiliser la commande nohup dans ce cas de figure, mais pas en utilisation standard, car la scp demande un mot de passe.

Pour plus de clarté voici un exemple concret

Imaginons que j’ai un fichier nommé “MonFichierTresLourd” que je veux transférer à un serveur “zenzla@chezmoi” et plus exactement dans le répertoire “/media/fichier”

En temps normal, j’utilise la commande scp seule

1
2
scp -r MonFichierTresLourd  zenzla@chezmoi:/media/fichier
zenzla@chezmoi password:

Ici, il me demande le mot de passe pour me connecter au serveur distant qui est zenzla@chezmoi

Maintenant, si j’utilise la commande scp avec une utilisation standard de nohup

1
nohup scp -r MonFichierTresLourd  zenzla@chezmoi:/media/fichier

Dans ce cas, je n’aurais pas la main pour saisir le mot de passe :(, même en arrêtant le processus avec Ctrl+z

La solution est donc de jouer avec les redirections des flux comme le démontre la commande si dessous

1
2
3
4
5
6
nohup scp -r MonFichierTresLourd  zenzla@chezmoi:/media/fichier > nohup.out 2>&1
zenzla@chezmoi password: <--- Saisir le mot de passe

Ctrl+z
.......
bg

Explication
Nous redirigeons la sortie standard (1) vers le fichier nohup.out ainsi que la sortie des erreurs (2), cela vas nous permettre de saisir le mot de passe demandé,
mais le terminal n’est toujours pas libre, il faut donc arrêter (non le tuer) le processus en faisant un Ctrl+z puis le mettre en arrière-plan (background) en saisissant bg

Voilà votre terminal est libre !!
Pour vous assurer que la copie des fichiers tourne bien en arrière plan, utilisez la commande jobs

Vous pouvez maintenant éteindre votre machine et rentrer chez vous grâce à nohup et scp

La pédagogie du libre, c’est la base

La pédagogie du libre, c’est la base

Depuis quelques mois, je lis des articles assez critique que le monde du libre, les libristes et la pédagogie du libre. Je ne me reconnais pas dans ce qui est écrit.

Ces articles dénoncent la communauté du libre comme étant une communauté fermée, qui parle qu’a elle-même, et ne fait pas l’effort d’aller vers ceux « qui ne savent pas ».
Une communauté dont le code de fonctionnement est difficile à lire et à suivre, et tous ceux qui dérogent à la règle ne sont pas les bienvenus

Moi je dis que c’est accusation sont fausses !!

Car dans toutes les événements dans lesquels j’assiste en tant qu’orateur, auditeur, ou organisateur, comme c’est le car pour les événements Root66, cafés vie privée, Ubuntu Party nous prenons le soin de répondre aux attentes des personnes présentes quelques soit leur niveau technique, âge ou sexe.

Nous essayons de vulgariser le plus possible, sans tomber pour autant dans le simplissime, car oui il faut apprendre pour avancer, et apprendre prend du temps et demande une volonté que tous n’ont pas.
Car pour s’approprier les logiciel libre, il faut avant tout être convaincu par leurs utilités sans cela vous pouvez répéter mille fois la même chose, cela entrera d’un côté et ressortira de l’autre.

La pédagogie du libre avant l’action

Il est vrai que beaucoup de libristes brûlent les étapes en expliquant qu’il faut vite quitter Microsoft, et MS office et de passer à Debian et libre Office, ou qu’il faut vite quitter les réseaux sociaux comme Facebook, Google+ car derrière il y a la NSA. Cela ne fonctionnera jamais, car trop brutal, et anti-pédagogique.

Demander à une personne de quitter MS, alors que toute sa vie il a travaillé dessus, ne se fera pas d’un claquement des doigts, mais se fera qu’après un apprentissage, un sevrage et une conviction d’un tel acte. Et c’est seulement en étant pédagogue que nous y arriverons.

Le problème c’est que tout le monde n’est pas sensible à la question des logiciels libre et de la protection de la vie privée, car c’est vrai qu’il est plus facile d’aborder ces thèmes lors des cafés « vie privée », ubuntu party ou quadrapero, car nous avançons en terrain conquis, et que le public est prédisposé, car il a fait l’effort de se déplacer et donc s’attend à ce discoure.
Mais le vrai défi est de convaincre « les autres », ceux qui s’en foutent totalement, ceux qui pensent qu’ils n’ont rien à cacher, ceux qui utilisent pleinement les nouvelles technologies et qui ne veulent pas se prendre la tête avec le chiffrement et la protection de leurs données. Il est là le vrai défi.

Bref, je ne sais plus où j’en suis, il se fait tard, et les idées s’embrouillent !! Je ne sais plus ce que je voulais dire, mah bon c’est dit

BIND DNS : query (cache) ‘*/IN’ denied

BIND DNS : query (cache) ‘*/IN’ denied

Ce matin en regardant les logs de mon serveur nouvellement réinstallé, je vois des milliers de lignes liées à BIND DNS :

1
2
3
4
5
...
09-Oct-2015 22:23:29.076 client 74.125.181.49#32935: query (cache) 'www.site.fr/A/IN' denied
09-Oct-2015 22:23:29.086 client 74.125.181.54#38723: query (cache) 'www.site.fr/A/IN' denied
09-Oct-2015 22:23:39.833 client 62.34.202.138#51968: query (cache) 'www.site.fr/A/IN' denied
...

Dans un premier temps, je pensais à une attaque du mon serveur, mais en cherchant bien sur le net, je n’étais pas le seul a être touché par ce problème lié à BIND9 les fameux “Faille DOS DNS”.
Et c’est bien ce que m’a confirmé l’outil dnstop, outil de monitoring de requêtes DNS, avec la commande

1
dnstop eth0

Dans mon cas, le serveur BIND DNS refuse bien les requêtes, d’où la mention “denied”, donc même si cela engendrait des kilomètres de ligne dans les fichiers logs, le serveur n’en souffre pas.

Oui mais comment faire pour bloquer tous ce raffut bind dns ?

J’ai pensé alors à fail2ban qui est un formidable outil pour bannir les IP trop encombrantes.
Mais cela s’avère une très mauvaise solution, car en général dans ce type d’attaques, les IP sont celles des victimes voir même de moteurs de recherche, et non celles des assaillants.
Bannir l’IP d’un moteur de recherche, ce n’est jamais bon.

Sécuriser sont serveur BIND DNS

Ce qu’il faut vérifier dans un premier temps, c’est si le serveur BIND DNS n’est pas récursif.

Avec la commande suivante

1
dig @IP_DU_SERVEUR SOA fr.

Si vous voyez dans les flags la mention “ra”, c’est que le serveur est récursif. (ra = recursion available)
Attention, vous devez faire ce test depuis l’extérieur de votre réseau local.

1
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0

Pour corriger cela il faut ajouter à la fin du fichier de configuration de BIND les lignes suivantes

1
vi /etc/bind/named.conf.options

ajoutez

1
allow-recursion { 127.0.0.1; IP_DU_SERVEUR;};

Ce qui limite l’utilisation de BIND DNS au serveur lui même.

Ensuite ajoutez la ligne

1
allow-query-cache { 127.0.0.1; IP_DU_SERVEUR;};

Et cela pour interdire l’utilisation du cache de notre serveur
Ajoutez enfin

1
2
additional-from-cache no;
recursion no;

redémarrer bind pour la prise en compte des modifications

1
/etc/init.d/bind9 restart

Ref. Blog de bortzmeyer, Système Linux

DNS mail de GANDI, les configurations dans ISPConfig

DNS mail de GANDI, les configurations dans ISPConfig

Hello,

Généralement quand j’écris un article c’est justement pour y revenir après et ne pas oublier ce que j’ai fait pour le truc que j’ai bidouillé fonctionne. Et c’est le cas pour celui-ci.
En résumé, j’ai un domaine, dont le site est hébergé par mon serveur dédié, mais je veux que la gestion des e-mails reste chez Gandi, pour des raisons pratiques.
J’avais fait l’erreur il y a quelques mois, ou j’ai changé les DNS d’un site pour pointer sur mon serveur, mais de ce fait les mails Gandi ne fonctionnaient plus, car dans les DNS il faut configurer les DNS mail de GANDI

DNS mail de GANDI dans ISPConfig

Il va de soi que nous parton du fait que le site est maintenant hébergé chez vous avec la bonne config DNS.

Pour garder la gestion des DNS mails chez Gandi, vous devez modifier les paramètres DNS du votre site que je nommerais pour l’exemple “domain.tld”
Pour modifier les DNS aller sur l’onglet DNS -> DNS Zones puis cliquez sur le domaine domain.tld. Vous allez tomber sur la config DNS du site, cliquez ensuite sur “Enregistrement”

DNS mail de Gandi
DNS mail de Gandi

Ici il nous faudra ajouter quatre enregistrements CNAME et deux MX nécessaires aux DNS mail de GANDI

Ajoutons les quatre enregistrements CNAME

Cliquez sur CNAME, et ajouter les infos suivantes

1er enregistrement CNAME pour le POP
Nom d’hôte : pop
Nom d’hôte cible : access.mail.gandi.net. (Le point final est important)
TTL : 10800

Puis valider

Deuxième enregistrement CNAME pour le Webmail.
Nom d’hôte : webmail
Nom d’hôte cible : agent.mail.gandi.net.
TTL : 10800

Troisième enregistrement CNAME pour le SMTP
Nom d’hôte : smtp
Nom d’hôte cible : relay.mail.gandi.net.
TTL : 10800

Le dernier enregistrement pour le imap
Nom d’hôte : imap
Nom d’hôte cible : access.mail.gandi.net.
TTL : 10800

Maintenant les enregistrements MX, et pour que cela fonctionne il faut que ses enregistrements pointent sur GANDI
Il faut donc modifier celui qui est déjà enregistré en cliquant dessus et modifier comme suite:

Nom d’hôte : domain.tld. (votre domaine sans oublier le “.”)
Nom d’hôte du serveur mail : spool.mail.gandi.net.
Priorité : 10
TTL : 10800

Nous y ajoutons un enregistrement MX en cliquant sur +MX avec comme paramètres

Nom d’hôte : domain.tld. (votre domaine sans oublier le “.”)
Nom d’hôte du serveur mail : sfb.mail.gandi.net.
Priorité : 50
TTL : 10800

Et voilà, en ajoutant les DNS mail de GANDI, c’est maintenant ce dernier qui gère vos mails, et non plus votre serveur dédié.

Virus sur Linux : il y en a ou pas ?

Virus sur Linux : il y en a ou pas ?

Virus sur Linux
Virus sur Linux

Est-ce qu’il y a des virus sur Linux ?

Ce billet vient après un petit échange dans la mailingliste de root66, association qui fait la promotion des logiciels libres dans les Yvelines.
Je ne vais pas vous relater toute la discussion en grosso-modo dans l’un des slide d’une future présentation sur les avantages et le choix des logiciels libres par rapport aux logiciels propriétaires, il est noté “Il n’y a pas de problèmes de virus sur Linux” ou quelques chose comme ça.

Il faut dire que je ne suis pas accord avec cette confirmation, car de mon côté j’aurais mis « Les problèmes de virus sur linux sont très rares, voir exceptionnels »
Ce qui à mon sens est plus proche de la réalité, que de dire qu’il n’y a pas de virus sur Linux ou dans les logiciels libre en général.

Même si nous sommes tous d’accord sur le fait qu’un OS libre comme Linux nous protège des scripts malveillants et nocifs, ceci est un acquis incontestable, à l’heure actuelle en tous cas.
Car la forte séparation entre un utilisateur normal et l’utilisateur Root, permet d’éviter beaucoup de problèmes, le virus n’ayant pas les droits d’administrateur, il se contenterait du répertoire /home tous au plus, et sa propagation devient donc très limitée, ce qui n’est pas toujours le cas sur Microsoft pas exemple.

Pour quoi je ne suis pas d’accord avec cette phrase.

Deux raisons à cela

Raison 1

Que veut dire « il n’existe pas », est cela parle du temps présent ? si c’est la cas, alors oui je suis Ok, nous sommes le 28 janvier, et aujourd’hui il y a pas de virus sur Linux, à notre connaissance, car il se peut qu’il y en a, à notre insu, ce que j’avoue est peu probable mais loin d’être de la science-fiction, car contrairement à une croyance propagée dans le milieu des logiciels libres GNU/Linux n’est pas immunisé, d’ailleurs aucun système ne l’est.

En plus de cela il y a déjà eu des problèmes de virus sur Linux, même si elles remontent à quelques années, mais n’empêche que cela à existait et donc cela peut se reproduire à tous moment.

C’est certainement mon côté scientifique qui remonte à la surface, car pour moi un système immunisé à 100% cela n’existe pas, car le risque zéro n’existe pas.

Raison 2

Mais ce qui est le plus gênant dans cette affirmation, c’est que nous délivrons avec un permis à tous faire « Fait toutes les conneries que tu veux, de toutes façons tu ne risques rien, il y a pas de virus sur Linux », et nous laissons croire que le fait d’être sur une distribution GNU/Linux immunise contre les logiciels ou script malveillant quel que soit la situation.
Et de ce fait, cela encourage les utilisateurs à ne plus être vigilant, et a baissé sa garde, ce qui peut être préjudiciable pour lui et pour les autres.
L’utilisateur prend de mauvaises habitudes, des habitudes qui seront difficile par la suite à rattrapées.

Cela reste mon avis, et bien sur tout le monde n’est pas sur la même longueur d’onde, heureusement d’ailleurs, car seul le débat et la discussion permettent de faire avancer les choses d’un côté ou de l’autre.

Un Cloud maison avec PyDio et Debian 7 (wheezy)

Un Cloud maison avec PyDio et Debian 7 (wheezy)

Hello,

Nous allons voir sur ce tuto comment installer PyDio avec Debian 7 (wheezy).
Pour ceux qui ne connaissent pas Pydio, c’est un Dropbox-LIKE open-source, c’est peut être un peu réducteur de le présenter ainsi, mais c’est, à mon sens, sa fonction première. La différence avec Owncloud, c’est qu’il se concentre principalement sur la gestion des fichiers, et ne prétend pas être dans le même catégorie d’application.

Ce tuto ne sera pas aussi complet que le précédent sur l’installation d’Owncloud et Debian 7, car tous simplement les étapes sont très similaire, notamment pour l’accès depuis l’extérieur.
Et je n’ai pas encore eux le temps de prendre le temps de l’installer pour un test plus complet avec une utilisation au quotidien.

Matos utilisés
Pour ce tuto j’ai utilisé une VM (Machine Virtuelle), avec 1Go de RAM et 8Go de capacité de stockage.
J’utiliserais l’ip 192.168.0.100 et les droits ROOT pour l’installation.

I- Installation de Debian 7
L’installation de Debian 7 est déjà expliqué dans cet article : Système de base d’un serveur sous Debian Wheezy (Debian 7)

II- Installation de Pydio

Après avoir installer votre serveur Debian, comme expliqué Étape I passons à l’installation de Pydio

Dans un premier temps, nous allons installés la clé publique de Pydio

1
cd /tmp
1
wget  http://dl.ajaxplorer.info/repos/charles@ajaxplorer.info.gpg.key
1
apt-key add charles@ajaxplorer.info.gpg.key

Ajoutons maintenant le dépôt Pydio, pour cela, nous allons modifier le fichier /etc/apt/sources.list avec votre éditeur de texte préféré, par habitude j’utilise vi

1
vi /etc/apt/sources.list

Et nous y ajoutons ce qui suit

1
2
3
##Pydio repository add###
deb http://dl.ajaxplorer.info/repos/apt stable main
deb-src http://dl.ajaxplorer.info/repos/apt stable main

Mettons à jour les dépots

1
apt-get update

Puis installons Pydio

1
apt-get install pydio

Après l’installation, copiez le fichier conf de pydio dans le répertoire /etc/apache2/sites-enabled/ comme suit :

1
cp /usr/share/doc/pydio/apache2.sample.conf /etc/apache2/sites-enabled/pydio.conf

Comme toute application Web, Pydio a besoin d’une base de données pour fonctionner.
Pour une question de faciliter j’utilise Mysql, mais il faut savoir que vous pouvez choisir un autre SGBD.

1
apt-get install mysql-server  php5-mysql

Un mot de passe pour la gestion de la base en tant qu’administrateur vous sera demandé

Demande du mot de passe MySQL
Demande du mot de passe MySQL

Confirmer le mot de passe saisie

Confirmation du mot de passe MySQL
Confirmation du mot de passe MySQL

Une fois MySQL installé, il faut créer un base de données et un utilisateur qui aura les droits sur cette base.

Connectez vous à MySQL comme suit:

1
mysql -u root -p

Créez la base de données que nous nommerons tous simplement “pydio”

1
CREATE DATABASE pydio;

Maintenant créez l’utilisateur avec le login userpydio (ou autre login de votre choix) comme suit (attention il faut changer ‘mot2passe’ par le votre)

1
CREATE USER userpydio@localhost IDENTIFIED BY 'mot2passe';

Donnez les droits d’administration de la base “pydio” à cette utilisateur

1
GRANT ALL ON pydio.* TO userpydio@localhost;

Appliquez les changements

1
FLUSH PRIVILEGES;

Sortez de la base proprement

1
exit

Ensuite, confirmer les modification en relançant les différents services

1
php5enmod mcrypt
1
service apache2 restart
1
service mysql restart

Normalement arrivé à cette étape, vous pouvez accéder à Pydio via l’URL http://192.168.0.100/pydio
Mais soyez patient, il nous reste quelques étapes pour optimiser l’accès

III- Sécuriser l’accès avec SSL/TLS

Maintenant, nous allons sécuriser l’accès à Pydio via le protocole SSL/TLS et pouvoir accéder au site avec HTTPS.
Comme vous l’avez certainement vu à plusieurs reprise si vous êtes un lecteur régulier de mon blog, cette étape nécessite la création de certificat auto-signé

Pour créer les certificats créez le répertoire /etc/apache2/CertPydio

1
mkdir -p /etc/apache2/CertPydio

Accéder à ce répertoire

1
cd /etc/apache2/CertPydio

Générons les clés comme suit:

1
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -out pydio.pem  -keyout pydio.key

Country Name (2 letter code) [AU]: FR
State or Province Name (full name) [Some-State]: RAS
Locality Name (eg, city) [ ]:Paris
Organization Name (eg, company) [Internet Widgits Pty Ltd]:zenzla
Organizational Unit Name (eg, section) [ ]: Saisissez le nom de votre service ou laissez vide.
Common Name (eg, YOUR name) [ ]: IP de la machine (Attention, le CN est très important, le nom doit correspondre à la façon dont vous allez accéder à votre serveur depuis l’extérieur ).
Email Address []:Appuyez sur Entrez

en listant le contenu de CertPydio vous devriez avoir les deux fichiers suivant :

1
2
-rw-r--r-- 1 root root 1704 déc.  22 13:24 pydio.key
-rw-r--r-- 1 root root 1265 déc.  22 13:24 pydio.pem

Copiez chaque fichier dans le bon répertoire

1
 cp pydio.pem /etc/ssl/certs/
1
 cp pydio.key /etc/ssl/private/

Maintenant il faut créer le site Virtuel (VirtualHost) qui écoute le port par défaut du protocole SSL qui est 443.

1
cd /etc/apache2/sites-available
1
vi pydio.vhost

Ce fichier doit contenir ce qui suit

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<VirtualHost *:443>

ServerAdmin admin@domain.com
ServerName ajaxplorer.domain.com

SSLEngine on
SSLCertificateFile /etc/ssl/certs/pydio.pem
SSLCertificateKeyFile /etc/ssl/private/pydio.key

DocumentRoot /usr/share/pydio
<Directory "/usr/share/pydio">
Options FollowSymLinks
AllowOverride Limit FileInfo
Order allow,deny
Allow from all
</Directory>

ErrorLog ${APACHE_LOG_DIR}/pydio_error.log

# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn

CustomLog ${APACHE_LOG_DIR}/pydio_access.log combined
</VirtualHost>

Activer le Rewrite et le SSL

1
a2enmod rewrite
1
a2enmod ssl
1
a2ensite pydio.vhost

Pour améliorer ses performance, Pydio recommande de désactiver la mémoire tampon de sortie de PHP

Dans le fichier /etc/php5/apache2/php.ini trouvez la ligne

1
output_buffering = 4096

Et remplacez “4096” par “off”

1
output_buffering = off

Relancer Apache

1
service apache2 restart

Si vous avez une erreur, assurez vous d’avoir bien suivi les étapes précédentes, et que le contenu de pydio.vhost et correcte.

Enfin, pour ne pas avoir de problème de “Charset” lors du lancement de Pydio, modifier le fichier /usr/share/pydio/conf/bootstrap_conf.php

1
vi /usr/share/pydio/conf/bootstrap_conf.php

trouver les lignes suivantes:

1
2
//define("AJXP_LOCALE", "en_EN.UTF-8");
//define("AJXP_LOCALE", "");

Décommentez la première ligne et remplacez “en_EN.UTF-8” par “fr_FR.UTF-8” comme suite

1
2
define("AJXP_LOCALE", "fr_FR.UTF-8");
//define("AJXP_LOCALE", "");

C’est bon, nous arrivons presque à la fin de l’installation.

Vous pouvez dès à présent lancer Pydio via l’URL sécurisée https://192.168.0.100/pydio

Accueil Pydio
Accueil Pydio

Choisissez la langue que vous souhaitez (le Français pour moi), et cliquez sur “Démarrer l’assistant”, pour avoir le menu de l’assistant d’installation Pydio

Assitant d'installation de Pydio
Assitant d’installation de Pydio

Cliquez sur “Accès administrateur” et créez le compte Administrateur de Pydio, j’ai choisi pour l’exemple “Admin”, mais vous pouvez mettre ce que vous voulez

Création du compte Administareur
Création du compte Administareur

Cliquez sur “Options globales” pour changer la langue par défaut, et le message d’accueil si vous le souhaitez.

Cliquez ensuite, sur “Stockage des configurations”
Dans le menu déroulant “Type de stockage” choisir “Database system …”

Choix de la base de données
Choix de la base de données

Vous accédez à un formulaire qui permet de saisir des informations nécessaires à Pydio pour se connecter à la base de données, renseignez-les comme suit:

Activer les notification : Oui
Database : Mysql
Host : localhost
Database : pydio
User : userpydio
Password : mot de passe de l’utilisateur userpydio

Vous pouvez cliquez sur “Essayer de se connecter à la base de données” pour tester si tous vas bien

configuration accès à la BDD
configuration accès à la BDD

Cliquez maintenant sur “Ajouter des utilisateurs” pour créer un utilisateur, puis cliquez sur “Installer Pydio

création d'un utilisateur Pydio
création d’un utilisateur Pydio

Si vous n’avez pas la main pour cliquer sur “Installer Pydio” c’est qu’il y a quelques chose qui cloche, et Pydio ne vous le dit pas explicitement, c’est à vous de déplier une par une les sections précédentes pour voir ou se trouve le problème (Généralement le champs ou se trouve le problème est rouge)

En cliquant sur “Installer Pydio” vous aller voir un étrange avertissement vous disant que Pydio ne peut pas écrire sur le fichier .htaccess, et qu’il faut copier vous même le contenu qu’il vous donne dans ce fichier, ne le faites-pas

Avertissement htaccess
Avertissement htaccess

En vérifiant le fichier .htaccess, le contenu était bel et bien présent comme le montre la commande cat /usr/share/pydio/.htaccess

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# cat /usr/share/pydio/.htaccess
<IfModule mod_rewrite.c>
# You must set the correct values here if you want
# to enable webDAV sharing. The values assume that your
# Pydio installation is at http://yourdomain/
# and that you want the webDAV shares to be accessible via
# http://yourdomain/shares/repository_id/
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^shares ./dav.php [L]
RewriteRule ^api ./rest.php [L]
RewriteRule ^user ./index.php?get_action=user_access_point [L]
RewriteCond %{REQUEST_URI} !^/index
RewriteCond %{REQUEST_URI} !^/plugins
RewriteCond %{REQUEST_URI} ^/dashboard|^/settings|^/welcome|^/ws-
RewriteRule (.*) index.php [L]

#Following lines seem to be necessary if PHP is working
#with apache as CGI or FCGI. Just remove the #
#See http://doc.tiki.org/WebDAV#Note_about_Apache_with_PHP_as_fcgi_or_cgi

#RewriteCond %{HTTP:Authorization} ^(.*)
#RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]
</IfModule>

AddType application/json .jsonroot@monserveur:/usr/share/pydio/conf#

Donc pas la peine de modifier le fichier .htaccess comme le demande l’avertissement.

Actualisez la page pour accéder enfin à l’interface d’accueil de Pydio, qui est en passant magnifique.

Interface d'accueil Pydio
Interface d’accueil Pydio

Il ne vous reste plus qu’a vous connectez, et découvrir cette application qui est puissante, ergonomique et vachement bien foutue.

Comme dit la chanson “Voilààà c’est Finii” 🙂

N’hésitez pas à m’apporter vos remarques et commentaires ou rapportez un bug, même si j’ai effectué plusieurs tests
La réalisation de tel tuto prends du temps, même beaucoup de temps, n’hésitez à m’encourager en laissant un message sur le blog ou via Twitter .

Serveur maison : installer Owncloud sur Debian 7 (Wheezy)

Serveur maison : installer Owncloud sur Debian 7 (Wheezy)

Hello

Nous allons voir aujourd’hui comment installer un serveur maison avec Owncloud sur Debian 7 (Wheezy), les configurations requises pour un accès sécurisé en https et la synchronisation avec un smartphone sous Android.

Le choix d’un serveur maison

Je ne vais pas m’étaler sur la question, mais pour moi, avoir un serveur maison est devenu une évidence pour la protection de mes données personnelles ainsi que ma vie privée, savoir que mes photos et vidéos se sont retrouvées sur les serveurs de Google par un manque de vigilance de ma part, ne m’a pas enchanté.

Matos utilisés

Pour le serveur j’ai utilisé une vieille machine récupérée dans les encombrants il y a quelques années et qui prenait la poussière dans mon débarras.
c’est un HP Pavillon, avec un Athlon 64 X2 (W) 3800+ 2,0 GHz comme processeur, 2Go de RAM et un disque dur de 200Go.

Je suis aussi derrière une Freebox V6 en ADSL (A quand la fibre :'( )

Pré-requis :

Ce tutoriel ne nécessite pas de pré-requis particuliers, même si une connaissance des bases de l’administration système est préférable.
J’utilise aussi un Reverse DNS au lieu de l’adresse IP de ma Freebox, ce service est gratuitement fourni par Free, et le revers fourni est du type http://nom_choisi.hd.free.fr.

Donc pour ce tuto je vais utiliser les données fictives suivantes

  • Revers: monserveur.hd.free.fr
  • Adresse IP de la box 87.65.43.12
  • Adresse locale de ma machine : 192.168.0.100

I- Installation de Debian 7

Un billet sur l’installation d’un serveur de base avec Debian est déjà disponible sur mon blog, je vous recommande de le suivre étape par étape, sauf lors de la partition, je vous recommande de choisir une partition avec un /home séparé.
Voici le lien Système de base d’un serveur sous Debian Wheezy (Debian 7)

II- Installation d’Owncloud

Après avoir terminé l’installation de votre Debian comme démontré dans l’étape précédente, nous passons à l’installation d’Owncloud.

Dans un premier temps, il faut télécharger la clé publique d’Owncloud

1
cd /tmp
1
wget http://download.opensuse.org/repositories/isv:ownCloud:community/Debian_7.0/Release.key
1
apt-key add - &lt; Release.key

Nous pouvons maintenant ajouter le dépôt Owncloud

1
echo 'deb http://download.opensuse.org/repositories/isv:/ownCloud:/community/Debian_7.0/ /' >> /etc/apt/sources.list.d/owncloud.list

Il ne nous reste plus qu’à mettre à jour le système

1
apt-get update

Et installer Owncloud

1
apt-get install owncloud

Owncloud étant une application Web, il a besoin d’une base de données, pour cela vous pouvez utiliser MySQL, SQLite, PostgreSQL.
Pour mon serveur maison j’ai opté pour MySQL, cela tombe bien, MySQL-server s’installe automatiquement lors de l’installation de la dernière version d’Owncloud

Si lors de l’installation d’Owncloud, Mysql ne s’installe pas, faites-le manuellement

1
apt-get install mysql-server

Un mot de passe robuste est nécessaire pour MySQL

Demande du mot de passe MySQL
Demande du mot de passe MySQL

Confirmer le mot de passe

Confirmation du mot de passe MySQL
Confirmation du mot de passe MySQL

MySQL installé, il est important de savoir que lors de l’installation, un utilisateur “owncloud” est créé avec le mot de passe “database_password”. Par mesure de sécurité, nous allons changer ce mot de passe.

Pour vous connecter à MySQL tapez la commande suivante puis saisissez le mot de passe de MySQL créé précédemment

1
mysql -u root -p

Changeons maintenant le mot de passe (remplacer “nouveau_mdp” par votre mot de passe)

1
UPDATE mysql.user SET password=PASSWORD("nouveau_mdp") where User="owncloud";

Nous appliquons les changements

1
flush privileges;

Nous allons maintenant crée la base de données nécessaire au fonctionnement de Owncloud qui se nommera “owncloud”

1
CREATE DATABASE owncloud;

Il faut maintenant attribuer des privilèges à l’utilisateur “owncloud” sur cette base fraîchement créée pour qu’il puisse gérer les données.(remplacer “motDePasse” par votre mot de passe)

1
GRANT ALL ON owncloud.* to 'owncloud'@'localhost' IDENTIFIED BY 'motDePasse';

C’est bon, nous avons plus besoin de MySQL, sortons proprement de la base

1
exit

Maintenant vous pouvez accéder à votre Owncloud en saisissant l’adresse IP locale de la machine suivi d’un /owncloud, dans notre cas cela donne 192.168.0.100/owncloud

Accueil configuration Owncloud
Accueil configuration Owncloud

Arrivé à cette interface, il est demander de créer un compte administrateur Onwcloud, renseignez les champs “Nom d’utilisateur” et “mot de passe” comme bon vous semble..
Pour l’exemple j’ai pris comme login “Admin” et comme mot de passe “mdp”.
Je vous rappelle qu’il vous faut un mot de passe robuste, ceci n’est qu’un exemple (Lire mon billet Comment gérer ses phrases de passe ou mots de passe? )

Ensuite, cliquez sur Support de stockage & base de données et choisissez MySQL/MariaDB comme base de données, puis saisissez comme login “owncloud”, et son mot de passe Mysql (vous savez, le mot de passe que vous avez changer), et comme base de données mettez “owncloud”
Puis cliquer sur “Terminer l’installation”

Admin et base de données Owncloud
Admin et base de données Owncloud

Félicitation, vous avez votre serveur maison tout neuf, enfin presque

Arborescence du Cloud
Arborescence du Cloud

et vous pouvez commencer à vous familiariser avec cette petite merveille.

Bienvenue su ownCloud
Bienvenue su ownCloud

III- Accès depuis l’extérieur

Bon, bah c’est bon, nous avons notre Owncloud installé sur la machine locale et l’accès se fait via l’url http://192.168.0.100/owncloud
Mais l’accès est possible qu’à partir des machines du même réseau, pour avoir un accès depuis l’extérieur, il faut ouvrir les ports via la console de la Box et les rediriger vers les ports de notre machine locale!!

Mais, comme vous le savez certainement, pour sécuriser les échanges de données il faut une connexion sécurisée via HTTPS, et donc il nous faut créer un certificat auto-signé.

HOO, je vois vos gros yeux qui disent “MAIS KESKIDI CE TYPE ??” — mais pas de panique, c’est moins compliqué que cela ne paraît.

Le port par défaut des connexions sécurisées SSL/TLS est le 443, mais par mesure de sécurité, nous l’utiliserons pas, vous pouvez choisir le port que vous voulez à condition qu’il soit libre, pour l’exemple je vais prendre le port 4433.

Nous allons créer un Vhost Apache (ou si vous préférez un site virtuel) qui écoute le port 4433, pour un accès sécurisé via l’url https://192.168.0.100:4433/owncloud
Pour cela allez dans le répertoire /etc/apache2/sites-available” et créez le fichier du site virtuel owncloud.conf comme suit

1
cd /etc/apache2/sites-available
1
vi owncloud.conf

Ce fichier doit contenir ce qui suit

1
2
3
4
5
6
7
8
9
10
Listen 4433 https
# Hôte virtuel qui écoute sur le port HTTPS 4433

DocumentRoot /var/www/owncloud/
# Nous activation le SSL
SSLEngine On
SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire
# indiquer le chemin des certificat
SSLCertificateFile /etc/ssl/certs/owncloud.crt
SSLCertificateKeyFile /etc/ssl/private/owncloud.key

Il faut maintenant activer le SSL, ainsi que le nouveau site dans Apache

1
2
3
a2enmod ssl
a2ensite default-ssl
a2ensite owncloud.conf

Nous pouvons maintenant générer le nouveau certificat TLS

Pour cela créez le répertoire CertOwnCloud comme suit

1
mkdir -p /etc/apache2/CertOwnCloud

Accéder à ce répertoire

1
cd /etc/apache2/CertOwnCloud

Générons les clés comme suit:

1
2
openssl genrsa -out owncloud.key 2048
openssl req -new -days 3650 -key owncloud.key -out owncloud.pem

Country Name (2 letter code) [AU]: FR
State or Province Name (full name) [Some-State]: RAS
Locality Name (eg, city) [ ]:Paris
Organization Name (eg, company) [Internet Widgits Pty Ltd]:zenzla
Organizational Unit Name (eg, section) [ ]: Saisissez le nom de votre service ou laissez vide.
Common Name (eg, YOUR name) [ ]: monserveur.hd.free.fr OU IP de la box (Attention, le CN est très important, le nom doit correspondre à la façon dont vous allez accéder à votre serveur depuis l’extérieur ).
Email Address []:Appuyez sur Entrez

Please enter the following ‘extra’ attributes
to be sent with your certificate request
A challenge password []:Appuyez sur Entrez
An optional company name []:Appuyez sur Entrez

Créer le fichier android_options.txt comme suit :

1
echo "basicConstraints=CA:true" > android_options.txt

Il ne reste plus qu’à générer les certificats

1
openssl x509 -req -days 3650 -in owncloud.pem -signkey owncloud.key -extfile ./android_options.txt -out owncloud.crt
1
openssl x509 -inform PEM -outform DER -in owncloud.crt -out owncloud.der.crt

En listant le répertoire CertOwnCloud vous devez avoir les fichiers suivants:

1
2
3
4
5
6
7
ls -l /etc/apache2/CertOwnCloud/
total 20
-rw-r--r-- 1 root root 25 déc. 9 09:30 android_options.txt
-rw-r--r-- 1 root root 1180 déc. 9 09:30 owncloud.crt
-rw-r--r-- 1 root root 829 déc. 9 09:30 owncloud.der.crt
-rw-r--r-- 1 root root 1679 déc. 9 09:30 owncloud.key
-rw-r--r-- 1 root root 976 déc. 9 09:30 owncloud.pem

Le certificat owncloud.der.crt nous servira pour synchroniser notre serveur maison avec le smartphone.

Maintenant il faut recopier les certificats dans les bons répertoires

1
cp owncloud.crt /etc/ssl/certs
1
cp owncloud.key /etc/ssl/private

ATTENTION Comme nous avons demander avec “a2ensite default-ssl” d’utiliser les certificats par défaut de Debian certificats (snakeoil),
Il faut absolument modifier le fichier /etc/apache2/sites-available/default-ssl, et forcer l’utilisation des certificats que nous venons de générer.

Par mesure de sécurité il est toujours recommandé de sauvegarder les fichiers originaux du système si vous les modifiez

1
cp /etc/apache2/sites-available/default-ssl /etc/apache2/sites-available/default-ssl.ori

Ouvrir le fichier /etc/apache2/sites-available/default-ssl

1
vi /etc/apache2/sites-available/default-ssl

Commenter les lignes suivantes

1
2
3
# SSLCertificateFile directive is needed.
#SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
#SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key

Et ajouter au dessous les clés que nous venons de générer

1
2
SSLCertificateFile /etc/ssl/certs/owncloud.crt
SSLCertificateKeyFile /etc/ssl/private/owncloud.key

Vérifions maintenant le bon fonctionnement de notre site virtuel

1
apachectl configtest

Si vous avez une erreur, vérifiez les étapes précédentes.

Puis relancez apache

1
service apache2 restart

Par défaut, les nouvelles versions de ownCloud, interdisent l’accès au serveur aux URLs externes non autorisées.
De ce fait, nous devons modifier le fichier de configuration d’OwnCloud pour ne pas avoir de problème de connexion.

1
vi /var/www/owncloud/config/config.php

Dans la partie “trusted_domains”, nous ajoutons les adresses utilisées pour se connecter au serveur, avec le port 4433
Et nous il faut aussi forcer l’utilisation du HTTPS en ajoutant ‘forcessl’ => true, à la fin, comme le démontre ce qui suit.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<!--?php $CONFIG = array ( 'instanceid' => 'oc614654hvev',&lt;br ?--> 'passwordsalt' => 'mjbnczo5654ef4z65fv4r64cdfjb994854',
'trusted_domains' =>
array (
0 => '192.168.0.100:4433', # adresse IP de la machine locale
1 => '87.65.43.12:4433', # adresse IP de la box
2 => 'monserveur.hd.free.fr:4433', # revers Free associé à IP de la box
),
'datadirectory' => '/var/www/owncloud/data',
'dbtype' => 'mysql',
'version' => '7.0.3.4',
'dbname' => 'owncloud',
'dbhost' => 'localhost',
'dbtableprefix' => 'oc_',
'dbuser' => 'owncloud',
'dbpassword' => 'mdpMysql',
'installed' => true,
'forcessl' => true,);

Redirection des ports

Maintenant vous pouvez accéder au serveur avec du HTTPS, via l’IP de la machine locale https://192.168.0.100:4433/owncloud/.
Il est normal d’avoir un avertissement du navigateur, car le certificat utilisé est auto-signé, et donc non reconnu.

Pour pouvoir accéder à votre serveur depuis l’extérieur, il faut ouvrir le port 4433 de la box, et le rediriger vers le port 443 de la machine locale.
Vous pouvez profiter de cette étape; pour ouvrir le port SSH qui peut être très utile si vous voulez administrer vos machine à distance, ou le port FTP.

Pour la Freebox V6, par exemple, il faut se connecter à la console d’administration de la Freebox -> paramètres de la Freebox -> Mode avancé -> gestion des ports

Dans l’onglet redirections des ports, ajouter une redirection

Redirection de port Freebox
Redirection de port Freebox

Et normalement maintenant, vous pouvez avoir accès à votre machine depuis l’extérieur via le revers https://monserveur.hd.free.fr:4433/owncloud ou l’adresse IP de la box https://87.65.43.12:4433/owncloud.

Activation du Firewall

Pour ne pas à chaque reboot de la machine se taper les règles d’iptable, installer le module iptables-persistent qui est moins amnésique.

1
apt-get install iptables-persistent

Je vous rappelle que vous avez changé le port par défaut de SSH lors de l’installation de Debian, c’est plus le 22 mais celui que vous avez choisi, dans le TUTO c’est le 7070

installation des règles et sauvegarde

1
service iptables-persistent flush
1
iptables -A INPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
1
iptables -A INPUT -p tcp --dport 7070 -j ACCEPT
1
iptables -A INPUT -p tcp --dport 4433 -j ACCEPT
1
service iptables-persistent save

Pour vérifier les règles

1
cat /etc/iptables/rules.v4

Installation de Fail2ban

Alors, sans entrer dans le détail, Fail2ban est une excellente application qui nous sert à bannir les intrusions ou les tentatives d’authentification infructueuses.

Dans un premier temps, nous allons mettre des règles pour Owncloud. Les règles pour le SSH (Et FTP si vous avez ouvert le port) sont paramétrées par défaut.

Installer Fail2ban

1
apt-get install -yr fail2ban

On va modifier de nouveau le fichier de configuration Owncloud, pour que la journalisation se fasse dans /var/log/owncloud.log

1
vi /var/www/owncloud/config/config.php

Et ajouter les lignes suivantes

1
2
3
4
'logtimezone' => 'Europe/Paris',
'logfile' => '/var/log/owncloud.log',
'loglevel' => '2',
'log_authfailip' => true,

Maintenant, ça doit normalement ressembler à ce qui suit

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<!--?php
$CONFIG = array (
'instanceid' => 'oc614654hvev',
'passwordsalt' => 'mjbnczo5654ef4z65fv4r64cdfjb994854',
'trusted_domains' =>
array (
0 => '192.168.0.100:4433',
1 => '87.65.43.12:4433',
2 => 'monserveur.hd.free.fr:4433',
),
'datadirectory' => '/var/www/owncloud/data',
'dbtype' => 'mysql',
'version' => '7.0.3.4',
'dbname' => 'owncloud',
'dbhost' => 'localhost',
'dbtableprefix' => 'oc_',
'dbuser' => 'owncloud',
'dbpassword' => 'mdpMysql',
'installed' => true,
'forcessl' => true,
'logtimezone' => 'Europe/Paris',
'logfile' => '/var/log/owncloud.log',
'loglevel' => '2',
'log_authfailip' => true, );

Maintenant il faut créer le fichier de log en question

1
touch /var/log/owncloud.log

Changer les droits pour permettre à Owncloud d’écrire sur le fichier

1
chown www-data:www-data /var/log/owncloud.log

Aller dans le répertoire /etc/fail2ban/filter.d/

1
cd /etc/fail2ban/filter.d/

et créer le fichier owncloud.conf

1
vi owncloud.conf

Son contenu doit être comme suit.
Editer le 9/09/2015
Owncloud a la fâcheuse tendance à modifier ses messages de log à chaque nouvelle version, donc la ligne ci-dessous est correcte à la date du 09/09/2015 avec owncloud 8.1, mais cela ne le restera pas longtemps.

1
2
[Definition]
failregex={"reqId":".*","remoteAddr":".*","app":"core","message":"Login failed: '.*' \(Remote IP: '<HOST>\)","level":2,"time":".*"}

créez le fichier /etc/fail2ban/jail.local

1
vi /etc/fail2ban/jail.local

copiez-y le contenu suivant

1
2
3
4
5
6
7
[owncloud]
enabled = true
filter = owncloud
bantime = 600
port = https,http
logpath = /var/log/owncloud.log
maxretry = 3

relancer Fail2ban

1
/etc/init.d/fail2ban restart

Synchronisation du serveur maison avec le Smartphone Android

DAVdroid
DAVdroid

Pour la synchronisation des fichiers de votre smartphone avec votre serveur maison, installer l’application native d’OwnCloud que vous pouvez trouver sur GooglePlay ou F-Droid.
Pour synchroniser vos contacts et votre agenda, nous allons utiliser l’excellente application libre DAVdroid que vous pouvez aussi trouver sur GooglePlay ou F-Droid.

Dans un premier temps, il faut copier le certificat owncloud.der.crt généré précédemment sur votre téléphone, puis l’ajouter aux certificats de confiance comme suit:

Paramètres -> Sécurité -> installer depuis la carte SD -> parcourir arborescence pour récupérer votre certificat.

Importation du certificat
Importation du certificat

Le certificat ajouté aux certificats de confiance, nous allons ajouter un compte DAVdroid pour la synchronisation des contacts et un autre compte DAVdroid pour la synchronisation de l’agenda

1- Synchronisation de l’agenda

Paramètres -> Ajouter un compte -> Choisir Davdroid

Ajout d'un compte DAVdroid
Ajout d’un compte DAVdroid

Sélectionner “Login with URL and user name” puis appuyer sur suivant (flèche en haut)

DAVdroid- Authentification
DAVdroid- Authentification

Dans la fenêtre suivante il faut saisir les informations nécessaires pour accéder à votre agenda

Informations d'authentification
Informations d’authentification

Votre Webhoste est : monserveur.hd.free.fr:4433/owncloud/remote.php/caldav/calendars/admin/personnel
Utilisateur : votre login administrateur OwnCloud, dans notre cas c’est Admin
Mot de passe : mot de passe de l’administrateur Owncloud

Appuyer sur suivant puis sélectionner votre agenda.

2 – Synchronisation des contacts

Ce sont les mêmes étapes que précédemment, ajouter une compte DAVdroid, choisir “Login with URL and user name”
Puis ajouter l’URL de vos contacts
Votre Webhost est : monserveur.hd.free.fr:4433/owncloud/remote.php/carddav/addressbooks/admin/contacts

Problème de connexion DavDroid à votre serveur maison

– Pour que DAVdroid puisse se connecter à votre serveur maison, les certificats doivent être correctement générés, notamment la partie CN (Common Name). Il faut obligatoirement que celui-ci corresponde à l’URL que vous allez utiliser pour accéder à votre serveur, dans notre cas c’est monserveur.hd.free.fr.

Il existe une petite application “CAdroid” qui permet de vérifier si le certificat de votre serveur maison est compatible avec DAVdroid, si celui-ci est correct, il vous l’importera automatiquement sur votre téléphone, si celui-ci n’est pas compatible DAVdroid, il vous indiquera où se trouve le problème.

Voilà nous arrivons à la fin de ce tuto, en espérant que votre serveur maison est maintenant opérationnel.
Si vous avez des informations complémentaires, de sécurité, de configuration, n’hésitez pas à me contacter, je les intégrerai si c’est pertinent
N’hésitez pas si vous avez des questions, j’y réponds toujours, pas forcement le jour même, mais le plus rapidement possible (sur le site ou sur Twitter)
Excusez les coquilles qui se sont glissées dans le texte, l’orthographe n’est pas mon fort :P.

Un GROS merci à Falconerita qui a eu la gentillesse de corriger les innombrables fautes que j’ai honteusement faites.

Sources
Un serveur parfait sous Debian Wheezy (Debian 7) et nginx
howtoforge.com
Tuto de Sksbir sur le forum Owncloud
Sécurisation ownCloud avec Fail2ban

Comment savoir si votre serveur est touché par la vulnérabilité openssl “Heartbleed”

Comment savoir si votre serveur est touché par la vulnérabilité openssl “Heartbleed”

Heartbleed
Heartbleed
Comme vous le savez déjà, une grave faille fut découverte dans le protocole SSL de openssl, cette faille fut baptisée « Heartbleed ».
Comment savoir si votre serveur est touché?

Dans un premier temps il faut savoir que la faille touche uniquement la version 1.01 et plus exactement les versions inférieurs à la version 1.01g.

Donc pour connaitre la version d’openssl de votre serveur tapez la commande suivante :

1
Openssl version

Si cette commande vous renvoie

1
2
openssl version
OpenSSL 1.0.1e 11 Feb 2013

Votre serveur est vulnérable, car la version est inférieur à la 1.01g, une mise à jour est nécessaire.
Et si vous avez ce résultat

1
2
openssl version
OpenSSL 0.9.8o 01 Jun 2010

Ici cette version n’est pas vulnérable, c’est la version utilisée par Debian Squeeze, car seules les versions 1.01 sont touchées.

Mise à jour.

Pour corriger la vulnérabilité mettez à jour votre serveur.

Pour Debian et debianlike

1
Apt-get update && apt-get upgrade

Pour Fedora

1
yum update

OpenSUSE

1
zypper update

Ensuite il faut redémarrer tous les services utilisant openssl comme; sshd, apache, MySQL, nginx, postfix, dovecot, courier etc..
Il est donc préférable de redémarrer le serveur, pour ne pas oublier un des ces services.

Comment savoir si la mise à jour a bien été faite?.

Il existe aujourd’hui un test permettant de savoir si votre serveur présente des failles :
http://filippo.io/Heartbleed/

Un serveur parfait sous Debian Wheezy (Debian 7) et nginx

Un serveur parfait sous Debian Wheezy (Debian 7) et nginx

Bon bah aujourd’hui c’est du lourd!! après un serveur parfait sous Ubuntu 9.10, qui date un peu, mais toujours d’actualité, et un serveur parfait sous Debian Squeeze (Debian 6.0), voici un nouvel opus de la série “un serveur parfait” et cette fois il est sous Debian Wheezy (Debian 7), avec un serveur « nginx » et l’interface de gestion de serveur Web “ISPConfig 3”.

Nous allons voir une, par une, toutes les étapes de configuration afin d’obtenir un serveur complet. Et comme d’habitude, ce tuto est construit de sort que même un débutant en administration système puisse avoir un serveur Web professionnel.

Remarques :

  • Pour le tuto, j’utilise toujours les droits « Root »
  • La version de nginx doit être supérieure à 0.8.21 pour fonctionner avec ISPConfig 3
  • Ce tuto n’est pas réalisable avec une version inférieure à ISPConfig 3

Etape I : Installation du système de base de notre serveur

Pour débuter et avant tous, il vous faut installer un système de base sous Debian Wheezy, pour cela suivez ce tuto Système de base d’un serveur sous Debian Wheezy (Debian 7)

Etape II : Installation de nginx, BIND, Dovecot, ISPConfig 3,

Dans l’étape précédente vous avez

  • Installez le système de base.
  • Modifiez le port par défaut de SSH (pour notre tuto port=7070)
  • Interdit l’accès SSH à Root
  • Seul l’utilisateur crée peu se connecter via SSH (pour notre tuto utilisateur=Zenzla)

Maintenant, il nous faut installer les différents composant de notre serveur.

Connectez-vous au serveur si ce n’est déjà fait,

1
ssh zenzla@192.168.0.100 -p 7070

passez en mode “root”

1
2
su -
Mot de passe : _

Il est important que les commande “hostname” et “hostname -f” retournent le même résultat, c’est à dire monserveur.exemple.com.
Pour cela il faut éditer le fichier /etc/hosts

1
vi /etc/hosts

il faut qu’il ressemble à ceci;

1
2
3
4
5
6
7
127.0.0.1       localhost.localdomain   localhost
192.168.0.100   monserveur.example.com     monserveur

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

Ensuite faites

1
2
echo monserveur.example.com > /etc/hostname
/etc/init.d/hostname.sh start

Ensuite testez les commandes “hostname” et “hostname -f” si ils nous retournent bien le même résultat

1
2
hostname
monserveur.example.com
1
2
hostname -f
monserveur.example.com

Pour que notre système soit toujours à jour, et que les mises à jour s’effectuent correctement, assurez vous que le fichier source.list contient bien les dépôts “wheezy-updates” et que les dépôts contrib et non-free sont bien activés

1
vi /etc/apt/sources.list
1
2
3
4
5
6
7
8
9
deb http://ftp.de.debian.org/debian/ wheezy main contrib non-free
deb-src http://ftp.de.debian.org/debian/ wheezy main contrib non-free

deb http://security.debian.org/ wheezy/updates main contrib non-free
deb-src http://security.debian.org/ wheezy/updates main contrib non-free

# wheezy-updates, previously known as 'volatile'
deb http://ftp.de.debian.org/debian/ wheezy-updates main contrib non-free
deb-src http://ftp.de.debian.org/debian/ wheezy-updates main contrib non-free

Maintenant mettez à jour votre système

1
apt-get update && apt-get upgrade

Il faut aussi changer le Shell par défaut, car ISPConfig rencontre quelques problème avec celui-ci

1
dpkg-reconfigure dash

Répondez “non” à la question suivante

Utiliser Dash comme interpréteur de ligne de commande par défaut (/bin/sh)? <-non

Pour que le serveur soit toujours à l’heure installez Network Time Protocol (NTP)

1
apt-get install ntp ntpdate

maintenant il faut installer Postfix, Dovecot, MySQL, phpMyAdmin, rkhunter, binutils

1
apt-get install postfix postfix-mysql postfix-doc mysql-client mysql-server openssl getmail4 rkhunter binutils dovecot-imapd dovecot-pop3d dovecot-mysql dovecot-sieve sudo

Répondez comme suite aux différentes questions.

Postfix configuration —–> Ok
configuration type du serveur de messagerie –> site internet
nom de courrier : monserveur.example.com
mot de passe mysql —-> mot de passe administrateur root
Confirmation du mot passe —–> répétez le mot de passe root

Maintenant modifiez le fichier master.cf pour ouvrir les ports TLS/SSL dans postfix

1
vi /etc/postfix/master.cf

Décommettez les sections submission et smtps, (sauf -o milter_macro_daemon_name=ORIGINATING, nous en avons pas besoin)

[…]
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 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 milter_macro_daemon_name=ORIGINATING
[…]

Redémarrez Postfix

1
/etc/init.d/postfix restart

MySQL doit obligatoirement être à l’écoute de toutes les interfaces, et non seulement à localhost, pour cela il faut éditer le fichier “/etc/mysql/my.cnf” et commenté la ligne bind-address= 127.0.0.1

1
vi /etc/mysql/my.cnf

[…]
# 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
[…]

Redémarrez MySQL

1
/etc/init.d/mysql restart

Maintenant testons si cela fonctionne

1
2
netstat -tap | grep mysql
tcp        0      0 *:mysql                 *:*                     LISTEN      30051/mysqld

Installez Amavisd-new, SpamAssassin, et Clamav

1
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

La configuration de ISPConfig 3 utilise “amavisd” qui charge la bibliothèque des filtres internes de SpamAssassin, afin que nous puissions libérer de la RAM, nous pouvons arrêter SpamAssassin

1
2
/etc/init.d/spamassassin stop
update-rc.d -f spamassassin remove

Installez maintenant Install Nginx, PHP5 (PHP-FPM), And Fcgiwrap

Ngix est disponible en tant que paquet pour Debian, la commande d’installation et comme suite:

1
apt-get install nginx

Si vous avez bien suivi les étapes du tuto, nous avons pas installé Apache2, sinon il faut le supprimer

1
/etc/init.d/apache2 stop

Si vous avez une erreur du type

1
-su: /etc/init.d/apache2: Aucun fichier ou dossier de ce type

C’est que Apache2 n’est pas disponible, sinon:

1
update-rc.d -f apache2 remove

Lancez maintenant nginx

1
/etc/init.d/nginx start

Pour l’installation de PHP5 , nous prenons les paquets PHP-FPM (PHP FastCGI Process Manager) qui est une alternative FastCGI avec des fonctionnalités supplémentaires

1
apt-get install php5-fpm

Pour se connecter directement aux bases de données MySQL avec des scripts PHP, nous pouvons installer le paquet php5-mysql, plus d’autres modules selon vos besoins, vopus pouvez obtenir la liste des modules disponible avec la commande

1
apt-cache search php5

Choisissez les modules dont vous avez besoin, et installez-les, pour notre exemple, nous installerons les modules suivants:

1
apt-get install php5-mysql php5-curl php5-gd php5-intl php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-memcached php5-ming php5-ps php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl memcached

Pour ne pas consommer beaucoup de ressource et optimiser le code PHP, il est nécéssaire d’installer un cache, nous choisissons APC, qui est libre et gratuit.

1
apt-get install php-apc

Modifiez le fichier /etc/php5/fpm/php.ini, mettre cgi.fix_pathinfo=0 et notre timezone

1
vi /etc/php5/fpm/php.ini

[…]
cgi.fix_pathinfo=0
[…]
date.timezone=”Europe/Paris”
[…]

Redemandez PHP-FMP

1
/etc/init.d/php5-fpm reload

Pour l’utilisation de CGI dans nginx installez Fcgiwrap

1
apt-get install fcgiwrap

Le daemon fcgiwrap se lance normalement automatiquement, vous pouvez le vérifier avec la commande

1
/etc/init.d/fcgiwrap status

Si il est pas lancé, faites-le manuellement

1
/etc/init.d/fcgiwrap start

Installation de phpMyAdmin

1
apt-get install phpmyadmin

Serveur web à reconfigurer automatiquement –> Ne rien sélectionner, nous avons pas besoin apache2 ou lighttpd
Faut-il configurer la base de données de phpmyadmin avec dbconfig-common ? –> non

Vous pouvez maintenant trouver phpMyAdmin dans le répertoire /usr/share/phpmyadmin/
A la fin, lorsque ISPConfig sera installé, vous pouvez accéder à phpMyAdmin via les URL http://monserveur.example.com:8081/phpmyadmin ou http://192.168.0.100:8081/phpmyadmin

Si vous voulez accéder aux alias/phpmyadmin via les sites web qui seront sur le serveur, c’est un peu plus compliqué que pour Apache, car nginx ne gère pas les alias globaux (Les alias définies pour tous les vhosts). Par conséquent, vous devez définir ces alias pour chaque serveur virtuel à partir duquel vous souhaitez accéder à phpMyAdmin.

Pour ce faire, collez le texte suivant dans les champs directives nginx sur le Options de l’onglet du site Web.

location /phpmyadmin {
root /usr/share/;
index index.php index.html index.htm;
location ~ ^/phpmyadmin/(.+\.php)$ {
try_files $uri =404;
root /usr/share/;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $request_filename;
include /etc/nginx/fastcgi_params;
fastcgi_param PATH_INFO $fastcgi_script_name;
fastcgi_buffer_size 128k;
fastcgi_buffers 256 4k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
fastcgi_intercept_errors on;
}
location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ {
root /usr/share/;
}
}
location /phpMyAdmin {
rewrite ^/* /phpmyadmin last;
}

Si vous utilisez https au lieu de http pour votre serveur virtuel, vous devez ajouter la ligne fastcgi_param HTTPS on; ; à votre configuration phpMyAdmin comme ceci:

location /phpmyadmin {
root /usr/share/;
index index.php index.html index.htm;
location ~ ^/phpmyadmin/(.+\.php)$ {
try_files $uri =404;
root /usr/share/;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_param HTTPS on; # <-- ajouter cette ligne fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $request_filename; include /etc/nginx/fastcgi_params; fastcgi_param PATH_INFO $fastcgi_script_name; fastcgi_buffer_size 128k; fastcgi_buffers 256 4k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; fastcgi_intercept_errors on; } location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { root /usr/share/; } } location /phpMyAdmin { rewrite ^/* /phpmyadmin last; }

Si vous utilisez à la fois HTTP et HTTPS pour votre serveur virtuel, vous pouvez utiliser la variable $https, allez de nouveau dans les directives nginx et au lieu de fastcgi_param HTTPS on; mettez fastcgi_param HTTPS $https;

location /phpmyadmin {
root /usr/share/;
index index.php index.html index.htm;
location ~ ^/phpmyadmin/(.+\.php)$ {
try_files $uri =404;
root /usr/share/;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_param HTTPS $https; # <-- ajouter cette ligne fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $request_filename; include /etc/nginx/fastcgi_params; fastcgi_param PATH_INFO $fastcgi_script_name; fastcgi_buffer_size 128k; fastcgi_buffers 256 4k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; fastcgi_intercept_errors on; } location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { root /usr/share/; } } location /phpMyAdmin { rewrite ^/* /phpmyadmin last; }

Installation du gestionnaire de mailing list (newsletters) Mailman, depuis la version 3.0.4, ISPConfig vous permet également de gérer (créer/modifier/ supprimer) les listes de diffusion Mailman. Si vous souhaitez faire usage de cette fonctionnalité, installer Mailman comme suit:

1
apt-get install mailman

puis sélectionnez votre langue

Langues à gérer : <------ fr Pas de liste du site <-- Ok

Avant que nous puissions commencer avec Mailman, une première liste de diffusion appelée mailman doit être créé:

1
newlist mailman

Entrez l’adresse courriel du gestionnaire de la liste : <-- adresse mail de l’administrateur Mot de passe initial de la liste mailman : <-- le mot de passe d'administration de la liste Pour achever la création de votre liste de diffusion, vous devez modifier votre fichier /etc/aliases (ou équivalent) en y ajoutant les lignes suivantes et peut être exécuter le programme `newaliases': liste de diffusion ## mailman mailman: "|/var/lib/mailman/mail/mailman post mailman" mailman-admin: "|/var/lib/mailman/mail/mailman admin mailman" mailman-bounces: "|/var/lib/mailman/mail/mailman bounces mailman" mailman-confirm: "|/var/lib/mailman/mail/mailman confirm mailman" mailman-join: "|/var/lib/mailman/mail/mailman join mailman" mailman-leave: "|/var/lib/mailman/mail/mailman leave mailman" mailman-owner: "|/var/lib/mailman/mail/mailman owner mailman" mailman-request: "|/var/lib/mailman/mail/mailman request mailman" mailman-subscribe: "|/var/lib/mailman/mail/mailman subscribe mailman" mailman-unsubscribe: "|/var/lib/mailman/mail/mailman unsubscribe mailman" Tapez sur Entrée pour aviser le propriétaire de mailman... <-- ENTER

ouvrez /etc/aliases

1
vi /etc/aliases

… Et ajoutez les lignes suivantes:

[…]
## mailman mailing list
mailman: “|/var/lib/mailman/mail/mailman post mailman”
mailman-admin: “|/var/lib/mailman/mail/mailman admin mailman”
mailman-bounces: “|/var/lib/mailman/mail/mailman bounces mailman”
mailman-confirm: “|/var/lib/mailman/mail/mailman confirm mailman”
mailman-join: “|/var/lib/mailman/mail/mailman join mailman”
mailman-leave: “|/var/lib/mailman/mail/mailman leave mailman”
mailman-owner: “|/var/lib/mailman/mail/mailman owner mailman”
mailman-request: “|/var/lib/mailman/mail/mailman request mailman”
mailman-subscribe: “|/var/lib/mailman/mail/mailman subscribe mailman”
mailman-unsubscribe: “|/var/lib/mailman/mail/mailman unsubscribe mailman”

Ensuite tapez la commande

1
newaliases

et redemander Postfix

1
/etc/init.d/postfix restart

Puis lancez le daemon Mailman

1
/etc/init.d/mailman start

Apres l’installation d’ISPConfig avec comme port 8081, vous pouvez accéder à Mailman avec les URL suivante http://monserveur.example.com:8081/cgi-bin/mailman/admin/ ou http://monserveur.example.com:8081/cgi-bin/mailman/listinfo/

Pareil que pour phpMyAdmin, pour accéder à Mailman directement via les site web, il faut ajouter dans les directives Nginx d’ISPconfig

location /cgi-bin/mailman {
root /usr/lib/;
fastcgi_split_path_info (^/cgi-bin/mailman/[^/]*)(.*)$;
include /etc/nginx/fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
fastcgi_intercept_errors on;
fastcgi_pass unix:/var/run/fcgiwrap.socket;
}

location /images/mailman {
alias /usr/share/images/mailman;
}

location /pipermail {
alias /var/lib/mailman/archives/public;
autoindex on;
}

Maintenant nous devons installer PureFTPd et Quota

1
apt-get install pure-ftpd-common pure-ftpd-mysql quota quotatool

modifiez le fichier /etc/default/pure-ftpd-common

1
vi /etc/default/pure-ftpd-common

… et assurez vous que le mode de démarrage est bien sur standalone et que VIRTUALCHROOT=true

[…]
STANDALONE_OR_INETD=standalone
[…]
VIRTUALCHROOT=true
[…]

Maintenant nous allons configurer PureFTPd pour autoriser les Sessions FTP et TLS.
Le FTP est un protocole peu sécurisé, car les mots de passe ainsi que toutes les données sont transférées en clair, pour y remédier nous le couplerons au TLS pour crypter toutes les communications, rendant ainsi FTP beaucoup plus sûr.

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

Pour utiliser TLS, nous devons créer un certificat SSL.
Créez le répertoire /etc/ssl/private/

1
mkdir -p /etc/ssl/private/

Nous pouvons maintenant générer le nouveau certificat TLS

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

Country Name (2 letter code) [AU]: <- Le pays en deux lette ex : FR
State or Province Name (full name) [Some-State]: <-Entrez le nom de votre État ou province.
Locality Name (eg, city) [ ]:<- Nom de votre ville : ex Paris
Organization Name (eg, company) [Internet Widgits Pty Ltd]:<- Entrez votre Nom de votre organisme (par exemple, le nom de votre entreprise).
Organizational Unit Name (eg, section) [ ]:<-Saisissez le nom de votre service (par exemple, «Service Informatique”).
Common Name (eg, YOUR name) [ ]:<- Saisissez le nom de domaine complet du système (par exemple, «ks123456.kimsufi.com”).
Email Address [ ]:<-Saisissez votre adresse mail

Changez les permissions du certificat SSL

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

Redémarrez PureFTPd

1
/etc/init.d/pure-ftpd-mysql restart

Editez le fichier /etc/fstab et ajouter “,usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv0” à la partition avec le point de montage “/” juste après “errors=remount-ro” comme il est démontré ci-dessous.

1
2
3
4
5
6
7
8
9
10
11
12
13
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
/dev/mapper/monserveur-root /               ext4    errors=remount-ro,usrjquota=quota.user,grpjquota=quota.group,jqfmt=vfsv0 0       1
# /boot was on /dev/sda1 during installation
UUID=cb4afc02-4225-487e-904c-7fa495f9dcf2 /boot           ext2    defaults        0       2
/dev/mapper/monserveur-swap_1 none            swap    sw              0       0
/dev/sr0        /media/cdrom0   udf,iso9660 user,noauto     0       0
/dev/fd0        /media/floppy0  auto    rw,user,noauto  0       0

Activez les quotas avec les lignes de commandes suivantes

1
mount -o remount /
1
quotacheck -avugm

voici le résultat de cette commande

quotacheck: Parcours de /dev/mapper/monserveur-root [/] terminé
quotacheck: Cannot stat old user quota file //quota.user: Aucun fichier ou dossier de ce type. Usage will not be substracted.
quotacheck: Cannot stat old group quota file //quota.group: Aucun fichier ou dossier de ce type. Usage will not be substracted.
quotacheck: Cannot stat old user quota file //quota.user: Aucun fichier ou dossier de ce type. Usage will not be substracted.
quotacheck: Cannot stat old group quota file //quota.group: Aucun fichier ou dossier de ce type. Usage will not be substracted.
quotacheck: Vérifié 4017 répertoires et 48304 fichiers
quotacheck: Ancien fichier non trouvé.
quotacheck: Ancien fichier non trouvé.

1
quotaon -avug

/dev/mapper/monserveur-root [/] : quotas group activés
/dev/mapper/monserveur-root [/] : quotas user activés

Installez maintenant BIND DNS Server

1
apt-get install bind9 dnsutils

Installez Vlogger, Webalizer, et AWstats

1
apt-get install vlogger webalizer awstats geoip-database libclass-dbi-mysql-perl

Ouvrez le fichier /etc/cron.d/awstats

1
vi /etc/cron.d/awstats

Et commentez toutes les lignes de ce fichier

#MAILTO=root

#*/10 * * * * www-data [ -x /usr/share/awstats/tools/update.sh ] && /usr/share/awstats/tools/update.sh

# Generate static reports:
#10 03 * * * www-data [ -x /usr/share/awstats/tools/buildstatic.sh ] && /usr/share/awstats/tools/buildstatic.sh

Installation de Jailkit

Jailkit n’est nécessaire uniquement si vous souhaitez comme unique utilisateurs SSH chroot. (important: Jailkit doit être installé avant ISPConfig – il ne peut pas être installé par la suite!):
L’instalation ce fait comme suite.

1
apt-get install build-essential autoconf automake1.9 libtool flex bison debhelper binutils-gold

Au moment de la rédaction de cet article, la dernière version de Jailkit est la 2.17

1
2
3
4
5
6
7
8
9
cd /tmp
wget http://olivier.sessink.nl/jailkit/jailkit-2.17.tar.gz
tar xvfz jailkit-2.17.tar.gz
cd jailkit-2.17
./debian/rules binary
cd ..
dpkg -i jailkit_2.17-1_*.deb
rm -rf jailkit-2.17*
cd ..

Installez maintenant fail2ban

1
apt-get install fail2ban

Il faut créez les services à monitorer de PureFTPd and Dovecot,
Dans un premier temps créez le fichier /etc/fail2ban/jail.local:

1
vi /etc/fail2ban/jail.local

[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

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

Maintenant, il faut créer les 2 filtres suivants

1
vi /etc/fail2ban/filter.d/pureftpd.conf

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

1
vi /etc/fail2ban/filter.d/dovecot-pop3imap.conf

[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\S*),.*
ignoreregex =

Redémarrez le fail2ban

1
/etc/init.d/fail2ban restart

Installation le Web Mail client SquirrelMail

1
apt-get install squirrelmail

Configuration de squirremail

1
squirrelmail-configure

Nous devons configurer SquirrelMail de sort qu’il utilise Dovecot-IMAP/-POP3:
Les réponses que vous devez fournir sont :
Question 1 : D
Question 2 : dovecot
Question 3 : Entrer
Question 4 : S
Question 5 : Q

Comme vous pouvez le voir ci-dessous.

SquirrelMail Configuration : Read: config.php (1.4.0)
———————————————————
Main Menu —
1. Organization Preferences
2. Server Settings
3. Folder Defaults
4. General Options
5. Themes
6. Address Books
7. Message of the Day (MOTD)
8. Plugins
9. Database
10. Languages

D. Set pre-defined settings for specific IMAP servers

C Turn color on
S Save data
Q Quit

Command >> <--D SquirrelMail Configuration : Read: config.php --------------------------------------------------------- While we have been building SquirrelMail, we have discovered some preferences that work better with some servers that don't work so well with others. If you select your IMAP server, this option will set some pre-defined settings for that server. Please note that you will still need to go through and make sure everything is correct. This does not change everything. There are only a few settings that this will change. Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server gmail = IMAP access to Google mail (Gmail) accounts quit = Do not change anything Command >> <-- dovecot only a few settings that this will change. Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server gmail = IMAP access to Google mail (Gmail) accounts quit = Do not change anything Command >> dovecot

imap_server_type = dovecot
default_folder_prefix =
trash_folder = Trash
sent_folder = Sent
draft_folder = Drafts
show_prefix_option = false
default_sub_of_inbox = false
show_contain_subfolders_option = false
optional_delimiter = detect
delete_folder = false

Press enter to continue…<-- Enter SquirrelMail Configuration : Read: config.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> <-- S SquirrelMail Configuration : Read: config.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color on S Save data Q Quit Command >> <-- Q

Après l’installation de ISPConfig avec port 8081, vous pouvez maintenant accéder à SquirrelMail via l’URL http://monserveur.example.com:8081/squirrelmail, http://monserveur.example.com:8081/webmail ou http://192.168.0.100:8081/webmail

Pareil que pour phpMyAdmin, ou Mailman,si vous voulez accéder directement via vos site internet aux alias /webmail or /squirrelmail il faut les définir pour chaque site. en modifiant les directives nginx

location /squirrelmail {
root /usr/share/;
index index.php index.html index.htm;
location ~ ^/squirrelmail/(.+\.php)$ {
try_files $uri =404;
root /usr/share/;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $request_filename;
include /etc/nginx/fastcgi_params;
fastcgi_param PATH_INFO $fastcgi_script_name;
fastcgi_buffer_size 128k;
fastcgi_buffers 256 4k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
fastcgi_intercept_errors on;
}
location ~* ^/squirrelmail/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ {
root /usr/share/;
}
}
location /webmail {
rewrite ^/* /squirrelmail last;
}

Si vous utilisez https au lieu de http pour votre serveur virtuel, vous devez ajouter la ligne fastcgi_param HTTPS on; ; à votre configuration SquirrelMail comme ceci:

location /squirrelmail {
root /usr/share/;
index index.php index.html index.htm;
location ~ ^/squirrelmail/(.+\.php)$ {
try_files $uri =404;
root /usr/share/;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_param HTTPS on; # <-- ajouter cette ligne fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $request_filename; include /etc/nginx/fastcgi_params; fastcgi_param PATH_INFO $fastcgi_script_name; fastcgi_buffer_size 128k; fastcgi_buffers 256 4k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; fastcgi_intercept_errors on; } location ~* ^/squirrelmail/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { root /usr/share/; } } location /webmail { rewrite ^/* /squirrelmail last; }

Si vous utilisez à la fois HTTP et HTTPS pour votre serveur virtuel, vous pouvez utiliser la variable $https, allez de nouveau dans les directives nginx et au lieu de fastcgi_param HTTPS on; mettez fastcgi_param HTTPS $https;

location /squirrelmail {
root /usr/share/;
index index.php index.html index.htm;
location ~ ^/squirrelmail/(.+\.php)$ {
try_files $uri =404;
root /usr/share/;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_param HTTPS $https; # <-- ajouter cette ligne fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $request_filename; include /etc/nginx/fastcgi_params; fastcgi_param PATH_INFO $fastcgi_script_name; fastcgi_buffer_size 128k; fastcgi_buffers 256 4k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; fastcgi_intercept_errors on; } location ~* ^/squirrelmail/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { root /usr/share/; } } location /webmail { rewrite ^/* /squirrelmail last; }

Instalation de ISPConfig

Ici il est important de revérifier si Apache est installer, même si nous avons pris le soin de ne pas le faire, il peut s’installer automatiquement en tant qu’application dépendante.

1
/etc/init.d/apache2 stop

Et supprimer les liens de démarrage du système d’Apache

1
update-rc.d -f apache2 remove

redémarrer nginx

1
/etc/init.d/nginx restart

Téléchargez et décompressez la dernière version de ISPConfig 3

1
2
3
4
cd /tmp
wget http://www.ispconfig.org/downloads/ISPConfig-3-stable.tar.gz
tar xfz ISPConfig-3-stable.tar.gz
cd ispconfig3_install/install/

Maintenant lancez l’installation proprement dit

1
php -q install.php

Cela va démarrer le programme d’installation d’ISPConfig 3. Le programme d’installation configure tous les services comme Postfix, SASL, Courier, etc pour vous.

Dans la majorité des cas, il vous suffit de faire ENTER sans rien saisir. Sauf lorsque vous devez choisir le serveur, vous devez mettre “nginx”

Important : la questions sur l’utilisation de certificat SSL vous sera posée, la réponse par défaut est “yes” si vous faites “ENTER”.
Dans ce cas, lors du lancement de IPSConfig 3, les navigateurs vont vous avertir que votre certificat n’est pas authentifié.
Pour éviter ces avertissement, soit vous répondez “NO”, soit vous installer un certificat SSL gratuit Class1.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
root@monserveur:/tmp/ispconfig3_install/install# php -q install.php
PHP Deprecated:  Comments starting with '#' are deprecated in /etc/php5/cli/conf.d/ming.ini on line 1 in Unknown on line 0


--------------------------------------------------------------------------------
 _____ ___________   _____              __ _         ____
|_   _/  ___| ___ \ /  __ \            / _(_)       /__  \
  | | \ `--.| |_/ / | /  \/ ___  _ __ | |_ _  __ _    _/ /
  | |  `--. \  __/  | |    / _ \| '_ \|  _| |/ _` |  |_ |
 _| |_/\__/ / |     | \__/\ (_) | | | | | | | (_| | ___\ \
 \___/\____/\_|      \____/\___/|_| |_|_| |_|\__, | \____/
                                              __/ |
                                             |___/
--------------------------------------------------------------------------------


>> Initial configuration

Operating System: Debian or compatible, unknown version.

    Following will be a few questions for primary configuration so be careful.
    Default values are in [brackets] and can be accepted with <ENTER>.
    Tap in "quit" (without the quotes) to stop the installer.


Select language (en,de) [en]: <-- ENTER

Installation mode (standard,expert) [standard]: <-- ENTER

Full qualified hostname (FQDN) of the server, eg server1.domain.tld  [server1.example.com]: <-- ENTER

MySQL server hostname [localhost]: <-- ENTER

MySQL root username [root]: <-- ENTER

MySQL root password []: <-- yourrootsqlpassword

MySQL database to create [dbispconfig]: <-- ENTER

MySQL charset [utf8]: <-- ENTER

Apache and nginx detected. Select server to use for ISPConfig: (apache,nginx) [apache]: <-- nginx

Generating a 4096 bit RSA private key
.......................................++
..++
writing new private key to '
smtpd.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '
.', the field will be left blank.
-----
Country Name (2 letter code) [AU]: <-- ENTER
State or Province Name (full name) [Some-State]: <-- ENTER
Locality Name (eg, city) []: <-- ENTER
Organization Name (eg, company) [Internet Widgits Pty Ltd]: <-- ENTER
Organizational Unit Name (eg, section) []: <-- ENTER
Common Name (e.g. server FQDN or YOUR name) []: <-- ENTER
Email Address []: <-- ENTER
Configuring Jailkit
Configuring Dovecot
Configuring Spamassassin
Configuring Amavisd
Configuring Getmail
Configuring Pureftpd
Configuring BIND
Configuring nginx
Configuring Vlogger
Configuring Apps vhost
Configuring Bastille Firewall
Configuring Fail2ban
Installing ISPConfig
ISPConfig Port [8080]: <-- ENTER

Do you want a secure (SSL) connection to the ISPConfig web interface (y,n) [y]: <-- ENTER

Generating RSA private key, 4096 bit long modulus
...............................................................................................++
................++
e is 65537 (0x10001)
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '
.', the field will be left blank.
-----
Country Name (2 letter code) [AU]: <-- ENTER
State or Province Name (full name) [Some-State]: <-- ENTER
Locality Name (eg, city) []: <-- ENTER
Organization Name (eg, company) [Internet Widgits Pty Ltd]: <-- ENTER
Organizational Unit Name (eg, section) []: <-- ENTER
Common Name (e.g. server FQDN or YOUR name) []: <-- ENTER
Email Address []: <-- ENTER

Please enter the following '
extra' attributes
to be sent with your certificate request
A challenge password []: <-- ENTER
An optional company name []: <-- ENTER
writing RSA key
Configuring DBServer
Installing ISPConfig crontab
no crontab for root
no crontab for getmail
Restarting services ...
Stopping MySQL database server: mysqld.
Starting MySQL database server: mysqld ..
Checking for tables which need an upgrade, are corrupt or were
not closed cleanly..
Stopping Postfix Mail Transport Agent: postfix.
Starting Postfix Mail Transport Agent: postfix.
Stopping amavisd: amavisd-new.
Starting amavisd: amavisd-new.
Stopping ClamAV daemon: clamd.
Starting ClamAV daemon: clamd .
Restarting IMAP/POP3 mail server: dovecot.
Reloading PHP5 FastCGI Process Manager: php5-fpm.
Reloading nginx configuration: nginx.
Restarting ftp server: Running: /usr/sbin/pure-ftpd-mysql-virtualchroot -l mysql:/etc/pure-ftpd/db/mysql.conf -l pam -H -O clf:/var/log/pure-ftpd/transfer.log -Y 1 -D -u 1000 -A -E -b -8 UTF-8 -B
Installation completed.
root@monserveur:/tmp/ispconfig3_install/install#

Le programme d’installation configure automatiquement tous les services sous-jacents, aucune configuration manuelle est nécessaire.

Ensuite, vous pouvez accéder à ISPConfig 3 via l’url dans http://monserveur.example.com:8080/ ou http://192.168.0.100:8080/. Connectez-vous avec le nom d’utilisateur admin et le mot de passe admin
Attention : vous devriez changer le mot de passe par défaut après votre première connexion, vous pouvez aussi changer la langue.

Serveur Dédié : un serveur parfait avec Debian Squeeze (Debian 6.0)
Accueil ISPConfig 3

N’hésitez à m’apporter vos remarques et commentaires ou rapportez un bug, même si j’ai effectué plusieurs tests

La réalisation de tel tuto prends du temps, même beaucoup de temps, n’hésitez pas à le partagé.

Système de base d’un serveur sous Debian Wheezy (Debian 7)

Système de base d’un serveur sous Debian Wheezy (Debian 7)

Nous allons voir dans ce tuto l’installation d’un système de base pour un serveur avec Debian Wheezy. Il montre une installation simple qui nous servira de dénominateur commun à d’autre tuto.

Remarques :

Pour le bon déroulement du tuto, je prends la liberté de prendre la configuration fictive suivante :

Nom du serveur : monserveur.example.com
Adresse :  IP 192.168.0.100

Aller hop !! Au boulot.

Etape N°1 : installation du système de base.

Téléchargez l’image la bonne version de Debian Wheezy selon votre architecture, 32 ou 64 bit directement sur le site debian.org. Puis graver l’image *.iso sur un CD.

Bootez votre machine sur le CD d’installation fraichement gravé, puis choisissez « install »

Accueil installation debian
Accueil installation debian

Choisissez votre langue, ici « Français »

Choisir le pays "France"
Choisir le pays “France”

Choisissez le pays, ici « France »

Choisir la langue française
Choisir la langue française

Maintenant vous devez choisir la configuration du clavier

Configuration du clavier
Configuration du clavier

Dans cette étape, le système vérifie l’intégrité du CD que vous venez de graver, il vérifie aussi le matériel, les paramètres réseaux, et l’existence d’un serveur DHCP pour la configuration du réseau.

Configuration DHCP
Configuration DHCP

Maintenant entrez le nom du serveur. Comme indiqué plus haut, j’ai pris monserveur.example.com, et de ce fait je saisie “monserveur”

Nom du serveur
Nom du serveur

Saisissez maintenant le nom du domaine, dans notre cas « example.com »

Nom du domaine
Nom du domaine

Choisissiez un bon mot de passe pour l’utilisateur « root »

Mot de passe pour root
Mot de passe pour root

Confirmez le mot de passe pour vérifier si tous est Ok.

Confirmation du mot de passe
Confirmation du mot de passe

Maintenant créez un utilisateur « normal », c’est-à-dire sans pouvoir. Comme je suis modeste, j’ai choisie comme nom de compte « Zenzla ».
Attention, vous pouvez choisir ce que vous voulez, sauf « admin », car c’est un nom réservé par le système.

Création d'un nouvel utilisateur
Création d’un nouvel utilisateur

Je donne un login « zenzla » à cet utilisateur.

Login du compte
Login du compte

Choisir un mot de passe pour cet utilisateur, qui doit être différent de celui que vous avez choisi pour « root »

Mot de passe pour l'utilisateur
Mot de passe pour l’utilisateur

Confirmez le mot de passe

Confirmation du mot de passe
Confirmation du mot de passe

Arrive l’étape de partitionnement du disque dur de votre serveur. Vous avez deux solutions :

1) Soit vous prenez la solution la plus simple « Assisté – utiliser tout un disque avec LVM » que je recommande vivement pour les débutants.

2) Si vous avez un peu plus de bouteille, faite le en manuel.

Dans ce tuto, je vais choisir la première solution, car plus simple et sur tout moins longue (oui je suis un gros feignant). Ce choix va créer deux volumes logiques, la racine du système « / » et le « swap »

Choisissez « Assisté – utiliser tout un disque avec LVM »

Assisté – utiliser tout un disque avec LVM
Assisté – utiliser tout un disque avec LVM

Sélectionnez le disque à partitionner, dans mon cas j’en il y en a un seul.

Choix du disque à partitionner
Choix du disque à partitionner

Comme mentionné précédemment, nous allons installer tout dans la même partition pour des raisons de facilité.

Choisissez « Tout dans une seule partition (recommandé pour les débutants) »

Tout dans une seule partition
Tout dans une seule partition

Pour confirmer notre choix de configuration, choisissez « oui »

Confirmation du choix de configuration
Confirmation du choix de configuration

Sélectionnez « Terminer le partitionnement et appliquer les changements » pour terminer

Terminer le partitionnement
Terminer le partitionnement

Et enfin sélectionnez « Oui » pour l’application définitive des changements sur les disques. Après cette étape, vous n’aurez plus la possibilité de revenir en arrière, car les novelles partition seront créées

Ecriture définitive
Ecriture définitive

Le système de base s’installe alors

Installation du système de base
Installation du système de base

Pour l’installation et la gestion des paquets il vous faut choisir un miroir du pays ou se trouve notre serveur, dans notre cas c’est en « France »

Choix du miroir
Choix du miroir

Maintenant, il faut choisir le miroir, je choisie celui donné par défaut ftp.fr.debian.org

Miroir ftp.fr.debian.org
Miroir ftp.fr.debian.org

Si vous utilisez un proxy http saisissez les paramètres, sinon laissez vide et continuer

Configuration du proxy
Configuration du proxy

Une mise-à-jour des paquets s’effectue, elle est plus ou moins longue selon votre connexion internet et la version de Debian.

mise-à-jour des paquets
mise-à-jour des paquets

Ensuite, il est demandé si vous voulez participer aux statistiques sur les paquets, c’est à vous de choisir. Dans ce tuto je mets « non ».

statistiques Debian
statistiques Debian

Lors de cette étape, même si nous allons mettre en place un serveur Web, je recommande de faire l’installation des différents paquets manuellement. Je sélectionne uniquement, « serveur SSH » et « Utilitaires usuels du système » pour pouvoir me connecter au système directement après l’installation.

Pour rappel : pour sélectionner/désélectionner vous devez utiliser la barre « espace » de votre clavier

Choix des logiciels
Choix des logiciels

Les paquets sélectionnés sont téléchargés puis installés

Installation des paquets
Installation des paquets

Maintenant nous devons installer le programme de démarrage ; le GRUB. Choisissez « Oui »

Installation du GRUB
Installation du GRUB

C’est fini !! ouffff  (Enfin la 1ère étape ^^), il vous suffit de retirer le CD d’installation de Debian Wheezy et de sélectionner « Continuer » pour redémarrer votre serveur.

redémarrer votre serveur
redémarrer votre serveur

Voilà, nous avons notre système de base installé, vous pouvez vous y connecter en ssh

Si vous n’aviez pas installé le serveur OpenSSH lors de l’installation basique, vous pouvez toujours le faire maintenant :

1
aptitude install ssh openssh-server

Désormais, vous pouvez utiliser un client SSH tel que PuTTY et vous connecter depuis votre poste de travail vers votre serveur.

1
ssh root@192.168.0.100 -p 22

Il n’est pas obligatoire de préciser le port (-p), mais comme nous allons changer le port par défaut par mesure de sécurité, il vaut mieux prendre l’habitude de le mettre.

Lors de votre première connexion, il faut accepter la clé d’authentification du serveur distant : yes

1
2
3
4
5
ssh root@192.168.0.100 -p 22
The authenticity of host '[root@192.168.0.100]:22 ([192.168.0.100]:22)' can't be established.
RSA key fingerprint is ad:39:10:ee:a7:7g:56:10:sb:4c:65:ad:22:89:44:aa.
Are you sure you want to continue connecting (yes/no)? yes
root@192.168.0.100'
s password:

La première chose à faire est d’installer vim-nox, car vi à quelque fois des comportement bizarre sous Debian et Ubuntu

1
apt-get install vim-nox

Pour plus de convivialité, il est intéressant de mettre vim en couleur, pour cela je vous recommande mon super tuto ^^ vi : Coloration syntaxique.

Mettez à jour votre serveur

1
2
apt-get update
apt-get upgrade

Le port par défaut de SSH est le 22, donc il est vivement recommander de le modifier par mesure de sécurité pour éviter les attaques par brute force.
Le nouveau port doit être supérieur à 1024 et inférieur à 65535. Dans notre cas nous choisissons le port 7070.

Ouvrez le fichier /etc/ssh/sshd_config avec vi

1
vi /etc/ssh/sshd_config

Changer le port par défaut 22, par le nouveau 7070, et vérifié que vous êtes bien en protocole ssh 2

1
2
3
4
5
6
7
8
...
# What ports, IPs and protocols we listen for
Port 7070
# Use these options to restrict which interfaces/protocols sshd will bind to
#ListenAddress ::
#ListenAddress 0.0.0.0
Protocol 2
...

Profitons-en, pour modifier d’autres paramètres de sécurité, nous allons interdire la connexion ssh à root, et l’autorisé uniquement à l’utilisateur zenzla que nous avons crée plus haut.

Mettez PermitRootLogin à “no” et ajouter la ligne AllowUsers zenzla, comme ci-dessous

1
2
3
4
5
# Authentication:
LoginGraceTime 120
PermitRootLogin no
StrictModes yes
AllowUsers zenzla

redémarrez ssh pour la prise en compte des modifications

1
/etc/init.d/ssh restart

Avant de rebooter le système, nous allons corriger l’affichage des caractères accentués une fois pour toute.

Ouvrez le fichier /etc/default/locale

1
vi /etc/default/locale

modifiez la ligne LANG en y ajoutant UTF-8

1
LANG=fr_FR.UTF-8

Ensuite pour avoir une coloration du contenu (commande ls par exemple), modifiez le fichier /root/.bashrc

1
vi /root/.bashrc

Et décommentez les ligne suivant

[…]
# You may uncomment the following lines if you want `ls’ to be colorized:
export LS_OPTIONS=’–color=auto’
eval “`dircolors`”
alias ls=’ls $LS_OPTIONS’
alias ll=’ls $LS_OPTIONS -l’
alias l=’ls $LS_OPTIONS -lA’
[…]

Par mesure de sécurité (Oui encore une foie), nous allons envoyer une alerte par mail à l’administrateur à chaque connexion de root en ssh, cela et d’autant plus intéressant aujourd’hui avec la multiplication des smartphones, et donc la possibilité de lire les mails partout ou nous nous trouvons.

dans le même fichier /root/.bashrc ajouter les lignes suivantes, en changeant l’email par le votre.

1
echo 'Accès Shell Root le ' `date` `who` | mail -s `hostname` Shell Root de `who | cut -d"(" -f2 | cut -d")" -f1` votre@mail.tld

sauvegarder puis redémarrer votre serveur

1
reboot

Et voilà, vous avez à présent un serveur de base optimisé.

Vous pouvez poursuive en installant un serveur avec Nginx et ISPConfig 3

La série “un serveur parfait” et fortement inspiré, voir copier coller et traduit  de l’excellent Howtoforge