Skip to content

Commit

Permalink
2020/05/14 23:50:55
Browse files Browse the repository at this point in the history
  • Loading branch information
MasahikoIto committed May 14, 2020
1 parent 1182617 commit 8bddf42
Show file tree
Hide file tree
Showing 13 changed files with 171 additions and 137 deletions.
2 changes: 1 addition & 1 deletion sample/black_hostname_db
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# sample
# spammer�Υۥ���̾
# spammerのホスト名
^mail\.spammer\.net$
^warumono\.org$
2 changes: 1 addition & 1 deletion sample/black_ip_db
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# sample
# spammer��IP
# spammerのIP
^111\.222\.111\.222$
^222\.111\.222\.[0-9]*$
4 changes: 2 additions & 2 deletions sample/relay_allow_address_db
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# sample
# �����Υ����Ф˵��Ĥ��������襢�ɥ쥹(for �軰�ԥ�졼�����å�)
# �������оݤ�`RCPT TO:'�Ԥ��Τ�ΤʤΤǡ�����ɽ��(^$)�ǰϤ�Ǥϥ���
# 外部のサーバに許可する配送先アドレス(for 第三者リレーチェック)
# 検査の対象が`RCPT TO:'行そのものなので、正規表現(^$)で囲んではダメ
myh.no-ip.org
2 changes: 1 addition & 1 deletion sample/relay_allow_host_db
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# sample
# ���ƤΥ�졼����Ĥ���ۥ��Ȥ�IP(for �軰�ԥ�졼�����å�)
# 全てのリレーを許可するホストのIP(for 第三者リレーチェック)
^127\.0\.0\.1$
^192\.168\.0\.[0-9]*$
30 changes: 15 additions & 15 deletions sample/show_retry1.sh
Original file line number Diff line number Diff line change
Expand Up @@ -10,31 +10,31 @@ PATH="/usr/local/smtp_wrapper:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:
tmp="/tmp"
#-----------------------------------------------------------------
#
# 当日中の、完全に全てのアクセスを拒否されているIPの内、
# INTERVALに設定した秒数以上間隔を空けてアクセスしてい
# る物を表示する。
# 当日中の、完全に全てのアクセスを拒否されているIPの内、
# INTERVALに設定した秒数以上間隔を空けてアクセスしてい
# る物を表示する。
#
# RFC2821(Simple Mail Transfer Protocol)
#
# 4.5.4.1 送信戦略
# 4.5.4.1 送信戦略
#
# ある特定の宛先への送信が失敗した後、クライアントは再送を遅延させ
# なければならない(MUST)。一般にこの再送の間隔は少なくとも 30 分で
# あるべき(SHOULD)だが、配送不能の原因を SMTP クライアントが特定で
# きる場合には、より繊細で柔軟な戦略が有益だろう。
# ある特定の宛先への送信が失敗した後、クライアントは再送を遅延させ
# なければならない(MUST)。一般にこの再送の間隔は少なくとも 30 分で
# あるべき(SHOULD)だが、配送不能の原因を SMTP クライアントが特定で
# きる場合には、より繊細で柔軟な戦略が有益だろう。
#
INTERVAL=`expr 30 \* 60`; export INTERVAL
#
date=`date +'%b %d' | sed -e 's/ *0/ /'`
#
# In : May 23 10:59:35 lib100 smtp_wrapper: [25403] 450 This message was rejected according to site policy(rejected by ip_filter. IP=60.236.0.5)(SL18)
#
# 当日中の、IPを含んだ(拒否|受付)メッセージを抽出[1]
# 当日中の、IPを含んだ(拒否|受付)メッセージを抽出[1]
cat $* |\
sed -e 's/ */ /g' |\
egrep -i "^${date} .*smtp_wrapper.*rejected by|^${date} .*smtp_wrapper.*child start" >${tmp}/show_retry1.1.$$.tmp
#
# 受付メッセージから出現回数、IPを抽出&編集[2]
# 受付メッセージから出現回数、IPを抽出&編集[2]
cat ${tmp}/show_retry1.1.$$.tmp |\
grep -i 'child start' |\
sed -e 's/^.*IP=//;s/(.*$//' |\
Expand All @@ -43,21 +43,21 @@ uniq -c |\
grep -v '^ *1 ' |\
sort >${tmp}/show_retry1.2.$$.tmp
#
# 拒否メッセージから出現回数、IPを抽出&編集[3]
# 拒否メッセージから出現回数、IPを抽出&編集[3]
cat ${tmp}/show_retry1.1.$$.tmp |\
grep -i 'rejected by' |\
sed -e 's/^.*IP=//;s/).*$//' |\
sort |\
uniq -c |\
sort >${tmp}/show_retry1.3.$$.tmp
#
# 受付回数と拒否回数の等しい(つまり完全に拒否されている)IPを抽出[4]
# 受付回数と拒否回数の等しい(つまり完全に拒否されている)IPを抽出[4]
join -t "," ${tmp}/show_retry1.2.$$.tmp ${tmp}/show_retry1.3.$$.tmp |\
sed -e 's/^ *//' |\
cut -d ' ' -f 2 |\
sort >${tmp}/show_retry1.4.$$.tmp
#
# 拒否メッセージの間隔がINTERVAL秒以上のIP抽出&編集[5]
# 拒否メッセージの間隔がINTERVAL秒以上のIP抽出&編集[5]
cat ${tmp}/show_retry1.1.$$.tmp |\
grep -i "smtp_wrapper.*rejected by" |\
sed -e 's/smtp_wrapper:.*IP=//;s/).*$//;s/:/ /g' |\
Expand Down Expand Up @@ -105,10 +105,10 @@ END{
}
}' >${tmp}/show_retry1.5.$$.tmp
#
# [4][5]マッチングして、全ての受付がINTERVAL秒以上の間隔で拒否されているIPを抽出[6]
# [4][5]マッチングして、全ての受付がINTERVAL秒以上の間隔で拒否されているIPを抽出[6]
join ${tmp}/show_retry1.4.$$.tmp ${tmp}/show_retry1.5.$$.tmp >${tmp}/show_retry1.6.$$.tmp
#
# [6]にDNS逆引結果を付加して表示
# [6]にDNS逆引結果を付加して表示
for i in `cat ${tmp}/show_retry1.6.$$.tmp`
do
echo -n $i " : "
Expand Down
4 changes: 2 additions & 2 deletions sample/show_retry2.sh
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@
PATH="/usr/local/smtp_wrapper:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin"; export PATH
#-----------------------------------------------------------------
#
# smtp_filter2.shに拒否されているIPの内、リトライしている物を表示
# する。
# smtp_filter2.shに拒否されているIPの内、リトライしている物を表示
# する。
#
date=`date +'%b %d' | sed -e 's/ *0/ /'`
#
Expand Down
70 changes: 35 additions & 35 deletions sample/smtp_filter.sh
Original file line number Diff line number Diff line change
Expand Up @@ -7,17 +7,17 @@
#
# Thanks to http://www.gabacho-net.jp/anti-spam/anti-spam-system.html
#
# IPに対するチェック(S25R)とコンテンツに対するチェック(第三者リレー)を同時に
# 行う場合のスクリプト。`-f'オプションに指定する。`-if'オプションは指定しない。
# IPに対するチェック(S25R)とコンテンツに対するチェック(第三者リレー)を同時に
# 行う場合のスクリプト。`-f'オプションに指定する。`-if'オプションは指定しない。
#
#============================================================
#
# 割り込み時の処理設定
# 割り込み時の処理設定
#
trap "spam_exit 1 \"kill by signal\"" INT HUP TERM QUIT
#============================================================
#
# 実行パス設定
# 実行パス設定
#
PATH="/usr/local/smtp_wrapper:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin"
export PATH
Expand All @@ -29,39 +29,39 @@ export PATH
#(sleep ${timeout}; kill -15 ${PPID}) &
#============================================================
#
# smtp_wrapperディレクトリ指定
# smtp_wrapperディレクトリ指定
#
smtp_wrapper_dir="/usr/local/smtp_wrapper"
#
# テンポラリスプールディレクトリ
# テンポラリスプールディレクトリ
tmp="/var/tmp"
#
# syslog出力時のID
# syslog出力時のID
sl_ident="smtp_filter"
#
# 正当ホストのIPデータベース
# 正当ホストのIPデータベース
white_ip_db="${smtp_wrapper_dir}/white_ip_db"
# 正当ホストのFQDNデータベース
# 正当ホストのFQDNデータベース
white_hostname_db="${smtp_wrapper_dir}/white_hostname_db"
# 不正ホストのIPデータベース
# 不正ホストのIPデータベース
black_ip_db="${smtp_wrapper_dir}/black_ip_db"
# 不正ホストのFQDNデータベース
# 不正ホストのFQDNデータベース
black_hostname_db="${smtp_wrapper_dir}/black_hostname_db"
#
# 全てのリレーを許可するホストのIPデータベース
# 全てのリレーを許可するホストのIPデータベース
relay_allow_host="${smtp_wrapper_dir}/relay_allow_host_db"
# 外部のサーバに許可する配送先アドレスデータベース
# 外部のサーバに許可する配送先アドレスデータベース
relay_allow_address="${smtp_wrapper_dir}/relay_allow_address_db"
#============================================================
#
# ある種の定数
# ある種の定数
#
cr=`echo -n -e '\r'`; export cr
tab=`echo -n -e '\t'`; export tab
pid="$$"; export pid
#============================================================
#
# spamと判断時に終了させる処理
# spamと判断時に終了させる処理
#
spam_exit ()
{
Expand All @@ -81,13 +81,13 @@ spam_exit ()
}
#============================================================
#
# スパムチェック処理
# スパムチェック処理
#
spam_check ()
{
if [ "X${from_ip}" = "X" ]
then
spam_exit 2 "unknown ip" # *** 送信ホストのIPが判らない ***
spam_exit 2 "unknown ip" # *** 送信ホストのIPが判らない ***
fi
#
for i in `egrep -v '^#' ${black_ip_db}`
Expand All @@ -96,7 +96,7 @@ spam_check ()
egrep "$i"`
if [ "X${black_ip}" != "X" ]
then
spam_exit 3 "black IP" # *** 送信ホストIPが黒IPデータベースに登録されている ***
spam_exit 3 "black IP" # *** 送信ホストIPが黒IPデータベースに登録されている ***
fi
done
#
Expand All @@ -116,7 +116,7 @@ spam_check ()
sed -e 's/^.* domain name pointer *//;s/\.$//'`
if [ "X${white_ip}" = "X" -a "X${from_hostname}" = "X" ]
then
spam_exit 4 "no dns" # *** 送信ホストのIPが逆引きできない ***
spam_exit 4 "no dns" # *** 送信ホストのIPが逆引きできない ***
fi
#
for i in `egrep -v '^#' ${black_hostname_db}`
Expand All @@ -125,7 +125,7 @@ spam_check ()
egrep "$i"`
if [ "X${black_hostname}" != "X" ]
then
spam_exit 5 "black hostname" # *** 送信ホスト名が黒ホスト名データベースに登録されている ***
spam_exit 5 "black hostname" # *** 送信ホスト名が黒ホスト名データベースに登録されている ***
fi
done
#
Expand All @@ -146,48 +146,48 @@ spam_check ()
egrep '^[^\.]*[0-9][^0-9\.]+[0-9]'`
if [ "X${spam_host}" != "X" ]
then
spam_exit 6 "rule 1" # *** [ルール1] 逆引きFQDNの最下位(左端)の名前が、数字以外の文字列で分断された二つ以上の数 ***
spam_exit 6 "rule 1" # *** [ルール1] 逆引きFQDNの最下位(左端)の名前が、数字以外の文字列で分断された二つ以上の数 ***
fi
#
spam_host=`echo ${from_hostname} |\
egrep '^[^\.]*[0-9]{5}'`
if [ "X${spam_host}" != "X" ]
then
spam_exit 7 "rule 2" # *** [ルール2] 逆引きFQDNの最下位の名前が、5個以上連続する数字を含む ***
spam_exit 7 "rule 2" # *** [ルール2] 逆引きFQDNの最下位の名前が、5個以上連続する数字を含む ***
fi
#
spam_host=`echo ${from_hostname} |\
egrep '^([^\.]+\.)?[0-9][^\.]*\.[^\.]+\..+\.[a-z]'`
if [ "X${spam_host}" != "X" ]
then
spam_exit 8 "rule 3" # *** [ルール3] 逆引きFQDNの上位3階層を除き、最下位または下位から2番目の名前が数字で始まる ***
spam_exit 8 "rule 3" # *** [ルール3] 逆引きFQDNの上位3階層を除き、最下位または下位から2番目の名前が数字で始まる ***
fi
#
spam_host=`echo ${from_hostname} |\
egrep '^[^\.]*[0-9]\.[^\.]*[0-9]-[0-9]'`
if [ "X${spam_host}" != "X" ]
then
spam_exit 9 "rule 4" # *** [ルール4] 逆引きFQDNの最下位の名前が数字で終わり、かつ下位から2番目の名前が、1個のハイフンで分断された二つ以上の数字列を含む ***
spam_exit 9 "rule 4" # *** [ルール4] 逆引きFQDNの最下位の名前が数字で終わり、かつ下位から2番目の名前が、1個のハイフンで分断された二つ以上の数字列を含む ***
fi
#
spam_host=`echo ${from_hostname} |\
egrep '^[^\.]*[0-9]\.[^\.]*[0-9]\.[^\.]+\..+\.'`
if [ "X${spam_host}" != "X" ]
then
spam_exit 10 "rule 5" # *** [ルール5] 逆引きFQDNが5階層以上で、下位2階層の名前がともに数字で終わる ***
spam_exit 10 "rule 5" # *** [ルール5] 逆引きFQDNが5階層以上で、下位2階層の名前がともに数字で終わる ***
fi
#
spam_host=`echo ${from_hostname} |\
egrep '^(dhcp|dialup|ppp|adsl)[^\.]*[0-9]'`
if [ "X${spam_host}" != "X" ]
then
spam_exit 11 "rule 6" # *** [ルール6] 逆引きFQDNの最下位の名前が「dhcp」、「dialup」、「ppp」、または「adsl」で始まり、かつ数字を含む ***
spam_exit 11 "rule 6" # *** [ルール6] 逆引きFQDNの最下位の名前が「dhcp」、「dialup」、「ppp」、または「adsl」で始まり、かつ数字を含む ***
fi
fi
}
#============================================================
#
# 第三者リレーチェック処理
# 第三者リレーチェック処理
#
relay_check ()
{
Expand Down Expand Up @@ -229,14 +229,14 @@ relay_check ()
done
if [ "X${allow_rcpt}" = "X" ]
then
spam_exit 12 "no relay" # *** 第三者中継拒否 ***
spam_exit 12 "no relay" # *** 第三者中継拒否 ***
fi
done
fi
}
#============================================================
#
# 主処理開始
# 主処理開始
#
from_ip=""
from_hostname=""
Expand All @@ -247,29 +247,29 @@ black_hostname=""
#
#============================================================
#
# 直接SMTP接続分のチェック
# 直接SMTP接続分のチェック
#
# (smtp_wrapper から環境変数 SW_FROM_IP に接続元IPが渡される)
# (smtp_wrapper から環境変数 SW_FROM_IP に接続元IPが渡される)
#
from_ip=${SW_FROM_IP}
#
spam_check
#============================================================
#
# メール本文を全文受信(スプール)する
# メール本文を全文受信(スプール)する
#
cat >${tmp}/smtp_filter.1.$$.tmp
#============================================================
#
# 第三者中継拒否
# 第三者中継拒否
#
from_ip=${SW_FROM_IP}
#
relay_check
#
#============================================================
#
# 正当なメールと判断されたものを出力する
# 正当なメールと判断されたものを出力する
#
export from_ip
export from_hostname
Expand Down Expand Up @@ -301,7 +301,7 @@ END{
#
#============================================================
#
# 後始末して終了
# 後始末して終了
#
rm -f ${tmp}/smtp_filter.*.$$.tmp
exit 0
Loading

0 comments on commit 8bddf42

Please sign in to comment.