Cela fait maintenant assez longtemps que je cherche une solution simple et efficace afin d'héberger plusieurs sites persos et d'autres sites de collègues, d'amis, de la famille, etc.
J'ai d'abord commencé à installer "à la main" différents éléments indispensables à des conditions d'hébergement "normales", que ce soit le serveur Apache, php, un serveur Mysql, un serveur de Mail, etc.
Je me suis vite aperçu que cette solution fonctionnait bien (après moult réglages ...) mais que, avec l'arrivée de nouveaux sites, l'administration devenait assez lourde pour un non professionnel comme moi.
L'idéal aurait été de trouver un "script" qui permette de gérer TOUT d'un seul coup.

Imaginez : je clique sur un bouton après avoir rentré quelques coordonnées, adresse e-mail et nom de domaine et ... HOP! tout est mis à jour aussi bien les DNS que les alias mail ou la base de données MySQL, etc. ... et bien ca existe ! :o)
Oui, je sais, je débarque mais bon. Vieux motard que jamais ! :o)

Cette solution a été testée avec succès sur un serveur personnel placé chez moi avec une connexion de type adsl dégroupée (environ 100 Ko/s en up) et sur un serveur dédié de type Dédibox... le tout sous Ubuntu !
Sur la base de divers posts, tutos et documentations trouvées sur le Net, je vais vous proposez maintenant d'installer ce serveur complet.

Je tiens à signaler que je me suis beaucoup basé sur le tuto paru sur howtoforge.com "The perfect setup feisty fawn". Je tiens enfin à signaler que comme l'autorisation d'utiliser "tel quel" ce tuto m'a été refusée par l'auteur ... (!?!), j'ai re-adapté le tout en français et j'ai ajouté certains détails trouvés sur le Net qui complètent l'installation, notamment sur les forums d'ISPConfig.

1 - Choix de l'OS : Ubuntu Feisty Fawn 7.04 server sans configuration de type LAMP. Tout est fait "à la main" utltérieurement.

2- Choix des applications Le "script" d'hébergement : mon choix s'est porté sur ISPConfig (http://www.ispconfig.org/) : licence d'utilisation BSD, gratuité, simplicité d'utilisation et communauté dynamique ... Les applications de type "serveur" : Apache2 + SSL, php5, Mysql 5, Postfix, Proftpd, imap/pop3, etc. Les "+" : quota, statistiques, etc.

Aller, c'est parti :

Première commande, premier troll !
Eh oui, on va installer un bon vieux compte root !
sudo passwd root
... et donner un mot de passe au compte root !

Puis nous allons faire un petit changement important :
sudo ln -sf /bin/bash /bin/sh
/bin/sh est un lien "symlink" vers /bin/dash, mais nous nous voulons /bin/bash. La commande précédente permet de s'assurer que nous aurons bien /bin/bash...

Installons premièrement le server SSH indispensable surtout si vous êtes à distance :
$ sudo apt-get install ssh openssh-server

[UPDATE du 27/06/07] : Afin de renforcer la sécurité dudit serveur, vous pouvez modifier le /etc/ssh/sshd_config
sudo vim /etc/ssh/sshd_config

.. et ajouter la ligne suivante (ce qui interdira à root de se connecter) :
PermitRootLogin no

Configurons le fichier /etc/hosts afin qu'il ressemble à ça :
sudo vim /etc/hosts

127.0.0.1 localhost.localdomain localhost
82.244.xx.xx monserveur.serveur.com monserveur
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

ATTENTION : à adapter avec votre vraie adresse IP ! :o)

Maintenant tapez :
sudo echo monserveur.serveur.com > /etc/hostname
et rebootez votre système. Au redémarrage, essayez les commandes suivantes :
hostname
hostname -f


Les deux devraient vous retourner : monserveur.serveur.com.

Editons ou vérifions maintenant le fichier /etc/apt/sources.list et soyez sur d'avoir ajouté les sources pour universe et multiverse.
Puis tapez les commandes suivantes :
sudo apt-get update
sudo apt-get upgrade


Nous allons maintenant installer quota qui va nous permettre de limiter ou de définir une taille maxi d'hébergement.
sudo apt-get install quota

Il va falloir maintenant éditer /etc/fstab :
sudo vim /etc/fstab

... ce qui va donner quelque chose comme ca :
# /etc/fstab: static file system information.
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
proc            /proc           proc    defaults        0       0
# /dev/hda1
UUID=9e00f33f-33e5-457b-a32a-fde2911b7c67 /               ext3    defaults,errors=remount-ro,usrquota,grpquota 0       1
# /dev/hda5
UUID=39504888-6254-49ff-a738-277053b3f53d none            swap    sw              0       0
/dev/hdc        /media/cdrom0   udf,iso9660 user,noauto     0       0
/dev/hdd        /media/cdrom1   udf,iso9660 user,noauto     0       0
/dev/fd0        /media/floppy0  auto    rw,user,noauto  0       0

L'important étant de rajouter usrquota et grpquota sur la ligne de la partition principale !
Pour activer quota, il va falloir rentrer les commandes suivantes, dans l'ordre :
sudo touch /quota.user /quota.group
sudo chmod 600 /quota.*
sudo mount -o remount /
sudo quotacheck -avugm
sudo quotaon -avug


Passons à un gros morceau : le serveur DNS
sudo apt-get install bind9

Pour des raison de sécurité, nous allons configurer bind afin qu'il tourne dans un environnement chrooté.
sudo /etc/init.d/bind9 stop

Il faut éditer /etc/default/bind9 :
sudo vim /etc/default/bind9

et veillez à ce que le fichier ressemble à ça :
OPTIONS="-u bind -t /var/lib/named"
# Set RESOLVCONF=no to not run resolvconf
RESOLVCONF=yes

Créons maintenant les fichiers, les répertoires et la configuration indispensables à cet environnement chrooté de bind :
sudo mkdir -p /var/lib/named/etc
sudo mkdir /var/lib/named/dev
sudo mkdir -p /var/lib/named/var/cache/bind
sudo mkdir -p /var/lib/named/var/run/bind/run
sudo mv /etc/bind /var/lib/named/etc
sudo ln -s /var/lib/named/etc/bind /etc/bind


puis

sudo mknod /var/lib/named/dev/null c 1 3
sudo mknod /var/lib/named/dev/random c 1 8
sudo chmod 666 /var/lib/named/dev/null /var/lib/named/dev/random
sudo chown -R bind:bind /var/lib/named/var/*
sudo chown -R bind:bind /var/lib/named/etc/bind


Nous allons maintenant modifier le fichier /etc/default/syslogd afin qu'il ressemble à ça :
sudo vim /etc/default/syslogd

#
# Top configuration file for syslogd
#

#
# Full documentation of possible arguments are found in the manpage
# syslogd(8).
#

#
# For remote UDP logging use SYSLOGD="-r"
#
SYSLOGD="-a /var/lib/named/dev/log"

On redémarre le daemon :
sudo /etc/init.d/sysklogd restart

Puis on redémarre bind :
sudo /etc/init.d/bind9 start

Nous allons maintenant installer le serveur MySQL :
sudo apt-get install mysql-server mysql-client libmysqlclient15-dev

Puis nous allons éditer le fichier /etc/mysql/my.cnf :
sudo vim /etc/mysql/my.cnf

et nous allons commenter la ligne :
[...]
#bind-address = 127.0.0.1
[...]

afin que le serveur "écoute" non seulement sur le localhost mais aussi sur toutes les adresses.

On redémarre le serveur MySQL :
sudo /etc/init.d/mysql restart

Il faut maintenant "sécuriser" MySQL et mettre un mot de passe à l'utilisateur root :
sudo mysql_secure_installation

 ... et répondez aux questions !

Nous allons maintenant installer Postfix avec le SMTP-AUTH et TLS :
sudo apt-get install postfix libsasl2 sasl2-bin libsasl2-modules libdb3-util procmail

A la première question posée dans la console (Type de configuration) répondez Site Internet et à la deuxième (Nom de courrier) répondez : monserveur.serveur.com (à adapter avec votre vraie config biensur !)
Mais par défaut, postfix n'est pas assez bien "configuré". Nous allons le reconfigurer :
sudo dpkg-reconfigure postfix

et répondre aux questions suivantes :
Type de configuration? <-- Site Internet
Destinataire du courrier destiné au superutilisateur : <-- [laisser blanc, ne rien mettre]
Nom de courrier ? <-- monserveur.serveur.com
Autres destinations pour lesquelles le courrier sera accepté (champ vide autorisé) : <-- monserveur.serveur.com, localhost.serveur.com, localhost.localdomain, localhost
Faut-il forcer des mises à jour synchronisées de la file d'attente des courriels ? <-- Non
Réseaux internes : <-- 127.0.0.0/8
Taille maximale des boîtes aux lettres : <-- 0
Caractère d'extension des adresses locales : <-- +
Protocoles internet à utiliser : <-- tous (ou ipv4)

Puis, il va falloir faire un peu de configuration :
sudo postconf -e 'smtpd_sasl_local_domain ='
sudo postconf -e 'smtpd_sasl_auth_enable = yes'
sudo postconf -e 'smtpd_sasl_security_options = noanonymous'
sudo postconf -e 'broken_sasl_auth_clients = yes'
sudo postconf -e 'smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination'
sudo postconf -e 'inet_interfaces = all'
sudo echo 'pwcheck_method: saslauthd' >> /etc/postfix/sasl/smtpd.conf
sudo echo 'mech_list: plain login' >> /etc/postfix/sasl/smtpd.conf


sudo mkdir /etc/postfix/ssl
sudo cd /etc/postfix/ssl/

sudo openssl genrsa -des3 -rand /etc/hosts -out smtpd.key 1024

sudo chmod 600 smtpd.key
sudo penssl req -new -key smtpd.key -out smtpd.csr
sudo openssl x509 -req -days 3650 -in smtpd.csr -signkey smtpd.key -out smtpd.crt
sudo openssl rsa -in smtpd.key -out smtpd.key.unencrypted


sudo mv -f smtpd.key.unencrypted smtpd.key
sudo openssl req -new -x509 -extensions v3_ca -keyout cakey.pem -out cacert.pem -days 3650


sudo postconf -e 'smtpd_tls_auth_only = no'
sudo postconf -e 'smtp_use_tls = yes'
sudo postconf -e 'smtpd_use_tls = yes'
sudo postconf -e 'smtp_tls_note_starttls_offer = yes'
sudo postconf -e 'smtpd_tls_key_file = /etc/postfix/ssl/smtpd.key'
sudo postconf -e 'smtpd_tls_cert_file = /etc/postfix/ssl/smtpd.crt'
sudo postconf -e 'smtpd_tls_CAfile = /etc/postfix/ssl/cacert.pem'
sudo postconf -e 'smtpd_tls_loglevel = 1'
sudo postconf -e 'smtpd_tls_received_header = yes'
sudo postconf -e 'smtpd_tls_session_cache_timeout = 3600s'
sudo postconf -e 'tls_random_source = dev:/dev/urandom'
sudo postconf -e 'myhostname = monserveur.serveur.com' (cette ligne est à adapter à votre vraie configuration !)


 Et puis nous faisons :
sudo /etc/init.d/postfix restart

Maintenant, il y a deux ou trois trucs à changer pour que l'authentification fonctionne correctement :
sudo mkdir -p /var/spool/postfix/var/run/saslauthd

Puis il faut vérifier que /etc/default/saslauthd ressemble à ça :
sudo vim /etc/default/saslauthd

#
# Settings for saslauthd daemon
#

# Should saslauthd run automatically on startup? (default: no)
START=yes

# Which authentication mechanisms should saslauthd use? (default: pam)
#
# Available options in this Debian package:
# getpwent  -- use the getpwent() library function
# kerberos5 -- use Kerberos 5
# pam       -- use PAM
# rimap     -- use a remote IMAP server
# shadow    -- use the local shadow password file
# sasldb    -- use the local sasldb database file
# ldap      -- use LDAP (configuration is in /etc/saslauthd.conf)
#
# Only one option may be used at a time. See the saslauthd man page
# for more information.
#
# Example: MECHANISMS="pam"
MECHANISMS="pam"

# Additional options for this mechanism. (default: none)
# See the saslauthd man page for information about mech-specific options.
MECH_OPTIONS=""

# How many saslauthd processes should we run? (default: 5)
# A value of 0 will fork a new process for each connection.
THREADS=5

# Other options (default: -c)
# See the saslauthd man page for information about these options.
#
# Example for postfix users: "-c -m /var/spool/postfix/var/run/saslauthd"
# Note: See /usr/share/doc/sasl2-bin/README.Debian
OPTIONS="-c  -m /var/spool/postfix/var/run/saslauthd -r"

On redémarre saslauthd :
sudo /etc/init.d/saslauthd start

Installons maintenant tout ce qui est relatif au serveur pop, imap, etc. :
sudo apt-get install courier-authdaemon courier-base courier-imap courier-imap-ssl courier-pop courier-pop-ssl courier-ssl gamin libgamin0 libglib2.0-0

Lors de l'installation, à la première question vous répondrez non et à la deuxième simplement OK

Maintenant installons apache, php5 etc. :
sudo apt-get install libapache2-mod-php5 php5 php5-common php5-curl php5-dev php5-gd php5-idn php-pear php5-imagick php5-imap php5-json php5-mcrypt php5-memcache php5-mhash php5-ming php5-mysql php5-ps php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl

Répondez OUI à la question concernant le support Maildir ... Puis :
sudo vim /etc/apache2/mods-available/dir.conf

et on va changer la ligne DirectoryIndex comme cela :
#DirectoryIndex index.html index.cgi index.pl index.php index.xhtml
DirectoryIndex index.html index.htm index.shtml index.cgi index.php index.php3 index.pl index.xhtml

Puis on rajoute l'écoute sur le port httpd 443 :
sudo vim /etc/apache2/ports.conf

Listen 80
Listen 443

On met en place les modules apache :
sudo a2enmod ssl
sudo a2enmod rewrite
sudo a2enmod suexec
sudo a2enmod include


 ... et on relance apache :
sudo /etc/init.d/apache2 force-reload

Maintenant nous allons désactiver php de "manière globale". En effet, sous ISPConfig, vous pouvez autoriser ou non l'utilisation de php pour les sites hébergés. Cette étape n'est pas indispensable mais c'est à vous de voir si cela sera utile ou non dans votre cas ...
sudo vim /etc/mime.types

 ... et on commente les lignes relatives à php :
[...] #application/x-httpd-php phtml pht php
#application/x-httpd-php-source phps
#application/x-httpd-php3 php3
#application/x-httpd-php3-preprocessed php3p
#application/x-httpd-php4 php4
[...]

Puis :
sudo vim /etc/apache2/mods-enabled/php5.conf

# AddType application/x-httpd-php .php .phtml .php3
# AddType application/x-httpd-php-source .phps

# AddType application/x-httpd-php .php .phtml .php3
# AddType application/x-httpd-php-source .phps


On redémarre apache :
sudo /etc/init.d/apache2 restart

On installe maintenant le serveur ftp (proftpd):
sudo apt-get install proftpd ucf

A la question posée, vous choisissez de faire tourner proftpd séparément (standalone)
Au redémarrage de proftpd vous allez certainement avoir une erreur du type :
- IPv6 getaddrinfo 'server1.example.com' error: Name or service not known

On va facilement corriger ce problème :
sudo vim /etc/proftpd/proftpd.conf

 ... et vos allez asser la ligne UseIPV6 à off comme cela :
UseIPv6 off

On renforce un peu la sécurité de proftpd :
sudo vim /etc/proftpd/proftpd.conf

et on rajoute :
DefaultRoot ~
IdentLookups off
ServerIdent on "FTP Server ready."

Afin de rendre compatible le fichier de configuration de proftpd avec ISPConfig, on fait une petite manip :
sudo ln -s /etc/proftpd/proftpd.conf /etc/proftpd.conf

Puis on redémarre proftpd :
sudo /etc/init.d/proftpd restart

On installe webalizer pour les stats de fréquentation des sites :
sudo apt-get install webalizer

On installe ce qu'il faut pour synchroniser l'horloge du serveur :
sudo apt-get install ntp ntpdate

Puis on termine la config avec l'installation de quelques packages indispensables pour ISPConfig (notamment spammassassin) :
sudo apt-get install libhtml-parser-perl libdb-file-lock-perl libnet-dns-perl

Voila la config du serveur à proprement parler est terminée !!!

Installons ISPConfig :
Récupérez la dernière version stable (au 25/06/07) :
cd /home/user/Desktop
(user est à remplacer par votre vrai nom d'utilisateur ! :o) )

Puis :
wget http://ovh.dl.sourceforge.net/sourceforge/ispconfig/ISPConfig-2.2.14.tar.gz

Puis :
tar xvfz ISPConfig-2.2.14.tar.gz

Puis :
cd install_ispconfig

ATTENTION : Vous avez besoin de plusieurs packages à ce niveau afin de compiler correctement les applications comme notamment gcc, flex, libmysqlclient15-dev.

Puis lançons l'installation :
sudo ./setup

L'installateur va désormais lancer un long processus de compilation (relatif à la puissance de votre machine - 30 min environ sur un Athlon XP 2000+ et 1 Go de RAM DDR) de apache, php5, etc. Il s'agit en fait de compiler un serveur apache qui va écouter sur le port 81 pour faire tourner ISPConfig. Il n'y a pas d'interférence avec l'installation du apache "normal" qui a été installé avant. De plus, ISPConfig installe un apache1.3 alors que nous avons installés tout à l'heure un apache2.

Vous choisissez votre langage (français serait idéal en l'occurence ... !)
Vous acceptez les licences...
Mode d'installation : choisissez standard

Lorsque l'apache d'ISPConfig est compilé, un certificat SSL est créé. Par conséquent on va vous poser quelques questions... regardez les exemples fournits et adaptez à vos besoins.

ATTENTION : Aux étapes 7 et 8, "crypter la clé ..." etc. : répondez NON !!! Sans quoi ISPConfig ne pourra être redémarré que en fournissant la bonne clé !

Si la compilation échoue, l'installation s'arrête et tous les fichiers de compil en cours sont effacés ! Même le répertoire install_ispconfig disparait ! Vous devriez avoir un message d'erreur qui vous indique quel est le véritable problème ... En général, il manque une config ou un package ... Recommencez depuis le début de l'installation de ISPConfig (tar xvfz ISPConfig-2.2.14.tar.gz, etc.) puis suivez la même procédure...

Puis vers la fin de l'installation, on vous pose quelques questions :
Serveur mysql : répondez localhost
utilisateur mysql: root
mot de passe mysql : le mot de passe de root
Le nom de la base de données IPSCOnfig : ispconfigdb

Attention pour la suite choisissez bien votre adresse IP :
L'adresse IP du serveur ISPConfig : 192.168.0.1 (si vous êtes connecté à domicile, derrière une freebox en mode routeur par exmeple) sinon rentrer votre adresse IP publique (exemple : 82.244.xx.xx)
Le nom d'hote: www Le domaine : votrenomdedomaine.com (à adapter, biensur !)
Sélection du protocole (http ou https (crypté)) pour accéder à ISPConfig :
Personnellement, j'ai choisi 1 pour SSL Vous pourrez donc accéder à votre système ISPConfig à l'adresse https://www.votrenomdedomaine.com:81.

Pour la prmière fois, connectez vous avec l'identifiant admin et le mot de passe admin. Changez vite ce mot de passe dans les paramètres de ISPCOnfig ! :o)))

Et voila : c'est terminé !!!

Il ne vous reste plus qu'à vous familiariser avec l'interface, la config, etc. Dans le menu Aide, vous trouverez des tutos en francais fots bien faits. Allez les consulter pour apprendre à vous servir de toute l'interface !