IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Debian en tant que Serveur

Date de publication : 18 May 2008

Par AIC Solutions Informatiques
 

Cet article décrit l'installation et la configuration de la distribution Linux Debian pour une utilisation en tant que serveur.

            



I. Installation

  1. Télécharger l'image iso minimale ici
  2. Booter sur le CD, choisir la version du noyau (taper linux26 pour avoir un noyau de la série 2.6)
  3. Débuter l'installation
Afin d'éviter que le serveur n'obtienne son adresse IP par DHCP, tapez ceci au démarrage de l'installation de la Debian :
netcfg/disable_dhcp
Partitionnement du disque dur :

Lors de l'installation, formatter le disque dur en manuel :

  1. 1 partition /boot de 50Mb en ext3 bootable
  2. 1 parttition swap de 2 fois la taille de la mémoire vive
  3. 1 partition / de 10 GO en ext3
  4. 1 partition /var de 10 GO en ext3
  5. 1 partition /home ( ce qu'il vous reste d'espace disponible)
Renseignez les DNS de votre provider, ou celui de votre serveur DNS

Ne pas utiliser la procédure de détection de l'adresse IP par DHCP, faire la configuration du réseau à la main.

Récup Configuration IP Statique :

Modifier le fichier interfaces suivant la configuration souhaitée :
vim /etc/network/interfaces
1) pour une configuration de l'interface eth0 par le serveur DHCP, ajoutez :
auto eth0
iface eth0 inet dhcp
2) pour une configuration manuelle (ip statique) de l'interface eth1, ajoutez en adaptant les ip pour votre situation :
auto eth1
iface eth1 inet static
address 192.168.1.55
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
gateway 192.168.1.10
Vous devez ensuite redémarrer vos interfaces réseaux :
/etc/init.d/networking restart
Et rajouter le nom de domaine ainsi que vos serveurs DNS dans le fichier resolve.conf :
vim /etc/resolve.conf
search domaineName.com
nameserver 192.168.0.1
nameserver 192.168.0.2
Définissez le nom d'hôte de la machine dans le fichier hostname et appliquer le changement grâce à la commande hostname avec l'argument -F :
echo nomDeLaMachine > /etc/hostname
/bin/hostname -F /etc/hostname
Enfin modifiez le fichier hosts, pour que le système d'exploitation puisse faire la correspondance entre le nom de la machine et son addresse IP statique :
vim /etc/hosts
vim /etc/hosts

127.0.0.1       localhost
192.168.0.55    nomDeLaMachine
Pour l'installation de la distribution, ne rien installer à partir du CD-Rom, choisir l'installation par FTP ( sans choisir de packetage , nous le ferons ultérieurement )

Par défaut, la debian installe Exim4, nous le supprimerons ultérieurement. Choisir : Pas de configuration

Ensuite, il faut indiquer le nom d'un compte qui recevra les messages pour root ( c'est un alias )

L'installation de base est terminée.


II. Configuration

Afin de pouvoir installer tous ces logiciels, il faut modifier votre fichier sources.list. Voici le mien pour etch :
deb http://ftp.fr.debian.org/debian/ etch main
deb-src http://ftp.fr.debian.org/debian/ etch main

deb http://security.debian.org/ etch/updates main contrib
deb-src http://security.debian.org/ etch/updates main contrib

deb ftp://ftp.dedibox.fr/pub/dedibox/packages binary/

deb http://ftp.de.debian.org/debian etch main non-free
Quelques outils à installer avant de commencer :
apt-get install ntpdate ssh vim gnupg
apt-get install arc unrar arj autoconf automake1.7 bzip2 cabextract db4.4-util libarchive-tar-perl libarchive-zip-perl libauthen-sasl-perl libberkeleydb-perl libconvert-binhex-perl libconvert-tnef-perl libconvert-uulib-perl libdb4.4-dev libdbd-mysql-perl libdbi-perl libdigest-hmac-perl libdigest-sha1-perl libhtml-format-perl libhtml-parser-perl libhtml-tagset-perl libhtml-tree-perl libio-multiplex-perl libio-socket-ssl-perl libio-string-perl lha zoo cpio pax openssl telnet mutt libio-stringy-perl libio-zlib-perl libldap2 libmail-spf-query-perl libmailtools-perl libmime-perl libnet-dns-perl libnet-ldap-perl libnet-ph-perl libnet-server-perl libnet-snpp-perl libnet-telnet-perl libsocket6-perl libtimedate-perl libtool libunix-syslog-perl liburi-perl libwww-perl lynx lzop make ncftp nomarch perl-doc rblcheck unzip zip zlib1g-dev pyzor razor libcompress-zlib-perl psmisc re2c curl dnsutils mailx

III. Configuration de la langue Française

Entrez les commandes suivantes (si necessaire):
dpkg-reconfigure locales
puis :
dpkg-reconfigure console-data
puis, créer le fichier environment :
vim /etc/environment
Modifiez comme ceci :
LANGUAGE=fr
LC_ALL=fr_FR@euro
LANG=fr_FR@euro
LC_*=fr_FR

IV. Réglage de l'heure

ntpdate clock.fmt.he.net
ntpdate ntp.univ-lyon1.fr
/etc/init.d/hwclock.sh reload

V. L'éditeur Vim

Sous linux, ouvrez un terminal et taper :
ssh root@ip_du_serveur
Si vous devez vous loguer avec un autre port (222 par exemple sur IPCOP), tapez :
ssh -p 222 root@ip_du_serveur
Nous allons également installer un éditeur de texte. Personnellement, j'utilise vim :
apt-get install vim
Puis nous allons le personnaliser un peu, notament ajouter la coloration syntaxique : Nous allons utiliser un fichier de configuration fait par Alexis de Lattre sur son excellent site consacré à la distribution Debian.

Alexis de Lattre nous a préparé tout ce qu'il faut, voici la procédure :

Télécharger le fichier vimrc :
wget http://formation-debian.via.ecp.fr/fichiers-config/vimrc
puis :
mv vimrc /etc/vim/
Nous allons juste modifier un peu les couleurs définis dans ce fichier de configuration :

Autour de la ligne 15, indiquer :
colorscheme desert
au lieu de
colorscheme darkblue
(Je trouve ça plus clair et plus facile à lire) Voila.


VI. APT - Le système de gestion de paquet de Debian

Je vous recommande l'utilisation de l'option -s qui simule l'installation des paquets.
apt-get -s install [paquet]
Vous pouvez également utiliser
apt-cache policy [paquet]
Si vous voulez un paquet qui est une version « instable » (ou toute version qui n'est pas première priorité), vous devriez spécifiquement demander la version « instable » ou changer la priorité avant que vous l'installiez (à moins que la seule version est « instable » ou votre version en cours est « instable »). Par exemple
apt-get - t unstable install[paquet]
ou bien
apt-get install [paquet] / unstable
installera le paquet et satisfera également des dépendances de « unstable ».


VI-A. Les commandes de base

apt-cache   to search the local database for available packages.
apt-cache search [search terms]   will find packages that sound like what you want and:
apt-cache show [packagename]   will return more details on a particular package.
apt-cache showpkg [packagename]   will return more details on a particular package.
apt-cache policy [packagename]   will return which versions are available along with the priority of each version.
apt-setup   will enable you to change mirrors. The alternative is to edit   /etc/apt/sources.list   manually (which I prefer).
apt-get clean clears the local repository of all retrieved package files.
apt-get autoclean clears the local repository of retrieved package files of programs that are no longer installed.
dpkg -l [packagename] will list the version and a short description of the package we have installed.

VI-B. Configuration de la liste des paquets

On modifie le fichier /etc/apt/sources.list, mais on fait une copie de sauvegarde avant !
cp /etc/apt/sources.list /etc/apt/sources.backup 
puis on l'édite. Il doit alors ressembler à cela :
deb http://mirrors.kernel.org/debian/ etch main contrib non-free
deb-src http://mirrors.kernel.org/debian/ etch main

deb http://security.debian.org/ etch/updates main contrib
deb-src http://security.debian.org/ etch/updates main contrib

deb http://mirrors.kernel.org/debian/ unstable main contrib non-free
deb-src http://mirrors.kernel.org/debian/ unstable main

deb http://mirrors.kernel.org/debian/ testing main contrib non-free
deb-src http://mirrors.kernel.org/debian/ testing main

deb http://volatile.debian.net/debian-volatile etch/volatile main

VI-C. Modification du cache

echo 'APT::Cache-Limit "25165824";' >> /etc/apt/apt.conf

VI-D. Mise en place des clefs PGP

gpg --keyserver subkeys.pgp.net --recv-key BBE55AB3
gpg --armor --export BBE55AB3 | apt-key add -
gpg --keyserver subkeys.pgp.net --recv-key 6070D3A1
gpg --armor --export 6070D3A1 | apt-key add -
gpg --keyserver subkeys.pgp.net --recv-key 16BA136C
gpg --armor --export 16BA136C | apt-key add -
gpg --keyserver subkeys.pgp.net --recv-key 276981F4
gpg --armor --export 276981F4 | apt-key add - 
puis :
apt-get update
Voici un exemple de fichier de configuration assez complet :
# Security updates for "stable"
deb http://security.debian.org sarge/updates main contrib non-free
deb-src http://security.debian.org sarge/updates main contrib non-free

# Stable
deb http://ftp.us.debian.org/debian stable main contrib non-free
deb-src http://ftp.us.debian.org/debian stable main contrib non-free
#deb http://non-us.debian.org/debian-non-US stable/non-US main contrib non-free
#deb-src http://non-us.debian.org/debian-non-US stable/non-US main contrib non-free

## Testing
deb http://ftp.us.debian.org/debian testing main contrib non-free
deb-src http://ftp.us.debian.org/debian testing main contrib non-free
deb http://security.debian.org testing/updates main contrib non-free
deb-src http://security.debian.org testing/updates main contrib non-free
#deb http://non-us.debian.org/debian-non-US testing/non-US main contrib non-free

## Unstable
#deb http://ftp.debian.org/debian/ sid main contrib non-free

## Experimental
deb http://ftp.us.debian.org/debian/ experimental main contrib non-free

# Unofficial - non-free software
deb http://gulus.usherbrooke.ca/debian-unofficial/ etch main contrib non-free restricted

#Christian Marillat Repository
deb http://www.debian-multimedia.org unstable main

# Opera Browser - Production release
deb http://deb.opera.com/opera/ etch non-free

# Beryl
deb http://debian.beryl-project.org/ etch main
#deb http://download.tuxfamily.org/mybery...tively-stable/ ./

# VLC
deb http://download.videolan.org/pub/videolan/debian sid main

###Java 6 JRE/SDK (From Official Debian Repository) ###
deb http://ftp.bononia.it/debian etch main contrib non-free

# Official site for latest version of skype.
deb http://download.skype.com/linux/repos/debian/ stable non-free

# Google picasa
deb http://dl.google.com/linux/deb/ stable non-free
il vous faudra également installer les clefs GPG :

Pour cela, il faut prendre les huits derniers caractères générés dans l'erreur lors de la mise à jour et entrer les commandes décrites ci-dessus :

par exemple :
W: GPG error: http://gulus.usherbrooke.ca etch Release: Les signatures suivantes n'ont pas pu être vérifiées car la clé publique n'est pas disponible : NO_PUBKEY D5642BC86823D007
W: Vous pouvez lancer « apt-get update » pour corriger ces problèmes.
Ici, vous allez retenir : 6823D007

puis :
gpg --keyserver subkeys.pgp.net --recv-key 6823D007
gpg --armor --export 6823D007 | apt-key add -

VII. IPTABLE

Quelques règles iptables à mettre en place afin d'assurer la sécurité du serveur :
A faire

VII-A. Samba


VII-A-1. Samba en controleur de domaine

On commence par installer les paquets samba :
apt-get install samba samba-common samba-doc libcupsys2-gnutls10 libkrb53 winbind smbclient smbfs
Debconf vous posera alors quelques questions1). Répondez à ces questions, mais sachez que nous allons tout reprendre par la suite.

1. L'installeur vous pose les questions de base permettant de créer un fichier minimal de configuration de samba : le fichier smb.conf

La configuration de Samba étant essentiellement contenue dans un seul fichier smb.conf, nous allons le renomer2) afin d'en créer un nouveau :

On ne l'efface pas… on ne sait jamais
cd /etc/samba
mv smb.conf smb.conf.old
Nous allons également installer la prise en charge des quotas :
apt-get install quota
Modifiez ensuite votre fichier fstab :
vim /etc/fstab
# /etc/fstab: static file system information.
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
proc            /proc           proc    defaults        0       0
/dev/hda1       /               ext3    defaults,errors=remount-ro,usrquota,grpquota  0       1
/dev/hda9       /home           ext3    defaults,usrquota,grpquota        0       2
/dev/hda8       /tmp            ext3    defaults        0       2
/dev/hda5       /usr            ext3    defaults        0       2
/dev/hda6       /var            ext3    defaults        0       2
/dev/hda7       none            swap    sw              0       0
/dev/hdc        /media/cdrom0   iso9660 ro,user,noauto  0       0
/dev/hdd        /media/cdrom1   iso9660 ro,user,noauto  0       0
/dev/fd0        /media/floppy0  auto    rw,user,noauto  0       0
Si vous devez accédez à des ressources partagées sur le réseau vous devez aussi les rajouter dans ce fichier pour pouvoir monter plus facilement ces partages :
/192.168.0.20/partage     /mnt/PointDeMontage     smbfs rw,auto,fmask=777,dmask=777,guest   0   0
Adaptez le protocole utilisé à votre cas, ainsi que les droits qui seront mis sur vos fichiers/dossiers.

Puis entrez les commandes suivantes :
touch /quota.user /quota.group 
chmod 600 /quota.* 
mount -o remount /  
touch /home/quota.user /home/quota.group
chmod 600 /home/quota.*
mount -o remount /home 
quotacheck -avugm 
quotaon -avug
Quelques explications :

  • Création de deux fichiers (quota.user et quota.group) à la racine
  • Définition des droits à 600 pour ces deux fichiers
  • On remonte la partition principale
  • On crée deux fichiers dans le repertoire /home
  • Définition des droits à 600 pour ces deux fichiers
  • On remonte la partition /home
  • Vérification de la mise en place des quotas pour / et /home
  • On active les quotas
Les fichiers de configuration :
## Fichier smb.conf écrit par p.Tanzilli - AIC Solutions Informatiques

[global]

   workgroup = domaine-test
   netbios name = serveur-test
   server string = %h server (samba %v)
## A modifier en fonction du reseau local donné

   hosts allow = 127. 192.168.1.

   printcap name = /etc/printcap
   load printers = yes

#Les logs
   log file = /var/log/samba/log.%m
   max log size = 50
   log level = 3

#Backend de la base de données tdbsam
   passdb backend = tdbsam

   security = user
# table de conversion nom windows -> nom unix (ex : administrateur ->root)
   username map = /etc/samba/smbusers
   name resolve order = wins bcast hosts lmhost
   domain logons = yes
   preferred master = yes
   wins support = yes
   local master = yes
   os level = 95
   domain master = yes
   wins proxy = yes
   dns proxy = no 
   time server=yes

# Default logon
   logon drive = H:
   logon script = scripts/%U.bat
   logon path = \\%L\profiles\%U

 # Useradd scripts
   add user script = /usr/sbin/useradd -m %u
   delete user script = /usr/sbin/userdel -r %u
   add group script = /usr/sbin/groupadd %g
   delete group script = /usr/sbin/groupdel %g
   add user to group script = /usr/sbin/usermod -G %g %u
   add machine script = /usr/sbin/useradd -s /bin/false/ -d /var/lib/nobody %u
   idmap uid = 15000-20000
   idmap gid = 15000-20000

  # Synchroniser les mots de passe Samba avec les mots de passe Linux
   passwd program = /usr/bin/passwd %u
   passwd chat = *Enter\snew\sUNIX\spassword:* %n\n *Retype\snew\sUNIX\spassword:* %n\n .
   passwd chat debug = yes
   unix password sync = yes

#============================ Share Definitions ==============================
[homes]
   comment = Repertoires personnels
   browseable = yes
   writable = yes
   path = %H
   create mode = 0600
   directory mode = 0700
   valid users = %S
   invalide users = invite

[printers]
comment = All Printers
path = /var/spool/samba
browseable = no
guest ok = no
writable = no
printable = yes
public = yes

[netlogon]
comment = Network Logon Service
path = /home/samba/netlogon
admin users = Administrator
valid users = %U
read only = no

[public]
comment = Acces Public
path = /home/public
public = yes
writable = yes
printable = no
browseable = yes
guest ok = yes

[profiles]
comment = profile share
path = /home/samba/profiles
valid users = %U
create mode = 0600
directory mode = 0700
writable = yes
browsable = no
profile acls = yes
Attention : le nom “netbios” ou “netbios name” doit être le même que le nom de votre serveur. Si vous avez un doute, tapez :
hostname

Quelques explications importantes :

Pour le mappage des unités réseaux, on placera les scripts dans le répertoire suivant :

/home/samba/netlogon/scripts

Les scripts doivent porter le nom des utilisateurs, comme par exemple : patrick.bat pour l'utilisateur patrick.

Exemple de script : (patrick.bat)
#-----------------------------------------------------------------------#
#                                                                       #
# Description : Script de demarrage lors d'une connexion a un domaine   #
# OS          : Windows                                                 #
# Version     : 0.1.0                                                   #
# Author      : Patrick Tanzilli <p.tanzilli CHEZ aic-informatique.com>    #
# Web site    : http://www.aic-informatique.com/                               #
#                                                                       #
#-----------------------------------------------------------------------#
# Efface l'ecran
echo off

# Montage du homedir de l'utilisateur
#net use z: \\%L\home\%USERNAME%

# Montage de des lecteurs reseaux dans le Poste de Travail
net use y: \\%L\public
#net use x: \\%L\private

#Efface l'ecran
cls

# Message de bienvenue
echo ************************
echo * Bienvenue sur le serveur AIC *
echo ************************

# Synchronisation de l'horloge du client avec le serveur
echo.
echo Mise a l'heure du poste client
net time \\serveur-test /set /yes
On crée ensuite les répertoires netlogon et profiles :
mkdir /home/samba
mkdir /home/samba/netlogon
mkdir /home/samba/profiles
mkdir /var/spool/samba
chmod 777 /var/spool/samba/
chown -R root:users /home/samba/
chmod -R 771 /home/samba/
puis on redemarre samba :
/etc/init.d/samba restart
Editer le fichier /etc/nsswitch.conf. Changer :
hosts: files dns
pour :
hosts: files wins dns
Ajouter ensuite vos ordinateurs au fichier /etc/hosts
192.168.x.x serveur-test
192.168.x.x workstation1
192.168.x.x workstation2
Bien sur, c'est un peu compliqué si vous disposez d'un serveur DHCP.. mais je n'ai pas fait l'essai sans renseigner le fichier hosts. Si vous avez des retours d'expérience, n'hésitez pas à me le dire en m'envoyant un Email

on doit ensuite ajouter l'utilisateur root à la base de données de mots de passe samba :
smbpasswd -a root
Cela est nécessaire pour pouvoir intégrer des postes Windows au domaine.

On crée ensuite le fichier /etc/samba/smbusers et on ajoute la ligne suivante (en une seule commande) :
echo "root = Administrator" > /etc/samba/smbusers
Cette petite ruse permet d'utiliser le nom Windows “administrator” à la place de “root” quand on intègre une machine dans le domaine.

On va ensuite tester tout ça :
smbclient -L localhost -U%
Vous devez obtenir quelque chose comme ça :
Domain=[DOMAINE-TEST] OS=[Unix] Server=[Samba 3.0.14a-Debian]
dos_clean_name []

        Sharename       Type      Comment
        ---------       ----      -------
        homes           Disk      Repertoires personnels
        netlogon        Disk      Network Logon Service
        public          Disk      Acces Public
        IPC$            IPC       IPC Service (serveur-test server)
        ADMIN$          IPC       IPC Service (serveur-test server)
        lp              Printer   Generic dot-matrix printer entry
Connecting to 127.0.0.1 at port 139
Domain=[DOMAINE-TEST] OS=[Unix] Server=[Samba 3.0.14a-Debian]
dos_clean_name []

        Server               Comment
        ---------            -------
        SERVEUR-TEST         serveur-test server

        Workgroup            Master
        ---------            -------
        DOMAINE-TEST         SERVEUR-TEST
puis on précise les différents groupes du domaine pour Windows :
net groupmap add ntgroup="Domain Admins" unixgroup=root type=domain
net groupmap add ntgroup="Domain Users" unixgroup=users type=domain
net groupmap add ntgroup="Domain Guests" unixgroup=nogroup type=domain
Pour modifier:
net groupmap modify ntgroup="Domain Admins" unixgroup=root
net groupmap modify ntgroup="Domain Users" unixgroup=users
net groupmap modify ntgroup="Domain Guests" unixgroup=nogroup
Pour vérifier la liste des groupes mappés:
net groupmap list
Il ne reste plus qu'à intégrer les utilisateurs au domaine. Ici, il est inutile de créer un utilisateur “machine”, comme dans certaines configurations, le script automatique s'en chargera.

L'utilisateur est crée dans le groupe users.

Création d'un utilisateur du domaine :
useradd user1 -m -G users
smbpasswd -a user1

VII-B. Un serveur LAMP


VII-B-1. Mise en place et configuration d'un serveur LAMP : Linux (Debian 3.1r2) + Apache 1.3.33 + Mysql 5 + PHP 5 + PhpMyadmin

Nous allons, dans ce tutoral, mettre en place un serveur Lamp. Ce serveur permettre d'héberger plusieurs sites web différents, grâce à l'utilisation des hôtes virtuels avec Apache.

Ce tuto a été réalisé sous Debian Sarge, mais vous pourrez sans doute l'adapter pour votre distribution (non testé pour le moment). Si vous avez des retours d'expérience, n'hésitez pas à me le dire en m'envoyant un message ou en laissant un commentaire sur cette page.


VII-B-1-a. Installation d'Apache 1.3.33

Comme d'habitude sur Debian, un simple apt-get suffira pour installer l'ensemble :-)
apt-get install apache
Installation de modules optionnels :
apt-get install apache-ssl apache-perl libapache-mod-auth-mysql
Debconf vous posera quelques questions :

Activer suexec : non Paramétrage SSL : répondez simplement aux questions posées 3)

3.Génération du certificat SSL

Si vous souhaitez connaitre la liste des packages disponibles pour apache, tapez :
apt-cache search apache | less

VII-B-1-b. Installation de Php 5

Si vous souhaitez installer Php 5 sur Debian Sarge, il va falloir modifier la liste des dépots Debian. De base, les dépots pour Php ne concernent que la version 4. Donc, éditez le fichier sources.list en tapant :
vim /etc/apt/sources.list
Rajoutez les lignes suivantes :
deb http://packages.dotdeb.org stable all
deb-src http://packages.dotdeb.org stable all
Avec ViM, tapez “inser” pour pouvoir écrire dans le fichier, puis tapez “echap” pour revenir en mode command, puis tapez ”:wq” pour sauvegarder vos modifications et quitter.

Il va falloir maintenant mettre à jour nos dépots Debian. Pour celà, on tapera :
apt-get update
Puis :
apt-get install php5 php5-dev php5-gd php5-mysql php5-pear libapache-mod-php5

VII-B-1-c. Installation de Mysql

apt-get install mysql-server-5.0 

VII-B-1-d. Configuration d'Apache

La configuration d'Apache 1.3 se fait principalement dans le fichier httpd.conf Editez ce fichier :
vim /etc/apache/httpd.conf
Cherchez la ligne : user : www-data

Avec vim, tapez :
/www-data
pour rechercher le texte. Une fois trouvé, passez en mode édition en tapant sur la touche “inser”

Modifiez ensuite les deux lignes suivantes :
User www-data
Group www-data
par :

User nobody
Group nobody
Voir ici pour les commandes vim

N'oubliez pas de créer le groupe nobody :)
groupadd nobody
Relancer Apache :
/etc/init.d/apache restart
Bon, à ce stade, vous devez pouvoir obtenir la page d'accueil du projet Apache en tapant l'URL de votre serveur dans votre naviguateur.

Si cela ne fonctionne pas, il va falloir tout d'abord vérifier qu'Apache tourne bien. Pour cela, taper :
ps aux | grep apache
Vous devriez obtenir :
root      2636  0.0  3.3 21668 8636 pts/0    S    08:42   0:00 /usr/sbin/apache
root      3891  0.0  1.1  6024 3040 pts/0    S    08:44   0:00 /usr/sbin/apache-ssl
www-data  3892  0.0  0.3  4340  996 pts/0    S    08:44   0:00 /usr/lib/apache-ssl/gcache 33 /var/run/gcache_port
www-data  3893  0.0  1.1  6160 3036 pts/0    S    08:44   0:00 /usr/sbin/apache-ssl
www-data  3894  0.0  1.1  6160 3036 pts/0    S    08:44   0:00 /usr/sbin/apache-ssl
www-data  3895  0.0  1.1  6160 3036 pts/0    S    08:44   0:00 /usr/sbin/apache-ssl
www-data  3896  0.0  1.1  6160 3036 pts/0    S    08:44   0:00 /usr/sbin/apache-ssl
www-data  3897  0.0  1.1  6160 3036 pts/0    S    08:44   0:00 /usr/sbin/apache-ssl
nobody   12717  0.0  3.4 21800 8772 pts/0    S    09:13   0:00 /usr/sbin/apache
nobody   12718  0.0  3.3 21800 8716 pts/0    S    09:13   0:00 /usr/sbin/apache
nobody   12719  0.0  3.4 21800 8764 pts/0    S    09:13   0:00 /usr/sbin/apache
nobody   12720  0.0  3.3 21668 8652 pts/0    S    09:13   0:00 /usr/sbin/apache
nobody   12721  0.0  3.3 21668 8652 pts/0    S    09:13   0:00 /usr/sbin/apache
nobody   12722  0.0  3.3 21668 8656 pts/0    S    09:14   0:00 /usr/sbin/apache
nobody   12723  0.0  3.3 21668 8656 pts/0    S    09:14   0:00 /usr/sbin/apache
nobody   12724  0.0  3.3 21668 8656 pts/0    S    09:14   0:00 /usr/sbin/apache
On voit bien, ici, qu'Apache tourne…

S'il ne tourne pas, essayez de le lancer à la main :
/etc/init.d/apache start

Bon, nous allons maintenant passer à l'installation de PhpMyadmin ( A faire)


VII-B-2. Apache 2


VII-B-2-a. Installation d'Apache 2

apt-get install apache2-mpm-prefork apache2-doc lynx ca-certificates

VII-B-2-b. Sécurisation d'Apache 2

On crée un fichier local_configs.conf dans le répertoire suivant : /etc/apache2/conf.d

On place le code suivant dans ce fichier :
# Tighten access to the file system.
<Directory />
# Forbid default access to file system locations
Order Deny,Allow
Deny from all
# prevent use of .htaccess files in all directories
# apart from those specifically enabled.
AllowOverride None
</Directory>

# Limit available info about this server.
ServerSignature Off
ServerTokens production
N'oubliez pas de relancer Apache :
/etc/init.d/apache2 restart

VII-B-2-c. Name-based virtual hosting

Nous allons travailler sur les “virtual hosts”. Cela signifie que nous allons héberger plusieurs sites avec une seule adresse IP.

Nous allons maintenant créer un répertoire portant le nom de notre premier domaine
mkdir /var/www/medixcom.org
puis on crée un répertoire accessible au public :
mkdir /var/www/medixcom.org/docs
Puis, on crée le fichier index.html à l'intérieur :
vim /var/www/medixcom.org/docs/index.html
Contenu du fichier index :
<html>
<head>
<title>medixcom.org index page test</title>
</head>
  <body>
      <h1>Hello World!</h1>
  </body>
</html>
Passons maintenant à la création du fichier virtual host :
vim /etc/apache2/sites-available/medixcom.org
Contenu du fichier :
<VirtualHost * >
        #Basic setup
        ServerAdmin webmaster@medixcom.org
        ServerName www.medixcom.org
        ServerName medixcom.org
        DocumentRoot /var/www/medixcom.org/docs

        <Directory /var/www/medixcom.org/docs>
                Order Deny,Allow
                Allow from all
                # Don't show indexes for directories
                Options -Indexes
        </Directory>
</VirtualHost>
Puis on active le site :
a2ensite medixcom.org
et on relance apache2 :
/etc/init.d/apache2 reload
Note :

Pour désctiver le site, taper :
a2dissite

VII-B-2-d. Installation de PHP5

Modifier votre fichier apt :
vim /etc/apt/sources.list
puis compléter le fichier :
# Use dotdeb.org for LAMP related packages not available in Sarge
deb http://dotdeb.pimpmylinux.org/ stable all
deb-src http://dotdeb.pimpmylinux.org/ stable all
Ne pas oublier :
apt-get update
puis :
apt-get install libapache2-mod-php5

VII-B-2-e. Sécurisation de PHP5

On sauvegarde le fichier php.ini original :
mv /etc/php5/apache2/php.ini /etc/php5/apache2/php.ini.original
Remarque : Avec certains serveurs dédiés un peu “remaniés”, vous pouvez avoir le fichier php.ini dans un répertoire apache et non apache2

puis on copie le fichier recommandé par php :
cp /usr/share/doc/php5-common/examples/php.ini-recommended /etc/php5/apache2/php.ini
On édite ensuite ce fichier php.ini :
vim /etc/php5/apache2/php.ini
On modifie le code afin d'avoir :
expose_php = off
On va ensuite modifier le fichier local_configs.conf :
vim /etc/apache2/conf.d/local_configs.conf
Ce qui donne :
# Tighten access to the file system.
<Directory />
# Forbid default access to file system locations
Order Deny,Allow
Deny from all
# prevent use of .htaccess files in all directories
# apart from those specifically enabled.
AllowOverride None
</Directory>

# Limit available info about this server.
ServerSignature Off
ServerTokens production

# Hide all files with the .inc extension.
<Files *.inc>
Order allow,deny
Deny from all
</Files>
Cela permet de rendre les fichiers inc invisibles


VII-B-2-f. Installation de Mysql

apt-get install mysql-server
Mysql vous demande alors un mot de passe root. Puis on vous pose la question concernant la sécurisation des mots de passe. J'ai choisi de répondre “non” à cette question, car j'ai eu quelques problèmes avec cette fonction.

Si vous voulez changer le mot de passe root pour mysql :
/usr/bin/mysqladmin -u root password 'secret'
Puis :
apt-get install php5-mysql
On va tester mysql :
mysql -u root -p
entrer le mot de passe root

Vous obtenez : mysql>

entrer les commandes suivantes :
mysql> CREATE DATABASE mydomain;
Query OK, 1 row affected (0.00 sec)

mysql> USE mydomain;
Database changed

mysql> CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20), species VARCHAR(20), sex CHAR(1), birth DATE, death DATE);
Query OK, 0 rows affected (0.01 sec)

mysql> INSERT INTO pet VALUES ('Puffball','Diane','hamster','f','1999-03-30',NULL);
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO pet VALUES ('Libby','Diane','dog','f','2001-04-15',NULL);
Query OK, 1 row affected (0.00 sec)

mysql> SELECT * FROM pet;
+----------+-------+---------+------+------------+-------+
| name     | owner | species | sex  | birth      | death |
+----------+-------+---------+------+------------+-------+
| Puffball | Diane | hamster | f    | 1999-03-30 | NULL  |
| Libby    | Diane | dog     | f    | 2001-04-15 | NULL  |
+----------+-------+---------+------+------------+-------+
2 rows in set (0.00 sec)

mysql> quit
Bye

VII-B-2-g. Installation de Phpmyadmin

Télécharger Phpmyadmin ici

On crée un répertoire :
mkdir /usr/local/php5
Mettez-y l'archive téléchargée.

puis, décompactez l'archive :
cd /usr/local/php5
tar xvfz *.gz
On va également renommer le dossier crée5) :

5.c'est quand même plus simple, non ?
mv phpMyAdmin-2.9.2-all-languages-utf-8-only phpmyadmin
On va ensuite modifier le fichier config.inc.php, seulementvoila, il n'y est pas …. on va donc utiliser le fichier config.default.php
cd /usr/local/php5/phpmyadmin/libraries
cp config.default.php config.inc.php
Petite chose à faire avant :
apt-get install libapache2-mod-php5
Cela permettra d'interpreter les scripts php dans un navigateur

Il faut maintenant déplacer le fichier config.inc.php dans le répertoire /usr/local/php5/phpmyadmin (remonter d'un cran)

Modifiez les lignes suivantes :6)

6.On utilise la methode cookie car le mot de passe est crypté
$cfg['PmaAbsoluteUri'] = 'http://www.medixcom.org/phpmyadmin';
$cfg['blowfish_secret'] = 'aic_solutions_informatiques';
$cfg['Servers'][$i]['auth_type']     = 'cookie';    // Authentication method (valid choices: config, http, HTTP or cookie)
$cfg['Servers'][$i]['user']          = 'root';      // MySQL user
On peut aussi travailler en http :
$cfg['PmaAbsoluteUri'] = 'http://www.medixcom.org/phpmyadmin';
$cfg['blowfish_secret'] = 'aic_solutions_informatiques';
$cfg['Servers'][$i]['auth_type']     = 'http';    // Authentication method (valid choices: config, http, HTTP or cookie)
$cfg['Servers'][$i]['user']          = '';      // MySQL user

VII-B-3. Configuration d'Apache pour afficher Phpmyadmin :

Editer le fichier /etc/apache2/sites-available/medixcom.org :

Rajouter la section suivante :
# Provide an alias to phpmyadmin
Alias /phpmyadmin /usr/local/php5/phpmyadmin
<Directory /usr/local/php5/phpmyadmin>
        # Restrict phpmyadmin access to just my worksation
        Order Deny,Allow
        Deny from all
        Allow from 192.168.1.x
</Directory>
Cela permet de restreindre l'accès à phpmyadmin seulement à ma machine.

On se logue ensuite à l'adresse suivante :
http://www.medixcom.org/phpmyadmin
Vous devrez indiquer l'identifiant et le mot de passe root


VIII. Postfix + Mysql + Spamassassin + clamav + virtual-host



VIII-A. Utilisation de postfix avec gestion des quotas (Apparament, ne fonctionne plus...)

On peut utiliser des paquets Debian tout fait pour utiliser postfix avec la gestion des quotas:

Modifiez votre fichier sources.list et ajoutez :
#postfix VDA
deb http://debian.home-dn.net/debian etch/
deb-src http://debian.home-dn.net/debian etch/
puis :
apt-get update
puis:
apt-get install postfix postfix-mysql postfix-doc mysql-client mysql-server courier-authdaemon courier-authlib-mysql courier-pop courier-pop-ssl courier-imap courier-imap-ssl libsasl2 libsasl2-modules libsasl2-modules-sql sasl2-bin libpam-mysql openssl phpmyadmin
Répondez aux questions suivantes :
Enable suExec? <-- Yes
Create directories for web-based administration ? <-- No
General type of configuration? <-- Internet site
Where should mail for root go? <-- NONE
Mail name? <-- server1.example.com
Other destinations to accept mail for? (blank for none) <-- server1.example.com, localhost, localhost.localdomain
Force synchronous updates on mail queue? <-- No
SSL certificate required <-- Ok
Install Hints <-- Ok
Which web server would you like to reconfigure automatically? <-- apache, apache2
Do you want me to restart apache now? <-- Yes
Arrêtez-vous ici si vous avez décidé d'installer Postfix avec les paquets Debian patchés avec les quotas


VIII-B. Postfix avec patch de gestion des quotas

On va maintenant appliquer un patch permettant de gérer les quotas dans Postfix :
apt-get install build-essential dpkg-dev fakeroot debhelper libdb4.2-dev libgdbm-dev libldap2-dev libpcre3-dev libssl-dev libsasl2-dev postgresql-dev po-debconf dpatch libmysqlclient15-dev libcdb-dev tinycdb
cd /usr/src
apt-get source postfix
wget http://web.onda.com.br/nadal/postfix/VDA/postfix-2.3.3-vda.patch.gz
gunzip postfix-2.3.3-vda.patch.gz
cd postfix-2.4.3
patch -p1 < ../postfix-2.3.3-vda.patch

apt-get install lsb-release libdb4.3-dev

dpkg-buildpackage
cd ..
dpkg -i postfix_2.3.3-1_i386.deb
dpkg -i postfix-mysql_2.3.3-1_i386.deb
Bon, il s'agit de la méthode “hard” puisqu'il faut recompiler Postfix.


VIII-B-1. Configuration de la base de données

Si vous n'avez pas encore défini de mot de passe root pour mysql, faites-le maintenant :
mysqladmin -u root password motdepassemysqlroot
On se connecte ensuite à mysql en root :
mysql -u root -p
On crée la base de données “mail”:
CREATE DATABASE `mail`;
Nous allons maintenant créer un administrateur de la base de données que nous allons construire. Nous l'appellerons : mail_admin (ou autre si vous voulez..)
mysql> GRANT SELECT, INSERT, UPDATE, DELETE ON mail.* TO 'mail_admin'@'localhost' IDENTIFIED BY 'votre_mot_de_passe';
puis :
flush privileges;

VIII-B-2. Création des tables:

mysql> use mail;
-- 
-- Structure de la table `domaine`
-- 
CREATE TABLE `domaine` (
  `nom_domaine` varchar(255) NOT NULL default '',
  `max_boites` INT,
  `actif` tinyint(1) NOT NULL default '1',
  PRIMARY KEY  (`nom_domaine`)
) ENGINE=MyISAM COMMENT='Postfix Admin - Domaines Virtuels';

-- 
-- Structure de la table `boites`
-- 
CREATE TABLE `boites` (
  `email` varchar(255) NOT NULL default '',
  `password` varchar(255) NOT NULL default '',
  `quota` int(10) NOT NULL default '0',
  `actif` tinyint(1) NOT NULL default '1',
  `imap` tinyint(1) NOT NULL default '1',
  `pop3` tinyint(1) NOT NULL default '1',
  `nom_boite` VARCHAR(40),
  PRIMARY KEY  (`email`)
) ENGINE=MyISAM COMMENT='Postfix Admin - Boites Emails Virtuelles';

-- 
-- Structure de la table `alias`
-- 
CREATE TABLE `alias` (
  `source` varchar(255) NOT NULL default '',
  `destination` text NOT NULL,
  `actif` tinyint(1) NOT NULL default '1',
  PRIMARY KEY  (`source`)
) ENGINE=MyISAM COMMENT='Postfix Admin - Alias Virtuels';
puis on quitte mysql :
mysql>quit;
Puis, on redemarre mysql:
/etc/init.d/mysql restart
Attention : Ne pas oublier de mettre le mot de passe des utilisateurs en crypté dans la base de données


VIII-B-3. Les fichiers de configuration:


VIII-B-3-a. Fichiers de configuration Mysql

Le fichier my.cnf :
vim /etc/mysql/my.cnf
Vous devez avoir :
bind-address            = 127.0.0.1
#skip-networking
On redemarre mysql

Nous allons maintenant créer les cinq fichiers de configuration qui nous permettrons de mapper les tables de la base de données:
vim /etc/postfix/mysql-virtual_domains.cf
hosts = 127.0.0.1
user = mail_admin
password = xxxx
dbname = mail
table = nom_domaine
select_field = 'virtual'
where_field = nom_domaine
additional_conditions = AND actif=1
vim /etc/postfix/mysql-virtual_mailboxes.cf
hosts = 127.0.0.1
user = mail_admin
password = xxxx
dbname = mail
table = boites
select_field = CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/')
where_field = email
additional_conditions = AND actif=1
vim /etc/postfix/mysql-virtual_aliases.cf
hosts = 127.0.0.1
user = mail_admin
password = xxxx
dbname = mail
select_field = destination
table = alias
where_field = source
additional_conditions = AND actif=1
vim mysql-virtual_aliases_mailbox.cf
hosts = 127.0.0.1
user = mail_admin
password = xxxx
dbname = mail
select_field = email
table = boites
where_field = email
additional_conditions = AND actif=1
vim mysql-virtual_mailbox_limit_maps.cf
hosts = 127.0.0.1
user = mail_admin
password = xxxx
dbname = mail
select_field = quota
table = boites
where_field = email
Il faut rendre ces fichiers accessible à l'utilisateur postfix et a personne d'autre car les mots de passes ne sont pas cryptés.
chgrp postfix /etc/postfix/mysql-virtual_*.cf
chmod u=rw,g=r,o= /etc/postfix/mysql-virtual_*.cf
Redemarrer mysql

Nous allons maintenant créer un utilisateur vmail avec pour home directory : /home/vmail Cet utilisateur va stoquer toutes les boites mail, ce sera le seul propriétaire de toutes les boites
groupadd -g 5000 vmail
useradd -g vmail -u 5000 vmail -d /home/vmail -m

VIII-C. Problèmes de connexion sql avec mysql-client 4.1:

Si vous rencontrez une erreur de connexion avec la version de mysql-client (4.1), faites les modifications suivantes :
mysql -u root -p
mysql>SET PASSWORD FOR 'mail_admin'@'localhost' = OLD_PASSWORD('votre_mot_de_passe');
mail_admin étant mon utilisateur sql pour la gestion des bases mail.


VIII-D. Fichiers de configuration de Postfix


VIII-D-1. Fichier main.cf:

vim /etc/postfix/main.cf
# See /usr/share/postfix/main.cf.dist for a commented, more complete version

smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no

# appending .domain is the MUA's job.
append_dot_mydomain = no

# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h

myhostname = vds518.sivit.org
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
##################################################################
#Attention : Ne Pas mettre le domaine principal dans mydestination
#Mettre le domaine principal en virtual dans la base Mysql
##################################################################
mydestination = vds518.sivit.org, localhost, localhost.sivit.org, localhost.localdomain
relay_domains = $mydestination
#On relay par mon provider pour ceux qui sont réticents avec les ip fixes (genre AOL, Wanadoo...)
relayhost =
#Les IP autorisées à se connecter sur le serveur pour l'envoi de mails
mynetworks = 127.0.0.0/8
#On utilise procmail pour le filtrage des mails
mailbox_command = procmail -a "$EXTENSION"
#pas de taille limite pour les boites
mailbox_size_limit = 0
recipient_delimiter = +
#on écoute sur toutes les interfaces réseaux
inet_interfaces = all
#mappage des fichiers que nous avons écrits avec les tables de la base de données Mysql
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual_aliases.cf,mysql:/etc/postfix/mysql-virtual_aliases_mailbox.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual_domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual_mailboxes.cf

virtual_create_maildirsize = yes
virtual_mailbox_extended = yes
virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql-virtual_mailbox_limit_maps.cf
virtual_mailbox_limit_override = yes
virtual_maildir_limit_message = "Desole, la boite email de l'utilisateur est pleine, essayez plus tard."
virtual_overquota_bounce = yes

virtual_mailbox_base = /home/vmail
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000

#### Authentification SASL ###########################
smtpd_use_tls = yes
smtpd_tls_cert_file = /etc/postfix/smtpd.cert
smtpd_tls_key_file = /etc/postfix/smtpd.key
smtpd_sasl_security_options = noanonymous
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes

###Restrictions pour limiter le spam
smtpd_client_restrictions = permit_mynetworks,
	hash:/etc/postfix/access, 
	warn_if_reject reject_unknown_client,
	reject_unauth_pipelining, 
	reject_rbl_client bl.spamcop.net,
	reject_rbl_client list.dsbl.org,
	reject_rbl_client sbl.spamhaus.org

smtpd_helo_restrictions = permit_mynetworks, reject_invalid_hostname,
	check_helo_access hash:/etc/postfix/access_helo,
	reject_non_fqdn_hostname

smtpd_sender_restrictions =
	reject_unknown_sender_domain, reject_unlisted_sender,
	reject_non_fqdn_sender,
	reject_rbl_client bl.spamcop.net,
	reject_rbl_client list.dsbl.org,
	reject_rbl_client sbl.spamhaus.org

smtpd_recipient_restrictions = permit_mynetworks,
	permit_sasl_authenticated, 
	reject_unauth_destination, reject_unlisted_recipient,
	reject_non_fqdn_recipient,
	check_policy_service inet:127.0.0.1:60000,
	permit

content_filter = amavis:[127.0.0.1]:10024
receive_override_options = no_address_mappings
Il faut également penser à créer la base access_helo
touch /etc/postfix/access_helo
postmap /etc/postfix/access_helo
Relancer Postfix

Puis, faites un postfix check pour voir si on a pas fait de fautes dans les fichiers de conf


VIII-D-2. Fichier master.cf

Ajouter ceci à la fin du fichier :
amavis unix - - - - 2 smtp
	-o smtp_data_done_timeout=1200
	-o smtp_send_xforward_command=yes

127.0.0.1:10025 inet n - - - - smtpd
	-o content_filter=
	-o local_recipient_maps=
	-o relay_recipient_maps=
	-o smtpd_restriction_classes=
	-o smtpd_client_restrictions=
	-o smtpd_helo_restrictions=
	-o smtpd_sender_restrictions=
	-o smtpd_recipient_restrictions=permit_mynetworks,reject
	-o mynetworks=127.0.0.0/8
	-o strict_rfc821_envelopes=yes
	-o receive_override_options=no_unknown_recipient_checks,no_header_body_checks

VIII-E. Création du certificat TLS:

openssl req -new -outform PEM -out /etc/postfix/smtpd.cert -newkey rsa:2048 \
-nodes -keyout /etc/postfix/smtpd.key -keyform PEM -days 3650 -x509
Répondez aux question. Attention, il faut indiquer le nom “hostname” de votre serveur à la question “common name”

Puis, ajustez les permissions :
chmod u=rw,g=r,o= /etc/postfix/smtpd.key
chown root:postfix /etc/postfix/smtpd.key

VIII-F. Configuration de POP3 et IMAP:

Editer le fichier : /etc/courier/authdaemonrc

indiquez dans le fichier:
authmodulelist="authmysql"
puis editez le fichier : /etc/courier/authmysqlrc

indiquez:
===== Comment redéfinir de force le mot de passe de root ? =====
Si vous avez perdu votre mot de pass Root pour MySQL, suivez ces quelques étapes :

On stoppe le serveur MySQL :
  sudo /etc.init.d/mysql stop

On se connecte au serveur sans tenir compte des privilèges utilisateurs :
  /usr/bin/mysqld_safe --skip-grant-tables &
  mysql -h localhost

Nous allons utiliser la table contenant les paramètres de MySQL :
  use mysql

On met en place le nouveau mot de passe :
  update user set password = password('<votre_mot_de_passe>') where user = 'root' and host='localhost';
(remplacez ''<votre_mot_de_passe>'' par le mot de passe de votre choix)

On quitte le prompt de MySQL :
  quit

On redémarre le serveur MySQL en utilisation normale :
  sudo /etc/init.d/mysql restart
MYSQL_SERVER 127.0.0.1
MYSQL_USERNAME mail_admin
MYSQL_PASSWORD *******
MYSQL_PORT 0===== Comment redéfinir de force le mot de passe de root ? =====
Si vous avez perdu votre mot de pass Root pour MySQL, suivez ces quelques étapes :

On stoppe le serveur MySQL :
  sudo /etc.init.d/mysql stop

On se connecte au serveur sans tenir compte des privilèges utilisateurs :
  /usr/bin/mysqld_safe --skip-grant-tables &
  mysql -h localhost

Nous allons utiliser la table contenant les paramètres de MySQL :
  use mysql

On met en place le nouveau mot de passe :
  update user set password = password('<votre_mot_de_passe>') where user = 'root' and host='localhost';
(remplacez ''<votre_mot_de_passe>'' par le mot de passe de votre choix)

On quitte le prompt de MySQL :
  quit

On redémarre le serveur MySQL en utilisation normale :
  sudo /etc/init.d/mysql restart
MYSQL_OPT 0
MYSQL_DATABASE mail
MYSQL_USER_TABLE boites
MYSQL_CRYPT_PWFIELD password
MYSQL_UID_FIELD 5000
MYSQL_GID_FIELD 5000
MYSQL_LOGIN_FIELD email
MYSQL_HOME_FIELD "/home/vmail/"
MYSQL_MAILDIR_FIELD CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/')
Attention à ce fichier, j'ai rencontré des difficultées avec vim , l'encodage des caractères n'est pas bon. Utilisez si possible un autre éditeur.

Redemarrer authdaemon :
/etc/init.d/courier-authdaemon restart
Un petit test de connexion :
telnet localhost pop3
Trying 127.0.0.1...
Connected to localhost.localdomain.
Escape character is '^]'.
+OK Hello there.
            
Un autre test de connexion sécurisée:
telnet serveur-test 25
220 myserver ESMTP Postfix (Debian/GNU)
ehlo test.org
250-mailtest
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH LOGIN PLAIN DIGEST-MD5 CRAM-MD5
250-AUTH=LOGIN PLAIN DIGEST-MD5 CRAM-MD5
250 8BITMIME
mail from:<test@test.org>

250 Ok

rcpt to:<toto@test.com>

250 Ok

data

354 End data with <CR><LF>.<CR><LF></LF></CR></LF></CR>

This is a test email.
.
250 Ok: queued as ABC1D1C123

quit

221 BYE
Vous devez voir passer votre mail dans les logs :
Aug 14 20:18:06 localhost postfix/smtpd[3876]: connect from localhost.localdomain[127.0.0.1]
Aug 14 20:19:19 localhost postfix/smtpd[3876]: 0382D46120: client=localhost.localdomain[127.0.0.1]
Aug 14 20:19:35 localhost postfix/cleanup[3884]: 0382D46120: message-id=<20060814181833.0382D46120@serveur-test.gurulinux.org>
Aug 14 20:19:35 localhost postfix/qmgr[3857]: 0382D46120: from=<test@innovalyon.com>, size=388, nrcpt=1 (queue active)
Aug 14 20:19:35 localhost postfix/virtual[3887]: 0382D46120: to=<toto@gurulinux.org>, relay=virtual, delay=62, status=sent (delivered to maildir)
Aug 14 20:19:35 localhost postfix/qmgr[3857]: 0382D46120: removed
Aug 14 20:19:39 localhost postfix/smtpd[3876]: disconnect from localhost.localdomain[127.0.0.1]
Bon, maintenant, il ne reste plus qu'à tester avec votre lecteur de mail préféré.


VIII-G. Configuration de Clamav + Spamassassin + Amavis

Installation des paquets Debian :
apt-get install amavisd-new spamassassin clamav clamav-daemon zoo unzip unarj unzoo zip unzip bzip2 razor pyzor dcc-client 
clamav doit être en version > 0.91.2, si ce n'est pas le cas votre démon attendra 5 min avant de monter sa socket. Pour la Débian etch on pourra utiliser le dépôt :
deb http://volatile.debian.org/debian-volatile etch/volatile main contrib non-free

VIII-G-1. Configuration d'Amavis

La configuration d'Amavis se fait dans le fichier /etc/amavis/amavisd.conf

Voici les lignes à modifier :

variable explications
$mydomain = 'gurulinux.org'; Indiquez ici le nom de votre domaine
$myhostname = 'serveur-test.gurulinux.org'; A renseigner en fonction de votre configuration
@bypass_virus_checks_acl = qw( . ); Cette ligne est à commenter si vous souhaitez activer la détection des virus
@bypass_spam_checks_acl = qw( . ); Cette ligne est à commenter si vous souhaitez activer la détection des spams
#@bypass_spam_checks_acl = qw( . ); Cette ligne est à commenter
$warnvirussender = 1; Avertir l'expéditeur du virus
$warnbannedsender = 1; Avertir l'expéditeur du message rejetté (expediteur banni)
$virus_admin = “patrick\@$mydomain”; Administrateur
$QUARANTINEDIR = '/var/lib/amavis/virusmails'; Répertoire de quarantaine des virus
$remove_existing_spam_headers = 0; Le tag est ajouté à l'entête des mails
#$remove_existing_spam_headers = 1; Ligne commentée pour l'affichage des tags spam
@lookup_sql_dsn = ( ['DBI:mysql:database=mail;host=127.0.0.1;port=3306', 'mail_admin', 'mdp'] ); Connexion à la base Mysql
$sql_select_policy = 'SELECT “Y” as local FROM domaine WHERE CONCAT(”@”,nom_domaine) IN (%k)';
$sql_select_white_black_list = undef;
$recipient_delimiter = '+';
$replace_existing_extension = 1;
$localpart_is_case_sensitive = 0;
$sa_tag_level_deflt = 0.0; On tague tous les messages
$sa_tag2_level_deflt = 6.3; Score à atteindre pour considérer un message comme spam(tagué spam)
$sa_kill_level_deflt = $sa_tag2_level_deflt; On peut aussi se débarrasser purement et simplement des spams (dangereux)
$sa_spam_subject_tag =*SPAM*; Les messages considérés comme du spam porteront ce tag
On doit ensuite modifier le fichier /etc/postfix/main.cf :
content_filter = amavis:[127.0.0.1]:10024
receive_override_options = no_address_mappings
A mettre à la fin du fichier.

Puis modifiez le fichier /etc/postfix/master.cf :
amavis unix - - - - 2 smtp
   -o smtp_data_done_timeout=1200
   -o smtp_send_xforward_command=yes

127.0.0.1:10025 inet n - - - - smtpd
   -o content_filter=
   -o local_recipient_maps=
   -o relay_recipient_maps=
   -o smtpd_restriction_classes=
   -o smtpd_client_restrictions=
   -o smtpd_helo_restrictions=
   -o smtpd_sender_restrictions=
   -o smtpd_recipient_restrictions=permit_mynetworks,reject
   -o mynetworks=127.0.0.0/8
   -o strict_rfc821_envelopes=yes
   -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
A rajouter à la fin du fichier.

Ne pas oublier de mettre l'utilisateur clamav dans le groupe amavis et de redemarrer clamav:
adduser clamav amavis
/etc/init.d/clamav-daemon restart
Voila. Maintenant, tous vos mails sont traités par l'antispam et l'antivirus.


VIII-G-2. Configuration de Spamassassin

Pour activer Spamassassin, il faut modifier le fichier /etc/default/spamassassin :
# Change to one to enable spamd
ENABLED=1
Editer le fichier /etc/spamassassin/local.cf:
# This is the right place to customize your installation of SpamAssassin.
#
# See 'perldoc Mail::SpamAssassin::Conf' for details of what can be
# tweaked.
#
###########################################################################
#
# rewrite_header Subject *****SPAM*****
# report_safe 1
# trusted_networks 212.17.35.
# lock_method flock

# dcc
use_dcc 1
dcc_path /usr/bin/dccproc
dcc_add_header 1
dcc_dccifd_path /usr/sbin/dccifd

#pyzor
use_pyzor 1
pyzor_path /usr/bin/pyzor
pyzor_add_header 1

#razor
use_razor2 1
razor_config /etc/razor/razor-agent.conf

#bayes
use_bayes 1
use_bayes_rules 1
bayes_auto_learn 1

VIII-G-3. Configuration de Pyzor

Configuration de Pyzor :

Pyzor est une implémentation du “Rasoir de Vipul”. C'est une solution de détection distribuée basée sur un travail collaboratif. À chaque réception d'un nouveau mail, Pyzor va calculer un checksum sur ce mail et le comparer à la base de données. Si ce checksum correspond à une signature connue alors le mail est traité comme du spam. Afin d'initialiser la base de données de spams de Pyzor, il est nécessaire de lancer la commande suivante dès l'installation de Pyzor achevée :
pyzor discover

Ensuite, un simple Cron suffira à mettre à jour la base de données de Pyzor. J'ai souhaité que les mises à jour se fassent tous les jours à 3H. Pour ceci, tapez : crontab -e Et ajoutez :
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/opt/bin
0   3   *   *   *   /usr/bin/pyzor discover >/dev/null 2>&1

VIII-G-4. Installation de Postgrey :

apt-get install postgrey

VIII-H. Installation du serveur mail Postfix + Dovecot avec tous les outils nécessaires


VIII-H-1. Vérifications préalables et installation des paquets nécessaires


VIII-H-1-a. Vérifications

Des problèmes peuvent arriver lors de l'installation d'Amavis si vos fichiers /etc/hostname, /etc/hosts et /etc/mailname.

Faites les vérifications suivantes :

  • le nom d'hôte doit être pleinement qualifié dans les fichiers /etc/mailname et /etc/hosts si ce n'est pas le cas rajoutez le nom de domaine derrière le nom d'hôte de la machine
  • le nom d'hôte ne doit pas être pleinement qualifié dans le fichier /etc/hostname.
Si tout est OK la commande suivant doit vous donner le nom complet de la machine :
hostname --fqdn

VIII-H-1-b. Installation des paquets

Nous vous recommandons l'utilisation des dépôts volatiles, car clamav doit être en version > 0.91.2, si ce n'est pas le cas votre démon attendra 5 min avant de monter sa socket.

Ajouter dans /etc/apt/sources.list :
deb http://volatile.debian.org/debian-volatile etch/volatile main contrib non-free
Puis mettez à jour votre base de donnée des parquets :
apt-get update
Installez ensuite tous ces paquets :
aptitude install postfix-mysql 
Acceptez la désinstallation d'Exim4 quand la question vous sera posée. Répondez « Internet site » lorsque vous en avez le choix et entrez le nom d'hôte pleinement qualifié pour « Mail name ».
aptitude install mysql-server-5.0
aptitude install dovecot-pop3d dovecot-imapd
aptitude install lha unrar amavisd-new spamassassin clamav-daemon cpio arj zoo nomarch lzop cabextract pax openssl phpmyadmin libapache2-mod-php5 php5-mysql
Vous disposez maintenant des principaux outils pour monter un serveur mail. Il va falloir les configurés pour qu'ils fonctionnent tous ensemble.


VIII-H-2. Installation de PostfixAdmin

PostfixAdmin est une application php qui permet de gérer simplement les domaines, alias et comptes e-mails de votre serveur, il est sous licence GPL ce qui nous permet de modifié son code source (comme nous allons le faire). L'installation de PostfixAdmin avant la configuration de Postfix peut sembler bizarre mais il sera plus simple de faire travailler Postfix sur les tables mysql de PostfixAdmin que l'inverse.

Définissez premièrement le mot de passe root de Mysql (j'utiliserai mailpass comme mot de passe donc changez-le à chaque fois que vous le verrez) : mysqladmin password mailpass

Ensuite téléchargez PostfixAdmin sur http://sourceforge.net/projects/postfixadmin/ Décompressez le contenu de l'archive dans le dossier /var/www/postfix que vous aurez préalablement créé.

Renommez le fichier config.inc.php.sample en config.inc.php et modifiez le pour qu'il corresponde à ceci :
$CONF['postfix_admin_url'] = './admin/';
$CONF['postfix_admin_path'] = '/var/www/postfix/admin';

$CONF['default_language'] = 'fr';

$CONF['database_type'] = 'mysql';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfixadmin';
$CONF['database_password'] = 'mailpass';
$CONF['database_name'] = 'postfix';
$CONF['database_prefix'] = '';

$CONF['admin_email'] = 'admin@debian.dynalias.net';
Editez ensuite le fichier DATABASE_MYSQL.TXT et changez le mot de passe des lignes suivantes :
INSERT INTO user (Host, User, Password) VALUES ('localhost','postfix',password('postfix'));
INSERT INTO user (Host, User, Password) VALUES ('localhost','postfixadmin',password('postfixadmin'));
Puis tapez la commande suivante pour que toutes les tables soient créées automatiquement :
mysql -u root -p < DATABASE_MYSQL.TXT
Supprimez ensuite les fichiers suivants :

  • motd-admin.txt
  • motd-user.txt
  • motd.txt
  • setup.php
L'installation de l'application en elle-même est terminée mais quelques améliorations sont à faire. Pour régler les problèmes d'affichages on va d'abord éditer le fichier styleshet.css pour que l'id menu ressemble à çà :
#menu {
    width: 1100px;
    margin: 0 auto;
    padding-top: 10px;
}
Ensuite dans le fichier languages/fr.lang effectué les remplacements suivant (utiliser la fonction remplacer de votre éditeur de texte) :

  • remplacez « à » par « &agrave ; »
  • remplacez « é » par « &eacute ; »
  • remplacez « è » par « &eagrave ; »
Les problèmes d'affichage sont réglés, il ne reste plus qu'un seul problème : celui du cryptage du mot de passe. Par défaut PostfixAdmin enregistre le mot de passe avec une fonction modifiée du hachage MD5, qui est inutilisable par postfix et dovecot, qui ne comprennent que celui du serveur mysql.

Il faut donc allez modifier le code source de certains fichiers (modifications données pour postfixadmin-2.1.0)

  • Modfication de md5crypt par MD5()
//$password = md5crypt ($pw, $salt);
     $password = MD5 ($pw); // remplace la ligne ci-dessus commentée
  • dans les fichiers create-mailbox.php et admin/create-mailbox.php remplacez la ligne
$result = db_query ("INSERT INTO mailbox (username,password,name,maildir,quota,domain,created,modified,active) VALUES ('$fUsername',MD5('$fPassword'),'$fName','$maildir','$quota','$fDomain',NOW(),NOW(),'$fActive')");
par :
$result = db_query ("INSERT INTO mailbox (username,password,name,maildir,quota,domain,created,modified,active) VALUES ('$fUsername',MD5('$fPassword'),'$fName','$maildir','$quota','$fDomain',NOW(),NOW(),'$fActive')");
  • et dans les fichiers edit-mailbox.php et admin/edit-mailbox.php remplacez la ligne :
$result = db_query ("UPDATE mailbox SET password='$password',name='$fName',quota='$quota',modified=NOW(),active='$fActive' WHERE username='$fUsername' AND domain='$fDomain'");
par :
$result = db_query ("UPDATE mailbox SET password=MD5('$fPassword'),name='$fName',quota='$quota',modified=NOW(),active='$fActive' WHERE username='$fUsername' AND domain='$fDomain'");
Voilà Postfixadmin est complètement paramétré et utilisable avec les logiciels qui vont suivre.

On va maintenant simplement créer 3 vues pour que Postfix et Dovecot travaillent juste avec les informations qu'ils ont besoin :
debian:/var/www/postfix# mysql -u root -p
Enter password: 

mysql> use postfix;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> create view view_users as select username "email", password, active from mailbox;
Query OK, 0 rows affected (0.01 sec)

mysql> create view view_aliases as select address "email", goto "destination" from alias;
Query OK, 0 rows affected (0.01 sec)

mysql> create view view_domains as select domain "name" from domain;
Query OK, 0 rows affected (0.01 sec)

mysql> quit;

Bye
Soit en SQL:
 use postfix;
 create view view_users as select username "email", password, active from mailbox;

 create view view_aliases as select address "email", goto "destination" from alias;

 create view view_domains as select domain "name" from domain;
Enfin pour sécuriser la partie admin, éditez le fichier /etc/apache2/httpd.conf et rajoutez :
<Directory "/var/www/postfix/admin">
	AllowOverride All
</Directory>
N'oublier de modifier le mot de passe apache de admin dans /var/www/postfix/admin : htpasswd .htpasswd admin


VIII-H-3. Configuration de POSTFIX

On va premièrement créer le fichier /etc/postfix/mysql-virtual-mailbox-domains.cf qui servira à POSTFIX pour savoir si le domaine de destination du mail est géré par le serveur ou non. Remplissez le fichier comme ceci :
user = postfixadmin
password = mailpass
hosts = 127.0.0.1
dbname = postfix
query = SELECT 1 FROM view_domains WHERE name='%s'
La commande postconf -e permet d'éditer le fichier de configuration principale de Postfix : main.cf, on va s'en servir pour éditer la plupart des options de ce fichier.
postconf -e virtual_mailbox_domains=mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
Pour tester si POSTFIX a pris en compte ce que vous venez de faire vous pouvez entrez un domaine dans la table domain puis en tapant la commande suivante :
postmap -q debian.dynalias.net mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
Cette commande doit vous retourner « 1 » ('echo $?). Elle est très pratique pour debugguer la validiter de la connection à mysql !

Créer ensuite un utilisateur et un groupe système qui seront les propriétaires système du répertoire des mails, vérifiez que le GID et le UID ne sont pas utilisé.
groupadd -g 5000 vmail
useradd -g vmail -u 5000 vmail -d /home/vmail -m
Puis configurez Postfix :
postconf -e virtual_uid_maps=static:5000
postconf -e virtual_gid_maps=static:5000
Créer ensuite le fichier /etc/postfix/mysql-virtual-mailbox-maps.cf et remplissez le comme ceci :
user = postfixadmin
password = mailpass
hosts = 127.0.0.1
dbname = postfix
query = SELECT 1 FROM view_users WHERE email='%s'
Créez ensuite le fichier /etc/postfix/mysql-virtual-alias-maps.cf qui servira à trouver la destination d'un alias :
user = postfixadmin
password = mailpass
hosts = 127.0.0.1
dbname = postfix
query = SELECT destination FROM view_aliases WHERE email='%s'
Configurez le main.cf :
postconf -e virtual_alias_maps=mysql:/etc/postfix/mysql-virtual-alias-maps.cf
postconf -e virtual_mailbox_maps=mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
Puis pour des raisons de sécurité changez les permissions de ces fichiers :
chgrp postfix /etc/postfix/mysql-*.cf
chmod u=rw,g=r,o= /etc/postfix/mysql-*.cf
Enfin on va configurer Postfix pour qu'il utilise Dovecot comme serveur POP et IMAP.
postconf -e virtual_transport=dovecot
postconf -e dovecot_destination_recipient_limit=1
Et dans le fichier /etc/postfix/master.cf, qui contient le mode de fonctionnement des processus liés à Postfix, rajouter ces lignes :
dovecot   unix  -       n       n       -       -       pipe
    flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -d ${recipient}

VIII-I. Configuration de Dovecot

Dovecot est la partie qui va donner les mails aux clients lorsqu'ils se connecteront au serveur. Ici nous nous servirons des protocoles POP3, IMAP et leurs versions sécurisées.

Editez le fichier /etc/dovecot/dovecot.conf pour que les paramètres correspondent à ceux-ci :
protocols = imap imaps pop3 pop3s
disable_plaintext_auth = no
mail_location = maildir:/home/vmail/%d/%n
auth default {
   mechanisms = plain login
   passdb sql {
      args = /etc/dovecot/dovecot-sql.conf
     }
   userdb static {
       args = uid=5000 gid=5000 home=/home/vmail/%d/%n allow_all_users=yes
     }
   socket listen {
      master {
          path = /var/run/dovecot/auth-master
          mode = 0600
          user = vmail
        }

        client {
          path = /var/spool/postfix/private/auth
          mode = 0660
          user = postfix
          group = postfix
         }
     }
   protocol lda {
       log_path = /home/vmail/dovecot-deliver.log
       auth_socket_path = /var/run/dovecot/auth-master
       postmaster_address = postmaster@example.com
       mail_plugins = cmusieve
       global_script_path = /home/vmail/globalsieverc
    }
}
Changez simplement l'addresse mail à la ligne postmaster_address.

Editer le fichier /etc/dovecot/dovecot-sql.conf et changez les paramètres suivants, qui serviront pour l'authentification des clients :
driver = mysql
connect = host=127.0.0.1 dbname=postfix user=postfixadmin password=mailpass
default_pass_scheme = PLAIN-MD5
password_query = SELECT email as user, password FROM view_users WHERE email='%u' AND active = 1;
Changez les permissions des fichiers suivants :
chgrp vmail /etc/dovecot/dovecot.conf
chmod g+r /etc/dovecot/dovecot.conf
Enfin créer votre certificat pour que votre identité soir certifiée.
openssl req -new -x509 -days 3650 -nodes -out /etc/ssl/certs/dovecot.pem \
    -keyout /etc/ssl/private/dovecot.pem
Répondez correctement aux questions et veillez à mettre le nom d'hote pleinement qualifié pour « Common name ».


VIII-J. Configuration du serveur SMTP

Premièrement il va falloir configurer le serveur SMTP pour que personne à part les personnes disposant d'un compte puisse envoyer un message depuis notre serveur. Car sinon notre serveur serait dans le cas d'un open relay qui serait très vite black listé car utilisé par des spammeurs.

Autorisons d'abord le serveur lui-même à envoyer des mails :
postconf -e mynetworks=127.0.0.0/8
On autorise ensuite les utilisateurs ayant un compte :
postconf -e smtpd_sasl_type=dovecot
postconf -e smtpd_sasl_path=private/auth
postconf -e smtpd_sasl_auth_enable=yes
postconf -e smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination
Créez le certificat pour le serveur SMTP :
openssl req -new -x509 -days 3650 -nodes -out /etc/ssl/certs/postfix.pem \
    -keyout /etc/ssl/private/postfix.pem
On indique à Postfix de les utiliser :
postconf -e smtpd_tls_cert_file=/etc/ssl/certs/postfix.pem
postconf -e smtpd_tls_key_file=/etc/ssl/private/postfix.pem
A ce stade votre serveur mail fonctionne autant en envoi qu'en réception, vous pouvez le tester avec un client mail.


VIII-K. Note pour les clients free

Pour contourner le problème du blocage du port 25 par free (et d'autres FAI) il va falloir rediriger un port du serveur vers son port 25 grâce au pare-feu iptables.

Avant de faire celà on va configurer le pare-feu pour que seul les ports principaux soit ouverts.

On va en premier ouvrir en entrée et en sortie l'interface loopback
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
Ensuite tous les ports du serveur mail (et certains autres) :
iptables -A INPUT -p tcp -i eth0 --dport 22 -j ACCEPT
iptables -A INPUT -p tcp -i eth0 --dport 25 -j ACCEPT
iptables -A INPUT -p tcp -i eth0 --dport 80 -j ACCEPT
iptables -A INPUT -p tcp -i eth0 --dport 110 -j ACCEPT
iptables -A INPUT -p tcp -i eth0 --dport 113 -j ACCEPT
iptables -A INPUT -p tcp -i eth0 --dport 143 -j ACCEPT
iptables -A INPUT -p tcp -i eth0 --dport 993 -j ACCEPT
iptables -A INPUT -p tcp -i eth0 --dport 995 -j ACCEPT
On autorise les ping sur le serveur :
iptables -A INPUT -p icmp --icmp-type 8 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
On va faire la redirection du port 26 vers le port 25 c'est à dire derrière ces deux ports on va rencontrer postfix :
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 26 -j REDIRECT --to-port 25
Et enfin on autorise en entrée les connections qui ont déjà été assez établies :
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
Et on bloque toutes les autres requetes :
iptables -P INPUT DROP
Enfin on va sauvegarder cette configuration dans un fichier car iptables ne recharge pas sa configuration au démarrage.
iptables-save > /root/firewall.conf
Pour recharger les paramètres il faudra utiliser :
iptables-restore > /root/firewall.conf

VIII-L. Mise en place des filtres anti-virus et anti-spam


VIII-L-1. Amavis

Nous allons en premier activer le programme qui va servir d'interface en Postfix et les logiciels d'analyse, c'est-à-dire que c'est lui qui enverra les messages que Postfix lui délivrera à l'antivirus (clamav) et à l'anti-spam (spamassassin).

Pour activer amavis commencez par décommettez les lignes du fichier /etc/amavis/conf.d/15-content_filter_mode commençant par :
@bypass_........ 
Puis pour éviter un conflit entre spamassassin et amavis on va devoir désactiver l'expiration automatique des des adresses reconnues comme spam par spamassassin . Rajoutez cette ligne dans le fichier /etc/spamassassin/local.cf :
bayes_auto_expire 0
Puis redémarrez amavis.
/etc/init.d/amavis restart
Configurons maintenant Postfix pour utiliser amavis. Techniquement, Postfix quand il recevra un mail sur le port 25 fera suivre le message à amavis par le port 10024 qui lui renverra le message à Postfix sur le port 10025 seulement s'il n'est pas jugé en tant que spam ou vérolé.
postconf -e content_filter=smtp-amavis:[127.0.0.1]:10024
postconf -e receive_override_options=no_address_mappings
Puis dans le fichier /etc/postfix/master.cf rajoutez ceci :
smtp-amavis unix -      -       n     -       2  smtp
    -o smtp_data_done_timeout=1200
    -o smtp_send_xforward_command=yes
    -o disable_dns_lookups=yes
    -o max_use=20

127.0.0.1:10025 inet n  -       -     -       -  smtpd
    -o content_filter=
    -o local_recipient_maps=
    -o relay_recipient_maps=
    -o smtpd_restriction_classes=
    -o smtpd_delay_reject=no
    -o smtpd_client_restrictions=permit_mynetworks,reject
    -o smtpd_helo_restrictions=
    -o smtpd_sender_restrictions=
    -o smtpd_recipient_restrictions=permit_mynetworks,reject
    -o smtpd_data_restrictions=reject_unauth_pipelining
    -o smtpd_end_of_data_restrictions=
    -o mynetworks=127.0.0.0/8
    -o smtpd_error_sleep_time=0
    -o smtpd_soft_error_limit=1001
    -o smtpd_hard_error_limit=1000
    -o smtpd_client_connection_count_limit=0
    -o smtpd_client_connection_rate_limit=0
    -o receive_override_options=no_header_body_checks,no_unknown_recipient_checks
Redémarrer postfix.

On testera ces 2 configurations grâce au 2 commandes telnet suivantes: premier telnet:
telnet localhost 10024
La réponse doit être … 220 [127.0.0.1] ESMTP amavisd-new service ready

Si cela n'est pas le cas, il faut vérifier que amavis et postfix dialogue correctement. On sort de ce telnet grâce à
quit
deuxième telnet:
telnet localhost 10025
La réponse doit être … 220 cluster2.exemple.com ESMTP Postfix (Debian/GNU)

Si cela n'est pas le cas, il faut vérifier que postfix se lance correctement et que dovecot est bien paramétré.

Ajouter l'utilisateur clamav dans le groupe amavis pour que les 2 programmes puissent communiquer entre eux et redémarrez clamav et postfix:
adduser clamav amavis
/etc/init.d/clamav-daemon restart
/etc/init.d/postfix restart
Editez ensuite le fichier /etc/amavis/conf.d/50-user et rajouter ce qui suit avant la ligne qui commence par « 1; » :
@lookup_sql_dsn = (
    ['DBI:mysql:database=postfix;host=127.0.0.1;port=3306',
     'postfixadmin',
     'mailpass']);

$sql_select_policy = 'SELECT name FROM view_domains WHERE CONCAT("@",name) IN (%k)';

VIII-L-2. Amavis

Ceci permet de savoir à Amavis si le domaine de provenance du mail appartient ou non au serveur c'est-à-dire si l'e-mail qui lui est donné provient d'un client du serveur ou d'une personne qui envoi un message à un client du serveur.

Changer les permissions du fichier 50-user pour que le mot de passe ne soit pas lisible par tout le monde :
chmod o= /etc/amavis/conf.d/50-user
Un fichier spam d'exemple est présent sur le système pour tester le fonctionnement de clamav, remplassez par une adresse valable la commande :
sendmail aurelien@debian.dyanalias.net < /usr/share/doc/spamassassin/examples/sample-spam.txt
Allez ensuite voir le fichier /var/log/mail.log, il doit normalement contenir quelque chose comme ceci :
Sep 18 09:08:20 debian amavis[2000]: (02000-01) Blocked SPAM, <root@debian.gimatex.com> -> <sam@gimatex.com>, quarantine: spam-fpbyrapy7SWA.gz, Message-ID: <GTUBE1.1010101@example.net>, mail_id: fpbyrapy7SWA, Hits: 1004.174, 355 ms 
Ce blocage est fait par amvais qui intègre par défaut un anti-spam mais nous allons le compléter avec spamassassin qui sera charger de noter le message, plus la note est élevé plus il sera considéré comme spam par vos clients mails.


VIII-L-3. Spamassassin et Pyzor

Spamassassin est un logiciel qui permet de noter un message et si la note est suffisament élevée de rajouter un message dans le sujet du mail (comme “ SPAM ”). Il crée aussi dans l'en-tête une partie ou il va mettre des informations (dont la note) qui permettront aux clients mails (Outlook, Thunderbird …) d'appliquer leurs propres règles.

Pour activer Spamassassin modifier le fichier /etc/default/spamassassin comme ceci :
# Change to one to enable spamd
ENABLED=1
Pyzor quant à lui réalise un checksum des messages et et le compare à ceux présent dans sa base de donnée qui contient le checksum de mails connus pour être des spam. Installez pyzor :
apt-get install pyzor
Puis éditez le fichier /etc/spamassassin/local.cf, rajoutez ceci :
#pyzor 
use_pyzor 1 
pyzor_path /usr/bin/pyzor 
pyzor_add_header 1 

#bayes 
use_bayes 1 
use_bayes_rules 1 
bayes_auto_learn 1 
La base de donnée de pyzor est mise à jour grâce à la commande :
pyzor discover
On peut donc utiliser cron pour le lancer à intervalle régulier :
crontab -e
et mettez ceci (tous les jours à 4 heures du mat') :
0   4   *   *   *   pyzor discover >/dev/null 2>&1

VIII-L-4. Postgrey

Enfin pour en terminer avec les tris des spams on va utiliser Postgrey :
apt-get install postgrey
Ce logiciel n'a pas besoin d'être configuré. Son but est de rejeter pendant un certain temps les messages entrant

Configurez Postfix pour qu'il utilise Postgrey, dans main.cf rajoutez :
smtpd_client_restrictions =
    permit_mynetworks
    permit_sasl_authenticated
    check_policy_service inet:127.0.0.1:60000

VIII-M. Installation du Webmail

Télécharger RoundCube sur le site officiel.

Créer un dossier webmail dans /var/www et copiez le contenu de l'archive dedans.

Changez les permissions de temp et log
chmod 777 temp/
chmod 777 logs/
Créez la base de donnée (changez le mot de passe)
cd /var/www/webmail
mysql -u root -p
CREATE DATABASE roundcubemail DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
GRANT ALL PRIVILEGES ON roundcubemail.* TO roundcube@localhost
    IDENTIFIED BY 'password';
quit;
mysql -p roundcubemail < SQL/mysql5.initial.sql
Renomez les fichiers db.inc.php.dist main.inc.php.dist en db.inc.php main.inc.php

Editez le fichier db.inc.php comme ceci :
$rcmail_config['db_dsnw'] = 'mysql://roundcube:PASSWORD@localhost/roundcubemail';
Editez le fichier main.inc.php comme ceci :
$rcmail_config['default_host'] = 'ssl://localhost:993';
$rcmail_config['locale_string'] = 'fr';
Pour éviter le problème des login impossible commentez les lignes suivantes (//) dans le fichier index.php
unset($_SESSION['temp']);
sess_regenerate_id();
RoundCube fonctionne : http://localhost/webmail/

/!\ Si RoundCube ne fonctionne plus après un redémarrage du serveur, il va faloir vider la table session de toutes ses entrées, vous pourrez ensuite à nouveau vous loggez.


VIII-N. Résumé des fichiers de configurations

Vos fichiers doivent normalement ressembler à ceux-ci (sauf main.cf ou des choses on été ajoutées pour le spam : vous pouvez les mettre aussi)


VIII-N-1. main.cf

# See /usr/share/postfix/main.cf.dist for a commented, more complete version


# Debian specific:  Specifying a file name will cause the first
# line of that file to be used as the name.  The Debian default
# is /etc/mailname.
#myorigin = /etc/mailname

smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no

# appending .domain is the MUA's job.
append_dot_mydomain = no

# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h

# TLS parameters
smtpd_tls_cert_file = /etc/ssl/certs/postfix.pem
smtpd_tls_key_file = /etc/ssl/private/postfix.pem
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${queue_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${queue_directory}/smtp_scache

# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.

myhostname = cluster1.gimatex.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = cluster1.gimatex.com, localhost.gimatex.com, , localhost
relayhost = 
mynetworks = 127.0.0.0/8
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
virtual_transport = dovecot
dovecot_destination_recipient_limit = 1
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
content_filter = smtp-amavis:[127.0.0.1]:10024
receive_override_options = no_address_mappings
smtpd_client_restrictions =
    permit_mynetworks
    permit_sasl_authenticated
#    check_policy_service inet:127.0.0.1:60000

VIII-N-2. master.cf

#
# Postfix master process configuration file.  For details on the format
# of the file, see the master(5) manual page (command: "man 5 master").
#
# ==========================================================================
# service type  private unpriv  chroot  wakeup  maxproc command + args
#               (yes)   (yes)   (yes)   (never) (100)
# ==========================================================================
smtp      inet  n       -       -       -       -       smtpd
#submission inet n       -       -       -       -       smtpd
#  -o smtpd_enforce_tls=yes
#  -o smtpd_sasl_auth_enable=yes
#  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
#smtps     inet  n       -       -       -       -       smtpd
#  -o smtpd_tls_wrappermode=yes
#  -o smtpd_sasl_auth_enable=yes
#  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
#628      inet  n       -       -       -       -       qmqpd
pickup    fifo  n       -       -       60      1       pickup
cleanup   unix  n       -       -       -       0       cleanup
qmgr      fifo  n       -       n       300     1       qmgr
#qmgr     fifo  n       -       -       300     1       oqmgr
tlsmgr    unix  -       -       -       1000?   1       tlsmgr
rewrite   unix  -       -       -       -       -       trivial-rewrite
bounce    unix  -       -       -       -       0       bounce
defer     unix  -       -       -       -       0       bounce
trace     unix  -       -       -       -       0       bounce
verify    unix  -       -       -       -       1       verify
flush     unix  n       -       -       1000?   0       flush
proxymap  unix  -       -       n       -       -       proxymap
smtp      unix  -       -       -       -       -       smtp
# When relaying mail as backup MX, disable fallback_relay to avoid MX loops
relay     unix  -       -       -       -       -       smtp
        -o fallback_relay=
#       -o smtp_helo_timeout=5 -o smtp_connect_timeout=5
showq     unix  n       -       -       -       -       showq
error     unix  -       -       -       -       -       error
discard   unix  -       -       -       -       -       discard
local     unix  -       n       n       -       -       local
virtual   unix  -       n       n       -       -       virtual
lmtp      unix  -       -       -       -       -       lmtp
anvil     unix  -       -       -       -       1       anvil
scache    unix  -       -       -       -       1       scache
#
# ====================================================================
# Interfaces to non-Postfix software. Be sure to examine the manual
# pages of the non-Postfix software to find out what options it wants.
#
# Many of the following services use the Postfix pipe(8) delivery
# agent.  See the pipe(8) man page for information about ${recipient}
# and other message envelope options.
# ====================================================================
#
# maildrop. See the Postfix MAILDROP_README file for details.
# Also specify in main.cf: maildrop_destination_recipient_limit=1
#
maildrop  unix  -       n       n       -       -       pipe
  flags=DRhu user=vmail argv=/usr/bin/maildrop -d ${recipient}
#
# See the Postfix UUCP_README file for configuration details.
#
uucp      unix  -       n       n       -       -       pipe
  flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)
#
# Other external delivery methods.
#
ifmail    unix  -       n       n       -       -       pipe
  flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)
bsmtp     unix  -       n       n       -       -       pipe
  flags=Fq. user=bsmtp argv=/usr/lib/bsmtp/bsmtp -t$nexthop -f$sender $recipient
scalemail-backend unix  -       n       n       -       2       pipe
  flags=R user=scalemail argv=/usr/lib/scalemail/bin/scalemail-store ${nexthop} ${user} ${extension}
mailman   unix  -       n       n       -       -       pipe
  flags=FR user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py
  ${nexthop} ${user}

dovecot   unix  -       n       n       -       -       pipe
    flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -d ${recipient}
smtp-amavis unix -      -       n     -       2  smtp
    -o smtp_data_done_timeout=1200
    -o smtp_send_xforward_command=yes
    -o disable_dns_lookups=yes
    -o max_use=20
:10025 inet n  -       -     -       -  smtpd
    -o content_filter=
    -o local_recipient_maps=
    -o relay_recipient_maps=
    -o smtpd_restriction_classes=
    -o smtpd_delay_reject=no
    -o smtpd_client_restrictions=permit_mynetworks,reject
    -o smtpd_helo_restrictions=
    -o smtpd_sender_restrictions=
    -o smtpd_recipient_restrictions=permit_mynetworks,reject
    -o smtpd_data_restrictions=reject_unauth_pipelining
    -o smtpd_end_of_data_restrictions=
    -o mynetworks=127.0.0.0/8
    -o smtpd_error_sleep_time=0
    -o smtpd_soft_error_limit=1001
    -o smtpd_hard_error_limit=1000
    -o smtpd_client_connection_count_limit=0
    -o smtpd_client_connection_rate_limit=0
    -o receive_override_options=no_header_body_checks,no_unknown_recipient_checks

VIII-N-3. mysql-virtual-alias-maps.cf

user = postfixadmin
password = mailpass
hosts = 127.0.0.1
dbname = postfix
query = SELECT destination FROM view_aliases WHERE email='%s'

VIII-N-4. mysql-virtual-mailbox-maps.cf

user = postfixadmin
password = mailpass
hosts = 127.0.0.1
dbname = postfix
query = SELECT 1 FROM view_users WHERE email='%s'

VIII-N-5. mysql-virtual-mailbox-domains.cf

user = postfixadmin
password = mailpass
hosts = 127.0.0.1
dbname = postfix
query = SELECT 1 FROM view_domains WHERE name='%s'

IX. Installation de Ruby on Rails (RoR) :


IX-A. Ruby on Rails :

apt-get install ruby libzlib-ruby rdoc irb rubygems rails eruby

IX-B. Apache2 et fcgid :

Installation :
apt-get install apache2 libapache2-mod-fcgid libfcgi-ruby1.8
Activer les modules d'Apache :
a2enmod ssl
a2enmod rewrite
a2enmod suexec
a2enmod include
Relancer Apache:
/etc/init.d/apache2 force-reload
Tester Apache :

Connecter vous à votre adresse local http://localhost/. Si tout s'est bien passé, vous devriez voir une page Web dans laquelle l'index du répertoire Web apparait ainsi que le dossier « apache2-default » ou la page d'acceuil d'Apache.


IX-C. MySQL :

Installation :
apt-get install libmysql-ruby mysql-server
Donner le mot de passe du compte root pour la base de données :
mysqladmin -u root password yourrootsqlpassword

X. Création d'un projet rails :

La création d'un projet rails est vraiment très facile à réaliser, il suffit d'utiliser la commande
rails <Nom de l'application>
Une liste de dossier et de fichiers seront donc crées dans le répertoire <Nom de l'application>

Pour lancer l'aplication, aller dans le répertoire <Nom de l'application> et executer :
script/server 
ou
ruby script/server 
Le script a créé un serveur virtuel sur l'adresse local au port 3000
# script/server
=> Booting WEBrick...
=> Rails application started on http://127.0.0.1:3000
=> Ctrl-C to shutdown server; call with --help for options
[2007-07-03 10:56:35] INFO  WEBrick 1.3.1
[2007-07-03 10:56:35] INFO  ruby 1.8.5 (2006-08-25) [i486-linux]
[2007-07-03 10:56:35] INFO  WEBrick::HTTPServer#start: pid=7305 port=3000
Rendez-vous a l'aresse indiquer dans votre terminal dans mon cas http://127.0.0.1:3000. Si une page apparait avec le logo de Ruby et “Welcome aboard” en titre, vous avez réussi.


XI. Comment redéfinir de force le mot de passe de root ?

Si vous avez perdu votre mot de pass Root pour MySQL, suivez ces quelques étapes :

On stoppe le serveur MySQL :
sudo /etc.init.d/mysql stop
On se connecte au serveur sans tenir compte des privilèges utilisateurs :
/usr/bin/mysqld_safe --skip-grant-tables &
mysql -h localhost
Nous allons utiliser la table contenant les paramètres de MySQL :
use mysql
On met en place le nouveau mot de passe :
update user set password = password('<votre_mot_de_passe>') where user = 'root' and host='localhost';
(remplacez <votre_mot_de_passe> par le mot de passe de votre choix)

On quitte le prompt de MySQL :
quit
On redémarre le serveur MySQL en utilisation normale :
sudo /etc/init.d/mysql restart

XII. Divers

afficher la queue d'attente mails :
mailq
Effacer la queue :
postsuper -d ALL


            

Valid XHTML 1.1!Valid CSS!