Mail

qmailにspamが来ちゃって、qmailがアップアップしてる。 /var/qmail/bin/qmail-qstatを見ると

messages in queue: 14585
messages in queue but not yet preprocessed: 23

/var/qmail/bin/qmail-qreadで見ると

21 Nov 2009 11:41:30 GMT  #13126261  1537  <ydhnsx@xxx.xxx.xxx.xxx> 
	remote	hellspaw@r-butler.net

みたいなキューがたくさんある。xxx.xxx.xxx.xxxは対象サーバね。

/var/qmail/bin/qmail-qread | grep xxx.xxx.xxx.xxx | wc
 12659  101236  861720

これは破棄しよう!ともってqueue-fast.plを使おうとダウンロード

でもこれってTo指定しか出来ないの。From(@xxx.xxx.xxx.xxx)は出来ない。 なのでこうしてみた。本当はshellscriptとかで書けばよかったんだけど、時間なかったので汚いソースになっちゃった。

/etc/init.d/qmail stopしておく

<?php

$filename = '/home/hoge/queue.txt'; 
#ファイル場所
#これは/var/qmail/bin/qmail-qread > /home/hoge/queue.txtしたもの
$p[0] = '/\</';
$p[1] = '/\>/';
$r[0] =  '';
$r[1] = '';
$lines = preg_replace($p, $r, file($filename));

$pattern = '/XXX.XXX.XXX.XXX/'; #Fromにしたい文言、IP
$deleteEmail = array();
for($n = 2; $n <= 10000; $n++) {
   if($n%2 == 0) {
       preg_match($pattern, $lines[$n], $match);
       if($match) {
           $m = $n + 1;
           preg_match("/[-\+\w](\\.?[-\+\w])*@[-\+\w]+(\.[-\+\w]+)*(\.[a-zA-Z]{2,4})/",  $lines[$m], $toEmail);
           $deleteEmail[] = $toEmail[0];
       }
   }
}
$string_emails = implode(" ", $deleteEmail);
echo $string_emails;
$output = system('perl /home/hoge/queue-fast.pl -d ' . $string_emails);
echo count($lines);
echo count(' -> ' . $deleteEmail);
?>

上記のファイルをqueue-read.phpとか名前を付けて

/usr/share/php5 /home/hoge/queue-read.php

とするとよい

その後/etc/init.d/qmail startする


Last-modified: 2012-03-12 (月) 17:05:46 (166d)