Aller au contenu
Vie du geek le forum entre geek

Inscrivez-vous maintenant pour accéder à toutes nos fonctionnalités. Une fois inscrit et connecté, vous pourrez créer des sujets, publier des réponses aux discussions existantes, donner de la réputation à vos collègues, obtenir votre propre messager privé, publier des mises à jour de statut, gérer votre profil et bien plus encore. Si vous avez déjà un compte, connectez-vous ICI autrement Inscription un compte gratuit aujourd'hui!

dokkun

Geek
  • Compteur de contenus

    84
  • Inscription

  • Dernière visite

  • Jours gagnés

    1

Messages posté(e)s par dokkun


  1. Il existe de nombreuses façons de lutter contre le spam. Voici une méthode qui permet de vous protéger contre l’usurpation de nom de domaine. Pour cela nous allons très simplement créer un enregistrement SPF (Sender Policy Framework ) dans vos DNS.

    Définition

    Le SPF est un type d’enregistrement DNS qui détermine les serveurs de messagerie autorisés à envoyer des messages au nom de votre domaine.

    Création du SPF

    En premier lieu allez sur cette page :http://www.microsoft.com/mscorp/safety/content/technologies/senderid/wizard

    Sur le premier écran entrez votre nom de domaine puis next

    spf_etape1-300x95.png

    Sur le deuxième écran vous avez un récapitulatif de la vérification du domaine, faites next

    spf_etape2-300x90.png

    Nous allons maintenant créer le spf, je vais détailler section par section

    Domain Not Used for Sending E-Mail

    spf_etape3_1-300x16.png

    Cochez cette case si votre domaine n envoie jamais de mail

    Inbound Mail Servers Send Outbound Mail

    spf_etape3_2-300x41.png

    Cochez la liste de vos mx déclarés , en dessous vous avez un champs permettant de rajouter d’autres serveur mx non déclarés dans vos dns

    Outbound Mail Server Addresses

    spf_etape3_3-300x63.png

    Pour ne pas avoir à mettre tous mes serveurs reliés à ce nom de domaine, je coche uniquement la première case vu que j’ai bien tout défini dans mon serveur dns

    Dans la dernière case, vous pouvez ajouter les alias à votre nom de domaine principal.

     

    Reverse DNS Lookup

    spf_etape3_4-300x43.png

    Si vous avez la possibilité de faire du reverse dns, chose toujours bonne mais pas toujours faisable pour plusieurs domaines sur une ip.

    Outsourced Domains

    spf_etape3_5-300x38.png

    Si vous avez d’autres serveurs smtp comme mailchimp par exemple, qui envoie des mails en votre nom, c’est ici que vous les insérez.

    Default

    spf_etape3_6-300x73.png

    Étant sûr de moi ,à la première question, j’ai répondu que mon domaine envoyait bien des mails que par les adresses identifiées au dessus.

    Faites enfin next pour générer votre enregistrement spf

    spf_etape4-300x73.png

    Copiez le résultat.

    Rendez vous dans la gestion de votre zone dns là oû est enregistré votre nom de domaine et collez dedans :

     
     
    IN TXT v=spf1 a mx:mail.admin-systeme.com a:mail.admin-systeme.com  -all

    Voila votre spf est en place. Il n’y a plus qu’a le tester après que la propagation dns soit effectuée.

    Ci dessous un lien pour ce qui voudrait apprendre la syntaxe complète de SPF

    http://www.zytrax.com/books/dns/ch9/spf.html


  2. Aujourd’hui en voulant écrire un tutoriel,  je me suis rendu compte que je n’avais pas de logiciel pour vous faire de jolis schémas. Je me suis aussi rendu compte à quel point dans une documentation, certaines notions ne sont facilement explicables qu’avec justement un schéma.

    Présentation de DIA

    Dia est un logiciel libre de création de diagramme. L’un des atouts de dia est qu’il peut être scripter en python et génère des bouts de code suivant vos schémas UML. Très modulaire, on peut dire que c est un sérieux concurrent à visio.

    Installation sur une débian

    L’installation est très simple, nous allons installer deux paquets

    • dia
    • dia-shapes

    Le premier est le logiciel par lui même, le second est une bibliothèque de formes très utile pour faire facilement des schémas représentatifs

     
     
    apt-get install dia dia-shapes

    Créez sa propre feuille de forme

    nous allons maintenant personnaliser nos graphiques et pour cela créer notre propre feuille de forme. C’est un travail lent et minutieux mais qui va s avérer très rentable lors de la création de nos diagrammes.

    Nous passerons en root puisque les fichiers des dia se trouve dans /usr/share/dia/

    nous allons créer une bibliothèque nommée serveur

     
     
    mkdir /usr/share/dia/shapes/serveur && chmod 777/usr/share/dia/shapes/serveur

    Création d’une forme

    Lancez dia et faites outils->image

    Dessinez un rectangle sur votre espace de travail puis clic droit sur le rectangle et propriété

    parcourir pour trouver le fichier image

    Puis faire Fichier>Exporter sélectionnez le type de fichier :  fichier de forme dia (*.shape)

    et enregistrez le dans le répertoire : /usr/share/dia/shapes/serveur

    Deux fichiers seront ainsi créés dans le répertoire, un .shape et un .png

    Déclarer une nouvelle feuille de forme

    Maintenant que nous avons créer  nos formes il faut faire en sorte que dia les gère dans sa bibliothèque.

    Pour cela nous allons créer un fichier xml contenant la description des objets :

     
     
    vim /usr/share/dia/sheets/serveur.sheets

     
    <?xml version="1.0" encoding="UTF-8"?>
    <sheet xmlns="http://www.lysator.liu.se/~alla/dia/dia-sheet-ns">
      <name>serveur</name>
      <name xml:lang="fr">Serveur info</name>
      <description>Ma feuille de forme pour mes diagrammes perso</description>
      <description xml:lang="fr">Ma feuille de forme pour mes diagrammes perso</description>
      <contents>
        <object name="serveur - serveur_linux">
          <description>serveur sous linux</description>
          <description xml:lang="fr">Serveur sous linux</description>
        </object>
    <object name="serveur - firewall">
          <description>firewall</description>
          <description xml:lang="fr">firewall</description>
        </object>
      </contents>
    </sheet>

    Décryptage :

    • name : nom du répertoire de votre nouvelle feuille de forme
    • object name= « nom du répertoire – nom du fichier sans extension »

    Redémarrez dia, vous avez votre feuille personnalisée

     

    Lien externe

    Voila un site plus qu’intéressant, vous allez y trouver plein de clipart open source

    http://openclipart.org/


  3. Préambule

    Afin de tester OBM en mode déployé, j ai décidé de mettre en place plusieurs VM sous debian sur mon ESXI hébergé sous ovh.
    Désirant avant tout tester les points d’accès à OBM dans ce type d’infra je voulais que seul un serveur ai une ip publique et que tous les autres soient sur un LAN. Déjà cela m’évitais d’avoir plusieurs ip failover a acheter à OVH. Mais pour que cela marche il me faut faire en sorte que mes serveurs sur le LAN puissent accéder tout de même à internet pour leur installation et mise à jour. Dans ce tutoriel, je vais vous montrer comment mettre en place sur votre esxi ce type de réseau virtualisé.

    Préparation de l’esxi Les switchs

    En tout premier lieu il va falloir créer un nouveau switch dont l’étiquette réseau sera  LAN.
    Dans votre vsphere :
    Clic sur l’ip de votre serveur -> onglet configuration a droite -> encart matériel clic sur mise en réseau
    En haut à droite ajouter gestion réseau
    Sélectionner en type connexion : Machine virtuelle puis suivant et encore suivant
    Dans étiquette réseau mettre LAN puis suivant et terminé.

    Voila votre switch est maintenant opérationnel.
    A ce stade vous avez maintenant deux switch, un vSwitch0 qui lui est connecté à la carte réseau de votre ESXI et le vSwitch1 qui va servir à créer votre LAN interne à l’ESXI

    Configuration des VM

    Il a deux types de VM

    1. La VM ayant accès a internet et faisant le partage
    2. Les VM du LAN n’ayant pas d’ip publique.

    LA VM PARTAGEANT LA CONNEXION INTERNET.

    Elle aura besoin de deux adaptateurs réseaux un sur le VM Network relié à internet et l’autre sur le réseau LAN.

    LES VM DU LAN N’AYANT PAS D’IP PUBLIQUE.

    Une seule interface réseau reliée uniquement sur le LAN.

    Paramétrage des machines sous debian

    Voila un schéma de ce à quoi nous devons arriver.

     

    partageconnexion-300x260.png

    Paramétrage du serveur partageant sa connexion internet. PARAMÉTRAGE CARTE RÉSEAU

    Nous devons définir les cartes eth0 (connectée au VM NETWORK) et eth1 (connectée à LAN).

    éditez le fichier  /etc/network/interfaces


     
    # This file describes the network interfaces available on your system
    # and how to activate them. For more information, see interfaces(5).
     
    # The loopback network interface
    auto lo
    iface lo inet loopback
     
    # The primary network interface
    allow-hotplug eth0
    iface eth0 inet static
            address 188.165.59.111
            netmask 255.255.255.255
            broadcast 188.165.59.111
            post-up route add 94.23.17.254 dev eth0
            post-up route add default gw 94.23.17.254
            post-down route del 94.23.17.254 dev eth0
            post-down route del default gw 94.23.17.254
     
    allow-hotplug eth1
    iface eth1 inet static
            address 192.168.4.1
            netmask 255.255.255.0
            broadcast 192.168.4.1
            # dns-* options are implemented by the resolvconf package, if installed
            dns-nameservers 213.186.33.99
            dns-search ovh.com

    MISE À JOUR DU NOYAU

    Maintenant que les cartes sont ok, nous allons activer la fonction de fowarding d’ip dans le noyau.

    éditez le fichier : /etc/sysctl.conf

    dé-commentez la ligne : net.ipv4.ip_forward=1

    Configuration du firewall iptable

    Nous allons créer un fichier  autoloader au démarrage pour initialiser le firewall

     
     
    vim /etc/network/if-pre-up.d/iptables-start

    et coller ceci dedans


    #!/bin/sh
     
    # REMISE à ZERO des règles de filtrage
    iptables -F
    iptables -t nat -F
     
    # Forwarfind ou eth0 est l interface connectée à internet

    iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

    on rend le script exécutable

     
     
    chmod a+x /etc/network/if-pre-up.d/iptables-start

    Voila la machine est prête.

    Paramétrage des serveurs sur le LAN

    Nous aurons juste qu’a paramétrer l’interface réseau.

    voici un exemple :


     
    allow-hotplug eth0
    iface eth0 inet static
            address 192.168.4.2
            netmask 255.255.255.0
            network 192.168.4.0
            broadcast 192.168.4.255
            gateway 192.168.4.1
            # dns-* options are implemented by the resolvconf package, if installed
            dns-nameservers 213.186.33.99

    Voila tout est en place


  4. Introduction

    Lorsque l on possède un site, il est bien sur ouvert au monde entier, il peut être interessant de savoir de quels pays viennent les internautes pour par exemple :

    • leur fournir un contenu différent
    • afficher le site dans la bonne langue…

    Il existe de multiples solutions, gratuites ou payantes.

    On peut acheter une base de donnée ou passer par des webservices.

    Les webservices

    Le probleme majeur dans ce type de solution reste le temps de latence entre la demande et le resultat ce qui peut donc ralentir grandement votre site. De plus vous êtes tributaire d’un prestataire qui peut très bien avoir une coupure de service ou meme carrément tout arréter du jour au lendemain.

    Les bases de donnée.

    Solution bien souvent payante mais qui a l avantage d être plus rapide. elle peut néanmoins consommer pas mal de ressources suivant sur votre site.

    La solution !!!

    A force de recherche j ai fini par trouver une vrai solution efficace qui merite d être connue!!
    Il existe une bibliothèque native dans php qui fait ce travail : geoip !!!

    Je vais donc vous montrer comment la mettre sous php5 sur une debian et l accoupler avec une banque de donnée gratuite de maxmind que nous mettrons a jour grâce à un cron.

    Installation

    Allez c est parti pour un tour, on va commencer par récupérer la base de donnée d ip par pays disponible via maxmind

     

    gunzip GeoLiteCity.dat.gz
    mkdir  /usr/share/GeoIP
    mv GeoLiteCity.dat /usr/share/GeoIP/GeoIPCity.dat

    Maintenant on installe la librerie qu il nous faut

     
    apt-get update
    apt-get install php5-geoip

    Il nous reste plus qu a faire une petite configuration dans le fichier .ini de geoip

     
     
    echo "geoip.custom_directory = /usr/share/GeoIP" >>/etc/php5/conf.d/geoip.ini

    On reload apache

     
     
    /etc/init.d/apache2 restart

    On verifie avec un phpinfo qui devrait vous donnez cela :
    geoip_phpinfo.png

    Utilisation

    L utilisation de la bibliotheque est très très simple je vous renvoie à la doc sur le site php pour plus d info :

    http://www.php.net/manual/fr/book.geoip.php

    Voici un exemple très simple pour tester :

     

    echo "<pre>";
    print_r(geoip_record_by_name($_SERVER['REMOTE_ADDR']));
    echo "</pre>";

    Qui donne le résultat suivant :
    Array
    (
    [continent_code] => EU
    [country_code] => FR
    [country_code3] => FRA
    [country_name] => France
    [region] =>
    [city] =>
    [postal_code] =>
    [latitude] => 46
    [longitude] => 2
    [dma_code] => 0
    [area_code] => 0
    )
    Et le tour est joué. Cette base est gratuite et ne possède pas beaucoup de donnée mais vous pouvez très bien avoir plus d information avec une base payante.

    Mise à jour

    Maintenant que tout cela marche bien il est temps de mettre tout cela à jour de manière automatique grâce a un cron

    Perso moi je veux faire la mise a jour une fois par semaine

     

    touch /etc/cron.weekly/geoip_update.sh
    chmod a+x  /etc/cron.weekly/geoip_update.sh

    Editez le fichier et coller les lignes suivantes

     

    cd ~
    gunzip GeoLiteCity.dat.gz
    mv GeoLiteCity.dat /usr/share/GeoIP/GeoIPCity.dat

    Voila le tour est joué


  5. Lorsque l’on possède un seul serveur, on peut facilement retenir le mot de passe root, ou pas si on s’appelle Dori la pote de Némo… Mais lorsque comme moi vous devez jongler entre le travail et la maison avec environ 200 machines, là retenir 200 mots de passe différents ça devient plus compliqué.

    Alors pour se simplifier la tâche, nous allons mettre en place une clé ssh, reconfigurer le serveur openssh et nous créer des alias sur notre machine histoire de nous faciliter la connexion au machine.

    Création de la clé ssh

    La clé ssh marche avec la combinaison de deux fichiers. Une partie publique que l’on déploie sur les serveurs et la partie privée que l’on conserve précieusement sur votre $HOME

    Nous allons donc générer ces deux fichiers.

    Pour cela il faut commencer par installer notre client SSH :

     
     
    apt-get update && apt-get install openssh-client

    Ps : Notez l’utilisation de l’opérateur && à la place de &

    le && ne lance la suite que lorsque la première partie est entièrement finie.

    Nous générons ensuite la clé

     
     
    ssh-keygen -t rsa -b 2048

    ssh-keygen prend ici deux paramètres :

    -t : Permet de spécifier le type de clé. je vous invite à lire le man pour voir les 4 possibilités suivant le protocole (à noter que le dsa est limité à un encryptage de 1024bits, c’est pour cela que je préfère le rsa).

    -b : 2048 représente le niveau d’encryptage de la clé, ici j ai mis 2048 bits.

    Il vous faut répondre maintenant à une série de questions, dont celle ci, qui permet surtout de nommer votre clé !!

    Enter file in which to save the key (/home/ivanb/.ssh/id_rsa) :

    Entrez le chemin complet en modifiant le id_rsa par cle_perso_serv, enfin ce que vous voulez.

    Enter passphrase (empty for no passphrase):

    Si vous laissez vide pas besoin de mot de passe, par contre si vous saisissez un mot de passe, il faudra le saisir pour que la clé fonctionne. Bon certain rabat-joie vont me dire « je ne vois pas l’intérêt de faire une clé pour mettre un mot de passe dessus! ».

    On parle d’une clé root ici, on est jamais trop parano. De plus, la saisie du mot de passe en passant par votre bureau ne se fera qu’une fois puisque l’agent ssh va stocker. C’est un peu comme si vous déverrouillez votre coffre fort. Pour toutes les autres connexions sur les serveurs utilisant cette clé, il n’y aura plus besoin de la ressaisir.

    Maintenant vous avez deux fichiers : cle_perso_serv et cle_perso_serv.pub

    Installation de la clé

    Il ne reste plus qu’à installer votre clé publique sur votre serveur.

    En premier lieu il faut que sur le serveur vous ayez déjà défini un compte avec le login et le mot de passe.

     
     
    ssh-copy-id -i ~/.ssh/cle_perso_serv.pub user@monserveur.com

    user : le nom d’utilisateur pour qui la clé sera disponible

    monserveur.com : soit l’ip soit le nom de domaine rattaché au serveur.

    Saisissez le mot de passe. Le tour est joué.

    Testez votre connexion :

     
     
    ssh user@monserveur.com

    Pour aller plus loin SÉCURISATION

    L’intérêt de la clé ssh est bien sur de nous faciliter la vie mais aussi de sécuriser la connexion à des comptes comme root.

    Voici quelques petits réglages supplémentaires :

    éditez le fichier /etc/ssh/sshd_config

    Modifiez la ligne

     
     
    PermitRootLogin Yes

    en

     
     
    PermitRootLogin without-password

    Modifiez le port d’ecoute ssh

     
     
    Port 22

    en

     
     
    Port 222

    On restart le serveur ssh

     
     
    /etc/init.d/ssh restart

    Facilité d’utilisation

    Si vous avez beaucoup de serveurs a gérer il est intéressant de se créer des alias.

    Au lieu de taper :

     
     
    ssh user@monserveur.com

    vous aurez à faire

     
     
    sshserveur

    Pour cela éditez votre fichier .bashrc

     
     
    vim ~/.bashrc

    rajoutez la ligne :

     
     
    alias sshserveur='ssh user@monserveur.com'

    si vous avez modifié le port cela sera

     
     
    alias sshserveur='ssh -p 222 user@monserveur.com'

    Debug

    Il m’est arrivé récemment une drôle d erreur en essayant de me connecter en ssh à un serveur n’ayant pas de clé.

     
     
    Received disconnect from XXX.XXX.XXX.XXX: 2: Too many authentication failures for user

    Cela vient en fait de notre ssh-agent qui tente de lancer notre clé pour s’authentifier. Au bout d’un moment le serveur en face de nous nous bloque sans nous laisser la possibilité de taper notre mot de passe.

    Pour cela il faut faire une connexion ssh de ce type :

     
     
    ssh -o PubkeyAuthentication=no user@monserveur.com

    De plus si comme moi vous avez beaucoup de clés, vous pouvez modifier vos alias en spécifiant la clé à utiliser pour le serveur. Cela donnera

     
     
    alias sshserveur='ssh -p 222 -i ~/.ssh/cle_perso_serv user@monserveur.com'
     

  6. Lorsque que l’on a un serveur ouvert sur internet , on s’expose à toutes sortes de menaces. Alors on peut avoir un anti-virus, un système anti DDOS comme celui fourni par ovh, rkhunter pour scanner votre machine, mais toutes ces solutions sont bien souvent des remèdes. Comment se protéger en amont de ses menaces? Comment se prémunir des scans ou de parc de zombies?

    La seule et unique réponse que j ai trouvé est votre firewall. Jusque la vous allez me dire : sans rire voila un grand comique, comme si on était pas au courant !!!

    Mais comme toute solution le firewall a aussi plusieurs faiblesses.

    Dans le principe vous allez bloquer des ports, ou des ips. Mais comment connaître les ips?

    Soit lors d’une attaque en analysant les logs vous relevez l’IP de l’attaquant et la blacklistez, soit un logiciel comme fail2ban le fait. Mais on reste la encore dans le remède et l’attaque a déjà eu lieu et a pu avoir de nombreuses conséquences.

    Dans cet article, je vais vous présenter un système normalement utilisé par les ‘pirates du p2p’ pour se protéger de Hadopi ou de la RIAA que nous allons retourner à notre avantage.

     

    Peerguardian 2

    Peerguardian dans sa version 2 pour linux, est une surcouche à votre firewall. Il va se nourrir d’une ou plusieurs listes d’ip considérées comme dangereuses pour faire votre blacklist. Traduction : un attaquant ne pourra même pas arriver jusque vous et débuter un scan ou une attaque, grâce à peerguardian.

    Comme je le disais plus haut à la base peerguardian comme son nom l’indique est un logiciel pour particulier qui s’adonne au téléchargement disons pas très légal. Et pour éviter de se faire sniffer et repérer par les ayants droits, ils utilisent ce petit logiciel. Mais il existe plein d’autres listes contenant les ips de spammeur, les ZBOTS , spyware et compagnie.

    Vous trouverez toutes les listes ici : https://www.iblocklist.com/lists.php

     

    Installation

    On edite le fichier source.list

     
     
    vim /etc/apt/sources.list

    et on rajoute :

    on installe les clés.

     

    gpg --keyserver keyserver.ubuntu.com --recv-keys C0145138
    gpg --export --armor C0145138 | apt-key add -
    gpg --export --armor C0145138 | apt-key add -

    et l’on met à jour les dépôts :

     
     
    apt-get update

    on peut maintenant installer peerguardian :

     
     
    apt-get install pgld pglcmd iftop

    je rajoute le paquet iftop afin de pouvoir regarder le trafic en temps réel.

    Configuration

    la configuration ce fait sur 3 fichiers :

    /etc/pgl/pglcmd.conf : fichier de configuration principal

    /etc/pgl/allow.p2p : fichier de whitelist

    /etc/pgl/blocklists.list : fichier contenant les urls des listes à aspirer lors de la mise à jour

    Le fichier pglcmd.conf est vide, personnellement j ai rajouté deux choses :

    Mes serveurs sont en lan derrière un firewall et je veux pas bloquer la communication entre eux donc j ai mis :

    WHITE_LOCAL= »1″

    et pour etre sur que ca marche :

     

    WHITE_IP_IN="192.168.11.0/24"
    WHITE_IP_OUT="192.168.11.0/24"

    ensuite j’automatise les mises à jour

     
     
    CRON="1"

    il faut bien sur adapter la plage ip à vos besoins.

    Ensuite pour whitelister un client ou votre propre ip éditez le fichier allow.p2p

    Le fichier fonctionne de cette manière pour whitelister le bureau par exemple qui a l ip 1.1.1.1 vous rajoutez la ligne

    bureau:1.1.1.1

    et le tour est joué, vous pouvez aussi mettre des plages d ip.

    Pour la gestion des listes éditons les fichiers blocklists.list

    il suffit alors tout simplement de dé-commenter et commenter les urls de listes dont le nom est bien souvent suffisamment parlant pour savoir de quoi il en retourne.

    exemple :

     

    http://list.iblocklist.com/lists/bluetack/web-exploit

     

    ATTENTION : Avant de lancer pglcmd pensez à whitelisté votre ip !!! sinon vous pouvez vous retrouver blacklisté !

    Utilisation de Peerguadian

    Voici les lignes de commandes

    pglcmd start demarre pgl et inject les régles dans iptables pglcmd stop stop pgl et purge iptables pglcmd restart restarts pgl. pglcmd reload reconstruit la liste local et la charge dans pgl pglcmd update Met a jour et reconstruie la liste local et reload dans pgl pglcmd status montre iptables pglcmd test pour faire un test pglcmd search PATTERN permet de rechercher une liste par rapport au mot clé PATTERN pglcmd stats voir les stats de pgl pglcmd reset_stats reset les stats de pgl pglcmd show_config Permet de voir la configuration actuel

    Et après :

    Si ca vous intéresse et pour vous rendre compte que le net est un monde dangereux regardez les logs des ips bloqués :

     
     
    tail -f /var/log/pgl/pgld.log

    j’ai trouvé aussi le pglcmd stats très intéressant .

    En conclusion

    Peerguadian est une surcouche pour votre firewall qui ne manque pas d’intérêt. On a vu que sa grande force est justement de se nourrir de listes et donc de bloquer des attaques relevées par d’autres que vous.

    Malheureusement il y a un revers à la médaille. En effet, les listes bloquent de larges plages d’ip, chez free par exemple et ovh.

    On peut donc blacklister des internautes sans le savoir et rendre son site ou webservices inaccessible.

    Il existe toute fois une page permettant de vérifier une ip

    https://www.iblocklist.com/search.php

    mais je n’ai pas trouvé comment se faire déblacklister à part bien sur peut être par le formulaire de contact.

    A utiliser donc mais avec des pincettes surtout pour de la prod


  7. Bonjour à vous,
     
    Après quelques expérimentations et mes installations sur iBuild, je me suis dis qu'il serait temps de partager ce que j'appelle une configuration de serveur web complète, performante et optimisé.

    Tout d'abord en temps que serveur web, nous n'allons pas prendre Litespeed Standard ou Entreprise, la version standard est trop limité et pour la version entreprise faut avoir un porte-monnaie solide, on va donc prendre la version OpenSource, OpenLitespeed.

     
    Prologue : Explications sur les logiciels utilisés.

    OpenLiteSpeed est une version libre et gratuite de LiteSpeed Web Server, fondée sur l'idée d'adopter une optique proche de celle de Nginx tout en assurant une configuration simple depuis une interface graphique mais aussi en supportant la syntaxe du rewriting d'Apache (mais ne supporte pas le fichier .htaccess), Litespeed possède sa propre version de PHP (PHP LSAPI) qui est 20% plus performante que PHP-FPM et 50% plus performante que mod_php.

     
    MariaDB est une version largement optimisé et puissante de MySQL maintenu par le père fondateur de MySQL : Michael Widenius, pour me croire, il suffit de vous dire que MariaDB est utilisé par Wikipédia, Google et bien évidemment iBuild, le plus gros avantage c'est finalement que vous n'êtes plus dépendant de Sun Microsystems et sa politique digne de celle de Facebook (rachat, rachat, vite!), il est parfaitement compatible avec les bases de données MySQL, ce n'est qu'un remplacement de MySQL, tout ce qui marche sous MySQL marche sous MariaDB.
     
    Varnish est un cache très puissant généralement couplé avec Nginx, il permet un chargement très rapide des pages, cependant peu pratique pour un environnement de développement puisqu'il met en cache la moindre des ressources et cela d'une manière assez agressive (il existe des moyens de vider le cache Varnish qu'on abordera)

    CSF ou ConfigServer Security & Firewall (avouer que CSF c'est mieux) est un pare-feu logiciel puissant et gratuit, il permettra de gérer quelques attaques SYN et de bloquer une bonne partie du portflood ou encore de gérer les ports qui seront ouverts ou non, cependant, il ne remplace pas un Anti-DDOS et est là de manière préventive.

     
    1. Installation des logiciels.
     
    AVERTISSEMENT : Toutes les commandes exécutés sont faites en temps que root, si vous n'avez pas accès au root, merci d'utiliser sudo.
     
    A. OpenLiteSpeed Web Server :
     
    Installation des dépendances requises :
     
    ​ Cette partie contient aussi des dépendances spécifiques à la compilation de OpenLiteSpeed, PHP et de quelques extensions et logiciels, pour installer les dépendances requises pour OpenLiteSpeed, il suffit d'entrer cette commande :


     

    apt-get -y install build-essential zlib1g-dev openssl libcurl4-openssl-dev libpcre3 libpcre3-dev libexpat1-dev curl sendmail-bin sendmail nano build-essential check install zip libgeoip-dev




    Installation et compilation d'OpenLiteSpeed :
     
    Nous admettons dans ce tutoriel que la dernière version est la 1.3, merci de consulter le site web http://open.litespeedtech.com/ afin de récupérer la dernière archive (actuellement : la version 1.3 est la dernière)
     
    Nous allons tout d'abord récupérer l'archive dans le dossier /tmp et l'extraire dans le même dossier :


     

    cd /tmp
    wget http://open.litespeedtech.com/packages/openlitespeed-1.3.tgz
    tar -xzf openlitespeed-*.tgz




    Nous allons maintenant procéder à la compilation, normalement, sous Debian Wheezy avec les dépendances installées précédemment, il ne devrait pas y avoir de problème, si jamais vous avez une erreur de compilation, merci de laisser un message sur ce topic :


     

    cd openlitespeed-*
    ./configure
    make && make install




    Une fois la compilation faite, il vous suffira de rentrer cette commande pour démarrer Litespeed :



     

    service lsws start
    cd ~
    



    Si l'installation a été faite sans problème, vous devriez pouvoir accéder au serveur depuis http://votreserveur:8088/ et obtenir cette page :
     


    dpnx.png

     

    Normalement, le panel de gestion de Litespeed est lui aussi opérationnel à l'adresse https://votreserveur:7080/ avec les identifiants admin et le mot de passe 123456, si cela marche, vous devriez obtenir ce panel :
     


    0pD2cCe.png

     
    Litespeed est maintenant opérationnel, nous verrons la configuration ainsi que la compilation de PHP plus tard.

    B. MariaDB :
     
    On ajoute tout d'abord le dépôt de MariaDB sur notre machine Debian Wheezy :



     

    apt-get install python-software-properties
    apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db
    add-apt-repository 'deb http://mirrors.linsrv.net/mariadb/repo/10.0/debian wheezy main’
    apt-get update




    On procède ainsi à l'installation de MariaDB, il vous sera demandé un mot de passe, choisissez un mot de passe sécurisé et complexe puisque ce mot de passe sera celui de l'user root MySQL :



     

    apt-get install mariadb-server libmariadbclient-dev




    Cette commande installe aussi la librairie MariaDBclient-dev qui remplace la librairie MySQL pour la compilation de PHP par exemple.
     
    C. Varnish :
     
    On ajoute le dépôt de Varnish ainsi que sa clé GPG :



     

    curl http://repo.varnish-cache.org/debian/GPG-key.txt | apt-key add -
    echo "deb http://repo.varnish-cache.org/debian/ wheezy varnish-4.0" >> /etc/apt/sources.list
    apt-get update




    Une seule commande suffit pour installer Varnish :



     

    apt-get install varnish




    Varnish est prêt mais il n'est pas encore configuré, nous aborderons cela dans la prochaine étape du tutoriel wink.png
     
    D. CSF :
     
    On retourne encore une fois dans le dossier /tmp et on récupère l'archive de CSF (et évidemment on la décompresse) :


     

    rm -fv csf.tgz
    wget http://www.configserver.com/free/csf.tgz
    tar -xzf csf.tgz
    



    On va maintenant dans notre dossier csf fraichement décompressé et on lance le script d'installation :



     

    cd csf
    ./install.sh




    CSF est opérationnel, nous allons très bientôt s'attaquer à la configuration wink.png
     
    2. Configuration des logiciels.
     
    On ne commencera pas dans l'ordre d'installation puisque certains logiciels comme CSF peuvent interférer avec le bon fonctionnement de certains logiciels utilisant certains ports.

    A. CSF :
     
    Pour simplifier au maximum ce tutoriel, je vais vous fournir un fichier de configuration totalement prêt et optimisé pour un serveur web, voici les caractéristiques :

    • Accepte les connexions TCP entrantes (IPv4 ou v6) sur les ports : 20,21,22,25,53,80,110,143,443,465,587,993,995,3306,7080,8088
    • Accepte les connexions TCP sortantes (IPv4 ou v6) sur les ports : 20,21,22,25,53,80,110,113,443,3306,7080,8088
    • Accepte les connexions UDP entrantes (IPv4 ou v6) sur les ports : 20,21,53,3306
    • Accepte les connexions UDP sortantes (IPv4 ou v6) sur les ports : 20,21,53,113,123
    • Refuse toutes autres connexions TCP ou UDP n'étant pas listé plus haut
    • Autorise le ping entrant, avec un maximum de requête de 1req/sec.
    • Autorise le ping sortant.
    • Protection SYN FLOOD activé par défaut, ralenti la vitesse des requêtes (désactiver SYNFLOOD = "1", si vous n'avez pas besoin de la protection pour le moment), limite de 100req/s 
    • Pas plus de 20 connexions simultanées ou concurrentes par IP, filtrage des requêtes sur port 80, 8088, 7080
    • Protection UDP FLOOD activé par défaut, aucun effet sur les requêtes, limite de 100req/s.
    • Enregistrement des blocages, bannissement ainsi que des limites de connexion et des SYN/UDP Flood.
    • Blocage définitif des IPs récidivistes.
    • Protection en cas de tentative de bruteforce (pas plus de 5 échec de connexion au port SSH).
    • Aucune limite de pays (vous pouvez bloquer des ports ou laisser accéder des pays à des ports)
    • Blocage des IPs en cas de DDoS
    • Traçage des utilisateurs/ip/machines activé.

    C'est une liste non-exhaustive, vous pouvez configurer d'autres paramètres.

    J'ai largement simplifié la tache, vous n'avez qu'à entrer ceci dans votre terminal pour remplacer votre configuration de CSF :





     

    cd /etc/csf/
    rm csf.conf
    wget https://gist.githubusercontent.com/Maxime-BHA/f48b77efeb3f001a024a/raw/eac0538de0249d0b6d0eba3338b24968effe8dac/csf.conf
    
    


    Vous n'avez plus qu'à recharger CSF et le redémarrer et le tour est joué :


     

    csf -r
    service csf restart 




    Si vous souhaitez éditer de vous même la configuration de CSF, vous pouvez la trouver sur ce lien, il vous suffira simplement de remplacer le fichier csf.conf qui se trouve dans /etc/csf/ et de recharger et redémarrer CSF comme expliqué plus haut.

    B. Varnish :
     
    Varnish est déjà installé, il faut maintenant le configurer pour qu'il mette en cache le contenu de Litespeed qui se trouve sur le port 8088, nous allons donc éditer/ouvrir le fichier default.vcl :
     



     

    nano /etc/varnish/default.vcl




    Une fois dans le fichier remplacer :



     

    backend default {
        .host = "127.0.0.1";
        .port = "8080";
    }




    Par ceci :


     

    backend default {
        .host = "127.0.0.1";
        .port = "8088";
    }




    Vous l'avez compris, nous venons juste de changer le port où Varnish va chercher les fichiers.

    Problème.. quand vous allez sur votre site, vous ne voyez toujours rien (au port 80), en effet, Varnish est encore configuré sur le port 6081, nous allons donc éditer le fichier de configuration (/etc/default/varnish) pour faire en sorte que Varnish pointe sur le port 80 et non le port 6081, commençons :
     



     

    nano /etc/default/varnish





    Une fois dans le fichier, chercher la ligne ## ALTERNATIVE 2, Configuration with VCL et remplacer :



     

    DAEMON_OPTS="-a :6081 




    Simplement par le port 80 :



     

    DAEMON_OPTS="-a :80 




    Il vous suffit maintenant de redémarrer Varnish avec cette commande :



     

    service varnish restart




    Varnish est installé, configuré et techniquement, si vous n'avez rien changé, vous devriez voir la page de Litespeed :
     


    dpnx.png

     

    C. MariaDB :
     
    Tout comme pour CSF, je vais vous simplifier au maximum la tache et vous donner une configuration déjà prête, je passe les caractéristiques techniques pour celle-ci, voici la commande à entrer :


     


    cd /etc/mysql/
    rm my.cnf
    wget https://gist.githubusercontent.com/Maxime-BHA/ef72669d0397c34dc2a4/raw/89d988317fc8cdfd28382e8f54b15b1788f9aa57/my.cnf
     
    

    Ensuite, il suffit de redémarrer votre serveur MariaDB :




     

    service mysql restart

     

     



    D. OpenLiteSpeed :
     
    Nous allons tout d'abord compiler PHP, dans ce tutoriel, nous utiliserons PHP 5.5.9, mais tout d'abord, nous devons installer les dépendances de PHP, aucun problème :



    apt-get -y build-dep php5
    apt-get -y install libfcgi-dev libfcgi0ldbl libjpeg62-dbg libmcrypt-dev libssl-dev libxml2-dev
     



    Une fois les dépendances installées, vous avez deux choix, la compilation manuelle (pour les vrais) ou la compilation semi-automatique (pour les faux).

    La compilation pour les faux (semi-automatique, on abordera que celle-ci dans ce tutoriel) :

    Il faut aller dans votre panel Litespeed à l'adresse http://votreserveur:7080/, connectez-vous avec vos identifiants (par défaut, utilisateur : admin, mot de passe : 123456),

     
    Une fois sur le panel, vous devriez voir dans le menu l'onglet "Actions" et dans ce même onglet, vous devriez voir "Compile PHP" :

     

    RGvfqMb.png

     

    Si vous êtes vraiment aveugle, allez simplement à cette url http://votreserveur:...hp/buildPHP.php (remplacer quand même votreserveur par l'adresse de votre serveur hein..), vous aurez ainsi une page vous proposant de choisir votre version de PHP, pour ma part ce sera PHP 5.5 :


    besq.png

     

    La prochaine page est celle-ci :
     


    MEq33Ds.png
     

    Maintenant que vous êtes sur cette page, supprimer tout ce qui est dans la zone "Configure Parameters" et mettez les lignes suivantes (ne pas cocher la case eAccelerator):


     
     


     


    '--with-litespeed' '--with-zlib-dir' '--with-freetype-dir' '--enable-cgi' '--enable-mbstring' '--with-libxml-dir=/usr' '--enable-soap' '--enable-calendar' '--with-curl' '--with-mcrypt' '--with-zlib' '--with-gd' '--disable-rpath' '--enable-inline-optimization' '--with-bz2' '--with-zlib' '--with-zip' '--enable-sockets' '--enable-sysvsem' '--enable-sysvshm' '--enable-pcntl' '--enable-mbregex' '--with-mhash' '--with-tidy' '--with-pcre-regex' '--with-mysql' '--with-pdo-mysql' '--with-mysqli' '--with-jpeg-dir=/usr' '--with-png-dir=/usr' '--enable-gd-native-ttf' '--with-openssl' '--with-libdir=lib64' '--with-libxml-dir=/usr' '--enable-exif' '--enable-dba' '--with-gettext' '--enable-shmop' '--enable-sysvmsg' '--enable-wddx' '--with-kerberos' '--enable-bcmath' '--enable-ftp' '--enable-intl' '--enable-soap=shared' '--with-pspell'

     




    ​Il vous suffira de cliquer sur Build PHP5.5.9 et vous aurez la page suivante :
    qoRFbew.png
     
    Une fois que le Main Status est **PREPARE_DONE**, vous pouvez cliquer sur Next, vous allez tomber sur la page de compilation qui demande tout de même d'accéder au SSH et faire cette commande :


     


     

    /usr/local/lsws/phpbuild/buildphp_manual_run.sh

     

     



    La compilation démarrera automatiquement en arrière-plan, vous pouvez voir le log détaillé tout en bas de la page :
     
    kEF7XWc.png
     
    Une fois la compilation finie, il vous suffira de faire un Graceful Restart depuis le menu action, ou de redémarrer Litespeed en méthode Robot :


     

    service lsws restart
    

     
     


    MAGIE :
    UF9XnFq.png
     
    Pour accéder à vos fichiers, il suffit de vous rendre dans /usr/local/DEFAULT/html/ et de mettre le contenu de votre site web.

    Ce tutoriel n'aborde aucunement la configuration avancé ainsi que celles des virtualhosts et l'installation de PHPMyAdmin sous LiteSpeed, nous aborderons cela dans un tutoriel qui sortira très prochainement.

     
    Je vous remercie de m'avoir lu.
     
     
    Installation d'un serveur web complet sous Debian 7 - OpenLiteSpeed, MariaDB, Varnish et CSF deMaximeBHA est mis à disposition selon les termes de la licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International.
    Fondé(e) sur une œuvre à http://ibuild.fr/ind...varnish-et-csf/.


  8. This is a tutorial on how to install an email server on Debian Wheezy 7.

    We are going to install the following components:

    E-mail server:

    • Postfix
    • Dovecot
    • Sasl library
    • MySQL

    Milters:

    • SpamAssassin
    • Clamav
    • Greylist

    Webserver:

    • Nginx
    • PHP5
    • phpMyAdmin
    • PostfixAdmin
    • RoundCube

    Please replace any text in red with your info.

    Here is a scheme about the internals, click on image to get a clear view:

     

    mailserver_diagram1.png

    1. Install Debian Wheezy 7

    When installing Debian 7 itself, only select ‘SSH server’ when prompted to select software.

    If Debian is ready, install the following packages:

    apt-get install sudo mc vim

    2. Install MySQL server and client

    apt-get install mysql-server mysql-client

    Enter a MySQL root password when prompted.

    Check that mysqld is running:

    ps aux

    3. Install PHP5 and Nginx

    At this point I use the Dotdeb repo to install PHP version 5.5.x

    Add Dotdeb repositories to /etc/apt/sources.list file:

    deb http://packages.dotdeb.org wheezy-php55 all

    deb-src http://packages.dotdeb.org wheezy-php55 all

    Add Dotdeb key:

    wget http://www.dotdeb.org/dotdeb.gpg

    sudo apt-key add dotdeb.gpg

    Update apt cache:

    apt-get update

    Install PHP5 and Nginx:

    apt-get install php5-fpm php5-imap php5-mysql php5-mcrypt php5-intl nginx openssl ssl-cert

    Make sure php5-fpm and nginx are running:

    service php5-fpm start

    service nginx start

    Create a folders to store web files:

    mkdir /home/clients_ssl

    mkdir /home/clients_ssl/<subdomain.domain.tld>

    mkdir /home/clients_ssl/<subdomain.domain.tld>/logs

    mkdir /home/clients_ssl/<subdomain.domain.tld>/tmp

    mkdir /home/clients_ssl/<subdomain.domain.tld>/www

    Create nginx config for this site:

    vi /etc/nginx/sites-available/<subdomain.domain.tld>_ssl

    Press ‘i’ and paste the following in vim, replace <yourip> and <subdomain.domain.tld> with your info:

    server {

    listen <yourip>:443;

    server_name <subdomain.domain.tld>;

    ssl on;

    ssl_certificate /etc/nginx/certs/<subdomain.domain.tld>.combined.crt;

    ssl_certificate_key /etc/nginx/certs/<subdomain.domain.tld>.key;

    root /home/clients_ssl/<subdomain.domain.tld>/www;

    index index.php index.html index.htm;

    location ~ .php$ {

    fastcgi_pass unix:/etc/php5/fpm/socks/ssl_<subdomain.domain.tld>.sock;

    include fastcgi_params;

    fastcgi_param HTTPS on;

    }

    location ~ /. {

    deny all;

    }

    access_log /home/clients_ssl/<subdomain.domain.tld>/logs/access.log;

    error_log /home/clients_ssl/<subdomain.domain.tld>/logs/error.log;

    error_page 404 /404.html;

    }

    Remove the default site and put your site online:

    rm /etc/nginx/sites-available/default

    ln -s /etc/nginx/sites-available/<subdomain.domain.tld>_ssl /etc/nginx/sites-enabled/<subdomain.domain.tld>_ssl

    Create the certs folder.

    mkdir /etc/nginx/certs

    Put your cerificates in there. Get a valid certificate from a certificate authority or create a self signed certificate.

    You can google on how to make one. Make sure to edit your Nginx config file to match the certificate filenames.

    Restart Nginx

    service nginx restart

    Create a php5-fpm config file:

    vi /etc/php5/fpm/pool.d/ssl_<subdomain.domain.tld>.conf

    Press ‘i’ and paste the following in vim, replace <subdomain.domain.tld> with your info:

    [ssl_<subdomain.domain.tld>]

    listen = /etc/php5/fpm/socks/ssl_<subdomain.domain.tld>.sock

    user = u1001

    group = g1001

    listen.owner = www-data

    listen.group = www-data

    listen.mode = 0666

    pm = dynamic

    pm.max_children = 50

    pm.start_servers = 1

    pm.min_spare_servers = 1

    pm.max_spare_servers = 5

    pm.max_requests = 0

    php_admin_value[open_basedir]=/

    php_admin_value[session.save_path]=/home/clients_ssl/<subdomain.domain.tld>/tmp

    php_admin_value[upload_tmp_dir]=/home/clients_ssl/<subdomain.domain.tld>/tmp

    php_admin_value[disable_functions]=dl

    Create a user for this virtualhost:

    groupadd -g 1001 g1001

    useradd --no-create-home -g 1001 -u 1001 u1001

    Create socks folder:

    mkdir /etc/php5/fpm/socks

    Remove the default php pool:

    rm /etc/php5/fpm/pool.d/www.conf

    Add timezone info to php ini file /etc/php5/fpm/php.ini:

    date.timezone = Europe/Tallinn

    Restart php5-fpm

    service php5-fpm restart

    4. Install phpMyAdmin

    cd /home/clients_ssl/<subdomain.domain.tld>/www

    wget 'http://downloads.sourceforge.net/project/phpmyadmin/phpMyAdmin/4.0.8/phpMyAdmin-4.0.8-english.tar.gz?use_mirror=netcologne'

    mv phpMyAdmin-4.0.8-english.tar.gz?use_mirror=netcologne pma.tar.gz

    tar -zxvf pma.tar.gz

    Hide pma or bots will try to hack into it:

    mv phpMyAdmin-4.0.8-english pma_763773

    cd pma_763773

    cp config.sample.inc.php config.inc.php

    Set the right owner for www and tmp folder:

    cd /home/clients_ssl/<subdomain.domain.tld>

    chown -R 1001.1001 www tmp

    Now you should be able to access pma at: https://<subdomain.domain.tld>/pma_763773/

    Now open phpMyAdmin and click on ‘SQL’ on the top menubar. Paste the following SQL queries to create a database and user, replace <password> as you see fit:

    CREATE DATABASE postfix;

    GRANT ALL PRIVILEGES ON postfix.* TO 'postfix_admin'@'%' IDENTIFIED BY '<dbpassword1>';

    GRANT SELECT ON postfix.* TO 'postfix'@'%' IDENTIFIED BY '<dbpassword2>';

    FLUSH PRIVILEGES;

    5. Install PostfixAdmin

    Although you can install it from a standard Debian package I am going to download it directly instead so I can put it under my custom path immediately.

    cd /home/clients_ssl/<subdomain.domain.tld>/www

    wget 'http://downloads.sourceforge.net/project/postfixadmin/postfixadmin/postfixadmin-2.3.6/postfixadmin-2.3.6.tar.gz?use_mirror=garr'

    mv postfixadmin-2.3.6.tar.gz?use_mirror=garr pfa.tar.gz

    tar -zxvf pfa.tar.gz

    mv postfixadmin-2.3.6 pfa_746338

    chown -R 1001.1001 pfa_746338

    cd pfa_746338

    sed -i 's/change-this-to-your.domain.tld/<subdomain.domain.tld>/g' config.inc.php

    Now edit configuration file config.inc.php and change these values:

    $CONF['configured'] = true;

    $CONF['postfix_admin_url'] = 'https://<subdomain.domain.tld>/pfa_746338';

    $CONF['database_type'] = 'mysqli';

    $CONF['database_host'] = 'localhost';

    $CONF['database_user'] = 'postfix_admin';

    $CONF['database_password'] = '<dbpassword1>';

    $CONF['database_name'] = 'postfix';

    $CONF['domain_path'] = 'YES';

    $CONF['domain_in_mailbox'] = 'NO';

    $CONF['fetchmail'] = 'NO';

    Go to https://<subdomain.domain.tld>/pfa_746338/setup.php

    This setup script should create the nesessary tables to postfix database.

    At the bottom of setup.php enter your admin password and click ‘Gererate password hash’.

    Edit config.inc.php and add the hash:

    $CONF['setup_password'] = '<hash>';

    Now enter superadmin account info. You can use this to access PostfixAdmin and configure domains, e-mail accounts, aliases etc.

    Try to log in with the admin account here: https://<subdomain.domain.tld>/pfa_746338

    6. Install Postfix and Sasl library

    apt-get install postfix postfix-mysql libsasl2-modules libsasl2-modules-sql

    When prompted, choose ‘Internet Site’.

    Use yor domain name as ‘System mail name': <subdomain.domain.tld>

    For example use ‘mail.yourdomain.tld’. Do not use ‘yourdomain.tld’ here if it is going to be one of your virtual mailbox domains.

    Create virtual mail user and group:

    groupadd -g 3000 vmail

    useradd -d /home/vmail -m -u 3000 -g 3000 vmail

    Edit /etc/postfix/main.cf:

    mydestination = <subdomain.domain.tld>, localhost

    and add the following lines:

    virtual_uid_maps = static:3000

    virtual_gid_maps = static:3000

    virtual_mailbox_base = /home/vmail

    virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_mailbox_domains.cf

    virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf

    virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf

    relay_domains = mysql:/etc/postfix/mysql_relay_domains.cf

    virtual_transport = lmtp:unix:private/dovecot-lmtp

    smtpd_recipient_restrictions =

    permit_mynetworks,

    permit_sasl_authenticated,

    reject_non_fqdn_hostname,

    reject_non_fqdn_sender,

    reject_non_fqdn_recipient,

    reject_unauth_destination,

    reject_unauth_pipelining,

    reject_invalid_hostname

    smtpd_sasl_auth_enable = yes

    smtpd_sasl_security_options = noanonymous

    smtpd_sasl_type = dovecot

    smtpd_sasl_path = private/auth

    milter_default_action = accept

    Create the following files:

    /etc/postfix/mysql_virtual_mailbox_domains.cf

    hosts = 127.0.0.1

    user = postfix

    password = <dbpassword2>

    dbname = postfix

    query = SELECT domain FROM domain WHERE domain='%s' and backupmx = 0 and active = 1

    /etc/postfix/mysql_virtual_mailbox_maps.cf

    hosts = 127.0.0.1

    user = postfix

    password = <dbpassword2>

    dbname = postfix

    query = SELECT maildir FROM mailbox WHERE username='%s' AND active = 1

    /etc/postfix/mysql_virtual_alias_maps.cf

    hosts = 127.0.0.1

    user = postfix

    password = <dbpassword2>

    dbname = postfix

    query = SELECT goto FROM alias WHERE address='%s' AND active = 1

    /etc/postfix/mysql_relay_domains.cf

    hosts = 127.0.0.1

    user = postfix

    password = <dbpassword2>

    dbname = postfix

    query = SELECT domain FROM domain WHERE domain='%s' and backupmx = 1

    /etc/postfix/sasl/smtpd.conf

    pwcheck_method: auxprop

    mech_list: plain login

    auxprop_plugin: sql

    sql_engine: mysql

    sql_hostnames: 127.0.0.1

    sql_user: postfix

    sql_passwd: <dbpassword2>

    sql_database: postfix

    sql_select: SELECT password FROM mailbox WHERE username = '%u@%r' AND active = 1

    Add postfix user to sasl group:

    adduser postfix sasl

    Enable secure smtp ports, edit /etc/postfix/master.cf and uncomment:

    submission inet n - - - - smtpd

    -o syslog_name=postfix/submission

    -o smtpd_tls_security_level=encrypt

    -o smtpd_sasl_auth_enable=yes

    -o smtpd_client_restrictions=permit_sasl_authenticated,reject

    -o milter_macro_daemon_name=ORIGINATING

    smtps inet n - - - - smtpd

    -o syslog_name=postfix/smtps

    -o smtpd_tls_wrappermode=yes

    -o smtpd_sasl_auth_enable=yes

    -o smtpd_client_restrictions=permit_sasl_authenticated,reject

    -o milter_macro_daemon_name=ORIGINATING

    7. Install Dovecot

    apt-get install dovecot-imapd dovecot-pop3d dovecot-mysql dovecot-lmtpd

    Create file /etc/dovecot/dovecot-mysql.conf.ext:

    driver = mysql

    connect = host=127.0.0.1 dbname=postfix user=postfix password=<dbpassword2>

    default_pass_scheme = MD5-CRYPT

    user_query = SELECT '/home/vmail/%d/%n' as home, 3000 AS uid, 3000 AS gid FROM mailbox WHERE username = '%u'

    password_query = SELECT password FROM mailbox WHERE username = '%u'

    Edit /etc/dovecot/conf.d/10-auth.conf

    disable_plaintext_auth = no

    auth_mechanisms = plain login

    #!include auth-system.conf.ext

    !include auth-sql.conf.ext

    Edit /etc/dovecot/conf.d/10-mail.conf

    mail_location = maildir:/home/vmail/%d/%n:INDEX=/home/vmail/%d/%n/indexes

    Edit /etc/dovecot/conf.d/10-ssl.conf

    ssl = yes

    Edit /etc/dovecot/conf.d/20-imap.conf

    mail_max_userip_connections = 10

    Edit /etc/dovecot/conf.d/auth-sql.conf.ext

    passdb {

    driver = sql

    # Path for SQL configuration file, see example-config/dovecot-sql.conf.ext

    args = /etc/dovecot/dovecot-mysql.conf.ext

    }

    userdb {

    driver = sql

    args = /etc/dovecot/dovecot-mysql.conf.ext

    }

    Edit /etc/dovecot/conf.d/10-master.conf

    service lmtp {

    unix_listener /var/spool/postfix/private/dovecot-lmtp {

    mode = 0600

    user = postfix

    group = postfix

    }

    }

    service auth {

    # Postfix smtp-auth

    unix_listener /var/spool/postfix/private/auth {

    mode = 0666

    }

    }

    Restart services:

    service dovecot restart

    service postfix restart

    You can now add a domain with PostfixAdmin and test your e-mail server.

    Any errors are found in logfiles:

    /var/log/auth.log

    /var/log/mail.log

    /var/log/syslog

    8. Install Milters

    apt-get install clamav-milter clamav-unofficial-sigs milter-greylist spamass-milter

     

    clamav-milter:

    Update ClamAv database and start the daemon:

    freshclam

    /etc/init.d/clamav-daemon start

    Edit /etc/default/clamav-milter and uncomment the last line:

    SOCKET_RWGROUP=postfix

    Create a socket folder inside Postfix chroot environment:

    mkdir /var/spool/postfix/clamav

    chown clamav /var/spool/postfix/clamav

    Configure ClamAv milter:

    dpkg-reconfigure clamav-milter

    Answer questions as follows:

    Handle configuration automatically --> yes

    User for daemon --> clamav

    Additional groups --> none (empty field)

    path to socket --> /var/spool/postfix/clamav/clamav-milter.ctl

    group owner for the socket --> clamav

    permissions (mode) for socket --> 660

    remove stale socket --> yes

    wait timeout for clamd --> 120

    foreground --> no

    chroot --> none (empty field)

    pid file --> /var/run/clamav/clamav-milter.pid

    temporary path --> /tmp

    clamd socket --> unix:/var/run/clamav/clamd.ctl

    hosts excluded for scanning --> none (empty field)

    mail whitelist --> none (empty field)

    action for "infected" mail --> reject

    action on error --> defer

    reason for rejection --> Rejecting harmful e-mail: %v found.

    headers -> replace

    log file --> /var/log/clamav/clamav-milter.log

    disable log file locking --> no

    maximum log file size --> 0

    log time --> yes

    use syslog --> no

    log facility (type of syslog message) --> LOG_LOCAL6

    verbose logging --> no

    log level when infected --> off

    log level when no threat --> off

    size limit for scanned messages --> 25

    Tell Postfix to use this new milter:

    postconf -e 'smtpd_milters = unix:/clamav/clamav-milter.ctl'

    postfix reload

     

    spamass-milter:

    Edit /etc/default/spamass-milter:

    Add ‘-m’ so it won’t change the subject header.

    Add ‘-r -1′ so Postfix rejects what SpamAssassin flags as spam.

    Add ‘-l’ to avoid scanning e-mails sent by logged in users.

    OPTIONS="-u spamass-milter -i 127.0.0.1 -m -r -1 -I"

    Restart milter:

    service spamass-milter restart

    Add a dedicated user for SpamAssassin daemon:

    adduser --shell /bin/false --home /var/lib/spamassassin --disabled-password --disabled-login --gecos "" spamd

    Edit /etc/default/spamassassin:

    ENABLED=1

    OPTIONS="--create-prefs --max-children 5 --helper-home-dir=/var/lib/spamassassin -u spamd -g spamd"

    CRON=1

    Update rules and restart the daemon:

    sa-update

    service spamassassin restart

    Tell Postfix to use new milter:

    postconf -e 'smtpd_milters = unix:/clamav/clamav-milter.ctl, unix:/spamass/spamass.sock'

    postfix reload

     

    milter-greylist:

    Edit /etc/milter-greylist/greylist.conf:

    # For sendmail use the following two lines

    #socket "/var/run/milter-greylist/milter-greylist.sock"

    #user "smmsp"

    # For Postfix uncomment the following two lines and comment out the

    # sendmail ones above.

    socket "/var/spool/postfix/milter-greylist/milter-greylist.sock" 660

    user "greylist"

    Edit /etc/default/milter-greylist:

    ENABLED=1

    SOCKET="/var/spool/postfix/milter-greylist/milter-greylist.sock"

    Make a folder for the socket and restart milter:

    mkdir /var/spool/postfix/milter-greylist

    chmod 2755 /var/spool/postfix/milter-greylist

    chown greylist:postfix /var/spool/postfix/milter-greylist

    service milter-greylist restart

    Tell Postfix to use the new milter:

    postconf -e 'milter_connect_macros = i b j _ {daemon_name} {if_name} {client_addr}'

    postconf -e 'smtpd_milters = unix:/milter-greylist/milter-greylist.sock, unix:/clamav/clamav-milter.ctl, unix:/spamass/spamass.sock'

    postfix reload

    9. Install RoundCube

    wget 'http://downloads.sourceforge.net/project/roundcubemail/roundcubemail/0.9.4/roundcubemail-0.9.4.tar.gz?use_mirror=heanet'

    mv roundcubemail-0.9.4.tar.gz?use_mirror=heanet roundcubemail-0.9.4.tar.gz

    tar -zxvf roundcubemail-0.9.4.tar.gz

    mv roundcubemail-0.9.4 rcb_733621

    chown -R 1001.1001 rcb_733621

    Open phpMyAdmin SQL window and paste:

    CREATE DATABASE roundcube;

    GRANT ALL PRIVILEGES ON roundcube.* TO roundcube@localhost IDENTIFIED BY '<rcpassword>';

    FLUSH PRIVILEGES;

    Add initial tables and data:

    cd /home/clients_ssl/<subdomain.domain.tld>/www/rcb_733621

    mysql -u roundcube -p roundcube < SQL/mysql.initial.sql

    Go to https://<subdomain.domain.tld>/rcb_733621/installer/

    See that your environment is ok and click Next.

    On the ‘Create config’ page, you may want to change the following values:

    product_name: <yourproductname>

    support_url: <yoururl>

    database name: roundcube

    database password: <rcpassword>

    default_host: localhost

    smtp_server: localhost

    language: en_US

    Click Continue

    Change the value in textarea to:

    $rcmail_config['use_https'] = true;

    Then copy all from textarea and paste the contents to main.inc.php and db.inc.php under /home/clients_ssl/<subdomain.domain.tld>/www/rcb_733621/config

    Remove installer folder:

    mv installer ../../

    Open RoundCube at https://<subdomain.domain.tld>/rcb_733621/


  9. Pour installer un programmes à partir de ses sources (src), il est généralement nécessaire de les configurer et compiler avant de procéder à l'installation proprement dite.

    Pour pouvoir compiler, assurez-vous d'avoir installé les paquetages suivants:
    gcc
    gcc-c++
    automake
    autoconf

    Avec yum cette commande suffit:

    # yum install gcc gcc-c++ automake autoconf


    Une fois l'environnement de compilation installé, vous pouvez installer un programme linux à partir de ses sources... Récupérez maintenant les sources de l'application que vous souhaitez installer.

     

    Décompacter l'archive

    Les manipulations peuvent se faire soit à l'aide d'un gestionnaire d'archives, de votre window manager si des actions sont implémentées, ou bien en ligne de commandes dans la console, méthode universelle et fonctionnelle pour tout linux.
    Dans un premier temps, il faut se placer dans le répertoire où se situe l'archive.
     

    $ cd /dossier/ou/est/archive

    Bien sûr, adaptez /dossier/ou/est/archive à l'emplacement de votre archive.

    Selon le format de compression, la méthode est différente.
    * l'archive porte l'extension .tar (TAR)

    $ tar xvf nom_du_fichier.tar


    * l'archive porte l'extension .gz (Gzip)

    $ gunzip nom_du_fichier.gz


    * l'archive porte l'extension .bz2 (Bzip2)

    $ bzip2 -d nom_du_fichier.bz2


    * l'archive porte l'extension .tar.gz (Tar/GZip appelé aussi Tarball)

    $ tar zxvf nom_du_fichier.tar.gz


    * l'archive porte l'extension .tar.bz2 (Tar/BZip2)

    $ tar jxvf nom_du_fichier.tar.bz2


    Une fois l'archive décompactée, se placer dans le réperoire.

    $ cd /dossier/ou/est/archive/decompactee


     

    Configurer, Compiler, Installer

    Il est généralement nécessaire de compiler les sources, mais, bien que la manipulation se fasse toujours de la même façon pour la majorité des cas, lire d'abord le fichier README et/ou INSTALL pour connaître les commandes nécessaires et de l'information sur d'éventuelles dépendances...
     

    $ ./configure

    Cette commande va configurer l'application à compiler en l'adaptant à votre système.
     

    $ make

    Cette commande permet de compiler l'application.
    eteindrelepc.pngPatientez durant la compilation, plus ou moins longue selon votre configuration et le programme. Si tout se passe normalement, de nombreuses lignes de commandes s'affichent dans la console.
    En cas de problème ou arrêt de la compilation, un message d'erreur vous informera du soucis rencontré, le plus souvent une dépendance à installer... Si un programme annexe est nécessaire procédez à son installation puis recommencez le compilation.

    Après avoir compilé l'application, passer à l'installation proprement dite... Pour cela il est nécessaire de passer en root (su et votre mot de passe dans la console)
     

    $ su
    # make install


    Vous pouvez alors exécuter votre application.

    En cas d'échec de compilation ou d'installation, nettoyer les fichiers créés automatiquement lors de la compilation.

    make clean

     


  10. Objectif: Installer Windows et Fedora sur le même disque dur.

    Utiliser le boot de démarrage de Windows, placé sur le MBR (Master Boot Record, secteur d'amorçage du disque dur) et de lui faire reconnaître votre installation Linux.

    Cette solution possède l'avantage de ne pas toucher à l'installation de Windows qui pourra ainsi de nouveau s'installer sans poser de problème à l'ensemble de votre installation. Au vu de la stabilité de Windows, cela semble plus sécurisé.

    Cela a été testé avec Windows 2000 et/ou Windows XP d'un côté ET Fedora Core 4, 5 ou 6 de l'autre. 

    Pré-requis: Installer Windows 2000 ou XP sur le disque dur. Défragmenter le disque dur (c:/) pour regrouper les données au début du disque. Il est bien sûr recommandé d'avoir un Windows fonctionnel, si possible, et pas trop chargé de spywares et tout çà...

    Etre en possession du CD de rescue et du DVD (ou CDs) d'installation de Fedora Core 5

    Pour partitionner et organiser le disque, j'utilise ici le LiveCD Gparted. Téléchargez l'ISO et gravez-le sur CD. (sourceforge download) Ce liveCD contient un noyau Linux minimal et le nécessaire pour faire fonctionner librement un très bon outil de gestion de partitions...smile.gif 

    Configurer la séquence de boot de l'ordinateur pour qu'il démarre sur le CD (ou DVD) Cela se trouve en général dans le BIOS (presser [suppr] au démarrage de la machine) , sous un nom du genre "boot sequence"

    Partitionner le disque dur Insérer le liveCD Gparted et booter l'ordinateur sur le CD. Au premier écran, presser ENTREE. Le CD se lance, patientez jusqu'à l'interface. Il vous est demandé de choisir la langue du logiciel, le clavier (azerty/fr) la resolution écran et l'échantillonnage couleurs... Naviguez au clavier et appuyer sur ENTREE pour confirmer les choix.

    Une fois fait, patientez le temps que gParted scanne votre matériel...

    Gparted présente alors votre disque, vous pouvez créér, (re)dimensionner et organiser vos partitions simplement.

    Votre partition Windows est par défaut la première, en FAT32 ou NTFS.

    Pour cette première partition, faites juste un redimensionnage, il est important de ne pas la déplacer (ou pire, formater)

    Viendront ensuite les partitions Linux , de type ext3. 

    Pour le multiboot, il faut une première partition /boot de 100 Mo

    Une seconde partition Linux accueillera le système / , minimum 6 Go

    Vous pouvez aussi créér une partition /home pour séparer les fichiers des utilisateurs Linux du système Linux. Donnez-lui alors l'espace souhaité, pensez cependant que les fichiers présents dans /home ne sont pas visible sur Windows ! Si vous ne le créez pas, /home sera contenu dans la partition "système"

    Arrive le tour de la partition Linux swap . C'est en quelque sorte une partition d'échange utilisée si nécessaire en complément de votre RAM. Sa taille peut varier de 512 à 2 Go. On recommande souvent de donner une valeur équivalente à la quantité de RAM disponible sur l'ordinateur.

    Le "reste" du disque est formaté en vfat (FAT32) et sera la ou les partition(s) partagée(s)par les deux plateformes... Vous pouvez bien sûr créér plusieurs partitions partagées... vfat permet la lecture et écriture sur Windows (FAT32) et Linux.

    disquedur01.gif

    Une fois le disque organisé, notez les partitions et leurs correspondances (/dev/hdc1 windows, /dev/hdc5 /boot, etc...)

    Quitter Gparted et retirer le liveCD.

    Installation de Fedora Core 5 sur ce disque Placer le DVD d'installation (ou le premier des CDs) de Fedora et bootez l'ordinateur sur celui-ci. Anaconda sera votre guide pour la procédure d'installation. Choisissez la langue, le clavier fr latin-9, et arrive le moment important de l'installation...

    "L'installation requiert le partitionnement de votre disque dur." 

    Choisir custom layout dans le menu déroulant pour l'installer en fonction de votre partitionnement. Vous arrivez sur un écran dans lequel votre disque dur est représenté. Dans la liste des partitions, repérez celles de type ext3

    Double-clic sur la première, celle de 100 Mo...

    Une fenêtre s'ouvre, dans la case point de montage, entrer /boot 

    Cocher "Formater la partition comme:" est sélectionnez ext3

    La seconde, le système Fedora, point de montage / 

    Eventuellement une troisième ext3, point de montage /home 

    Puis au tour du swap, formaté en swap...

    Cliquer Suivant

    Une fenêtre de récapitulatif et avertissement en raison du formatage... Cliquer Formater

    "Le programme d'installation GRUB sera installé sur ..." 

    Dans cette fenêtre, cochez la case Configuration des options avancées du chargeur de démarrage. Ceci permettra de placer le chargeur sur notre partition /boot

    Suivant

    Deux choix possibles, installation sur le MBR ou sur /boot

    Sélectionnez le second choix, /dev/hdc5 Premier secteur de la partition de démarrage

    Selon votre disque, vous aurez peut-être /dev/hda3 ...

    Je n'ai pas coché forcer l'utilisation de LBA32...

    Suivant

    Lorsque ces choix sont correctement faits, finir l'installation de Fedora Core 5 en choisissanr les applications qui seront installées. Laisser Anaconda faire son travail d'installation, cela va durer entre 15 minutes et 1 heure selon les paquetages installés et la vitesse de votre CPU et disque dur...

    A la fin de l'installation, le DVD s'éjecte, rangez-le et changez-le par le CD rescue de Fedora, puis cliquer Redémarrer.

    Récupérer le secteur d'amorce Linux La machine démarre sur le CD de rescue de Fedora. Presser sur ENTREE au lancement. Puis choisir la langue, le clavier, inutile de charger l'interface réseau, suivre les étapes jusqu'au shell (invite de commandes texte)

    Entrer ces commandes, une fois adaptées à la configuration de votre disque

    # chroot /mnt/sysimage

    # mkdir /mnt/Montage

    # mount -t vfat /dev/hdc8 /mnt/Montage

    # dd if=/dev/hdc5 of=/mnt/Montage/linux.bin bs=512 count=1

    Commentaire et adaptations à faire:

    # chroot /mnt/sysimage reste inchangé

    # mkdir /mnt/Montage crée un dossier Montage pour la partition partagée (dans /mnt) Vous pouvez lui donner un autre nom mais il doit se trouver dans /mnt de toutes façons ( /mnt/dossierdevotrechoix )

    # mount -t vfat /dev/hdc8 /mnt/Montage Remplacez hdc8 par celui de votre partition partagée. et Montage par le dossier créé précedemment. Ceci a pour effet de "monter" le contenu de la partition partagée dans le dossier Montage, de façon transparente... Nous allons l'utiliser pour communiquer à Windows le fichier qui nous intéresse.

    # dd if=/dev/hdc5 of=/mnt/Montage/linux.bin bs=512 count=1 Remplacez hdc5 par votre partition /boot et Montage par votre dossier de partage... 

    * Pas de partition partagée ? 

    Oubliez la création du point de montage et enregistrer le fichier sur une disquette en changeant hdc5 par votre partition /boot 

    dd if=/dev/hdc5 of=/media/floppy/linux.bin bs=512 count=1

    Vous pouvez relancer la machine et enlever le CD rescue, Ctrl+Alt+Suppr

    Ajouter Fedora au Multiboot Windows L'ordinateur boote encore sur Windows... Pour la dernière fois ?

    Récupérez linux.bin dans la partition partagée (ou sur la disquette) et collez-le dans c:/

    Affichez les fichiers cachés et système et ouvrez c:/boot.ini avec le notepad...

    Dans la section [operating systems], ajoutez le lanceur Fedora, par exemple:

    [operating systems]

    C:linux.bin="Linux FEDORA Core 5"

    multi(0)disk(0)rdisk(0)partition(1)WINDOWS="Windows" /fastdetect...

    Pour proposer par défaut Fedora, modifiez la ligne default

    default=C:linux.bin

    Enregistrez boot.ini et redémarrez la machine.

    Premier BOOT sur Fedora Le chargeur de Windows vous propose maintenant d'ouvrir Fedora ou Windows, sélectionnez Fedora.

    Vous allez procéder aux dernières étapes de l'installation, les derniers réglages pui l'ordinateur redémarre pour le vrai premier lancement...

    Bienvenue sur FC5 smile.gif 

    Activer la partition partagée sur Fedora Afin d'avoir toujours sous la main la partition partagée, il faut maintenant éditer le fichier fstab... Depuis le bureau de Fedora, à priori Gnome, cherchez et ouvrez le Terminal de commandes. (Applications -> Accessoires -> Terminal) 

    Passez en mode super-utilisateur

    $ su -

    Entrez votre mot de passe root et pressez ENTREE. Le symbole $ est remplacé par le symbole # en début de ligne, ceci signifie que vous êtes connecté en super utilisateur (root) sur la machine...

    # gedit /etc/fstab (changer gedit par kwrite sur KDE)

    L'éditeur de texte ouvre le fichier fstab, insérez la ligne suivante à la suite des lignes commençant par /dev/, changez hdc8 par votre partition partagée et Montage par le dossier correspondant.

    /dev/hdc8 /mnt/Montage vfat auto,users,rw,umask=0 0 0

    Enregistrez le fichier et au prochain démarrage de Fedora, /mnt/Montage contiendra la partition partagée.

     

  11. On installe le tout à l'aide de la commande magique, qui contient peut-être quelques redondances inutiles mais qui aura le mérite de mettre en place tout le nécessaire. Puisque un utilisateur non-root a été créé précédemment et qu'il peut utiliser sudo pour exécuter des commander administratives, on se connecte sous son identité pour administrer le serveur.

    $ sudo apt-get install apache2 apache2-utils mysql-server mysql-client php5 php5-curl php5-dev php5-geoip libapache2-mod-geoip php5-gd php5-imap php5-imagick php5-mysql php5-mcrypt php5-memcache php-pear phpmyadmin

    Lors de l'installation, vous allez être invité à créer l'utilisateur root de MySQL ainsi que divers paramètres à adapter à votre choix de configuration. Ces paramètres peuvent dans tous les cas être modifiés par la suite...

     

    Configuration sommaire de Apache

    $ sudo nano /etc/apache2/conf.d/security

    Si le serveur a vocation de publier des pages web, on le place en mode Production et on peut optionnellement désactiver les signatures serveur pour diffuser le minimum d'informations sur la configuration de la machine. Ce fichier est assez bien documenté, cherchez et adapter les lignes suivantes:

    ServerTokens Prod

    ServerSignature Off

    Si vous voulez églament interdire l'intégration de vos sites dans des iframes extérieures, considérer le fait d'activer la dernière option en enlevant le # en début de ligne:

    Header set X-Frame-Options: "sameorigin"

    On active ensuite les modules utiles, et on redémarre apache

    $ sudo a2enmod headers

    $ sudo a2enmod expires

    $ sudo a2enmod rewrite

    $ sudo a2enmod geoip

    $ sudo /etc/init.d/apache2 restart

     

    Configuration de MySQL

    Si vous n'avez pas créé de mot de passe pour l'utilisateur root de MySQL, c'est le moment !

    $ sudo mysql -u root

    mysql> UPDATE mysql.user SET Password=PASSWORD('***passe***') WHERE User='root';

    Query OK, 4 rows affected (0.00 sec)

    Rows matched: 4  Changed: 4  Warnings: 0

    mysql> FLUSH PRIVILEGES;

    Query OK, 0 rows affected (0.00 sec)

    mysql> exit

    Vous avez configuré MySQL au moment de l'installation via apt-get et vous avez attribué un mot de passe à l'utilisateur root. Vérifiez que la connection root sur Mysql échoue sans mot de passe

    $ sudo mysql -u root

    >Enter password:

    Welcome to the MySQL monitor. Commands end with ; or g.

    Your MySQL connection id is 40321

    Server version: 5.5.31-0+wheezy1-log (Debian)

    Copyright © 2000, 2013, Oracle and/or its affiliates. All rights reserved.

    Oracle is a registered trademark of Oracle Corporation and/or its

    affiliates. Other names may be trademarks of their respective

    owners.

    Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.

    mysql> exit

    Pour aller plus loin dans le paramétrage du serveur MySQL

    $ sudo nano /etc/mysql/my.cnf

     

    Configuration de phpMyAdmin

    Editer le fichier de configuration Apache pour phpMyAdmin afin de lui donner un Alias différent que celui par défaut. Ceci empêchera de nombreuses tentatives de connexion sur vos bases.

     

    $ sudo nano /etc/phpmyadmin/apache.conf

    Modifier l'Alias par le nom de votre choix

    # phpMyAdmin default Apache configuration

    Alias /mon_alias_phpmyadmin /usr/share/phpmyadmin

    Redémarrer Apache puis testez l'accès à phpMyAdmin dans un navigateur 

    $ sudo /etc/init.d/apache2 restart

    La page résultante sera donc: http://ns01.mondomaine.net/mon_alias_phpmyadmin


  12. Dernière phase du montage du serveur mails complet, l'installation d'un webmail afin de permettre aux utilisateurs de consulter leurs emails en ligne sur le serveur. Roundcube m'a paru être une bonne solution, complet, en français, pas vilain du tout et bénéficiant de fonctions jquery pour le glisser-déposer des messages, support CCS2, bref à mon goût.

    Pour son installation, nous allons récupérer la dernière archive en date sur le site officiel.

    Cela se passe ici: http://www.roundcube.net/download

    Téléchargez la dernière version complète (0.9.2 ce jour) et récupérez la sur votre serveur

    Nous n'allons pas utiliser l'auto-installer, alors on va déplacer ce dossier ( ou le supprimer )

     

    # tar xvzf roundcubemail-0.9.2.tar.gz /var/www

    # mv /var/www/roundcubemail-0.9.2 /var/www/alias_roundcubemail

    # chown root:www-data -R /var/www/alias_roundcubemail

    # cd /var/www/alias_roundcubemail

    # chmod 0777 logs

    # chmod 0777 temp

    # mv installer installer-off

    On prépare ensuite la base de données MySQL rouncube

    # mysql -uroot -pmot_de_passe_mysqlroot

    mysql> CREATE DATABASE roundcube;

    mysql> GRANT ALL ON roundcube.* TO 'roundcube'@'localhost' IDENTIFIED BY 'mot_de_passe_mysqlroundcube';

    mysql> quit

    On peuple la base de données roundcube avec le fichier SQL fourni

    # mysql -uroundcube -pmot_de_passe_mysqlroundcube -droundcube </var/www/alias_roundcubemail/SQL/mysql5.initial.sql

    On fait ensuite une copie des fichiers de configuration pour les utiliser

    # cp /var/www/alias_roundcubemail/config/db.inc.php.dist /var/www/alias_roundcubemail/config/db.inc.php

    # cp /var/www/alias_roundcubemail/config/main.inc.php.dist /var/www/alias_roundcubemail/config/main.inc.php

    On passe à l'édition, fichier db.inc.php  afin de connecter correctement à la base de donnée

    # nano /var/www/alias_roundcubemail/config/db.inc.php

    $rcmail_config['db_dsnw'] = 'mysql://roundcube:mot_de_passe_mysqlroundcube@localhost/roundcube';

    # nano /var/www/alias_roundcubemail/config/main.inc.php

    $rcmail_config['default_host'] = 'localhost';

    $rcmail_config['default_port'] = 143;

    $rcmail_config['imap_auth_type'] = LOGIN;

    ## Pour utiliser la fonction mail() de PHP pour les envois (easy)

    $rcmail_config['smtp_server'] = '';

    $rcmail_config['enable_installer'] = false;

    ## Permettre l'auto-complétion de la connexion

    $rcmail_config['login_autocomplete'] = 2;

    ## Pour autoriser Roundcube dans des frames

    $rcmail_config['x_frame_options'] = false;

    $rcmail_config['product_name'] = 'Mon Webmail';

    $rcmail_config['locale_string'] = 'fr';

    $rcmail_config['prefer_html'] = true;

    $rcmail_config['show_images'] = 1;

    Il y a de multiples autres paramètres intéressants !

    Pour finir, installons le Webmail sur Apache

    On assumera qu'il a été créé un sous domaine du nom de webmail

    Dans les faits, c'est la création d'une zone DNS type A avec le nom webmail, pointant sur le serveur...

    # nano /etc/apache2/sites-available/alias_roundcubemail.conf

    ServerName webmail.mondomaine.net

    DocumentRoot /var/www/alias_roundcubemail

    Options FollowSymLinks

    AllowOverride All

    alias_roundcubemail>

    Options FollowSymLinks -MultiViews -Indexes

    AllowOverride All

    Order allow,deny

    allow from all

    ErrorLog /var/log/apache2/error.log

    LogLevel warn

    CustomLog /var/log/apache2/access-alias_roundcubemail.log combined

    ServerSignature On

     

    On "installe" le site avec la commande suivante, puis on redemarre le serveur web

    # a2ensite # /etc/init.d/apache2 restart

     

    Il n'y a plus qu'à se connecter sur http://webmail.mondomaine.net


  13. Postfixadmin

    C'est une interface web qui permet de gérer les noms de domaines et adresses emails installés sur le serveur mails.

    Pour installer postfixadmin, j'ai choisi de récupérer sur le site web Postfixadmin le paquet pour debian, actuellement il s'agit de la version postfixadmin-_2.92-1_all.deb

    Une fois le paquet deb récupéré sur le serveur, on installe le paquet et sa dépendance nécessaire...

    $ sudo apt-get install wwwconfig-common

    $ sudo dpkg -i postfixadmin_2.92-1_all.deb

    Lors de l'installation, la base de données associée peut être créée, nous allons utiliser celle créée précedemment lors de l'installation de postfix.

    • Type:  mysql
    • Nom: postfix
    • Nom d'utilisateur: postfix
    • Un mot de passe utilisateur: mot_de_passe_postfix

    La méthode d'encryption des mots de passe est très importante puisque plusieurs applications vont y accéder. Au vu de l'installation faite précédemment, il faut choisir l'encodage de mysql, parfait pur une authentification SASL se déroulant avec PAM + mysql. Pour ne pas avoir un soucis lors de la création du premier mot de passe, on commence par éditer certaines lignes du fichier de config.

    # nano /etc/postfixadmin/config.inc.php

    $CONF['encrypt'] = 'mysql_encrypt';

    $CONF['authlib_default_flavor'] = 'md5';

    $CONF['dovecotpw'] = "/usr/sbin/dovecotpw";

    On place un alors lien symbolique dans /var/www et on change les droits

     

    $ sudo ln -s /usr/share/postfixadmin /var/www/alias_vers_postfixadmin

    $ sudo chmod -R o-r /usr/share/postfixadmin

    $ sudo chown root:www-data -R /usr/share/postfixadmin

     

    L'adresse web de Postfixadmin sera: http://ns01.mondomaine.net/alias_vers_postfixadmin

     

    postfixadmin est livré avec un script d'installation.

    Saisir l'URL: http://ns01.mondomaine.net/alias_vers_postfixadmin/setup.php

    Lors de l'installation par ce script, il faut choisir l'adresse email et le mot de passe du super-administrateur de postfix, utilisateur qui pourra faire toutes les opérations sur les comptes emails et emails. Il sera ensuite possible de nommer un administrateur par domaine si besoin. Mais avant de faire tout cela et d'ajouter les premiers domaines, fermer le navigateur une fois le super-administrateur créé et finaliser la configuration.

    Retour sur le fichier de configuration PHP.

    # nano /usr/local/share/postfixadmin/config.inc.php

    Voici certaines des lignes importantes de ce fichier:

    $CONF['configured'] = true;

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

    $CONF['database_type'] = 'mysql';

    $CONF['database_host'] = 'localhost';

    $CONF['database_user'] = 'postfix';

    $CONF['database_password'] = 'mot_de_passe_postfix';

    $CONF['database_name'] = 'postfix';

    ### Rappel

    $CONF['encrypt'] = 'mysql_encrypt';

    $CONF['authlib_default_flavor'] = 'md5';

    $CONF['dovecotpw'] = "/usr/sbin/dovecotpw";

    $CONF['default_aliases'] = array (

        'abuse' => 'email@mondomaine.net',

        'hostmaster' => 'email@mondomaine.net',

        'postmaster' => 'email@mondomaine.net',

        'webmaster' => 'email@mondomaine.net'

    );

    ### Afin de stocker dans /var/mail/virtual/mondomaine.net/email

    $CONF['domain_path'] = 'YES';

    $CONF['domain_in_mailbox'] = 'NO';

    $CONF['maildir_name_hook'] = 'NO';

    $CONF['user_footer_link'] = "http://ns01.mondomaine.net";

    $CONF['show_footer_text'] = 'YES';

    $CONF['footer_text'] = 'Aller sur Mon Domaine';

    $CONF['footer_link'] = 'http://ns01.mondomaine.net';

    $CONF['welcome_text'] = <<Salut, ici le message de bienvenue après création de nouveau compte email

    EOM;

    On va ensuite dépalcer le fichier setup.php

    # mv /usr/local/share/postfixadmin/setup.php /usr/local/share/postfixadmin/setup-done.php

    Il est maintenant possible d'utiliser postfixadmin, ajouter les domaines et adresses emails.

     

    Roundcube webmail

    roundcubemail.jpgDernière phase du montage du serveur mails complet, l'installation d'un webmail afin de permettre aux utilisateurs de consulter leurs emails en ligne sur le serveur. Roundcube m'a paru être une bonne solution, complet, en français, pas vilain du tout et bénéficiant de fonctions jquery pour le glisser-déposer des messages, support CCS2, bref à mon goût.

    Pour son installation, nous allons récupérer la dernière archive en date sur le site officiel.

    Cela se passe ici: http://www.roundcube.net/download

    Téléchargez la dernière version complète (0.9.2 ce jour) et récupérez la sur votre serveur

    Nous n'allons pas utiliser l'auto-installer, alors on va déplacer ce dossier ( ou le supprimer )

     

    # tar xvzf roundcubemail-0.9.2.tar.gz /var/www

    # mv /var/www/roundcubemail-0.9.2 /var/www/alias_roundcubemail

    # chown root:www-data -R /var/www/alias_roundcubemail

    # cd /var/www/alias_roundcubemail

    # chmod 0777 logs

    # chmod 0777 temp

    # mv installer installer-off

    On prépare ensuite la base de données MySQL rouncube

    # mysql -uroot -pmot_de_passe_mysqlroot

    mysql> CREATE DATABASE roundcube;

    mysql> GRANT ALL ON roundcube.* TO 'roundcube'@'localhost' IDENTIFIED BY 'mot_de_passe_mysqlroundcube';

    mysql> quit

    On peuple la base de données roundcube avec le fichier SQL fourni

    # mysql -uroundcube -pmot_de_passe_mysqlroundcube -droundcube </var/www/alias_roundcubemail/SQL/mysql5.initial.sql

    On fait ensuite une copie des fichiers de configuration pour les utiliser

    # cp /var/www/alias_roundcubemail/config/db.inc.php.dist /var/www/alias_roundcubemail/config/db.inc.php

    # cp /var/www/alias_roundcubemail/config/main.inc.php.dist /var/www/alias_roundcubemail/config/main.inc.php

    On passe à l'édition, fichier db.inc.php  afin de connecter correctement à la base de donnée

    # nano /var/www/alias_roundcubemail/config/db.inc.php

    $rcmail_config['db_dsnw'] = 'mysql://roundcube:mot_de_passe_mysqlroundcube@localhost/roundcube';

    # nano /var/www/alias_roundcubemail/config/main.inc.php

    $rcmail_config['default_host'] = 'localhost';

    $rcmail_config['default_port'] = 143;

    $rcmail_config['imap_auth_type'] = LOGIN;

    ## Pour utiliser la fonction mail() de PHP pour les envois (easy)

    $rcmail_config['smtp_server'] = '';

    $rcmail_config['enable_installer'] = false;

    ## Permettre l'auto-complétion de la connexion

    $rcmail_config['login_autocomplete'] = 2;

    ## Pour autoriser Roundcube dans des frames

    $rcmail_config['x_frame_options'] = false;

    $rcmail_config['product_name'] = 'Mon Webmail';

    $rcmail_config['locale_string'] = 'fr';

    $rcmail_config['prefer_html'] = true;

    $rcmail_config['show_images'] = 1;

    Il y a de multiples autres paramètres intéressants !

    Pour finir, installons le Webmail sur Apache

    On assumera qu'il a été créé un sous domaine du nom de webmail

    Dans les faits, c'est la création d'une zone DNS type A avec le nom webmail, pointant sur le serveur...

    # nano /etc/apache2/sites-available/alias_roundcubemail.conf

    ServerName webmail.mondomaine.net

    DocumentRoot /var/www/alias_roundcubemail

    Options FollowSymLinks

    AllowOverride All

    alias_roundcubemail>

    Options FollowSymLinks -MultiViews -Indexes

    AllowOverride All

    Order allow,deny

    allow from all

    ErrorLog /var/log/apache2/error.log

    LogLevel warn

    CustomLog /var/log/apache2/access-alias_roundcubemail.log combined

    ServerSignature On

     

    On "installe" le site avec la commande suivante, puis on redemarre le serveur web

    # a2ensite # /etc/init.d/apache2 restart

     

    Il n'y a plus qu'à se connecter sur http://webmail.mondomaine.net

     

     


  14. Il est temps de lancer les services et de contrôler le fonctionnement de tout cela...

    # /etc/init.d/postfix start

    # /etc/init.d/dovecot start

    # /etc/init.d/saslauthd start

    # /etc/init.d/amavis start

    # /etc/init.d/clamav-freshclam start

    # /etc/init.d/clamav-daemon start

    # /etc/init.d/spamassassin start

     

    Commandes utiles

    Connaître l'état de la Queue de mails

    # mailq

    Pour supprimer un seul mail de la Queue, il suffit d'indiquer son ID

    # /etc/init.d/postfix stop

    # postsuper -d queue_id

    # /etc/init.d/postfix start

    Pour vider entièrement la file d'attente...

    # /etc/init.d/postfix stop

    # postsuper -d ALL

    # /etc/init.d/postfix start

    Surveillez les logs des différents services

    # tail -f /var/log/mail.log

    # tail -f /var/log/mail.err

    # tail -f /var/log/dovecot.log

    Vérifier que votre serveur n'est pas en open relay ici: http://www.mailradar.com/openrelay


  15. Configuration Amavis, Spamassassin et Clamav

    Le principe de Amavis est de monitorer ces divers outils. Il récupère de postfix les messages, les traite avec clamav (antivirus) et spamassin et repasse dans postfix selon leur état.

    Autorisons clamav à traiter les message en l'ajoutant au groupe amavis et créons le dossier qui servira de quarantaine pour les virus...

    # usermod -a -G clamav amavis

    # mkdir -p /var/spool/virusmails

    # chown amavis:amavis /var/spool/virusmails

    # chmod 0770 /var/spool/virusmails

    Mettre à jour les divers outils installés, d'abord Clamav, patience !

    # freshclam

    Puis Spamassassin 

    # sa-update

    Le dossier de configuration de Amavis se situe dans /etc/amavis/conf.d et fonctionne un peu de la même manière que les fichiers de configuration de dovecot.

     # cd /etc/amavis/conf.d

    On fait une copie du fichier et on l'édite

    # cp 01-debian 01-debian.save

    # nano 01-debian

    $ENV{PATH} = $path = '/usr/local/sbin:/usr/local/bin:/usr/sbin:/sbin:/usr/bin:/bin';

    $file   = 'file';

    $gzip   = 'gzip';

    $bzip2  = 'bzip2';

    $lzop   = 'lzop';

    $rpm2cpio   = ['rpm2cpio.pl','rpm2cpio'];

    $cabextract = 'cabextract';

    $uncompress = ['uncompress', 'gzip -d', 'zcat'];

    $unfreeze   = ['unfreeze', 'freeze -d', 'melt', 'fcat']; #disabled (non-free, no security support)

    $arc        = ['nomarch', 'arc'];

    $unarj      = ['arj', 'unarj'];

    $unrar      = ['unrar-free']; #

    $zoo    = 'zoo';

    $lha    = 'lha';

    $lha    = undef;

    $pax    = 'pax';

    $cpio   = 'cpio';

    $ar     = 'ar';

    $ripole = 'ripole';

    $dspam  = 'dspam';

    1;  # ensure a defined return

     

    # cp 05-domain_id 05-domain_id.save

    # nano 05-domain_id

    use strict;

    chomp($mydomain = `head -n 1 /etc/mailname`);

    @local_domains_acl = ( "." ); # Permet de scanner tous les domaines

    # cp 15-content_filter_mode 15-content_filter_mode.save

    # nano 15-content_filter_mode

    ####### Décommenter les lignes suivantes

    @bypass_virus_checks_maps = (

       %bypass_virus_checks, @bypass_virus_checks_acl, $bypass_virus_checks_re);

    @bypass_spam_checks_maps = (

       %bypass_spam_checks, @bypass_spam_checks_acl, $bypass_spam_checks_re);

    # cp 20-debian_defaults 20-debian_defaults.save

    # nano 20-debian_defaults

    # Extrait des lignes importantes

    $QUARANTINEDIR = "/var/spool/virusmails";

    $quarantine_subdir_levels = 1; # enable quarantine dir hashing

    $log_recip_templ = undef;    # disable by-recipient level-0 log entries

    $DO_SYSLOG = 1;              # log via syslogd (preferred)

    $syslog_ident = 'amavis';    # syslog ident tag, prepended to all messages

    $syslog_facility = 'mail';

    $syslog_priority = 'debug';  # switch to info to drop debug output, etc

    $enable_db = 1;              # enable use of BerkeleyDB/libdb (SNMP and nanny)

    $enable_global_cache = 1;    # enable use of libdb-based cache if $enable_db=1

    $inet_socket_port = 10024;   # default listening socket

    $sa_spam_subject_tag = '*****SPAM***** ';

    $sa_tag_level_deflt  = undef;  # add spam info headers if at, or above that level

    $sa_tag2_level_deflt = 5.00; # add 'spam detected' headers at that level

    $sa_kill_level_deflt = 5.00; # triggers spam evasive actions

    $sa_dsn_cutoff_level = 25;   # spam level beyond which a DSN is not sent

    $sa_mail_body_size_limit = 200*1024; # don't waste time on SA if mail is larger

    $sa_local_tests_only = 0;    # only tests which do not require internet access?

    $MAXLEVELS = 14;

    $MAXFILES = 1500;

    $MIN_EXPANSION_QUOTA =      100*1024;  # bytes

    $MAX_EXPANSION_QUOTA = 300*1024*1024;  # bytes

    $final_virus_destiny      = D_DISCARD;  # (data not lost, see virus quarantine)

    $final_banned_destiny     = D_BOUNCE;   # D_REJECT when front-end MTA

    $final_spam_destiny       = D_PASS;

    $final_bad_header_destiny = D_PASS;     # False-positive prone (for spam)

    $enable_dkim_verification = 0; #disabled to prevent warning

    $virus_admin = "root@$mydomain"; # due to D_DISCARD default

    $X_HEADER_LINE = "Debian $myproduct_name at $mydomain";

    # cp 50-user 50-user.save

    # nano 50-user

    use strict;

    $spam_quarantine_to = undef;                   # Do nothing with Spam

    $spam_admin = "root";          # Where to send Notification

    1;  # ensure a defined return

    Pour activer le démon spamd, éditer /etc/default/spamassassin et passer la variable ENABLED à 1

    # nano /etc/default/spamassassin

    Pour paramétrer plus avant SpamAssasion, se référer au fichier local.cf

    # nano /etc/spamassassin/local.cf

     

  16. Dovecot sera le relai de transport emails IMAP et POP3.
    On va lui indiquer qu'il doit se connecter par mysql afin d'authentifier les utilisateurs dans la base de données postfix. 

    # cp /etc/dovecot/dovecot-sql.conf /etc/dovecot/dovecot-sql.conf.save
    # nano /etc/dovecot/dovecot-sql.conf

    driver = mysql
    connect = host=127.0.0.1 dbname=postfix user=postfix password=mot_de_passe_postfix
    default_pass_scheme = CRYPT
    password_query = SELECT password FROM mailbox WHERE username = '%u'
    user_query = SELECT '/var/mail/virtual/%d/%n' as home, 'maildir:/var/mail/virtual/%d/%n' as mail, 5000 AS uid, 5000 AS gid, concat('dirsize:storage=', quota) AS quota FROM mailbox WHERE username = '%u' AND active = '1'

    # cp /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.save
    # nano /etc/dovecot/dovecot.conf

    auth_debug = yes
    mail_debug = yes
    # auth_debug_password = yes

    listen = *, ::
    base_dir = /var/run/dovecot/
    instance_name = dovecot
    !include conf.d/*.conf

    protocols = imap pop3
    log_path = /var/log/dovecot.log
    info_log_path = /var/log/dovecot-info.log

    # SSL
    ssl = yes
    disable_plaintext_auth = no
    ssl_cert = ssl_key = verbose_ssl = yes

    service pop3-login {
      inet_listener pop3 {
        port = 110
      }
      inet_listener pop3s {
        port = 995
        ssl = yes
      }
    }

    protocol imap {
            imap_client_workarounds = delay-newmail tb-extra-mailbox-sep
    }

    protocol pop3 {
            pop3_uidl_format = %08Xu%08Xv
    }

    service imap-login {
            inet_listener imap {
            address = *
            port = 143
            }
            inet_listener imaps {
                port = 993
               ssl = yes
           }
    }


    Voilà donc pour la base de Dovecot. Il nous reste encore à configurer un certain nombre d'autres paramètres, dans les fichiers de configuration situés dans /etc/dovecot/conf.d

    # cd /etc/dovecot/conf.d


    # cp 10-auth.conf 10-auth.conf.save
    # nano 10-auth.conf

    disable_plaintext_auth = yes
    auth_mechanisms = plain login cram-md5 digest-md5
    !include auth-sql.conf.ext


    # cp 10-mail.conf 10-mail.conf.save
    # nano 10-mail.conf

    ####### Ajouter à la fin
    mail_location = maildir:/var/mail/virtual/%d/%n
    mail_uid = 5000
    mail_gid = 5000


    # cp 10-master.conf 10-master.conf.save
    # nano 10-master.conf

    ####### S'assurer de la bonne configuration de la section auth { }
    service auth {
     unix_listener /var/spool/postfix/private/auth {
        mode = 0777
        user = postfix
        group = postfix
      }
    }


    # cp auth-sql.conf.ext auth-sql.conf.ext.save
    # nano auth-sql.conf.ext

    passdb {
      driver = sql
      args = /etc/dovecot/dovecot-sql.conf
    }

    userdb {
      driver = sql
      args = /etc/dovecot/dovecot-sql.conf
    }
     

     


  17. Il y a encore besoin d'un certain nombre de fichiers additionnels pour faire la configuration de Postfix selon le filtrage que l'on veut activer. Je veux filtrer sur une liste d'expéditeurs et de destinataires valides, afin d'éviter que le serveur serve de relai ouvert pour tout les domaines.

    Dans cette optique, on va créer deux fichiers qui contiendront plus ou moins la même chose.
    Il suffit de saisir les noms de domaines acceptés. Dans ce cas, les emails sur mondomaine.net et  monautredomaine.com pourront recevoir des mails depuis partout et envoyer des emails partout.

    # nano /etc/postfix/access_by_recipient

    mondomaine.net                        OK
    monautredomaine.com              OK
    unautredomaine.com                 REJECT



    # nano /etc/postfix/access_by_sender

    mondomaine.net                        OK
    monautredomaine.com              OK
    unautredomaine.com                 REJECT

    Nous allons également éditer les alias système pour recevoir les alertes de Postfix et les messages administratifs par email.


    # nano /etc/aliases

    # /etc/aliases
    mailer-daemon: root
    postmaster: root
    nobody: root
    hostmaster: root
    usenet: root
    news: root
    webmaster: root
    www: root
    ftp: root
    abuse: root
    noc: root
    security: root
    root: email@mondomaine.net
    clamav: root


    On prépare ces fichiers pour être utilisés par Postfix. Si des modifications sont faites ultérieurement sur ces fichiers (ajout de domaines, alias ou autre), il sera nécessaire de les republier en saisissant la commande correspondante au fichier:

    # newaliases
    # postmap /etc/postfix/access_by_sender
    # postmap /etc/postfix/access_by_recipient

    On crée l'utilisateur et groupe vmail avec un UID et GID de 5000.
    Cet utilsateur aura comme dossier /var/mail/virtual qui sera donc le dossier de stockage emails

    # groupadd -g 5000 vmail
    # useradd -g vmail -u 5000 vmail -d /var/mail/virtual -m



    Nous avons maintenant les fichiers utiles à la configuration de Postfix.
    Avant de modifier les fichiers sensibles de la configuration, on en fera une copie avec un suffixe .save qui permettra si besoin de revenir à la configuration de base.

    On attaque par le main.cf

    # cp /etc/postfix/main.cf /etc/postfix/main.cf.save
    # nano /etc/postfix/main.cf

    biff = no
    anvil_rate_time_unit = 60s
    mail_name = Postfix Mail Server
    myhostname = ns01.mondomaine.net
    mydomain = mondomaine.net
    myorigin = $mydomain
    mail_owner = postfix
    alias_maps = hash:/etc/aliases
    alias_database = hash:/etc/aliases
    mydestination = ns01.mondomaine.net, localhost.mondomaine.net, localhost
    relayhost =
    notify_classes = resource, software
    mynetworks = 127.0.0.0/8, 91.91.91.91/32
    relay_domains =
    recipient_delimiter = +
    inet_interfaces = all
    smtpd_banner = $myhostname ESMTP $mail_name (Debian)
    append_dot_mydomain = no
    delay_warning_time = 1h
    maximal_queue_lifetime = 10d
    mailbox_size_limit = 0
    message_size_limit = 15728640

    virtual_alias_maps = mysql:/etc/postfix/mysql/mysql_virtual_alias.cf
    virtual_mailbox_base = /var/mail/virtual
    virtual_mailbox_domains = mysql:/etc/postfix/mysql/mysql_virtual_domains.cf
    virtual_mailbox_limit = 51200000
    virtual_mailbox_maps = mysql:/etc/postfix/mysql/mysql_virtual_mailbox.cf
    virtual_minimum_uid = 100
    virtual_uid_maps = static:5000
    virtual_gid_maps = static:5000

    #virtual_create_maildirsize = yes
    #virtual_mailbox_extended = yes
    #virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql/mysql_virtual_mailbox_limit.cf
    #virtual_mailbox_limit_override = yes
    #virtual_maildir_limit_message = Sorry, the maildir has overdrawn diskspace quota
    #virtual_overquota_bounce = yes

    # Transport par dovecot
    dovecot_destination_recipient_limit = 1
    virtual_transport = dovecot


    maps_rbl_domains = relays.ordb.org, opm.blitzed.org, blackholes.easynet.nl, cbl.abuseat.org
    smtpd_helo_required = yes
    allow_untrusted_routing = no
    disable_vrfy_command = yes

    # Securite SASL
    smtpd_sasl_local_domain = $myhostname
    smtpd_sasl_auth_enable = yes
    smtpd_sasl_type = dovecot
    smtpd_sasl_path = private/auth
    smtpd_sasl_security_options = noanonymous
    broken_sasl_auth_clients = yes

    # TLS server options
    smtpd_tls_security_level = may
    smtpd_tls_auth_only = no
    smtp_enforce_tls = no
    smtp_tls_enforce_peername = no
    smtpd_tls_key_file = /etc/ssl_cert/sCA/private/server-key-cert.pem
    smtpd_tls_cert_file = /etc/ssl_cert/sCA/private/server-key-cert.pem
    smtpd_tls_CAfile = /etc/ssl_cert/sCA/certs/serverCA.crt

    smtpd_tls_loglevel = 1
    smtpd_tls_received_header = yes
    smtpd_tls_session_cache_timeout = 3600s
    smtpd_tls_session_cache_database = btree:/var/lib/postfix/smtpd_tls_session_cache
    tls_random_source = dev:/dev/urandom
    smtpd_tls_ask_ccert = yes
    smtpd_tls_req_ccert = no
    smtpd_tls_mandatory_protocols = !SSLv2
    smtpd_tls_mandatory_ciphers = high
    smtpd_tls_mandatory_exclude_ciphers = aNULL, MD5
    smtp_use_tls = yes
    smtp_tls_note_starttls_offer = no
    smtp_tls_loglevel = 1

    smtpd_recipient_restrictions =
     permit_sasl_authenticated,
     reject_unauth_destination,
    check_recipient_access hash:/etc/postfix/access_by_recipient,
     check_sender_access hash:/etc/postfix/access_by_sender,

     reject_unauth_destination,
     reject_non_fqdn_recipient,
     reject_unknown_sender_domain,
     reject_non_fqdn_sender,
     reject_unknown_recipient_domain,
     reject_invalid_helo_hostname,
     reject_unlisted_recipient,
     reject_unlisted_sender,
     reject_non_fqdn_helo_hostname,
     reject_rbl_client list.dsbl.org,
     reject_rhsbl_sender $maps_rbl_domains, dsn.rfc-ignorant.org,
     reject_invalid_hostname,
     reject_unauth_pipelining, Passons au master.cf

    # cp /etc/postfix/master.cf /etc/postfix/master.cf.save
    # nano /etc/postfix/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").
    #
    # Do not forget to execute "postfix reload" after editing this file.
    #
    # ==========================================================================
    # service type private unpriv chroot wakeup maxproc command + args
    # (yes) (yes) (yes) (never) (100)
    # ==========================================================================
    smtp inet n - - - - smtpd
    submission inet n - - - - smtpd
     -o smtpd_tls_security_level=encrypt
     -o smtpd_sasl_auth_enable=yes

    #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
    proxywrite unix - - n - 1 proxymap
    smtp unix - - - - - smtp
    # When relaying mail as backup MX, disable fallback_relay to avoid MX loops
    relay unix - - - - - smtp
     -o smtp_fallback_relay=
    # -o smtp_helo_timeout=5 -o smtp_connect_timeout=5
    showq unix n - - - - showq
    error unix - - - - - error
    retry 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 vmail ${extension} ${recipient} ${user} ${nexthop} ${sender}
    #
    # 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 
    dovecot unix - n n - - pipe
     flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -d ${recipient}


    # Amavis
    smtp-amavis unix - - - - 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

    smtps inet n - - - - smtpd
     -o smtpd_tls_wrappermode=yes
     -o smtpd_sasl_auth_enable=yes

  18. Il existe de nombreuses solutions pour la gestion des emails sur un serveur dédié. Après avoir utilisé qmail pendant un moment sur la Release 2 de OVH, je me suis tourné vers une autre solution:

    - Postfix/Mysql avec identification SASL pour le serveur SMTP

    - Dovecot comme serveur POP & IMAP

    - Amavis comme surcouche de Spamassassin et Clamav

    La configuration de tout ce petit monde est plutôt complexe et va nécessiter de modifier de nombreux fichiers afin d'obtenir un bon fonctionnement. J'ai beaucoup tatonné avant de trouver une solution me convenant et je livre ici un résultat final, partant sur le principe que nous allons utiliser l'ensemble de ces paquets. On va passer en root pour ces opérations.

    La commande magique pour l'installation...

    $ su

    # apt-get install postfix postfix-mysql libsasl2-2 sasl2-bin libsasl2-modules dovecot-common dovecot-imapd dovecot-pop3d libpam-mysql clamav-daemon clamav-freshclam spamassassin amavisd-new arj nomarch lzop cabextract razor pyzor p7zip-full pax zip unzip unrar-free

    Choisissez "site internet" comme configuration de base pour Postfix et donnez le nom de votre machine comme serveur, soit ns01.mondomaine.net dans cet exemple... Une fois l'installation achevée, on va stopper tous les services, puisque rien n'est correctement configuré pour le moment 

    # /etc/init.d/postfix stop

    # /etc/init.d/dovecot stop

    # /etc/init.d/saslauthd stop

    # /etc/init.d/amavis stop

    # /etc/init.d/clamav-freshclam stop

    # /etc/init.d/clamav-daemon stop

    # /etc/init.d/spamassassin stop

     

     

    Configuration MySQL pour Postfix

    Créons la table Mysql de base qui sera utilisée par Postfix et Posfix-Admin par la suite.

    C'est ici que seront stockées nos adresses email entre autres...

    # mysql -u root -p

    mysql> create database postfix;

    mysql> grant create,alter,select,insert,update,delete on postfix.* TO 'postfix'@'localhost' identified by 'mot_de_passe_postfix';

    mysql> flush privileges;

    mysql> quit

    Ensuite, préparons les fichiers utiles pour faire la connexion à cette base

    # mkdir /etc/postfix/mysql

     

    Nous avons besoin de créer 4 fichiers:

    # nano /etc/postfix/mysql/mysql_virtual_alias.cf

    user = postfix

    password = mot_de_passe_postfix

    hosts = 127.0.0.1

    dbname = postfix

    table = alias

    select_field = goto

    where_field = address

     

    # nano /etc/postfix/mysql/mysql_virtual_domains.cf

    user = postfix

    password = mot_de_passe_postfix

    hosts = 127.0.0.1

    dbname = postfix

    table = alias

    table = domain

    select_field = domain

    where_field = domain

    #additional_conditions = and backupmx = '0' and active = '1'

    # nano /etc/postfix/mysql/mysql_virtual_mailbox.cf

    user = postfix

    password = mot_de_passe_postfix

    hosts = 127.0.0.1

    dbname = postfix

    table = mailbox

    select_field = maildir

    where_field = username

    additional_conditions = and active = '1'

    # nano /etc/postfix/mysql/mysql_virtual_mailbox_limit.cf

    user = postfix

    password = mot_de_passe_postfix

    hosts = 127.0.0.1

    dbname = postfix

    table = mailbox

    select_field = quota

    where_field = username

    Afin que Postfix puisse lire ces fichiers, on change les droits.

    # chmod 640 /etc/postfix/mysql/mysql_*

    # chgrp postfix /etc/postfix/mysql/mysql_*

    On se connecte via phpMyAdmin sur la base de données postfix et on crée les tables minimales utiles au fonctionnement de Postfix, avec la commande SQL suivante:

    CREATE TABLE IF NOT EXISTS `alias` (

      `address` varchar(255) NOT NULL,

      `goto` text NOT NULL,

      `domain` varchar(255) NOT NULL,

      `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',

      `modified` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',

      `active` tinyint(1) NOT NULL DEFAULT '1',

      PRIMARY KEY (`address`),

      KEY `domain` (`domain`)

    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;

    CREATE TABLE IF NOT EXISTS `domain` (

      `domain` varchar(255) NOT NULL,

      `description` varchar(255) CHARACTER SET utf8 NOT NULL,

      `aliases` int(10) NOT NULL DEFAULT '0',

      `mailboxes` int(10) NOT NULL DEFAULT '0',

      `maxquota` bigint(20) NOT NULL DEFAULT '0',

      `quota` bigint(20) NOT NULL DEFAULT '0',

      `transport` varchar(255) NOT NULL,

      `backupmx` tinyint(1) NOT NULL DEFAULT '0',

      `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',

      `modified` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',

      `active` tinyint(1) NOT NULL DEFAULT '1',

      PRIMARY KEY (`domain`)

    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;

    CREATE TABLE IF NOT EXISTS `mailbox` (

      `username` varchar(255) NOT NULL,

      `password` varchar(255) NOT NULL,

      `name` varchar(255) CHARACTER SET utf8 NOT NULL,

      `maildir` varchar(255) NOT NULL,

      `quota` bigint(20) NOT NULL DEFAULT '0',

      `local_part` varchar(255) NOT NULL,

      `domain` varchar(255) NOT NULL,

      `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',

      `modified` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',

      `active` tinyint(1) NOT NULL DEFAULT '1',

      PRIMARY KEY (`username`),

      KEY `domain` (`domain`)

    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;

     

     Authentification SASL pour Postfix

    Pour commencer on va créer un lien symbolique pour le daemon d'authentification et ajouter l'utilisateur postfix au groupe sasl 

    # mkdir -p /var/spool/postfix/var/run/saslauthd

    # ln -s /var/spool/postfix/var/run/saslauthd /var/run

    # chgrp sasl /var/spool/postfix/var/run/saslauthd

    # adduser postfix sasl

    Configuration par défaut du daemon

    # nano /etc/default/saslauthd

    START=yes

    DESC="SASL Authentication Daemon"

    NAME="saslauthd"

    MECHANISMS="pam"

    MECH_OPTIONS=""

    THREADS=5

    OPTIONS="-c -r -m /var/spool/postfix/var/run/saslauthd"

    Le mécanisme utlisé est "PAM", il faut le configurer pour qu'il puisse correctement accéder aux mots de passe stockés dans la base de données postfix. Il y a seulement deux lignes, deux longues lignes ( auth et account ) à ajouter à la fin du fichier

    # nano /etc/pam.d/smtp

    auth       required     pam_mysql.so user=postfix passwd=mot_de_passe_postfixhost=127.0.0.1 db=postfix table=mailbox usercolumn=username passwdcolumn=password crypt=1 md5=1

    account    sufficient   pam_mysql.so user=postfix passwd=mot_de_passe_postfixhost=127.0.0.1 db=postfix table=mailbox usercolumn=username passwdcolumn=password crypt=1 md5=1

    Configuration de l'authentification via SMTP dans Postfix

     # nano /etc/postfix/sasl/smtp.conf

    pwcheck_method: saslauthd auxprop

    auxprop_plugin: sql

    mech_list: plain login

    password_format: crypt

    log_level: 5

    allow_plaintext: true

    sql_engine: mysql

    sql_hostnames: 127.0.0.1

    sql_user: postfix

    sql_database: postfix

    sql_passwd: mot_de_passe_postfix

    sql_verbose: yes

    sql_select: SELECT password FROM mailbox WHERE username = '%u' LIMIT 1

    Indiquer à Postfix qu'il doit utiliser ce fichier lors du démarrage 

    # nano /etc/init.d/postfix

     Rechercher la ligne qui commence par FILES=" ( aux alentours de la ligne 150 ) et ajouter le fichier précédemment créé comme ceci:

    FILES="etc/localtime etc/services etc/resolv.conf etc/hosts 

                etc/nsswitch.conf etc/nss_mdns.config etc/postfix/sasl/smtpd.conf"

     

     


  19. Maintenant que l'installation de base est faite, voici un script de Pare-feu via iptables, à adapter selon la configuration et services actifs sur le serveur et des ports utilisés. J'ai séparé le code en plusieurs parties mais tout ceci est dans un seul et unique script que l'on va nommer firewall.sh ou quelque chose comme ça, à placer dans le dossier /root 

    Attention, de mauvaises règles de pare-feu peuvent boquer l'accès à votre serveur !

    # nano /root/firewall.sh

    #!/bin/bash

    # Vider les tables

    iptables -t filter -F

    iptables -t filter -X

    # Ne pas casser les connexions etablies

    iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

    iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

    On passe aux autorisations

    # Autoriser NTP

    iptables -t filter -A OUTPUT -p udp --dport 123 -j ACCEPT

    # Autoriser loopback

    iptables -t filter -A INPUT -i lo -j ACCEPT

    iptables -t filter -A OUTPUT -o lo -j ACCEPT

    # Autoriser ping

    iptables -t filter -A INPUT -p icmp -j ACCEPT

    iptables -t filter -A OUTPUT -p icmp -j ACCEPT

    # HTTP et HTTPS

    iptables -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT

    iptables -t filter -A OUTPUT -p tcp --dport 443 -j ACCEPT

    iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT

    iptables -t filter -A INPUT -p tcp --dport 443 -j ACCEPT

    # Serveur FTP

    iptables -t filter -A OUTPUT -p tcp --dport 20 -j ACCEPT

    iptables -t filter -A OUTPUT -p tcp --dport 21 -j ACCEPT

    iptables -t filter -A INPUT -p tcp --dport 20 -j ACCEPT

    iptables -t filter -A INPUT -p tcp --dport 21 -j ACCEPT

    iptables -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

    # Serveur DNS

    iptables -t filter -A OUTPUT -p tcp --dport 53 -j ACCEPT

    iptables -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT

    iptables -t filter -A OUTPUT -p tcp --dport 953 -j ACCEPT

    iptables -t filter -A OUTPUT -p udp --dport 953 -j ACCEPT

    iptables -t filter -A INPUT -p tcp --dport 53 -j ACCEPT

    iptables -t filter -A INPUT -p udp --dport 53 -j ACCEPT

    iptables -t filter -A INPUT -p tcp --dport 953 -j ACCEPT

    iptables -t filter -A INPUT -p udp --dport 953 -j ACCEPT

    Pour le filtrage des ports liés aux emails, ici il y a tous les ports utiles pour le smtp de base ou alternatif, pop, imap, smtps, etc etc... A adapter selon les besoin !

    # Autoriser les services Mail

    iptables -t filter -A INPUT -p tcp --dport 25 -j ACCEPT

    iptables -t filter -A INPUT -p tcp --dport 110 -j ACCEPT

    iptables -t filter -A INPUT -p tcp --dport 143 -j ACCEPT

    iptables -t filter -A INPUT -p tcp --dport 783 -j ACCEPT

    iptables -t filter -A INPUT -p tcp --dport 465 -j ACCEPT

    iptables -t filter -A INPUT -p tcp --dport 587 -j ACCEPT

    iptables -t filter -A INPUT -p tcp --dport 993 -j ACCEPT

    iptables -t filter -A INPUT -p tcp --dport 995 -j ACCEPT

    iptables -t filter -A INPUT -p tcp --dport 2703 -j ACCEPT

    iptables -t filter -A INPUT -p tcp --dport 5025 -j ACCEPT

    iptables -t filter -A OUTPUT -p tcp --dport 25 -j ACCEPT

    iptables -t filter -A OUTPUT -p tcp --dport 110 -j ACCEPT

    iptables -t filter -A OUTPUT -p tcp --dport 143 -j ACCEPT

    iptables -t filter -A OUTPUT -p tcp --dport 465 -j ACCEPT

    iptables -t filter -A OUTPUT -p tcp --dport 587 -j ACCEPT

    iptables -t filter -A OUTPUT -p tcp --dport 783 -j ACCEPT

    iptables -t filter -A OUTPUT -p tcp --dport 993 -j ACCEPT

    iptables -t filter -A OUTPUT -p tcp --dport 995 -j ACCEPT

    iptables -t filter -A OUTPUT -p tcp --dport 2703 -j ACCEPT

    iptables -t filter -A OUTPUT -p tcp --dport 5025 -j ACCEPT

    Autorise la connexion à Webmin sur un port personnalisé, par exemple le 17170

    Sinon, le port par défaut de Webmin est le 10000

    # Webmin

    iptables -t filter -A INPUT -p tcp --dport 17170 -j ACCEPT

    iptables -t filter -A OUTPUT -p tcp --dport 17170 -j ACCEPT

     

    Autorisation pour SSH sur un port personnalisé, par exemple le 22222

    Sinon, le port SSH par défaut est le 22

    # Autoriser SSH

    iptables -t filter -A INPUT -p tcp --dport 22222 -m recent --rcheck --seconds 60 --hitcount 2 --name SSH -j LOG --log-prefix "SSH REJECT"

    iptables -t filter -A INPUT -p tcp --dport 22222 -m recent --update --seconds 60 --hitcount 2 --name SSH -j DROP

    iptables -t filter -A INPUT -p tcp --dport 22222 -m state --state NEW -m recent --set --name SSH -j ACCEPT

     

    Il n'y a là que la base afin d'ouvrir uniquement les ports nécessaires à l'activité web.

    Didacticiel très complet sur iptables: http://www.frozentux.net/iptables-tutorial/fr/book1.html

    Une fois firewall.sh correctement renseigné, il faut rendre le script exécutable

    # chmod +x /root/firewall.sh

    Et ensuite l'exécuter

    # sh /root/firewall.sh

     

    Puis vérifier que les règles du pare-feu sont correctement chargées.

    # iptables -L

     


  20. Vous avez donc reçu un email avec les informations de connexion au serveur.

    On connait donc l'adresse IP du serveur, son hostname (nom d'hôte), le mot de passe du compte root. On se connecte par l'intermédiaire d'un terminal. ( ou d'un logiciel commePutty )

    ssh root@91.91.91.91

    Saisissez le mot de passe root.

    On fait quelques vérifications sur notre système de fichiers

    # uname -ar

    Linux ***.org 3.10.23-xxxx-std-ipv6-64 #1 SMP Tue Mar 18 (***) x86_64 GNU/Linux

    # cat /etc/debian_version

    7.7

    # cat /etc/fstab

    /dev/md2    /    ext4    errors=remount-ro,relatime    0    1

    /dev/md3    /home    ext4    defaults,relatime    1    2

    /dev/md5    /var    ext4    defaults,relatime    1    2

    /dev/sda4    swap    swap    defaults    0    0

    /dev/sdb4    swap    swap    defaults    0    0

    proc        /proc    proc    defaults        0    0

    sysfs        /sys    sysfs    defaults        0    0

    tmpfs        /dev/shm    tmpfs    defaults    0    0

    devpts        /dev/pts    devpts    defaults    0    0

    Pour des raisons assez évidentes de sécurité, c'est une très bonne chose que de changer immédiatement ce mot de passe root qui a circulé par email. 

    # passwd

    Tapez deux fois un nouveau mot de passe fort et sécurisé pour l'utilisateur root. Et conservez-le !

     

    Création d'un nouvel utilisateur 

    Profitez-en pour créer un utilisateur "normal", auquel nous donnerons les droits 'root' pour gérer les opérations d'administration du serveur. Ce sera l'utilisateur qui sera l'administrateur à privilégier, se connecter en root sur une machine est plus que déconseillé et par la suite nous interdirons toute connexion de l'utilisateur root par SSH.

    # adduser nom_utilisateur

    Saisir deux fois le mot de passe du nouvel utilisateur, là encore, penser à utiliser un mot de passe fort et sécurisé, puis on associe le nouvel utilisateur aux groupes root et adm afin qu'il puisse accéder aux tâches administratrives sur le système

    # adduser nom_utilisateur root

    # adduser nom_utilisateur adm

     

    Pour utiliser la commande sudo avec cet utilisateur, on installe le nécessaire

    # aptitude install sudo

    # visudo

    Ajouter la ligne suivante à la fin du fichier: 

    %root ALL=(ALL) PASSWD: ALL

    Pour confirmer l'enregistrement, faire Ctrl+X, puis presser Y pour yes...

     

    On installe quelques paquets utiles

    # aptitude install debian-goodies fail2ban ntp ntpdate

     

    Configuration Fail2ban pour le SSH:

    # nano /etc/fail2ban/jail.conf

     

    Ajouter une section pour sécuriser le SSH, en fin de fichier

    [ssh]

    enabled  = true

    port     = ssh

    filter   = sshd

    logpath  = /var/log/auth.log

    maxretry = 5

    bantime = 900

    On redémarre fail2ban

    # /etc/init.d/fail2ban restart

     

    Déplacer le port d'écoute de SSH

    # nano /etc/ssh/sshd_config

    Modifier la ligne Port 22 par Port 22020 (ou tout autre port non standard ouvert)

    On redémarre ensuite SSH

    # /etc/init.d/ssh restart

    Puis on se déconnecte du serveur

    # logout

     

    Reconnexion en SSH

    Après ces premières opérations, on donc doit pouvoir:

     

    Se connecter en SSH avec l'utilisateur root et/ou avec le nouvel utilisateur créé.

    S'assurer que tout cela est bien possible! On connecte avec le nouvel utilisateur, sur le nouveau port...

    ssh nom_utilisateur@91.91.91.91 -p 22020

    -> Saisir le mot de passe de l'utilisateur

     

    Tester la fonction sudo, par exemple en mettant à jour la base de données des fichiers:

    $ whoami

    nom_utilisateur

    $ sudo updatedb

    (saisir le mot de passe pour nom_utilisateur)

    Tester le passage en root pour notre utilisateur

    $ su -

    (saisir le mot de passe root)

    # whoami

    root

    Si tout cela fonctionne, on peut maintenant interdire l'accès SSH à l'utilisateur root en éditant le fichier de configuration... Changer yes par no pour le paramètre PermitRootLogin

    # nano /etc/ssh/sshd_config

    PermitRootLogin no

    Maintenant, il suffit de relancer le serveur SSH pour prendre en compte cette modification. A compter de ce moment, il faudra donc se connecter avec l'utilisateur qui possède les droits root sur la machine, mais qui n'est pas root...

    # /etc/init.d/ssh restart


  21. Dans le cas d'un serveur dédié OVH.

    Le partitionnement proposé n'est pas vraiment adapté à certaines spécificités Debian concernant le stockage des fichiers, il faut donc un partitionnement personnalisé, ce qui se paramètre au moment de l'installation du système.

    On va donc choisir d'installer ou réinstaller, sur un serveur dédié:

    • Système d'exploitation Linux
    • Distribution de base
    • Système d'exploitation Debian 7 stable (Wheezy)
    • 64 bits
    • Utiliser le noyau stable et testé d' OVH (recommandé)
    • Option de langue, je reste en Anglais

    Rester en Anglais ??? C'est surtout pour avoir des messages pour lesquels il sera plus simple de faire de la recherche sur le net ! A l'étape suivante, il faut choisir de faire un:

    • Partitionnement personnalisé
    Partitionner le serveur pour une installation de Debian

    Je passe sur l'outil OVH pour créer les partitions, cela reste assez maniable et compréhensible. A noter que les valeurs sont à noter en Mo. Lorsque l'on veut donc allouer 10 Go, il faut saisir 10240 Mo.

    On a besoin d'une partition système /

    Une debian Wheezy ne va pas occuper beaucoup d'espace, il faut compter une paire de Go mais il faut considérer de l'espace diponible pour le "taf" courant du système ( dossier /tmp ) afin qu'on ne se retrouve pas coincé rapidement en cas de surcharge serveur, je me baserai sur les 20 Go proposés par défaut...

    Par défaut, Debian stocke tout le matos web dans /var

    Les sites web sont stockés dans /var/www

    Les divers fichiers de log sont stockés dans /var/log

    Les bases de données sont stockés dans /var/mysql 

    Les emails sont stockés dans /var/mail 

    On va donc faire une partition /var qui occupera la plus grande partie du stockage.

    On fait une partition pour le ou les utilisateurs /home

    La taille est à définir en fonction de ses besoins, si par exemple on a beaucoup d'utilisateurs à qui on va donner accès à des FTPs privés, si on souhaite faire des back-ups dans le dossier d'un utilisateur non-root... Même si le besoin peut être quasi-nul, ne pas être radin et attribuer au moins une dizaine de Go ! Dans le cas présent, ce sera 100 Go car je vais y monter mes backups.

    Il faut également une partition de type swap

    Celle-ci sera très peu sollicitée sur un serveur orienté web, mais ça ne mangera pas grand chose que d'attribuer entre 2Go à ce effet...

     

     

    / primaire Le système de base

      ext4  20480 M /home primaire Les fichiers perso des utilisateurs.

      ext4  102400 M  /var primaire Les fichiers web, mails, logs

      ext4 Tout le reste swap primaire Un espace de swap

      swap 2048 M

     

    Une fois le partitionnement réalisé, Lancer l'installation et laisser tourner l'installeur d'OVH, cela va demander environ un quart d'heure avant d'obtenir l'email qui contient les informations pour se connecter au serveur fraîchement réinstallé.

     

  22.  

     
    Présentation de LXC

    Tout comme Linux-VServer et OpenVZ, LXC est une solution de virtualisation de type isolateur. Cette solution permet la virtualisation par container au niveau du noyau. LXC est très récent et remplace Linux-VServer et OpenVZ. Aussi, LXC est dès à présent intégré au noyau, ce qui n’a jamais été le cas des deux solutions citées précédemment.

    L’isolateur tire avantage de la possibilité, unique sous UNIX et Linux, de partager le noyau avec d’autres processus du système. Cette virtualisation à noyau partagé utilise une fonctionnalité nommée chroot. Cette fonctionnalité modifie le système de fichiers racine d’un processus pour l’isoler de manière à fournir une certaine sécurité. On parle alors de « prison » chroot.

    Un programme, ensemble de programmes ou système dans le cas de virtualisation à noyau partagé fonctionnant dans un environnement chroot est protégé en faisant croire au système emprisonné qu’il fonctionne sur une machine réelle avec son propre système de fichiers.

    Le mécanisme de chroot a été amélioré pour mimer un système de fichiers entier, de sorte qu’un système entier peut fonctionner dans un chroot, ce qui constitue une machine virtuelle.

    Cette solution est très performante du fait du peu d’overhead puisque les environnements virtualisés se partagent le code du noyau.

    Le schéma ci-dessous représente la technologie de virtualisation par isolation :

    isolateur-lxc.png

    Notes
    • La totalité des opérations décrites ne devrait pas vous prendre plus de 30 minutes (en dehors des temps nécessaires aux compilations qui devraient avoisiner les 45 minutes en fonction des performances de votre machine)
    • Si une partie d’une ligne de commande est surlignée comme ceci, cela signifie qu’elle peut ou doit être adaptée avec vos paramètres ou préférences
    • Je pars du principe que vous avez déjà installé une distribution sur votre serveur
    • Ce guide a été écrit et testé pour une Debian Wheezy 64 bits, il devrait cependant fonctionner avec ses dérivés (Ubuntu, Xandros, etc.)
    Compilation du nouveau noyau Linux

    Les noyaux par défaut installés sur les serveurs Kimsufi ont été privés de certaines options malheureusement indispensables au fonctionnement de LXC (Pid namespace, User namespace, Multiple /dev/pts instances, Cgroup namespace, Cgroup sched, Cgroup memory controller, Veth pair device, Macvlan). Pour cette raison, nous allons devoir en compiler un nouveau en activant les options nécessaires.

    Avant d’entamer de nombreuses manipulations sur un serveur, j’ai pour habitude de lancer un screen. Cela permet, en cas de coupure de la connexion, de ne pas stopper la tâche en cours (une compilation par exemple) ; vous pourrez donc vous y rattacher et ainsi reprendre là où vous en étiez.

    Si screen n’est pas déjà installé :

    apt-get install screen

    On créé la session screen :

    screen -S kim
    En cas de déconnexion, vous pourrez reprendre votre session comme ceci :

     

    screen -x kim

    Il est même possible de se rattacher à la session depuis plusieurs machines, cela vous permet par exemple de partager votre terminal avec une autre personne qui pourra voir en temps réel ce qu’il s’y passe.

    Nous allons commencer par reconfigurer les locales avec le jeu de paramètres régionaux français :

    dpkg-reconfigure locales

    On décoche les locales suivantes avec la barre d’espace :

    • en_GB ISO-8859-1
    • en_GB.ISO-8859-15 ISO-8859-15
    • en_GB.UTF-8 UTF-8

    On coche celles-ci :

    • fr_FR ISO-8859-1
    • fr_FR.UTF-8 UTF-8
    • fr_FR.UTF-8@euro
    • fr_FR@euro ISO-8859-15

    On valide, puis dans la fenêtre de dialogue qui suit on sélectionne fr_FR.UTF-8.

    Enfin, on précise au système quelle langue utiliser :

    echo "LC_ALL=fr_FR.UTF-8" >> /etc/environment

    echo "LANG=fr_FR.UTF-8" >> /etc/environment

    echo "LANGUAGE=fr_FR.UTF-8" >> /etc/environment

    On met à jour le système au cas où :

    apt-get update

    apt-get upgrade

    Pour compiler notre noyau, nous allons avoir besoin d’installer plusieurs outils :

    apt-get install make gcc libncurses5-dev lzma dpkg-dev wget

    On se créé un répertoire de travail :

    mkdir /root/noyau

    cd /root/noyau

    On récupère la dernière version stable du noyau sur https://www.kernel.org/.

    Actuellement la dernière version est la 3.14.3 :

    wget -P /root/noyau -c --no-check-certificate https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.14.3.tar.xz

    On décompresse l’archive et on se place dans le répertoire :

    tar -Jxvf linux-3.14.3.tar.xz

    cd /root/noyau/linux-3.14.3

    Par curiosité, on peut regarder quelle est la version du noyau actuellement utilisée :

    uname -r

    Pour que le noyau que nous allons compiler soit compatible avec la machine, nous allons devoir récupérer la dernière version du fichier de configuration du noyau d’OVH. Ces fichiers sont hébergés ici : ftp://ftp.ovh.net/made-in-ovh/bzImage

    On récupère la dernière configuration (actuellement la 3.14.2) :

    wget -P /root/noyau/linux-3.14.3 -c ftp://ftp.ovh.net/made-in-ovh/bzImage/3.14.2-2/config-3.14.2-xxxx-std-ipv6-64

    Dans l’utilitaire de configuration des options du noyau menuconfig, le nom par défaut du fichier de configuration est « .config », nous allons donc renommer celui que nous venons de télécharger :

    mv config-3.14.2-xxxx-std-ipv6-64 .config

    On lance l’utilitaire de configuration :

    make menuconfig

    Si vous n’êtes pas familier avec menuconfig, voici le minimum à savoir :

    • On se déplace avec les flèches haut, bas, gauche et droite
    • On coche une option avec la barre espace ([*] signifie que l’option est activée, [ ]signifie que l’option n’est pas activée)
    • ---> signifie que l’option dispose d’un sous-menu
    • On se rend dans un sous-menu avec la touche entrée

    La première étape est de charger le fichier de configuration. Pour cela, on se rend dans<Load> et on valide <Ok> avec la touche entrée.

    Ensuite, il faut activer les options suivantes :

    General setup --->

    [*] Control Group support --->

    [*] Example debug cgroup subsystem

    [*] Freezer cgroup subsystem

    [*] Device controller for cgroups

    [*] Cpuset support

    [*] Include legacy /proc/<pid>/cpuset file

    [*] Simple CPU accounting cgroup subsystem

    [*] Resource counters

    [*] Memory Resource Controller for Control Groups

    [*] Memory Resource Controller Swap Extension

    [*] Memory Resource Controller Swap Extension enabled[...]

    [*] Memory Resource Controller Kernel Memory accountin[...]

    [*] Enable perf_event per-cpu per-container group (cgrou[...]

    [*] Group CPU scheduler --->

    [*] Group scheduling for SCHED_OTHER (NEW)

    [*] CPU bandwidth provisioning for FAIR_GROUP_SCHED

    [*] Group scheduling for SCHED_RR/FIFO

    [*] Block IO controller

    [*] Enable Block IO controller debugging

    -*- Namespaces support --->

    [*] UTS namespace

    [*] IPC namespace

    [*] User namespace

    [*] PID Namespaces

    [*] Network namespace

    [*] Enable loadable module support

    Networking support --->

    Networking options --->

    <*> 802.1d Ethernet Bridging

    [*] IGMP/MLD snooping

    [*] VLAN filtering

    <*> 802.1Q/802.1ad VLAN Support

    [*] GVRP (GARP VLAN Registration Protocol) support

    Device Drivers --->

    [*] Network device support --->

    <*> MAC-VLAN support

    <*> MAC-VLAN based tap driver

    <*> Virtual ethernet pair device

    Character devices --->

    -*- Unix98 PTY support

    [*] Support multiple instances of devpts

    Une fois la configuration terminée, ne pas oublier d’enregistrer les modifications : <Save>puis <Ok>.

    Nous pouvons à présent quitter menuconfig : <Exit> et compiler notre nouveau noyau.

    La commande suivante redirige la sortie standard vers le fichier compil.log, cela vous permettra d’en savoir un peu plus en cas de problème ; aussi, pour que la compilation soit plus rapide, vous pouvez adapter l’argument 4 de l’option --jobs en fonction du nombre de threads que peut exécuter votre machine simultanément :

    make KDEB_PKGVERSION=3.14.2.cgroups.1.0 deb-pkg --jobs 4 | tee -a compil.log

    La compilation devrait durer une bonne demi-heure, voir plus, selon la configuration de votre serveur.

    Si tout se passe bien, vous devriez trouver votre nouveau noyau dans /root/noyau :linux-image-3.12.4-xxxx-std-ipv6-64_3.12.4.cgroups.1.0_amd64.deb

    LXC repose sur les fonctionnalités des Control Groups qui permettent de limiter, compter, et isoler l’utilisation des ressources processeur, mémoire, ou espace disque ; nous devons donc les monter automatiquement au démarrage de la machine, pour cela, il suffit de les ajouter dans /etc/fstab :

    echo "cgroup /sys/fs/cgroup cgroup defaults 0 0" >> /etc/fstab

    mkdir -p /sys/fs/cgroup

    mount /sys/fs/cgroup

    On déplace le noyau actuel :

    mv /boot/bzImage-3.10.23-xxxx-std-ipv6-64 /tmp

    mv /boot/System.map-3.10.23-xxxx-std-ipv6-64 /tmp

    mv /etc/grub.d/06_OVHkernel /tmp

    Nous pouvons à présent installer le noyau que nous venons de compiler :

    dpkg -i /root/noyau/linux-image-3.14.3-xxxx-std-ipv6-64_3.14.2.cgroups.1.0_amd64.deb

    Si l’installation s’est bien déroulée, on redémarre le serveur :

    reboot

    On pense à recréer une session screen :

    screen -S kim

    On s’assure que nous sommes à présent sur le nouveau noyau :

    uname -r

    Vous devriez obtenir la valeur suivante : 3.12.4-xxxx-std-ipv6-64

    Maintenant que la compilation et l’installation du nouveau noyau Linux sont terminées, nous pouvons passer à l’installation de LXC.

    Installation de LXC

    LXC est présent dans les dépôts, mais dans une ancienne version, qui de plus, peut poser quelques problèmes. Le projet évoluant assez vite, nous allons récupérer la dernière version directement depuis git et la compiler nous-mêmes.

    Pour cela, nous avons besoin de quelques outils :

    apt-get install git automake libcap-dev pkg-config docbook2x python3-dev

    On récupère le projet complet :

    cd /root

    git clone https://github.com/lxc/lxc.git

    On se place dans le répertoire contenant le projet et on lance le script de génération dumakefile :

    cd /root/lxc

    ./autogen.sh

    On démarre la compilation en lançant les commandes suivantes une par une :

    ./configure --enable-doc --enable-python --prefix=/usr | tee -a config.logmake -j4 | tee -a compil.logmake check

    On installe LXC :

    make install

    Un peu de nettoyage :

    make distclean

    Maintenant que nous avons un noyau compilé spécialement pour l’occasion, et que nous avons installé LXC dans sa version la plus récente, il convient de s’assurer que la configuration du noyau est correcte :

    lxc-checkconfig

    Tout devrait être à « enable ».

    En lançant la commande lxc-checkconfig, vous pouvez voir que le contrôleur memory est activé ce qui n’est pas tout à fait exact ; le terme adéquat serait « supporté » car en réalité, par défaut, il est désactivé. Ce contrôleur permet de limiter l’utilisation de la mémoire (plus d’infos ici et ). Nous allons donc devoir l’activer en remplaçant la ligneGRUB_CMDLINE_LINUX="" du fichier /etc/default/grub parGRUB_CMDLINE_LINUX="cgroup_enable=memory". La commande sed suivante vous épargnera l’édition manuelle du fichier :

    sed -i -e "s/GRUB_CMDLINE_LINUX=""/GRUB_CMDLINE_LINUX="cgroup_enable=memory"/g" /etc/default/grub

    On applique les modifications puis on redémarre la machine pour la dernière fois :

    update-grub

    reboot

    LXC est à présent prêt à fonctionner, cependant, avant de pouvoir créer des serveurs virtuels, il va nous falloir effectuer une petite modification.

    Par défaut, les containers sont stockés dans le répertoire /usr/var/lib/lxc. Or sur un serveur Kimsufi PS 4G de 1To, la partition / ne fait que 20 Go, contre 898 Go pour la partition /home. Nous allons donc déplacer l’emplacement par défaut vers/home/containers.

    On créé le répertoire /home/containers :

    mkdir /home/containers

    On créé un lien symbolique de /usr/var/lib/lxc vers /home/lxc :

    rm -r /usr/var/lib/lxc

    ln -s /home/containers/ /usr/var/lib/lxc Création d’un serveur virtuel sous Debian Wheezy

    On installe les paquets nécessaires à la création du pont et du rootfs :

    apt-get install bridge-utils debootstrap

    Les templates de création de containers fournis avec LXC sont stockés dans/usr/share/lxc/templates.

    Ces templates automatisent l’installation des distributions. Je vous propose de personnaliser le template de création d’un container Debian en modifiant les paramètres de langues et en ajoutant quelques paquets.

    On met de côté le template original :

    cp /usr/share/lxc/templates/lxc-debian /usr/share/lxc/templates/lxc-debian.bak

    De base, les paramètres de langues sont définis en anglais, nous allons éditer deux lignes pour les mettre en français :

    • chroot $rootfs locale-gen en_US.UTF-8 UTF-8 devient chroot $rootfs locale-gen fr_FR.UTF-8
    • chroot $rootfs update-locale LANG=en_US.UTF-8 devient chroot $rootfs update-locale LANG=fr_FR.UTF-8

    Les commandes sed suivantes vous épargneront l’édition manuelle du fichier :

    sed -i -e "s/locale-gen en_US.UTF-8 UTF-8/locale-gen fr_FR.UTF-8/g" /usr/share/lxc/templates/lxc-debian

    sed -i -e "s/update-locale LANG=en_US.UTF-8/update-locale LANG=fr_FR.UTF-8/g" /usr/share/lxc/templates/lxc-debian

    Nous allons également ajouter deux paquets : l’éditeur de texte vim et l’utilitaire iputils-ping qui permet de tester l’accessibilité d’une autre machine à travers un réseau IP :

    La commande sed suivante vous épargnera l’édition manuelle du fichier :

    sed -i -e "s/openssh-server/openssh-server,niputils-ping,nvim/g" /usr/share/lxc/templates/lxc-debian

    Nous sommes à présent prêts à créer notre premier container sous Debian Wheezy.

    Pour cela rien de plus simple :

    • on créé un nouveau container : lxc-create
    • on lui donne un nom : -n vm1
    • on indique quel template utiliser : -t debian

    Ce qui nous donne :

    lxc-create -n vm1 -t debian

    Comme vous avez pu le constater, l’installation a duré quelques minutes, rassurez-vous, la création de nouveaux containers ne prendra que quelques secondes, car les paquets nécessaires ont été mis en cache.

    Nous venons de créer notre premier container, avant de le démarrer, nous allons configurer le réseau pour qu’il ait accès à internet.

    Configuration du réseau Configuration du container

    Nous allons commencer par configurer l’interface de notre serveur virtuel en lui attribuant une adresse privée. Pour cela, on édite son fichier interfaces comme suit :

    vim /home/containers/vm1/rootfs/etc/network/interfacesauto lo

    iface lo inet loopback

    auto eth0

    iface eth0 inet static

            address 192.168.1.2

            netmask 255.255.255.0

            broadcast 192.168.1.255

            gateway 192.168.1.1

    Pour finir, on édite le fichier de configuration de notre serveur virtuel en ajoutant les éléments suivants à la fin du fichier :

    vim /home/containers/vm1/config# Network

    lxc.utsname = vm1

    lxc.network.type = veth

    lxc.network.flags = up

    lxc.network.link = br0

    lxc.network.name = eth0

    lxc.network.ipv4 = 192.168.1.2/24

    lxc.network.ipv4.gateway = 192.168.1.1

    lxc.network.veth.pair = veth-vm1 Configuration de l’hôte

    Nous allons à présent configurer l’hôte en autorisant le système à rediriger les paquets IP. Pour cela, il suffit d’éditer le fichier /etc/network/interfaces et d’ajouter la ligne suivante pour l’interface eth0 :

    vim /etc/network/interfacespost-up echo 1 > /proc/sys/net/ipv4/ip_forward

    Comme nos containers auront chacun une adresse réseau privée, nous allons créer une nouvelle interface qui aura pour rôle de faire un pont entre l’ensemble des adresses privées de nos containers et l’interface physique eth0. Pour cela, on ajoute la configuration suivante à la suite du fichier /etc/network/interfaces :

    auto br0

    iface br0 inet static

            address 192.168.1.1

            netmask 255.255.255.0

            bridge_ports none

            bridge_stp off

            bridge_fd 0

            bridge_maxwait 5

    Pour que l’ensemble de nos containers puisse accéder à internet, nous allons devoir ajouter une règle iptables pour activer le SNAT et la mascarade. Pour cela, on ajoute la ligne suivante pour l’interface eth0 :

    post-up iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE

    Le fichier de configuration du réseau de votre hôte devrait maintenant ressembler à ceci :

    auto lo

    iface lo inet loopback

    auto eth0

    iface eth0 inet static

        address 5.39.88.234

        netmask 255.255.255.0

        network 5.39.88.0

        broadcast 5.39.88.255

        gateway 5.39.88.254

        post-up echo 1 > /proc/sys/net/ipv4/ip_forward

        post-up iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE

    auto br0

    iface br0 inet static

        address 192.168.1.1

        netmask 255.255.255.0

        bridge_ports none

        bridge_stp off

        bridge_fd 0

        bridge_maxwait 5

    iface eth0 inet6 static

        address 2001:41D0:8:9Aea::1

        netmask 128

        post-up /sbin/ip -f inet6 route add 2001:41D0:8:9Aff:ff:ff:ff:ff dev eth0

        post-up /sbin/ip -f inet6 route add default via 2001:41D0:8:9Aff:ff:ff:ff:ff

        pre-down /sbin/ip -f inet6 route del default via 2001:41D0:8:9Aff:ff:ff:ff:ff

        pre-down /sbin/ip -f inet6 route del 2001:41D0:8:9Aff:ff:ff:ff:ff dev eth0

    La configuration est à présent terminée, il ne vous reste plus qu’à redémarrer vos interfaces réseau pour enfin profiter des avantages des containers :

    service networking restart Informations utiles Commandes LXC :
    • Démarrer un container : lxc-start -n vm1
    • Démarrer un container en arrière-plan : lxc-start -n vm1 -d
    • Rentrer dans un container démarré en arrière-plan (pour en sortir faire ctrl+a puisq) : lxc-console -n vm1
    • Arrêter un container (si possible privilégier l’arrêt depuis le container qui est moins brutal): lxc-stop -n vm1
    • Mettre en pause un container : lxc-freeze -n vm1
    • Sortir de pause un container : lxc-unfreeze -n vm1
    • Créer un container : lxc-create -n vm2 -t debian
    • Détruire un container : lxc-destroy -n vm1
    • Afficher la liste des containers : lxc-ls
    • Afficher l’état (démarré/arrêté/en pause) et l’IP de tous les containers : lxc-ls --fancy
    • Afficher des informations sur un container : lxc-info -n vm1
    • Purger le cache d’une image : /usr/share/lxc/templates/lxc-debian --clean

    Je vous invite à consulter le manuel pour plus d’informations : man lxc

    Quelques règles iptables :

    Si vous souhaitez que des services installés sur vos containers soient accessibles depuis l’extérieur, vous devez rediriger les connexions vers les adresses et ports des containers. Pour cela, nous allons utiliser le DNAT.

    Si votre container dont l’adresse IP est 192.168.1.2 héberge un serveur HTTP, nous utiliserons la règle suivante pour transférer les connexions entrantes sur le port 80 de l’hôte vers notre container écoutant sur le port 80 :

    iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.2:80

    Si vous ne souhaitez pas donner l’accès à internet à l’ensemble de vos containers, mais plutôt au cas par cas, vous pouvez vous inspirer de la règle suivante en lieu et place de celle que nous avons utilisée dans la partie « Configuration de l’hôte » :

    iptables -t nat -A POSTROUTING -s 192.168.1.2 -o eth0 -j MASQUERADE Démarrer des containers automatiquement :

    Avec la version 0.8.0-rc1 de LXC, il était possible de démarrer automatiquement des containers lors du démarrage de l’hôte en effectuant un simple lien symbolique : ln -s /var/lib/lxc/vm1/config /etc/lxc/auto/vm1. Mais cette fonctionnalité était en fait offerte par les distributions et non par LXC, cela ne fonctionne donc plus avec la version actuelle.

    J’ai pris contact avec le développeur principal de LXC qui m’a dit travailler à l’implémentation de l’auto-start en natif.

    En attendant, mon ami Arnaud Valensi a créé un script qui pallie ce manque ; je vous propose de l’utiliser.

    On récupère le script dans /etc/inid.d :

    wget -P /etc/init.d https://raw.github.com/ArnaudValensi/lxc-ovh/master/files/init.d/lxc

    On lui donne les bons droits :

    chmod 755 /etc/init.d/lxc

    Pour finir, on active le service :

    update-rc.d lxc defaults

    Pour activer le démarrage automatique d’un container au lancement de l’hôte, il suffira d’écrire la valeur 1 dans un fichier nommé autostart contenu dans le répertoire principal du container :

    echo "1" > /home/containers/vm1/autostart

     


  23.  

    Vous venez donc d'installer un serveur HTTP Apache2 sur votre serveur Gandi Ubuntu 7.10 et vous voulez maintenant commencer à héberger les sites de vos amis ou de vos clients.

    Une fois installé, Apache affichera la même page web pour tous les “host names” pointant vers le serveur. Vous pouvez donc installer vos pages web directement dans /var/www/ mais cette configuration ne fonctionnera que pour un seul site web en combinaison avec un pointage A vers l'adresse IP de votre serveur Gandi.

    Créer des "Virtual Hosts"

    Apache peut héberger un nombre illimité de sites web à la fois. Cette technique d'hébergement virtuel est possible gràce à l'installation de ce qu'on appelle des “virtual hosts” dans votre serveur Apache.

    Au niveau le plus basique, seuls deux répertoires doivent être utilisés pour installer des “virtual hosts”:/etc/apache2/sites-available/ et /etc/apache2/sites-enabled/.

     

     

    Avec apache 1.x, on installait des “virtual hosts” en ajoutant des entrées <virtualhost> dans le fichier /etc/apache/httpd.conf. Apache2 gère les “virtual hosts” de façon différente : il utilise des fichiers individuels “sites-available” liés au répertoire “sites-enabled”.

     

     

    Pour créer des “virtual hosts” avec Apache2, vous devez ajouter un fichier dans votre répertoire sites-available correspondant au site web virtuellement hébergé. Pour schématiser : Un fichier sites-available = Un site hébergé

    Dans l'exemple suivant, nous allons ajouter un site web appelé www.djmadjack.com dans notre serveur Gandi. Vous pourrez héberger autant de sites web que vous voudrez en répétant simplement les opérations décrites ci-dessous et en les adaptant par rapport au nom des autres sites web.

    1. Créer un nouveau fichier "sites-available"

    Dans le répertoire /etc/apache2/sites-available/, vous trouverez un fichier par défaut appelé “default”. Utilisez ce fichier comme modèle pour vos “virtual hosts”. Pour ce faire, faites-en simplement une copie à laquelle vous donnerez un nom différent. Par exemple :

    cp default djmadjack.com

    Pour des raisons de clarté, il est recommandé de donner au fichier le même nom que le nom de domaine du site web à héberger. De cette manière il sera facilement identifiable sur votre serveur. Vous pouvez cependant le nommer comme vous le voulez.

    2. Editer le nouveau fichier "sites-available"

    Il vous faut maintenant éditer le fichier que vous venez de créer de façon à ce qu'il soit configuré pour le site web que vous désirez héberger sur votre serveur. Commencez par l'ouvrir à l'aide de votre éditeur de texte préféré…

    nano djmadjack.com

    …et modifiez-le afin qu'il contienne le nom du site web que vous désirez héberger. Dans le cas présent, disons que vous désirez héberger le site de djmadjack.com. Voici de quoi aura l'air le début du nouveau fichier modifié “sites-available”:

    NameVirtualHost IP_DU_SERVEUR:80

    <VirtualHost IP_DU_SERVEUR:80>

    ServerAdmin eric@djmadjack.com

    ServerName www.djmadjack.com

    DocumentRoot /var/www/djmadjack.com/

    <Directory />

    Options FollowSymLinks

    AllowOverride None

    </Directory>

    <Directory /var/www/djmadjack.com/>

    Options Indexes FollowSymLinks MultiViews

    AllowOverride None

    Order allow,deny

    allow from all

    </Directory>

    (...)

    La ligne DocumentRoot est utilisée pour spécifier le répertoire des pages web du site sur le serveur. Vous pouvez désigner ici n'importe quel répertoire, mais assurez vous qu'il existe. C'est donc le répertoire dans lequel se trouveront les pages web de djmadjack.com.

     

     

    Il n'y a pas de limite au nombre de sites web que vous pouvez héberger virtuellement. Il vous suffira de créer un nouveau fichier dans le répertoire “sites-available”. Cela étant dit, plus vous hébergez de sites web, plus le serveur sera lent. C'est pour cela que Gandi vous permet d'ajouter des parts à votre serveur, de façon à augmenter la puissance et accélérer la navigation des sites web.

     

     

    3. Liens de "sites-enabled"

    Afin d'activer le site, vous devez lancer la commande :

    a2ensite djmadjack.com

    Qui va se charger de créer le lien symbolique entre site-available/djmadjack.com et site-enable/djmadjack.com (vous pouvez également faire le lien à la main avec la commande ln -s).

    Afin de désactiver le site, vous devez lancer la commande:

    a2dissite djmadjack.com
    4. Redémarrer apache

    Une fois que vous avez terminé, assurez-vous de bien redémarrer apache afin que vos modifications soient prises en compte par votre serveur. Pour ce faire, utilisez la commande suivante :

    /etc/init.d/apache2 restart

     


  24. L'éditeur par défaut de Debian est configuré à l'installation. Si vous êtes (comme moi) un grand habitué de nano et que vous vous retrouvez sous vi/vim, ceci peut-être gênant pour éditer, par exemple, le fichier crontab. Méthode générale: Debian propose l'outilupdate-alternatives pour gérer cela. La commande vous sort tout d'abord une liste des éditeurs disponibles, puis vous demande de faire un choix. Exemple de sortie sur le serveur où je compose ce message

     

    :update-alternatives --config editor

     

    There are 4 alternatives which provide `editor'.

     

    Selection Alternative

    -----------------------------------------------

    1 /bin/ed

    *+ 2 /bin/nano

    3 /usr/bin/vim.tiny

    4 /usr/bin/vim.basic

    Press enter to keep the default

    • , or type selection number:

       

      Dans ce cas là tout va bien. Sur le serveur d'un client, je me suis retrouvé avec l'éditeur joe que je ne connaissais pas du tout. Je suis donc repassé sous nano:

       

      update-alternatives --config editor

      There are 10 alternatives which provide `editor'.

      Selection Alternative

      -----------------------------------------------

      1 /bin/ed

      2 /bin/nano

      3 /usr/bin/vim.tiny

      *+ 4 /usr/bin/joe

      5 /usr/bin/jmacs

      6 /usr/bin/jstar

      7 /usr/bin/jpico

      8 /usr/bin/rjoe

      9 /usr/bin/mcedit-debian

      10 /usr/bin/vim.basic

      Press enter to keep the default

    • , or type selection number: 2

      Using '/bin/nano' to provide 'editor'.

      Voilà comment en quelques secondes ne plus chercher pendant des heures les commandes d'un éditeur que vous utilisez peu.

×
×
  • Créer...