Presque 20 jours sans aucun article… Il m’a bien fallut tout ce temps pour tordre VHCS jusque dans ses plus profonds fichiers de configuration ! En faisant le tour de la sphère VHCS, j’ai pu me rendre compte que plusieurs personnes ont tenté (avec plus ou moins de succès) de coupler VHCS et SSL… Les différentes explications que l’on peut trouver ça et là (ou encore ici et là-bas) ne m’ont pas complètement satisfait.
Je vais donc tenter de proposer une solution, non pas alternative car j’utilise les mêmes principes, non plus innovante car je n’invente rien, mais plutôt personnelle. Je pars evidement du principe que mon serveur se trouve dans l’état ou je l’ai laissé depuis mon dernier article.
Voici donc les objectifs :
- VHCS, Webmail, Phpmyadmin et le Filemanager en SSL (uniquement)
- POP et IMAP en SSL (presque uniquement, on verra pourquoi ensuite…)
- Accès au panel principal sur https://sd-XXX.dedibox.fr (Pour les dédiboxiens)
- Accès par sous domaines (uniquement) au lieu des URLs. (Pour chaque domaine !)
- panel.domaine.tld
- webmail.domaine.tld
- files.domaine.tld
- pma.domaine.tld
Création des définitions POP et IMAP pour chaque domaine (futile mais pratique pour la configuration des clients mails.)
- pop.domaine.tld
- imap.domaine.tld
Munissez vous d’une bonne dose de patience et en route !
OpenSSL
Tout d’abord installons openssl au cas ou vous ne l’auriez pas déjà :
# apt-get install openssl
Errata #2 : Activez le module apache SSL :
# a2enmod ssl
Ensuite il faut générer vos certificats SSL :
# cd /etc/apache2/ssl
# apache2-ssl-certificate
Une série de question vous sera posée, vous pouvez tappez sur ENTER et ne pas répondre à ces questions sauf la suivante au vous mettrez une étoile (*).
server name (eg. ssl.domain.tld; required!!!) []:*
En fait le programme génère un certificat “autosigné” qui sera placé dans le répertoire /etc/apache2/ssl (ou vous êtes actuellement).
Ceci fait, remontez vos manches, on entre dans les fichiers de conf VHCS !
Architecture et fonctionnement de VHCS.
Afin de ne pas faire (trop) n’importe quoi, j’ai passé un petit moment à comprendre le fonctionnement de VHCS. Au début cela parait un peu complexe mais finalement, on s’y retrouve :
Nous avons donc 2 répertoires importants :
- /etc/vhcs2 : c’est le répertoire des fichiers de configuration.
- /var/www/vhcs2 : répertoire des interfaces d’administration et de quelques fichiers de configuration perdus
Le premier répertoire qui va nous interresser est celui des configurations, il est subdivisé en plusieurs sous répertoire correspondant chacun à un service pris en charge par VHCS (apache, postfix, proftpd, bind …). Chacun de ces sous-répertoires est lui aussi architecturé spécifiquement. Ainsi on trouvera un sous répertoire appelé “parts” contenant des parties de fichiers de configuration, ce sont ces parties (ou templates) qui sont ensuite utilisée pour générer les fichiers de configuration principaux du système. Nous allons donc nous attarder sur ces templates.
Mais avant tout, nous allons faire une petite sauvegarde de tout ce beau répertoire :
# cp -R /etc/vhcs2 /etc/vhcs2.bak
Configuration Apache
Commençons par modifier le fichier servant de base à la configuration apache :
# vi /etc/vhcs2/apache/parts/vhcs2_base.tpl
Choses à faire :
- Commenter l’alias vhcs2,
- En créer un nouveau (vhth) qui servira pour les thèmes
- Modifier l’ip, (Veillez à remplacer les XX.XX.XX.XX par votre IP serveur)
- Modifier le nom de votre serveur ( remplacer les YYYY par votre numéro de dédibox.)
- Ajouter les instruction SSL (SSLCertificateFile et SSLCertificateKeyFile doivent pointer vers les bons fichiers, c’est à dire ceux générés au début.)
Voici le contenu de ce fichier après modification : # httpd Data BEGIN.
#
# Web traffic accounting.
#
LogFormat "%B" traff
#
# GUI Location.
#
#Alias /vhcs2 /var/www/vhcs2/gui
Alias /vhth /var/www/vhcs2/gui/themes/
<Directory /var/www/vhcs2/gui/themes/>
AllowOverride none
Options MultiViews IncludesNoExec FollowSymLinks
</Directory>
<Directory /var/www/vhcs2/gui>
AllowOverride none
Options MultiViews IncludesNoExec FollowSymLinks
ErrorDocument 404 /vhcs2/errordocs/index.php
DirectoryIndex index.html index.php
</Directory>
<Directory /var/www/vhcs2/gui/tools/filemanager>
php_flag register_globals On
php_admin_value open_basedir "/var/www/vhcs2/gui/tools/filemanager/:/tmp/:/usr/share/php/"
</Directory>
Alias /vhcs_images /var/www/vhcs2/gui/images
<Directory /var/www/vhcs2/gui/images>
AllowOverride none
Options MultiViews IncludesNoExec FollowSymLinks
</Directory>
#
# Default GUI.
#
<VirtualHost XX.XX.XX.XX:443>
ServerName sd-YYYY.dedibox.fr
DocumentRoot /var/www/vhcs2/gui
<Directory /var/www/vhcs2/gui>
Options Indexes Includes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/apache.pem
SSLCertificateKeyFile /etc/apache2/ssl/3271b39.0
</VirtualHost>
# httpd [{IP}] virtual host entry BEGIN.
# httpd [{IP}] virtual host entry END.
# httpd Data END.
Après avoir modifié ce fichier il faut s’attaquer au fichier définissant les domaines.
# vi /etc/vhcs2/apache/parts/dmn_entry.tpl
Voici les choses à faire avec ce fichier :
- Ajouter un virtualhost pour le panel
- Ajouter un virtualhost pour le webmail
- Ajouter un virtualhost pour le filemanager
- Ajouter un virtualhost pour le sqlmanager (phpmyadmin)
Chaque virtualhost doit être correctement configuré avec SSL (Veillez encore une fois à bien spécifier les chemins vers vos fichiers clés, ils doivent surement être différents des miens…)
Contenu du fichier après modification :
<VirtualHost panel.{DMN_NAME}:443>
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/apache.pem
SSLCertificateKeyFile /etc/apache2/ssl/3071d749.0
DocumentRoot /var/www/vhcs2/gui
<Directory /var/www/vhcs2/gui>
Options Indexes Includes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>
ServerName panel.{DMN_NAME}
</VirtualHost>
<VirtualHost webmail.{DMN_NAME}:443>
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/apache.pem
SSLCertificateKeyFile /etc/apache2/ssl/3071d749.0
DocumentRoot /var/www/vhcs2/gui/tools/webmail
<Directory /var/www/vhcs2/gui>
Options Indexes Includes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>
ServerName webmail.{DMN_NAME}
</VirtualHost>
<VirtualHost files.{DMN_NAME}:443>
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/apache.pem
SSLCertificateKeyFile /etc/apache2/ssl/3071d749.0
DocumentRoot /var/www/vhcs2/gui/tools/filemanager
<Directory /var/www/vhcs2/gui>
Options Indexes Includes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>
ServerName files.{DMN_NAME}
</VirtualHost>
<VirtualHost pma.{DMN_NAME}:443>
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/apache.pem
SSLCertificateKeyFile /etc/apache2/ssl/3071d749.0 # /!\ Modifiez bien ce lien en fonction de celui qui a été généré !
DocumentRoot /var/www/vhcs2/gui/tools/pma
<Directory /var/www/vhcs2/gui>
Options Indexes Includes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>
ServerName pma.{DMN_NAME}
</VirtualHost>
<VirtualHost {DMN_IP}:80>
#
#User {SUEXEC_USER}
#Group {SUEXEC_GROUP}
#
#
#SuexecUserGroup {SUEXEC_USER} {SUEXEC_GROUP}
#
ServerAdmin root@{DMN_NAME}
DocumentRoot {WWW_DIR}/{DMN_NAME}/htdocs
ServerName {DMN_NAME}
ServerAlias www.{DMN_NAME} {DMN_NAME} *.{DMN_NAME}
ErrorLog {APACHE_USERS_LOG_DIR}/{DMN_NAME}-error.log
TransferLog {APACHE_USERS_LOG_DIR}/{DMN_NAME}-access.log
CustomLog {APACHE_LOG_DIR}/{DMN_NAME}-traf.log traff
CustomLog {APACHE_LOG_DIR}/{DMN_NAME}-combined.log combined
Alias /errors {WWW_DIR}/{DMN_NAME}/errors/
ErrorDocument 401 /errors/401/index.php
ErrorDocument 403 /errors/403/index.php
ErrorDocument 404 /errors/404/index.php
ErrorDocument 500 /errors/500/index.php
# httpd dmn entry cgi support BEGIN.
# httpd dmn entry cgi support END.
<Directory {GUI_ROOT_DIR}>
php_admin_value open_basedir "{GUI_ROOT_DIR}/:/etc/vhcs2/:/proc/:{WWW_DIR}/:/tmp/"
</Directory>
# httpd dmn entry PHP2 support BEGIN.
# httpd dmn entry PHP2 support END.
<Directory {WWW_DIR}/{DMN_NAME}/htdocs>
# httpd dmn entry PHP support BEGIN.
# httpd dmn entry PHP support END.
Options Indexes Includes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
Dernière petite modification pour apache, il faut éditer le fichier définissant l’espace de nom des virtualhost :
# vi /etc/vhcs2/apache/parts/vh_entry.tpl
Il suffit d’ajouter une ligne afin d’indiquer à apache de prendre en compte les sites en SSL (port 443)
Contenu du fichier après modification :
NameVirtualHost {IP}:80
NameVirtualHost {IP}:443
# httpd [{DMN_GRP}] dmn group entry BEGIN.
# httpd [{DMN_GRP}] dmn group entry END.
# httpd [{ALS_NAME}] als entry BEGIN.
# httpd [{ALS_NAME}] als entry END.
Pour en terminer avec apache, nous allons maintenant faire en sorte que le site http://sd-XXX.dedibox.fr ne présente plus l’accès à VHCS afin de lui préférer un accès https://sd-XXX.dedibox.fr (SSL), pour cela nous allons tout simplement faire en sorte que http://sd-XXX.dedibox.fr pointe sur le site par défaut d’une fraiche installation d’apache.
Editez donc le fichier suivant :
# vi /etc/apache2/sites-available/default
Indiquez lui votre adresse IP (celle du serveur hein !) et ajouter la directive ServerName, après modification il devrait ressemble a cela : (XX.XX.XX.XX et YYYY : même combat que ci dessus !)
Errata #1 : Modifiez aussi les directives DocumentRoot et Directory.
<VirtualHost XX.XX.XX.XX:80>
ServerName sd-YYYY.dedibox.fr
ServerAdmin webmaster@localhost
DocumentRoot /var/www/apache2-default/
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/apache2-default/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
# This directive allows us to have apache2's default start page
# in /apache2-default/, but still have / go to the right place
# RedirectMatch ^/$ /apache2-default/
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog /var/log/apache2/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog /var/log/apache2/access.log combined
ServerSignature On
Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
</VirtualHost>
Ok maintenant on est pas loin d’être bon en ce qui concerne apache, passons à la configuration de bind (le serveur de nom de domaine)
Edit (merci Frederic Nauleau) :
Editez le fichier ports.conf
# vi /etc/apache2/ports.conf
et ajoutez la ligne
# Listen 443
Configuration Bind
Je rappelle brièvement le but de cette configuration : ajouter des sous domaines par défaut à chaque création d’un nouveau domaine à travers VHCS. Nous n’avons besoin de modifier qu’un seul fichier :
# vi /etc/vhcs2/bind/parts/db_e.tpl
Il faut donc lui ajouter 2 entrées CNAME (pop et imap) et 4 entrées IN A (panel, webmail, files et pma). Voici la tête du fichier après édition :
$TTL 86400
@ IN SOA ns.{DMN_NAME}. root.{DMN_NAME}. (
; dmn [{DMN_NAME}] timestamp entry BEGIN.
{TIMESTAMP}
; dmn [{DMN_NAME}] timestamp entry END.
8H
2H
4W
1D )
IN NS ns.{DMN_NAME}.
; dmn [{DMN_NAME}] dns2 entry BEGIN.
; dmn [{DMN_NAME}] dns2 entry END.
IN MX 10 mail.{DMN_NAME}.
{DMN_NAME}. A {DMN_IP}
ns IN A {DMN_IP}
mail IN A {DMN_IP}
www CNAME {DMN_NAME}.
ftp CNAME {DMN_NAME}.
pop CNAME {DMN_NAME}.
imap CNAME {DMN_NAME}.
panel.{DMN_NAME}. IN A {DMN_IP}
webmail.{DMN_NAME}. IN A {DMN_IP}
files.{DMN_NAME}. IN A {DMN_IP}
pma.{DMN_NAME}. IN A {DMN_IP}
; sub [{SUB_NAME}] entry BEGIN.
; sub [{SUB_NAME}] entry END.</code></pre>
NB : Faites extrèmenent attention à ne pas oublier de petit points… (je vous aurai prévenu !)
Page par défaut d’un nouveau site
Toute ces modifications sont bien jolies mais, lorsque l’on crée un nouveau domaine, une page est copiée par défaut, celle ci présente les liens vers les différents outils VHCS. Cependant, étant donné que nous nous sommes donné un mal de chien à modifier VHCS, il faudrait que cette page reflète les modifications.
Cela permettra de corriger les liens et le fait que les images ne s’affichent plus. Commençons par sauvegarder le fichier :
# cp /var/www/vhcs2/gui/domain_default_page/index.html /var/www/vhcs2/gui/domain_default_page/index.html.bak
puis modifions le :
# vi /var/www/vhcs2/gui/domain_default_page/index.html
et faisons en sorte qu’il contienne le code (voir lien) suivant pour corriger tout les problèmes.
NB : Lors de la prochaine étape nous allons regénérer la configuration afin que les sites existants puissent profiter de toutes ces modifications. Cependant le fichier modifier à cette étape ne sera pas remis en place pour une raison évidente : il ne faut pas écraser votre index.html… A vous donc de traiter cela au cas par cas.
Mise à jour de la configuration VHCS
Afin d’appliquer toutes les modifications que nous avons effectuées depuis le début, il est nécessaire d’indiquer à VHCS de regénérer tous les fichiers de configurations système à partir de nos modifications.
Pour cela suivez la procédure suivante :
- Arrèter vhcs :
# /etc/init.d/vhcs2_daemon stop - Connectez vous au serveur MySQL et entrez votre mot de passe
# mysql -u root -p - Sélectionnez la base de donnée VHCS
> USE vhcs2 - Changez le statut des domaines
> UPDATEdomainSETdomain_status= ‘change’ WHEREdomain_status= ‘ok’; - Changez le statut des alias
> UPDATEdomain_aliassesSETalias_status= ‘change’ WHEREalias_status= ‘ok’; - Changez le statut des sous-domaines
> UPDATEsubdomainSETsubdomain_status= ‘change’ WHEREsubdomain_status= ‘ok’; - Quittez MySQL
> quit - Redémarrez VHCS
# /etc/init.d/vhcs2_daemon start - Lancez le script suivant (Merci Frederic Nauleau)
# /var/www/vhcs2/engine/vhcs2-rqst-mngr - Rechargez apache
# /etc/init.d/apache2 reload - Rechargez bind
# /etc/init.d/bind9 reload
Occupons nous maintenant de la mise en place de SSL pour nos emails…
POP SSL et IMAP SSL
Rien de bien compliqué dans cette étape, il suffit d’installer les bons paquages :
# apt-get install courier-imap-ssl courier-pop-ssl courier-ssl
L’installation va générer des clés automatiquement. Il suffit donc de démarrer les services associés pour pouvoir interroger notre serveur en SSL en plus de l’interrogation normale.
# /etc/init.d/courier-pop-ssl restart
# /etc/init.d/courier-imap-ssl restart
Evidement, le fait de mettre en place un accès SSL doit être fait dans le but de supprimer l’accès classique. Cependant on ne peut pas le faire car le webmail de VHCS utilise un accès classique et non un accès SSL. L’idée dans un futur proche sera donc grâce à un firewall (iptable) de bloquer l’accès provenant de l’extérieur sur les ports classiques et de laisser l’accès sur les ports SSL…
Cela fera surement être l’objet d’un futur article dédié à la mise en place d’un firewall adpaté à l’utilisation de VHCS…
Ouf !
Ce fut long ! Si vous relevez des incorrections n’hésitez pas à abuser des commentaires…



Bonjour “Monsieur” Pierre, c’est le minimum, apres c’est monsieur le président !! (enfin pas tout de suite ..) Bref apres cette petite pommade, quelques questions suite à une install sur dedibox avec Ubuntu. Lors des commandes mysql, j’ai eu quelques soucis du type: les ’ (apostrophe) transformés en . (poing) du coup j’avais toujours une erreur de syntaxe sql, je les ai passé à la main directement dans la page de commande sql de myAdmin … meme chose, alors que je retapai la commande à la main. pas grave j’ai changé directement à la main pour les 2 domaines hébergés dans la table ‘domain’ le champ ‘domainstatus’ par la valeur indiqué dans la commande. jusque là ça va … par contre dans les commandes suivantes …. pour ‘domainaliasses’ et ‘subdomain’ .. rien à faire je n’avais pas de sous domaines Est ce à dire que si je “fais” de nouveaux sous domaines je devrait faire à nouveau la manip ???
puis, dans ce fichier là —> /etc/apache2/sites-available/default, j’ai en tete de celui ci un:
NameVirtualHost *
celui n’apparait pas dans le fichier du meme nom du tutoriel Doit on le supprimer (le “NameVirtualHost *”) ?
Enfin lors du reload de Apache, j’au plusieurs Warning du meme type:
et associé à ceci :
[Wed May 09 00:13:24 2007] [warn] VirtualHost files.mondomaine.net:443 overlaps with VirtualHost pma.mondomaine.net:443, the first has precedence, perhaps you need a NameVirtualHost directive
pour terminer, je croyais avoir suivi correctement le tutoriel mais: https://panel.mondomaine.net ou webmail.mondomaine.net m’envoient vers le panel d’admin en https (dommage pour le webmail ..) et http://www.mondomaine.net vers l’ancien panel sans https sd-XXXX.dedibox.fr pointe bien vers la page d’apache par defaut ….. bon aller je regarde ca demain et je poste si je trouve
Marcusii
Marcusii > Quel long commentaire ! Je vais essayer de répondre dans la limite de ce dont je me rappelle
La manip de “mise à jour de la configuration VHCS” (car je pense que c’est celle dont tu parles) n’est pas à faire à chaque domaine ! Il faut la faire lorsque l’on touche aux fichier de configuration à la main, afin d’appliquer les modifications aux domaines existants. Le problème des apostrophes doit probablement venir de mon blog et de l’interprétation des apostrophes par “markdown”.
Concernant le NameVirtualHost, il ne devrait pas être comme ça, en effet c’est ce fichier qui le configure :
et on peut remarquer à l’intérieur qu’il y a normalement l’ip de spécifiée pour chaque NameVirtualHost.
Enfin les warnings d’apache découlent directement des problèmes que tu as ci dessus… Concernant les adresses qui n’envoient pas au bon endroit, c’est peut être aussi un problème avec la déclaration de ton nom de domaine au niveau de ton registrar…
+à+Ñ+á+Ã+à+Ô+à++à+++à++à+Å+à+Ñ+á+Ï]+à+×+á+Â+à+
trouvé le problème.. il faut une librairie non mentionnée dans tuto
apt-get install libopenssl-ruby
gem install rails -y
Très bon tuto!
Par contre, il y a un problème de sécurité majeur dans VHCS2, qui n’est pas couvert par ce tuto: les utilisateurs virtuels sont authentifiés à partir du fichier /etc/sasl2db, dans lequel les mots de passe sont stockés en clair…
J’ai essayé de régler ça il y a un bout de temps, mais sans succès.
Si qqun a réussi ou a envie d’y passer du temps
Bonjour voila j’ai une erreur après ce tuto : lesite.info a renvoyer un message incorrect ou inattendu code : -12263 j’ai refait 2 fois les manipulation est rien n’a changer J’ai bien mis mes valeur personnel ( si vous voulez fichier de conf dite le moi ) sinon j’ai aussi une erreur au niveau de la modif mysql :
mysql> UPDATE domain SET domainstatus = .change. WHERE domainstatus = .ok.; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘WHERE domain_status = .ok.’ at line 1
Merci de m’aider
Excellent!!!
Thank you very much
Everyone needs help at some point. ,
Exchange is the lifeblood, not only of our economy, but of civilization itself. ,