C'est bien, c'est beau, c'est gratuit... c'est Java.
Ce tutoriel va expliquer comment configurer ce logiciel JAVA multiplateforme.
Le but sera ici multiple :
- savoir utiliser le logiciel,
- être capable de générer une configuration.
James est une application Java dédiée à la gestion des mails sur LAN ou Internet. Il fonctionne sur tout système d'exploitation supportant la machine Java (Windows, Unix...). Sa taille est supérieure à 8 Mo.
Il supporte :
Vous avez donc besoin :
Rendez-vous sur le site http://james.apache.org pour télécharger ce logiciel libre, gratuit et illimité.
Décompressez l'archive compressée dans un répertoire tel qu'il n'y ait pas de caractères accentués dans le chemin d'accès !! Si vous ne faîtes pas ça, James n'arrivera pas à se lancer.
La documentation de James demande de définir préalablement la variable environnementale JAVA_HOME. Préférons les chemins courts MS-DOS avec tilda et sans espace.
Sous Unix, les ports inférieurs à 1024 sont restreints à l'utilisateur Root. James doit donc avoir les mêmes privilèges pour pouvoir fonctionner avec la configuration par défaut (sauf si vous décidez de changer les ports des différents protocoles).
Exécutez le fichier BAT (Windows) ou SH (Linux) du répertoire BIN de James. Ils sont déjà correctement écrits. Vous devez lire à l'écran :
Using PHOENIX_HOME: C:\James\ Using PHOENIX_TMPDIR: C:\James\temp Using JAVA_HOME: C:\Progra~1\JRE\ Phoenix 4.0.1 James 2.2.0 Remote Manager Service started plain:4555 POP3 Service started plain:110 SMTP Service started plain:25 NNTP Service started plain:119 Fetch POP Disabled FetchMail Disabled |
Le fonctionnement est assez simple. Quand vous lui envoyez un mail, tout tombe dans le SPOOL. De temps en temps, le ménage est fait : soit c'est un mail local dans tel cas il est déplacé dans INBOXES (succès) ou ADDRESS-ERROR (échec), soit c'est un mail externe et alors James se prend pour un relais.
Ces différents dossiers stockent les messages reçus et à envoyer, les utilisateurs, les alias... Par contre, il est préférable d'utiliser des bases de données JDBC pour accroître la vitesse et les performances de traitement. James accepte aussi une administration distante sur le port 4555 (ce sera indispensable par la suite).
Vous devez arrêter James ! pour faire apparaître les fichiers de configuration non fournis au départ, mais générés à l'arrêt du logiciel.
D'où : 1) Start, 2) Stop, 3) Edit, 4) Restart
Même si ce n'est pas écrit dans la documentation de James, les utilisateurs de Windows doivent lever toute ambiguïté. Par exemple :
file://var/mail/inboxes/ == > file:///C:/James/var/mail/inboxes/
C'EST IMPERATIF ! VOUS RISQUEZ DE TOUT CHOPER SOUS LA RACINE DE C:\
A répéter sur toutes les entrées du fichier CONFIG.XML en remarquant que "file:" est suivi de 3 "/".
En général, c'est la machine elle-même qui peut le faire.
Les adresses locales sont généralement réparties sur 3 domaines : 127.*.*.*, 192.168.*.* et 10.*.*.*
<dnsserver> <servers> <server>127.0.0.1</server> <!-- <server>192.168.0.1</server> --> <!-- <server>10.0.0.1</server> --> </servers> <autodiscover>true</autodiscover> <authoritative>false</authoritative> </dnsserver>
C'est la réception des mails. Le port 110 est standard, le SSL/TLS utilise le 995.
<pop3server enabled="true"> <port>110</port> <handler> <helloName autodetect="true">localhost</helloName> <connectiontimeout>120000</connectiontimeout> </handler> </pop3server>
C'est l'envoi des mails. Le port 25 est standard. On fixe la taille des mails sortant à 8 Mo, ce qui est généralement courant. Même si à la base la valeur est 0 (illimité), il est prudent de ne pas se prendre des Gigas dans la figure.
<smtpserver enabled="true"> <port>25</port> <handler> <helloName autodetect="true">localhost</helloName> <connectiontimeout>360000</connectiontimeout> <!-- <authRequired>false</authRequired> --> <!-- <authorizedAddresses>127.0.0.1</authorizedAddresses> --> <!-- <verifyIdentity>true</verifyIdentity> --> <maxmessagesize>8388608</maxmessagesize> </handler> </smtpserver>
ATTENTION : la documentation de James propose plus d'informations concernant l'empêchement que votre serveur devienne un relais pour le spam.
Définissons aussi, un serveur SMTP relais si nécessaire grâce au gateway :
<processor name="transport"> <mailet match="All" class="RemoteDelivery"> ... <gateway> smtp.free.fr </gateway> <gatewayPort>25</gatewayPort> </mailet> </processor>
C'est les news. James précise que c'est une fonctionnalité expérimentale qui nécessitera probablement une mise à jour dans l'avenir. Le port est 119, ou 563 si sécurisé SSL/TLS.
<nntpserver enabled="true"> <port>119</port> <handler> <helloName autodetect="true">localhost</helloName> <connectiontimeout>120000</connectiontimeout> <authRequired>false</authRequired> </handler> </nntpserver>
Désactivé, car déprécié.
<fetchpop enabled="false"> <fetch name="mydomain.com"> <host>localhost</host> <user>postmaster</user> <password>pass</password> <interval>600000</interval> </fetch> </fetchpop>
Par défaut, FetchMail est désactivé. Il permet de gérer des filtres. Le sujet étant très large, le mieux est de consulter vous-même la documentation de James sur le site officiel.
Vous devez changer l'utilisateur et le mot de passe de l'administration distante. Ça permet de gérer les comptes utilisateur à distance. Vous pouvez mettre plusieurs utilisateur en ajoutant une balise account.
<remotemanager> <port>4555</port> <handler> <helloName autodetect="true">localhost</helloName> <administrator_accounts> <account login="NomDUtilisateur" password="MotDePasse"/> </administrator_accounts> <connectiontimeout>150000</connectiontimeout> </handler> </remotemanager>
Ensuite, dans une commande DOS, voici ce qui se passe.
C:\Windows>telnet
Bienvenue dans le client Telnet Microsoft JAMES Remote Administration Tool 2.2.0 help listusers quit Perte de la connexion à l'hôte. Microsoft Telnet>quit C:\Windows>exit |
Si vous n'arrivez pas à réaliser toutes ces commandes, ne continuez pas. Ceci doit marcher impérativement. Mais j'espère que cet exemple vous a montré comment il sera facile de gérer les utilisateurs. Pour un réseau, cette administration est bien pratique car l'administrateur n'a pas à jouer de sa présence ou du FTP pour modifier les fichiers de configuration. Naturellement, il faut choisir un mot de passe difficile, car la sécurité de tous les comptes mails en dépend.
Par défaut, James ne contient pas de compte utilisateur.
Normalement, le port standard TelNet est 23. Si vous changez le port, vous aurez simplement à faire "open localhost" sans spécifier le port particulier (qui était 4555).
Une fois que les utilisateurs seront correctement créés, il est conseillé de désactiver l'administration distante et de redémarrer James :
<remotemanager enabled= "false">
C'est James qu'on va taquiner maintenant. Il faut fixer :
<James> <postmaster>postermaster@localhost</postmaster> <servernames autodetect="true" autodetectIP="true"> <servername>localhost</servername> <servername>127.0.0.1</servername> </servernames> <usernames ignoreCase="true" enableAliases="true" enableForwarding="true"/> <inboxRepository> <repository destinationURL=" file://var/mail/inboxes/ " type="MAIL"/> </inboxRepository> </James>
Supposons que nous ayons un compte "TOTO", alors la section SERVERNAMES nous indique d'ores-et-déjà que le mail de cet utilisateur sera "toto@localhost" ou "toto@[127.0.0.1]".
Comme déjà dit, l'ajout se fait à distance. C'est pour cela qu'il faut que ça marche. On peut aussi utiliser HyperTerminal si on veut. Il est important de ne pas faire de fautes d'orthographe.
Welcome User1234. HELP for a list of commands adduser toto PwdTota adduser nana PwdNana setpassword toto PwdToto adduser postmaster AdminPass listusers quit |
Des fichiers ".Repository.FileObjectStore" ont été créés dans le répertoire USERS\ et on comprend pourquoi cela ne se fait pas manuellement avec un simple éditeur de texte. Les mots de passe sont hachés avec SHA. Les noms des fichiers sont tout simplement le dump hexadécimal dans la table ASCII de l'utilisateur en question.
On va enfin pouvoir tester James grandeur nature :P
Lancez James.
Du moment que les comptes utilisateurs ont été créés, le POP3 fonctionne. Dans le client de messagerie, il suffit de rentrer son mot de passe et les mails sont rapatriés.
Lancez votre client de message (Outlook ou Thunderbird) et créez un compte pour l'utilisateur "postmaster" configuré tel que le mail de retour soit "postmaster@localhost".
Si on envoie un mail à "toto@localhost", le dossier INBOXES fait apparaître un dossier TOTO avec deux fichiers dedans :
Faisons-nous passer pour "unknown@localhost" et renvoyons un mail à Toto. Bien que le mail "unknown@localhost" n'existe pas dans la base, Toto reçoit bien un mail. Il peut alors se demander qui a vraiment envoyé le mail. En général, c'est à cela que sert l'envoi authentifié des mails : empêcher que ça se produise.
Reprenons l'envoyeur "postmaster@localhost" et envoyons un mail à "jexistepas@localhost". Biensûr, le mail ne sera pas délivré, car "jexistepas" n'est pas un utilisateur de la base. Il tombe dans le répertoire ADDRESS-ERROR et le postmaster reçoit éventuellement un mail (si configuré pour).
Ecrivons à "toto@localhsot" (avec la faute d'orthographe !). Le mail tombe forcément dans OUTGOING\ dans l'espoir que le serveur relais suivant sera apte à résoudre le domaine "localhsot".
Plus sérieusement, on peut envoyer un mail à "machin@free.fr" depuis James en local. Le mail tombe dans OUTGOING\, puis part dans le monde via le gateway (si activé).
Ce système de gateway permet de relier deux serveurs de mails ensemble, des machines antispam ou antivirales. Sorte de division du travail...
Voir les Provided Matchers de la documentation de James pour plus d'informations.
Tout se fait dans CONFIG.XML
Ceci est important, car tous les mails contenant des exécutables seront effacés. Plutôt sympathique pour lutter contre les virus !
http://wiki.apache.org/james/HandlingExceptions
<spoolmanager> <processor name="root"> <mailet match="AttachmentFileNameIs=*.exe,*.com,*.bat,*.pif,*.scr,*.vbs,*.eml,*.avi,*.mp3,*.mpeg,*.shs" class="Bounce" onMatchException="noMatch"> <attachment>none</attachment> <passThrough>false</passThrough> <prefix>[REJECTED] </prefix> <notice>Mail rejected due to risky attached file</notice> </mailet> </processor> </spoolmanager>
Ainsi, le message de retour est :
Object: [REJECTED]Tentative d'envoi Message: Mail rejected due to risky attached file. Message details: |
Si la ligne rouge est enlevée, le mail d'erreur comporte une pièce jointe qui n'est ni plus ni moins que le mail refusé. Pratique pour renvoyer le mail sous une nouvelle forme acceptable.
Ne fait que répéter ce qui a déjà été plus haut sur le GATEWAY.
<spoolmanager> <processor name="transport"> ... <mailet match="All" class="RemoteDelivery"> <outgoing> file://var/mail/outgoing/ </outgoing> <delayTime> 5 minutes </delayTime> <delayTime> 10 minutes </delayTime> <delayTime> 45 minutes </delayTime> <delayTime> 2 hours </delayTime> <delayTime> 3 hours </delayTime> <delayTime> 6 hours </delayTime> <maxRetries> 25 </maxRetries> <deliveryThreads> 1 </deliveryThreads> <sendpartial>false</sendpartial> <gateway> smtp.free.fr </gateway> <gatewayPort>25</gatewayPort> </mailet> </processor> </spoolmanager>
On pourrait certes enlever l'utilisateur de la base (peut toujours envoyer mail sauf si authentification requise), mais faisons-le avec la configuration pour que vous compreniez.
Sans message de retour :
<spoolmanager> <processor name="root"> <mailet match=" RecipientIs=toto@localhost " class="Null"/> </processor> </spoolmanager>
Avec message de retour à l'envoyeur :
<spoolmanager> <processor name="root"> <mailet match=" RecipientIs=toto@localhost " class="Bounce"> <passThrough>false</passThrough> <prefix>[UNJOINABLE] </prefix> <notice>The user can't be contacted with this email address</notice> </mailet> </processor> </spoolmanager>
Le message d'erreur est de la forme :
Object: [UNJOINABLE]Hello Toto Message: The user can't be contacted with this email address. Message details: |
On aurait pû aussi utiliser UserIs qui ne regarde pas le domaine.
<mailet match="UserIs=toto,nana" class="Bounce">
C'est le même principe. On remplace "RecipientIs" par "SenderIs".
De la même manière qu'on s'authentifie pour récupérer ses mails, on peut s'authentifier pour en envoyer. L'intérêt est de ne pas pouvoir envoyer un mail vers l'extérieur à la place de quelqu'un d'autre. Consulter la documentation.
Le SSL et TLS (Transfert Layer Socket) sont des technologies de cryptage à ajouter manuellement à Java : Sun Java Secure Sockets Extension (JSSE) infrastructure.
http://java.sun.com/jsse
Tout se joue ensuite sur la balise USETLS, mais consultez la documentation officielle pour plus d'informations.
Consulter une fois de plus la documentation de James. L'explication est très claire..
L'alias ALL est complètement virtuel (il n'a pas besoin d'exister dans la base). C'est juste un support pour réécriture...
<spoolmanager> <processor name="root"> <mailet match="RecipientIs=all@localhost" class="Forward"> <forwardto> nana@localhost</forwardto> <forwardto> toto@localhost</forwardto> </mailet> </processor> </spoolmanager>
Ca permet de bloquer les envoyeurs se prenant pour "machin@free.fr" alors que seules les adresses "@localhost" sont autorisées. Envoyer des mails à "truc@free.fr" est bien sûr possible, même en se prenant pour "jetemmerde@localhost".
<mailet match="RemoteAddrNotInNetwork=127.*,192.168.*" class="ToProcessor"> <processor> relay-denied </processor> <notice>550 - Requested action not taken: relaying denied</notice> </mailet>
Le protocole DNS ne doit pas être bloqué, sinon les IP ne pourront pas être résolues.
Il sera alors facile de :
Ou comment envoyer un mail en utilisant une fenêtre DOS... N'oubliez pas les "<" et ">" entre les adresses mail, sinon ça ne marchera pas.
TelNet>open localhost 25 220 localhost SMTP Server (JAMES SMTP Server 2.2.0) ready [DATE * hello LOCALHOST mail from: <postmaster@localhost> rcpt to: <postmaster@localhost> data subject: Test du mail Je m'envoie un mail à moi même 250 Message received quit |
Le point sur une seule ligne délimite la fin du mail. Le sujet se met avant le corps du mail en sautant une ou plusieurs lignes !
Faut déjà arrêter Apache. Ensuite faut éditer PHP.INI :
[mail function] SMTP = localhost sendmail_from = postmaster@localhost |
Ensuite, pour envoyer un mail, c'est tout simple :
<?php mail('toto@localhost', 'Sujet', 'Message du mail'); ?>
Bien sûr, en utilisant des librairies PHP plus évoluées, vous pourrez (en PHP toujours) envoyer des mails avec des pièces jointes et compagnie.
C'est ce qu'il y a de plus rapide. Il suffit de se donner le port 119 et configurer le nom des groupes de discussion !
<nntpserver enabled="true"> <port>119</port> <handler> <helloName autodetect="true">localhost</helloName> <connectiontimeout>150000</connectiontimeout> <authRequired>false</authRequired> </handler> </nntpserver> <nntp-repository> <readOnly>true</readOnly> <rootPath>file:///C:/james/var/nntp/groups</rootPath> <tempPath>file:///C:/james/var/nntp/temp</tempPath> <articleIDPath>file:///C:/james/var/nntp/articleid</articleIDPath> <articleIDDomainSuffix>localhost</articleIDDomainSuffix> <newsgroups> <newsgroup>localhost.james</newsgroup> <newsgroup>localhost.freespace</newsgroup> </newsgroups> <spool> <configuration> <spoolPath>file:///C:/james/var/nntp/spool</spoolPath> <threadCount>5</threadCount> <threadIdleTime>10000</threadIdleTime> </configuration> </spool> </nntp-repository>
Ensuite, il suffit de faire joujou avec Outlook ou Thunderbird en rajoutant un compte pour NNTP (News), d'ajouter localhost et de s'abonner aux forums qui vous intéressent.
Pour supprimer un forum, il faut bien sûr éditer le fichier de config, mais il faut aussi effacer les dossiers appropriés dans apps\james\var\nntp\groups\
Si vous voulez que les utilisateurs s'authentifient pour accéder aux news, mettez TRUE dans <authRequired>. Utile pour les forums privés.
Au final, c'est vous qui devez sentir si votre serveur est bien ou mal configuré.
grandvizir, http://altert.family.free.fr/