Tester le fonctionnement d'un serveur SMTP
linux procedure operations techniques tutoriels - 📁 projects
Vérifier si le Firewall bloque certains services
Idéalement il faut faire ces tests d'un autre ordinateur que celui qu'on veut vérifier.
Ainsi on voit si les services sont fonctionnels en tant que tel, et si le firewall ne les bloquent pas.
Quelques ports à tester, qui donnent une réponse
Nom du service | Port TCP |
---|---|
POP | 101 |
IMAP | 143 |
SMTP | 25 |
FTP | 21 |
nc web1.renoirboulanger.com
110 +OK POP3 Welcome to vm-pop3d 1.1.7f-DA-2
[^c]
nc web1.renoirboulanger.com 143
* OK [CAPABILITY IMAP4REV1 LITERAL+ SASL-IR LOGIN-REFERRALS AUTH=LOGIN]
web1.renoirboulanger.com IMAP4rev1 2004.357 at Tue, 26 Feb 2008 11:08:17 -0500 (EST)
[^c]
nc web1.renoirboulanger.com 25 220 web1.renoirboulanger.com ESMTP Exim 4.66 Tue, 26 Feb 2008 11:11:10 -0500
[^c]
nc web1.renoirboulanger.com 21
220 ProFTPD 1.3.1rc2 Server ready.
[^c]
Note: la note [^c] implique qu'on peut faire Ctrl + c pour quitter plus rapidement de l'attente
Tester le serveur courriel
Créer un compte de test
Permet d'éviter de remplir le compte courriel d'un client.
- Créer un compte dans DirectAdmin, "Show all Users", username, "E-Mail Accounts"
Test envoi local vers virtual_local avec exim
Avant de tester avec une application (remote en shell, ou GMail par exemple) On devrait tester en local
Ensuite... via une application locale à Gmail Cas de nos courriels renoirboulanger, voir "Test envoi local vers une machine remote avec exim" ci-haut.
Le serveur de mon exemple possède Exim comme serveur de transport de courrier (SMTP).
L'avantage d'utiliser exim -v -odf
c'est qu'on sait en shell le output et on
sait les messages directement
exim -v -odf test@renoirboulanger.com [enter]
Subject: Test lundi am 5 local a virtuallocal [enter]
Message body [enter]
. [enter]
LOG: MAIN
<= renoirb@web1.renoirboulanger.com U=renoirb P=local S=390 T="Test lundi am 5 local a virtuallocal"
delivering 1JSZkp-0001JH-8H
LOG: MAIN
=> support <support@renoirboulanger.com> F=<renoirb@web1.renoirboulanger.com> R=virtual_user T=virtual_localdelivery S=571
LOG: MAIN
Completed
Note: La ligne "Subject:" je note généralement un titre explicatif du genre "Test lundi am 5 local a virtuallocal" qui donne une idée de quels tests qui passent.
Le output des 7 dernières lignes est une réponse expectée si tout va bien.
Les commandes via exim
exim -v -odf john.doe@example.org
C'est les options qui permettent d'utiliser une instance de Exim pour tester (odf) puis de permettre la (v)erbosité
Subject: LE SUJET
Il faut entrer Subject:
Pour annoncer qu'on ajoute au header le sujet, on
pourrait meme ajouter un header comme on veut.
- Écrire le message
Le prompt condidere que si on commence pas par une commande qui termine par ":", est considéré comme du data pour le courriel en tant que tel (aka. Le ).
- Terminer par "."
- Voilà!
Vérifier le log d'envoi SMTP
Utile pour chaque tentative... voir où le message và!
sudo tail -f /var/log/exim/mainlog
2008-02-25 12:02:16 1JSZkp-0001JH-8H <= renoirb@web1.renoirboulanger.com U=renoirb P=local S=356 T="Test lundi am 5 local a virtuallocal" from <renoirb@web1.renoirboulanger.com> for test@renoirboulanger.com
2008-02-25 12:02:16 1JSZkp-0001JH-8H => test <test@renoirboulanger.com> F=<renoirb@web1.renoirboulanger.com> R=virtual_user T=virtual_localdelivery S=390
2008-02-25 12:02:16 1JSZkp-0001JH-8H Completed
Tester réception IMAP
Généralement dans *le client IMAP (vérifie le processus IMAP) on peut aller accéder au compte créé dans "Créer un compte de test courriel".
Vérifier le log impad
sudo tail -f /var/log/maillog
Feb 25 12:01:14 web1 imapd[19532]: imap service init from 127.0.0.1
Feb 25 12:01:14 web1 imapd[19532]: Login user=test@renoirboulanger.com host=web1 [127.0.0.1]
Feb 25 12:01:14 web1 imapd[19532]: Logout user=test@renoirboulanger.com host=web1 [127.0.0.1]
Note: Rappel le /var/log/maillog
donne le output des login IMAP(imapd), POP
(vm-pop3d) et SpamAssasin (spamd)
Vérifier POP en telnet
On peut lancer le test à partir de n'importe quel type de client telnet.
Pour s'assurer que le mail server répond sur le bon, on peut aussi lancer la requete telnet sur le domaine du mail exchange (MX) du client.
telnet mail.renoirboulanger.com 110 [enter]
Trying 66.46.177.182...
Connected to mail.renoirboulanger.com (66.46.177.182).
Escape character is '^]'.
+OK POP3 Welcome to vm-pop3d 1.1.7f-DA-2
user test@renoirboulanger.com [Entrer "user (username)", enter]
+OK
pass GMkRZaKQ [Entrer "pass (mot de passe)", enter]
+OK opened mailbox for test
list [Pour lister les messages "list", enter]
+OK
1 780
2 488
3 494
.
retr 3 [Pour obtenir un message, "retr (numero du message)", enter]
+OK 494 octets
Return-path: <renoirb@web1.renoirboulanger.com>
Envelope-to: test@renoirboulanger.com
Delivery-date: Mon, 25 Feb 2008 12:02:16 -0500
Received: from renoirb by web1.renoirboulanger.com with local (Exim 4.66)
(envelope-from <renoirb@web1.renoirboulanger.com>)
id 1JTgiM-00057L-SW
for test@renoirboulanger.com; Mon, 25 Feb 2008 12:02:16 -0500
Subject: Test lundi am 5 local a virtuallocal
Message-Id: <1JSZkp-0001JH-8H@web1.renoirboulanger.com>
From: renoirb@web1.renoirboulanger.com
Date: Mon, 25 Feb 2008 12:02:16 -0500
Message body
.
quit [Finalement, "quit", enter]
+OK
Connection closed by foreign host.
Vérifier le log pop3d
Si tout va bien en telnet, pourquoi ne pas tester pour être sûr!?
sudo tail -f /var/log/maillog
Feb 25 12:13:18 web1 vm-pop3d[20764]: User 'test@renoirboulanger.com' logged in from 69.159.235.26, nmsgs=3
Feb 25 12:13:22 web1 vm-pop3d[20764]: bytes: domain renoirboulanger.com 491 bytes
Feb 25 12:13:23 web1 vm-pop3d[20764]: Session ended for user: 'test@renoirboulanger.com' from 69.159.235.26, nmsgs=3, ndel=0
Note: Rappel le /var/log/maillog
donne le output des login IMAP(imapd), POP
(vm-pop3d) et SpamAssasin (spamd)
Test envoi remote vers virtual_local avec telnet
Au lieu d'avoir un programme comme mail installé sur une station Linux, on peut simplement utiliser telnet avec ces commandes
telnet web1.renoirboulanger.com 25
Trying 66.46.177.182...
Connected to web1.renoirboulanger.com.
Escape character is '^]'.
220 web1.renoirboulanger.com ESMTP Exim 4.66 Fri, 22 Feb 2008 10:42:44 -0500
helo renoirboulanger.com
250 web1.renoirboulanger.com Hello mtrlpq02-1168108314.sdsl.bell.ca [69.159.235.26]
mail from: lunique@renoirboulanger.com
250 OK
rcpt to: renoir.boulanger@renoirboulanger.com
250 Accepted
data
354 Enter message, ending with "." on a line by itself
Subject: Test courriel 7
Via tsc-webmestre-dev dans le bureau de renoirboulanger vers web1 qui va rediriger à gmail directement!
.
250 OK id=1JSa3U-0003TM-Tv
quit
221 web1.renoirboulanger.com closing connection
Connection closed by foreign host.
Note: les codes 250, 354, 220 sont des numeros de messages voir: http://email.about.com/cs/standards/a/smtp_error_code_2.htm
J'ai mis trois espaces devant la réponse reçue.
Les commandes telnet envoi smtp
- telnet
web1.renoirboulanger.com
- ... Trying et connected signifient qu'il a essayé et réussi
220 web1.renoirboulanger.com ESMTP Exim 4.66 Fri, 22 Feb 2008 10:42:44 -0500
Signifie 220 (c'est le code du message) que web1 utilise Exim 4.66.... et qu'on est le 22 Feb... C'est ok!
helo domaine.du.helo.renoirboulanger.com
Faut entrer "helo
" puis le domaine de l'envoyant
helo
(et ehlo
) sont des conventions pour savoir quel est le hostname qui envoit le courriel
mail from: john.doe@example.org
Faut entrer "mail from:
" puis l'adresse de l'envoyant
Ce qui permet de dire le From: field
rcpt to: john.doe@example.org
Faut entrer "rcpt to:
" puis l'adresse du recipient
C'est le recipient.
data
Annonce au MTA (le serveur SMTP) qu'il va envoyer des données textes
Subject: LE SUJET
Faut au minimum entrer "Subject:
" car c'est ce que le serveur attend.
- Écrire le message, tout simplement
- Terminer par un dernier [procedures:Enter] et laisser un poin "."
Ensuite, le message SMTP #354
annonce que l'on peut écrire notre courriel a
volonté... jusqu'a ce qu'on ajoute une ligne vide avec uniquement un "." (qui
annonce la fin du message)
- Voilà!
Test envoi local vers une machine remote avec exim
Permet de savoir si l'envoi local vers un remote fonctionne bien
Il s'agit de l'exemple typique d'un email local envoyé vers Gmail par exemple.
exim -v -odf sysadmin@renoirboulanger.com
Subject: Test lundi am 4 local to remote
Message correct pour voir de l'usager joe sur web1 vers sysadmin hsu at renoirboulanger
.
LOG: MAIN
<= joe@web1.renoirboulanger.com U=joe P=local S=437 T="Test lundi am 4 local to remote"
delivering 1JSZmM-0001LR-S8
Connecting to ASPMX.L.GOOGLE.COM [72.14.205.27]:25 ... connected
SMTP<< 220 mx.google.com ESMTP z21si1091485qbc.21
SMTP>> EHLO web1.renoirboulanger.com
SMTP<< 250-mx.google.com at your service, [66.46.177.182]
250-SIZE 28311552
250-8BITMIME
250 ENHANCEDSTATUSCODES
SMTP>> MAIL FROM:<joe@web1.renoirboulanger.com> SIZE=1470
SMTP<< 250 2.1.0 OK
SMTP>> RCPT TO:<a@test.com>
SMTP<< 250 2.1.5 OK
SMTP>> DATA
SMTP<< 354 Go ahead
SMTP>> writing message and terminating "."
SMTP<< 250 2.0.0 OK 1203693994 z21si1091485qbc.21
SMTP>> QUIT
LOG: MAIN
=> sysadmin@renoirboulanger.com F=<joe@web1.renoirboulanger.com> R=lookuphost T=remote_smtp S=450 H=ASPMX.L.GOOGLE.COM [72.14.205.27] C="250 2.0.0 OK 1203693994 z21si1091485qbc.21"
LOG: MAIN
Completed
Note: C'est quoi EHLO ou HELO? voir "Description du HELO"
Tester mail remote vers mailserver pour voir le bon fonctionnement de SpamAssassin
Le but de ce test est de s'assurer que le service de spam antivirus est lancé, il faut s'assurer que le service "SpamAssassin" est activé dans la config du client dans le pannel, et qu'on envoie le test en remote.
Envoi courriel via une machine remote via mail
Sert a s'assurer que l'envoi d'un courriel remote (application ou en shell) fonctionne bien de l'extérieur.
mail test@test.com
Subject: Test lundi am 6 remote to virtuallocal
Message body, with random content
.
Regarder le log spamd
Permet de savoir si le message envoyé dans le test "Envoi courriel via une machine remote via mail" à bien passé
tail -f /var/log/maillog
...
1. Feb 26 11:31:54 web1 spamd[3160]: prefork: child states: II
2. Feb 26 11:32:15 web1 spamd[817]: spamd: connection from web1 [127.0.0.1] at port 56256
3. Feb 26 11:32:15 web1 spamd[817]: spamd: setuid to renoirb succeeded
4. Feb 26 11:32:15 web1 spamd[817]: spamd: processing message <000801c87894$66546900$c07bcf52@adminhotel> for renoirb:501
5. Feb 26 11:32:19 web1 spamd[817]: spamd: identified spam (7.0/5.0) for renoirb:501 in 4.1 seconds, 1602 bytes.
6. Feb 26 11:32:19 web1 spamd[817]: spamd: result: Y 6 - HTML_MESSAGE,RAZOR2_CF_RANGE_51_100,RAZOR2_CF_RANGE_E4_51_100,RAZOR2_CF_RANGE_E8_51_100,RAZOR2_CHECK,RDNS_NONE,URIBL_JP_SURBL scantime=4.1,size=1602,user=renoirb,uid=501,required_score=5.0,rhost=web1,raddr=127.0.0.1,rport=56256,mid=<000801c87894$66546900$c07bcf52@adminhotel>,autolearn=no
...
Voici ce que le spamscanner a fait...
- Ligne 4: Il process le message pour le user
- Ligne 5: Donne le resultat, (soit identified spam ou clean message) avec la note entre parenthèses (note reçue / note maximale)
- Ligne 6: Le résultat Y=C'est un spam... N=Le message est propre... puis la valeur des tests coulés (HTML_MESSAGE,RAZOR2_CF_RANGE_51_100,...)
Note: Rappel le /var/log/maillog
donne le output des login IMAP(imapd), POP
(vm-pop3d) et SpamAssasin (spamd)
Tester SpamAssassin
Pour savoir comment SpamAssassin (aka. SA) traite le spam, on peut lancer quelques commandes comme celles ci.
SA avec tests Razor2 sur un sample spam
spamassassin -t -D razor2 < /usr/share/sample-nonspam.txt
... plusieurs lignes ...
[19464] dbg: razor2: razor2 is available, version 2.82
Razor-Log: read_file: 16 items read from /etc/mail/spamassassin/.razor/razor-agent.conf
Razor-Log: Found razorhome: /etc/mail/spamassassin/.razor
Feb 28 10:48:38.385733 check[19464]: [ 2] [bootup] Logging initiated LogDebugLevel=9 to stdout
Feb 28 10:48:38.386209 check[19464]: [ 5] computed razorhome=/etc/mail/spamassassin/.razor, conf=/etc/mail/spamassassin/.razor/razor-agent.conf, ident=/etc/mail/spamassassin/.razor/identity-ruKDx1iKgh
Feb 28 10:48:38.386500 check[19464]: [ 8] Client supported_engines: 4 8
Feb 28 10:48:38.386960 check[19464]: [ 8] prep_mail done: mail 1 headers=293, mime0=616
Feb 28 10:48:38.387312 check[19464]: [ 5] read_file: 1 items read from /etc/mail/spamassassin/.razor/servers.discovery.lst
... inclusions des config modulaires ...
Feb 28 10:48:38.405171 check[19464]: [ 5] read_file: 23 items read from /etc/mail/spamassassin/.razor/server.joy.cloudmark.com.conf
Feb 28 10:48:38.405460 check[19464]: [ 5] 162877 seconds before closest server discovery
Feb 28 10:48:38.405729 check[19464]: [ 6] c301.cloudmark.com is a Catalogue Server srl 5382; computed min_cf=21, Server se: 3BC8
Feb 28 10:48:38.405995 check[19464]: [ 8] Computed supported_engines: 4 8
Feb 28 10:48:38.406217 check[19464]: [ 8] Using next closest server c301.cloudmark.com:2703, cached info srl 5382
Feb 28 10:48:38.406432 check[19464]: [ 8] mail 1 has no subject
Feb 28 10:48:38.406840 check[19464]: [ 6] preproc: mail 1.0 went from 616 bytes to 503
Feb 28 10:48:38.407064 check[19464]: [ 6] computing sigs for mail 1.0, len 503
Feb 28 10:48:38.408529 check[19464]: [ 6] Engine (8) didn't produce a signature for mail 1.0
Feb 28 10:48:38.408827 check[19464]: [ 6] skipping whitelist file (empty?): /etc/mail/spamassassin/.razor/razor-whitelist
Feb 28 10:48:38.409055 check[19464]: [ 5] Connecting to c301.cloudmark.com ...
Feb 28 10:48:38.440917 check[19464]: [ 8] Connection established
Feb 28 10:48:38.441071 check[19464]: [ 4] c301.cloudmark.com >> 36 server greeting: sn=C&srl=5403&a=1&a=cg&ep4=7542-10
Feb 28 10:48:38.441476 check[19464]: [ 4] c301.cloudmark.com << 25
Feb 28 10:48:38.441548 check[19464]: [ 6] cn=razor-agents&cv=2.82
Feb 28 10:48:38.441813 check[19464]: [ 4] c301.cloudmark.com << 14
Feb 28 10:48:38.441873 check[19464]: [ 6] a=g&pm=state
Feb 28 10:48:38.463790 check[19464]: [ 4] c301.cloudmark.com >> 264
Feb 28 10:48:38.463875 check[19464]: [ 6] response to sent.2
...
[19464] dbg: razor2: part=0 engine=4 contested=0 confidence=100
[19464] dbg: razor2: results: spam? 1
[19464] dbg: razor2: results: engine 8, highest cf score: 0
[19464] dbg: razor2: results: engine 4, highest cf score: 100
[19464] info: rules: meta test HS_PHARMA_1 has dependency 'HS_SUBJ_ONLINE_PHARMACEUTICAL' with a zero score
Received: from localhost by web1.renoirboulanger.com
with SpamAssassin (version 3.2.0);
Thu, 28 Feb 2008 10:48:41 -0500
From: Sender <sender@example.net>
To: Recipient <recipient@example.net>
Subject: *****SPAM***** Test spam mail (GTUBE)
Date: Wed, 23 Jul 2003 23:30:00 +0200
Message-Id: <GTUBE1.1010101@example.net>
X-Spam-Flag: YES
X-Spam-Checker-Version: SpamAssassin 3.2.0 (2007-05-01) on web1.renoirboulanger.com
X-Spam-Level: **************************************************
X-Spam-Status: Yes, score=1002.6 required=5.0 tests=AWL,GTUBE,NO_RECEIVED,
NO_RELAYS,RAZOR2_CF_RANGE_51_100,RAZOR2_CF_RANGE_E4_51_100,RAZOR2_CHECK
autolearn=no version=3.2.0
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="----------=_47C6D7D9.CD6EF8C3"
This is a multi-part message in MIME format.
------------=_47C6D7D9.CD6EF8C3
...Le courriel en tant que tel
Note: Il existe trois fichiers de tests: /usr/share/sample-spam.txt
(test
email sample spam), /usr/share/sample-nonspam.txt
(sample email correct), et
/usr/share/sample-virus.txt
(pour voir si l'antivirus est ok)
Tester les relais SMTP
Notez que j'ai pas sous la main d'adresse courriel ou serveur connu comme spammeur sur notre réseau ce qui est très bien.
Alors si votre test donne pas un résultat similaire... on a un problème de spam!
avec exim -bh
Avec la commande exim -bh IP-ADDRESS EMAIL-ADDRESS
on peut savoir comment le
courriel passe, s'il est accepté.
exim -bh 69.159.235.26 renoirb@gmail.com
**** SMTP testing session as if from host 69.159.235.26
**** but without any ident (RFC 1413) callback.
**** This is not for real!
>>> host in hosts_connection_nolog? no (option unset)
>>> host in host_lookup? yes (matched "*")
>>> looking up host name for 69.159.235.26
>>> IP address lookup yielded mtrlpq02-1168108314.sdsl.bell.ca
>>> gethostbyname looked up these IP addresses:
>>> name=mtrlpq02-1168108314.sdsl.bell.ca address=69.159.235.26
>>> checking addresses for mtrlpq02-1168108314.sdsl.bell.ca
>>> 69.159.235.26 OK
>>> host in host_reject_connection? no (option unset)
>>> host in sender_unqualified_hosts? no (option unset)
>>> host in recipient_unqualified_hosts? no (option unset)
>>> host in helo_verify_hosts? no (option unset)
>>> host in helo_try_verify_hosts? no (option unset)
>>> host in helo_accept_junk_hosts? no (option unset)
220 web1.renoirboulanger.com ESMTP Exim 4.66 Thu, 28 Feb 2008 11:02:19 -0500
Exemple de test fonctionnel (On remarque le message 220 hostname ESMTP...
.
Faire [^c] pour sortir.
Avec exim_checkaccess
Une autre version existe qui sort moins de output
exim_checkaccess 69.159.235.26 contribs@renoirboulanger.com
Accepted
Statistiques
Il existe, a ma mémoire, actuellement, un outil qui permet de savoir l'Activité du serveur. Il est dans un crontab. Voici la commande.
eximstats /var/log/exim/mainlog
Exim statistics from 2008-02-24 04:02:35 to 2008-02-28 11:11:24
Grand total summary
-------------------
At least one address
TOTAL Volume Messages Addresses Hosts Delayed Failed
Received 100MB 6049 2029 2 0.0% 37 0.6%
Delivered 101MB 6174 6336 17
Rejects 45232 21772
Deliveries by transport
-----------------------
Volume Messages
:blackhole: 12MB 2232
address_file 660KB 64
remote_smtp 600KB 89
spamcheck 46MB 2966
virtual_localdelivery 42MB 823
Messages received per hour (each dot is 7 messages)
---------------------------------------------------
... un tableau par points (.) qui donne une idée de grandeur de la quantité de courriel ...
Time spent on the queue: all messages
-------------------------------------
...
Time spent on the queue: messages with at least one remote delivery
-------------------------------------------------------------------
...
Relayed messages
----------------
...
Top 50 mail rejection reasons by message count
----------------------------------------------
...
Top 50 sending hosts by message count
-------------------------------------
...
Top 50 sending hosts by volume
------------------------------
...
Top 50 local senders by message count
-------------------------------------
...
Top 50 local senders by volume
------------------------------
...
Top 50 host destinations by message count
-----------------------------------------
...
Très utile!
Vulgarisation
Description du HELO
Source: http://email.about.com/cs/standards/a/smtp.htm (modifié)
Une discussion SMTP commence soit par EHLO (ou HELO). Qui, en gros, annonce que le serveur de courrier possède quelques features améliorés comparé aux premières générations de serveur smtp.
(...)
...But to use later additions to SMTP that have brought about two flavors of the later HELO command (SMTP command generally consist of four characters).
(...)
EHLO, being the more recent one makes the server advertise all the additional features (such as delivery status notification or the ability to transport messages that contain other than the safe ASCII characters) it supports.
(...)
Not every server will allow this greeting, but it is required to accept a plain HELO which naturally assumes that no additional features are present.
(...)
Both HELO (et EHLO) commands do require the client to specify its domain after the **LO, however.