阻止率99%のスパム対策方式の研究報告

http://mail.smb.net/cgi-bin/s25r.cgi

http://mail.smb.net/cgi-bin/s25r_s.cgi

拒絶ログソーティングスクリプト FreeBSD 9.0用

オリジナルのままだとエラーするので、ちょっと改訂。

何故か手元のmail server だと、charset=iso-8859-1をいれないと駄目っぽかった。

あと、gawkをインストールしても、broken pipeになるっぽいので、gawk を awk にした。

--- s25r_orig.cgi	2012-08-23 12:55:46.000000000 +0900
+++ s25r.cgi	2012-08-23 10:44:07.000000000 +0900
@@ -1,12 +1,14 @@
 #!/bin/sh
-echo "Content-Type: text/plain"
+echo "Content-type: text/plain; charset=iso-8859-1"
+#echo "Content-Type: text/plain"
 echo
 echo "Mail rejection log"
 echo
-cat /var/log/maillog.4 /var/log/maillog.3 /var/log/maillog.2 \
-    /var/log/maillog.1 /var/log/maillog | \
+cat /var/log/maillog.4 /var/log/maillog.3 /var/log/maillog.2 /var/log/maillog.1 /var/log/maillog | \
+#cat /var/log/maillog | \
 grep 'reject:' | \
-gawk '
+#gawk '
+awk '
 BEGIN {
   count=0
 }
--- s25r_s_orig.cgi	2012-08-23 12:56:33.000000000 +0900
+++ s25r_s.cgi	2012-08-23 11:16:48.000000000 +0900
@@ -1,5 +1,6 @@
 #!/bin/sh
-echo "Content-Type: text/plain"
+echo "Content-type: text/plain; charset=iso-8859-1"
+#echo "Content-Type: text/plain"
 echo
 echo "Mail rejection log (450 Client host rejected) - sorted"
 echo
@@ -14,10 +15,10 @@
 #
 # (3) Extract essential items.
 #
-gawk '
+awk '
 {
   client=substr($0, match($0, /from [^]]+\]/)+5, RLENGTH-5)
-  sub(/\[/, " [", client)
+  gsub(/\[/, " [", client)
   sender=substr($0, match($0, /from=<[^>]*>/), RLENGTH)
   rcpt=substr($0, match($0, /to=<[^>]*>/), RLENGTH)
   helo=substr($0, match($0, /helo=<[^>]*>/), RLENGTH)
@@ -27,7 +28,7 @@
 #
 # (4) Convert month names into month numbers.
 #
-gawk '
+awk '
 BEGIN {
   month_num["Jan"]=1
   month_num["Feb"]=2
@@ -59,7 +60,7 @@
 #
 # (6) Insert a blank line between records with a different triplet.
 #
-gawk '
+awk '
 BEGIN {
   prev_triplet=""
 }
@@ -75,7 +76,7 @@
 #
 # (7) Convert retry records in a sequence into one line.
 #
-gawk '
+awk '
 BEGIN {
   RS=""
 }
@@ -91,7 +92,7 @@
 #
 # (9) Reconvert retry records in a sequence into multiple lines.
 #
-gawk '
+awk '
 {
   gsub(/\036/, "\n")
   print
@@ -101,7 +102,7 @@
 #
 # (10) Reconvert month numbers into month names.
 #
-gawk '
+awk '
 BEGIN {
   month_name[1]="Jan"
   month_name[2]="Feb"
@@ -128,7 +129,7 @@
 #
 # (11) Output sorted records with counting.
 #
-gawk '
+awk '
 BEGIN {
   Suppress_single_access_records=0
   RS=""

拒絶ログソーティングスクリプト

http://www.gabacho-net.jp/anti-spam/log-sorting-script.html

 S25Rスパム対策方式によって正当なメールサーバが誤って拒絶されているのを発見するのに有用なシェルスクリプトを紹介します。メールサーバがウェブサーバを兼ねているなら、このスクリプトをcgi-binディレクトリ配下のディレクトリにパスワード付きで置くことにより、ウェブブラウザで拒絶記録を容易に監視できます。コマンドとして実行することもできます

ということなので、早速スクリプト「s25r.cig」を

http://mail.smb.net/cgi-bin/s25r.cgi

http://mail.smb.net/cgi-bin/s25r_s.cgi

に置いて、アクセスすると・・・

[Thu Aug 23 08:26:18 2012] [error] [client 210.255.122.209] /usr/local/www/apache22/cgi-bin/s25r.cig: gawk: not found
[Thu Aug 23 08:26:18 2012] [error] [client 210.255.122.209] /usr/local/www/apache22/cgi-bin/s25r.cig: gawk: not found
[Thu Aug 23 08:26:18 2012] [error] [client 210.255.122.209] /usr/local/www/apache22/cgi-bin/s25r.cig: gawk: not found
[Thu Aug 23 08:26:18 2012] [error] [client 210.255.122.209] /usr/local/www/apache22/cgi-bin/s25r.cig: gawk: not found
[Thu Aug 23 08:26:18 2012] [error] [client 210.255.122.209] cat: /var/log/maillog.1: /usr/local/www/apache22/cgi-bin/s25r.cig: gawk: not found
[Thu Aug 23 08:26:18 2012] [error] [client 210.255.122.209] Permission denied
[Thu Aug 23 08:26:18 2012] [error] [client 210.255.122.209] cat: /var/log/maillog: Permission denied
[Thu Aug 23 08:26:18 2012] [error] [client 210.255.122.209] /usr/local/www/apache22/cgi-bin/s25r.cig: gawk: not found
[Thu Aug 23 08:26:18 2012] [error] [client 210.255.122.209] /usr/local/www/apache22/cgi-bin/s25r.cig: gawk: not found

というエラー(´・ω・`)なので、

hotshot# portinstall japanese/gawk
hotshot# rehash

した。

必要な設定

 HTTPデーモンの権限でメールログファイルが読めるようにアクセス権を設定してください。多くのシステムでは、以下のコマンドで設定できます。

chgrp nobody /var/log/maillog*
chmod g+r /var/log/maillog*

したけど、なぜか無効なので

hotshot# chmod 644 /var/log/maillog*

した。

[Thu Aug 23 08:49:30 2012] [error] [client 210.255.122.209] /usr/local/www/apache22/cgi-bin/s25r.cig: gawk: not found
[Thu Aug 23 08:49:30 2012] [error] [client 210.255.122.209] /usr/local/www/apache22/cgi-bin/s25r.cig: gawk: not found
[Thu Aug 23 08:49:30 2012] [error] [client 210.255.122.209] /usr/local/www/apache22/cgi-bin/s25r.cig: gawk: not found
[Thu Aug 23 08:49:30 2012] [error] [client 210.255.122.209] /usr/local/www/apache22/cgi-bin/s25r.cig: gawk: not found
[Thu Aug 23 08:49:30 2012] [error] [client 210.255.122.209] /usr/local/www/apache22/cgi-bin/s25r.cig: gawk: not found
[Thu Aug 23 08:49:30 2012] [error] [client 210.255.122.209] egrep: writing output: Broken pipe
[Thu Aug 23 08:49:30 2012] [error] [client 210.255.122.209] egrep: writing output: Broken pipe
[Thu Aug 23 08:49:30 2012] [error] [client 210.255.122.209] egrep: writing output: Broken pipe
[Thu Aug 23 08:49:30 2012] [error] [client 210.255.122.209] egrep: writing output: Broken pipe
[Thu Aug 23 08:49:30 2012] [error] [client 210.255.122.209] egrep: writing output: Broken pipe
[Thu Aug 23 08:49:30 2012] [error] [client 210.255.122.209] egrep: writing output: Broken pipe
[Thu Aug 23 08:49:30 2012] [error] [client 210.255.122.209] egrep: writing output: Broken pipe
[Thu Aug 23 08:49:30 2012] [error] [client 210.255.122.209] egrep: writing output: Broken pipe
[Thu Aug 23 08:49:30 2012] [error] [client 210.255.122.209] egrep: writing output: Broken pipe
[Thu Aug 23 08:49:30 2012] [error] [client 210.255.122.209] egrep: writing output: Broken pipe
[Thu Aug 23 08:49:30 2012] [error] [client 210.255.122.209] egrep: writing output: Broken pipe
[Thu Aug 23 08:49:30 2012] [error] [client 210.255.122.209] egrep: writing output: Broken pipe

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS