





<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ø Carnet Web d&#039;un Vieux Con ø &#187; spool</title>
	<atom:link href="http://www.pagasa.net/tag/spool/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.pagasa.net</link>
	<description>Quand l&#039;espoir vient de l&#039;optimisme</description>
	<lastBuildDate>Tue, 27 Jul 2010 13:12:10 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Surveiller la file d&#8217;attente de Sendmail</title>
		<link>http://www.pagasa.net/surveiller-la-file-dattente-de-sendmail/</link>
		<comments>http://www.pagasa.net/surveiller-la-file-dattente-de-sendmail/#comments</comments>
		<pubDate>Thu, 13 Dec 2007 20:53:02 +0000</pubDate>
		<dc:creator>Thibaut</dc:creator>
				<category><![CDATA[mail]]></category>
		<category><![CDATA[file d'attente]]></category>
		<category><![CDATA[sendmail]]></category>
		<category><![CDATA[spool]]></category>
		<category><![CDATA[surveillance]]></category>
		<category><![CDATA[surveiller]]></category>

		<guid isPermaLink="false">http://mig.pagasa.net/2007/12/13/surveiller-la-file-dattente-de-sendmail/</guid>
		<description><![CDATA[Lorsque Sendmail reçoit un message, il tente de le livrer à destination immédiatement. Si cela n&#8217;est pas possible alors il le dépose dans sa file d&#8217;attente et tente une nouvelle livraison par la suite. Le délai entre deux livraisons est fixé grâce au paramètre « -q » de Sendmail. Par exemple :
  # /usr/sbin/sendmail [...]]]></description>
			<content:encoded><![CDATA[<p>Lorsque Sendmail reçoit un message, il tente de le livrer à destination immédiatement. Si cela n&#8217;est pas possible alors il le dépose dans sa file d&#8217;attente et tente une nouvelle livraison par la suite. Le délai entre deux livraisons est fixé grâce au paramètre « -q » de Sendmail. Par exemple :<br />
<strong>  # /usr/sbin/sendmail -q15m </strong></p>
<p>fixera à 15 minutes le délai entre deux tentatives de livraison. Idéalement, une file d&#8217;attente devrait être toujours vide ; mais bien entendu, cela n&#8217;est pas possible : le serveur de destination n&#8217;est pas disponible, la charge moyenne du serveur est trop importante, il n&#8217;y a pas assez de place sur le disque, etc.</p>
<p>Il est intéressant de surveiller le nombre de messages contenus dans la file d&#8217;attente ; ceci permet d&#8217;anticiper les pannes et aussi d&#8217;isoler certains problèmes récurrents tels que les serveurs en difficulté. Lorsqu&#8217;une file d&#8217;attente croît régulièrement sans se stabiliser alors il arrive un moment où il faut se poser des questions : est-ce que mon serveur est suffisamment bien calibré, ai-je assez de bande passante, etc.</p>
<p>Pour surveiller cette file, nous allons utiliser une combinaison de scripts que nous passerons à <a href="http://oss.oetiker.ch/mrtg/" target="_blank">MRTG</a> via <a href="http://net-snmp.sourceforge.net/" target="_blank">SNMP</a>.</p>
<p>Tout d&#8217;abord, nous devons extraire le nombre de requêtes contenues dans la file. Ceci se fait via la commande « mailq ». Les informations résultantes de cette dernière ressemblent à ceci :<br />
<strong>    h9GFItZ2020003    95399 Thu Oct 16 17:18 <marketing@xyz.com><br />
8BITMIME   (host map: lookup (toulouse.xyz.fr): deferred)<br />
&lt;123@toulouse.xyz.fr&gt;<br />
h9GEvdZ2017358    95399 Thu Oct 16 16:57 <marketing@xyz.com><br />
8BITMIME   (host map: lookup (xyz.fr): deferred)<br />
&lt;5432@xyz.fr&gt;<br />
h9GEEgZ2012871     4567 Thu Oct 16 16:14 &lt;&gt;<br />
8BITMIME   (Deferred: Connection refused by m5.labas.com.)<br />
<fs6@m5.labas.com><br />
h9GCYYZ2007297    13646 Thu Oct 16 14:34 &lt;&gt;<br />
8BITMIME   (Deferred: Connection refused by newton.vanpiperzen.fr.)<br />
<apache@newton.vanpiperzen.fr><br />
Total requests: 708<br />
</apache@newton.vanpiperzen.fr></fs6@m5.labas.com></marketing@xyz.com></marketing@xyz.com></strong><br />
La dernière ligne nous intéresse directement; ici, il y a donc 708 messages bloqués dans la file d&#8217;attente. Afin d&#8217;extraire le nombre, une simple combinaison de commandes et un script <a href="http://www.shellunix.com/awk.html" target="_blank">Awk</a> suffit :<br />
<strong>    # /usr/bin/mailq | /usr/bin/tail -1 | /usr/bin/awk &#8216;BEGIN {} { j= $3} END {printf &laquo;&nbsp;%s &laquo;&nbsp;,j }&#8217; </strong></p>
<p>* La première instruction (mailq) déclenche l&#8217;affichage de la file d&#8217;attente<br />
* La deuxième passe le résultat dans la commande « tail » qui n&#8217;affiche que la dernière ligne ( Total requests: 708)<br />
* Le script awk n&#8217;affiche que le dernier mot (708)</p>
<p>Ceci fait, nous allons désormais passer ces informations à MRTG; la façon la plus commode est d&#8217;utiliser SNMP.<br />
Pour ce faire, il faut rajouter un OID propriétaire dans le snmpd.conf ; ici, nous travaillons avec ucd-snmp. Voici cet OID :<br />
<strong>    exec .1.3.6.1.4.1.2021.61       queue     /home/s/queue.sh </strong></p>
<p>Avec le script queue.sh contenant:<br />
<strong>    # !/bin/sh<br />
# /usr/bin/mailq | /usr/bin/tail -1 | /usr/bin/awk &#8216;BEGIN {} { j= $3} END {printf &laquo;&nbsp;%s &laquo;&nbsp;,j }&#8217; </strong></p>
<p>Ceci terminé, il faut relancer le SNMP : <strong>    # service snmpd restart  (Sous RedHat)<br />
# /etc/init.d/snmpd restart (Autre)<br />
</strong><br />
Essayons d&#8217;extraire les différents OID depuis la NMS (Network Management Server) :<br />
<strong>    # snmpwalk serveur-sendmail communaute enterprises.ucdavis.61<br />
enterprises.ucdavis.61.1.1 = 1<br />
enterprises.ucdavis.61.2.1 = &laquo;&nbsp;queue&nbsp;&raquo;<br />
enterprises.ucdavis.61.3.1 = &laquo;&nbsp;/home/s/queue.sh&nbsp;&raquo;<br />
enterprises.ucdavis.61.100.1 = 0<br />
enterprises.ucdavis.61.101.1 = &laquo;&nbsp;522&#8243;<br />
enterprises.ucdavis.61.102.1 = 0 </strong></p>
<p>Ca fonctionne, et nous allons donc travailler avec l&#8217;OID enterprises.ucdavis.61.101.1<br />
La prochaine étape est de créer une entrée MRTG afin de grapher régulièrement les entrées obtenues par notre script. La seule difficulté est que notre script Awk renvoie l&#8217;information sous forme de caractères; MRTG, quand à lui, attend un nombre. Nous allons donc devoir encore développer un script pour convertir la chaîne de caractères en nombre. Voici ce script, écrit en PERL, nous l&#8217;appellerons queue.pl :<br />
<strong>    #!/usr/bin/perl<br />
$ip = shift @ARGV;<br />
$com = shift @ARGV;<br />
$mib1 = shift @ARGV;<br />
$etat=`snmpget $ip $com $mib1`;<br />
chomp($etat);<br />
($etat) = ($etat =~ /= &laquo;&nbsp;(.+)&nbsp;&raquo;/);<br />
if($etat eq &laquo;&nbsp;&nbsp;&raquo;)<br />
{<br />
print &laquo;&nbsp;0\n0\n&nbsp;&raquo;;<br />
}<br />
else<br />
{<br />
print &laquo;&nbsp;$etat\n$etat\n&nbsp;&raquo;;<br />
}<br />
</strong><br />
Le script commence par récupérer l&#8217;OID au moyen de l&#8217;instruction « snmpget », puis il nettoie la chaîne des guillemets et finalement affiche le nombre en deux exemplaires, car MRTG attend toujours un minimum de deux nombres.<br />
Pour utiliser notre script, il faudra donc taper :<br />
<strong> # ./queue.pl<br />
522<br />
522 </strong></p>
<p>Il ne nous reste plus qu&#8217;à créer le chapitre MRTG :<br />
<strong>    Target[sendmail.queue]: `/home/s/queue.pl 192.168.0.2 com enterprises.ucd avis.61.101.1`<br />
Directory[sendmail.queue]: sendmail<br />
Options[sendmail.queue]: gauge,nopercent<br />
MaxBytes[sendmail.queue]: 3500<br />
XSize[sendmail.queue]: 580<br />
YSize[sendmail.queue]: 100<br />
YLegend[sendmail.queue]: Nbre de messages en attente<br />
ShortLegend[sendmail.queue]: msg<br />
Legend1[sendmail.queue]: Messages en attente<br />
Legend2[sendmail.queue]: Messages en attente<br />
LegendI[sendmail.queue]: Messages en attente<br />
LegendO[sendmail.queue]: Messages en attente<br />
Title[sendmail.queue]:Messages dans la file d&#8217;attente<br />
PageTop[sendmail.queue]: &lt;H1&gt;Messages dans la file d&#8217;attente sur Sendmail&lt;/H1&gt; </strong></p>
<p><em>Note:</em> des problèmes peuvent survenir avec SNMP et la commande mailq en cas de surcharge du serveur ; il est tout à fait envisageable que MRTG soit dans l&#8217;incapacité de récupérer les informations. Pour pallier à ce problème, le mieux est de faire tourner le script qui va chercher le nombre de messages dans la file d&#8217;attente directement sur le serveur SMTP ; ce script devra être lancé régulièrement via une entrée dans la crontab et le résultat placé dans un fichier. Après, ce nombre pourra être récupéré par SNMP par un simple « cat ».</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pagasa.net/surveiller-la-file-dattente-de-sendmail/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Le SMTP spoolé</title>
		<link>http://www.pagasa.net/le-smtp-spoole/</link>
		<comments>http://www.pagasa.net/le-smtp-spoole/#comments</comments>
		<pubDate>Thu, 13 Dec 2007 20:49:51 +0000</pubDate>
		<dc:creator>Thibaut</dc:creator>
				<category><![CDATA[mail]]></category>
		<category><![CDATA[dsmtp]]></category>
		<category><![CDATA[ETRN]]></category>
		<category><![CDATA[isdn]]></category>
		<category><![CDATA[rnis]]></category>
		<category><![CDATA[rtc]]></category>
		<category><![CDATA[sendmail]]></category>
		<category><![CDATA[smtp]]></category>
		<category><![CDATA[spool]]></category>

		<guid isPermaLink="false">http://mig.pagasa.net/2007/12/13/le-smtp-spoole/</guid>
		<description><![CDATA[Même si la plupart d&#8217;entre nous possède désormais une connexion permanente à Internet comme l&#8217;ADSL ou le câble, il existe encore des situations où l&#8217;on utilise des connexions intermittentes comme le RNIS, l&#8217;ISDN ou le RTC: liens de secours, lieux non-couverts par l&#8217;ADSL, etc.
Celui qui utilise une connexion intermittente se retrouve généralement face à la [...]]]></description>
			<content:encoded><![CDATA[<p>Même si la plupart d&#8217;entre nous possède désormais une connexion permanente à Internet comme l&#8217;ADSL ou le câble, il existe encore des situations où l&#8217;on utilise des connexions intermittentes comme le RNIS, l&#8217;ISDN ou le RTC: liens de secours, lieux non-couverts par l&#8217;ADSL, etc.</p>
<p>Celui qui utilise une connexion intermittente se retrouve généralement face à la problématique suivante: Comme la connexion n&#8217;est pas permanente, il n&#8217;est à priori pas possible d&#8217;avoir son propre serveur SMTP gérant la réception du courrier en provenance de l&#8217;Internet. On doit alors laisser la gestion de tout le courrier électronique au FAI (Fournisseur d&#8217;Accès Internet), ce qui est somme toute dommage, surtout si l&#8217;on dispose d&#8217;un service informatique capable de gérer les services Internet.</p>
<p>Il est toutefois possible de contourner ce problème grâce aux extensions du protocole SMTP, défini par le ESMTP (Extended Simple Mail Protocol).</p>
<p>L&#8217;idée est la suivante:<br />
- le courrier arrive sur le serveur SMTP du FAI,<br />
- le FAI stocke le courrier dans une file d&#8217;attente,<br />
- le client récupère toute la file d&#8217;attente lorsqu&#8217;il se connecte.</p>
<p>Attention, ici il n&#8217;est nullement question d&#8217;accéder à des boites aux lettres via POP mais bien de récupérer toute la file d&#8217;attente SMTP d&#8217;un domaine sans se soucier d&#8217;éventuelles erreurs de destinataires. Ces mêmes erreurs seront gérées par la suite par le serveur SMTP de destination; le FAI n&#8217;a qu&#8217;un rôle d&#8217;intermédiaire: il est serveur-relais, tout simplement.</p>
<p>Le mécanisme de récupération de la file d&#8217;attente SMTP se fait via la commande ETRN; c&#8217;est cette même commande qui sera étudiée plus tard et un petit programme en C illustrera son utilisation.</p>
<p>Voici la trame d&#8217;un message transitant depuis l&#8217;émetteur du message jusqu&#8217;au destinataire final, au-delà de la connexion intermittente:</p>
<p>Le client envoie son message vers son serveur de courrier via une transaction SMTP. Ce même serveur extrait le MX (Mail Exchanger) de son DNS et l&#8217;expédie via une autre requête SMTP sur le serveur relais. Ce dernier se contente de stocker le message dans la file d&#8217;attente; à ce stade, il n&#8217;y a plus aucune notion de délai de livraison: c&#8217;est le client lui même qui va récupérer le courrier quand bon lui semble. Lorsque la connexion intermittente monte, le serveur SMTP de destination exécute la commande ETRN et toute la file d&#8217;attente est récupérée. Le destinataire du message n&#8217;a plus qu&#8217;à récupérer son courrier via POP.</p>
<p>Une commande ETRN consiste en fait à accéder au port 25 d&#8217;un serveur SMTP, et à envoyer cette même commande. Le serveur SMTP tente alors d&#8217;accéder au port 25 de l&#8217;émetteur de la transaction et déclenche un dialogue SMTP entre les deux serveurs.<br />
Le dialogue suivant vous montre comment se passe une transaction ETRN:<br />
<strong> telnet mx.mondomaine.fr 25<br />
220 mx.mondomaine.fr ESMTP Sendmail 8.10.0/8.10.0;<br />
ehlo mx.tondomaine.fr<br />
250-mx.mondomaine.fr Hello mx.tondomaine.fr [192.168.0.1] (may be forged),<br />
etrn @tondomaine.fr<br />
250 2.0.0 Queuing for node @tondomaine.fr started<br />
quit<br />
221 2.0.0 mx.mondomaine.fr closing connection<br />
</strong><br />
La commande &laquo;&nbsp;etrn @mx.tondomaine.fr&nbsp;&raquo; déclenche la transaction SMTP entre les deux serveurs. Il y a deux façons d&#8217;utiliser la commande ETRN:<br />
soit par domaine (@tondomaine.fr), soit par file d&#8217;attente (#file),  cela dépend du fournisseur et  de sa façon de procéder.<br />
Attention, la commande ETRN ne fonctionne qu&#8217;avec des serveurs ESMTP, d&#8217;où le &laquo;&nbsp;ehlo&nbsp;&raquo; qui est là pour tester la nature du serveur.</p>
<p>Dans la plupart des cas, le serveur utilisé est un Sendmail 8.10 ou plus doté d&#8217;une mailertable pour rediriger le courrier grâce à un mailer particulier appelé DSMTP.<br />
Ci-dessous, un exemple de configuration pour sendmail:<br />
<u>Sendmail.mc</u><br />
<strong> divert(-1)<br />
dnl<br />
dnl Configuration sendmail côté FAI<br />
dnl<br />
divert(0)<br />
include(`/usr/lib/sendmail-cf/m4/cf.m4&#8242;)<br />
VERSIONID(`Sendmail pour mx0.d0.com&#8217;)dnl<br />
OSTYPE(`linux&#8217;)dnl<br />
define(`confMAX_MESSAGE_SIZE&#8217;, `5000000&#8242;)dnl<br />
define(`STATUS_FILE&#8217;, `/etc/mail/sendmail.st&#8217;)dnl<br />
define(`confDOMAIN_NAME&#8217;, `mx0.d0.com&#8217;)dnl<br />
define(`ALIAS_FILE&#8217;, `/etc/mail/aliases&#8217;)dnl<br />
define(`confTO_QUEUEWARN&#8217;, `72h&#8217;)dnl<br />
define(`confTO_QUEUERETURN&#8217;, `7d&#8217;)dnl<br />
FEATURE(`access_db&#8217;,`hash -o /etc/mail/access&#8217;)dnl<br />
FEATURE(`mailertable&#8217;,`hash -o /etc/mail/mailertable&#8217;)dnl<br />
FEATURE(always_add_domain)dnl<br />
MAILER(smtp)dnl </strong></p>
<p><u>Mailertable</u><br />
<strong> d1.com               dmstp:[mail.d0.com]<br />
d2.com               dmstp:[mail.d0.com]<br />
d3.com               dmstp:[mail.d0.com]<br />
d4.com               dmstp:[mail.d0.com] </strong></p>
<p><u>Sendmail.mc</u><br />
<strong> divert(-1)<br />
dnl<br />
dnl Configuration sendmail sur une ligne RNIS/ISDN<br />
dnl<br />
divert(0)<br />
include(`/usr/lib/sendmail-cf/m4/cf.m4&#8242;)<br />
VERSIONID(`Sendmail pour mail.d0.com&#8217;)dnl<br />
OSTYPE(`linux&#8217;)dnl<br />
define(`confMAX_MESSAGE_SIZE&#8217;, `5000000&#8242;)dnl<br />
define(`STATUS_FILE&#8217;, `/etc/mail/sendmail.st&#8217;)dnl<br />
define(`confDOMAIN_NAME&#8217;, `mail.d0.com&#8217;)dnl<br />
define(`SMART_HOST&#8217;,`esmtp:[mx0.d0.com]&#8216;)dnl<br />
define(`confCON_EXPENSIVE&#8217;, `true&#8217;)dnl<br />
define(`ALIAS_FILE&#8217;, `/etc/mail/aliases&#8217;)dnl<br />
define(`confTO_QUEUEWARN&#8217;, `72h&#8217;)dnl<br />
define(`confTO_QUEUERETURN&#8217;, `7d&#8217;)dnl<br />
MODIFY_MAILER_FLAGS(`SMTP&#8217;,`+e&#8217;)dnl<br />
FEATURE(`access_db&#8217;,`hash -o /etc/mail/access&#8217;)dnl<br />
FEATURE(`virtusertable&#8217;,`hash -o /etc/mail/virtusertable&#8217;)dnl<br />
FEATURE(always_add_domain)dnl<br />
FEATURE(local_procmail)dnl<br />
FEATURE(use_cw_file)dnl<br />
MAILER(smtp)dnl<br />
</strong><br />
Pour lancer l&#8217;ETRN, placez <a href="http://www.pagasa.net/telecharge/dq.tgz">ce petit programme</a> dans votre crontab sur la machine au delà de la connexion intermittente.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pagasa.net/le-smtp-spoole/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
