要件の「なるべく、ネンテナンス・フリー。なるべく、無人運用」を考慮した
sendmail の GreetPause、milter-regex、milter-greylist を組み合わにおける milter-regex の役割分担として、
milter-regex は、スパム・メールに特徴的なルールで効果の持続が期待できるものを設定します。
ここで紹介するルールは、GeoIPを条件としたものが含まれるため、milter-regex のバージョン 3.0 以降を利用します。
https://github.com/milter-regex
milter-regex の設定ファイル milter-regex.conf は、設定内容を別ファイルの参照にできないので、
設定の変更の頻度や設定の種類によって、いくつかのファイルに分割しておき、それらを統合して
milter-regex の設定ファイル milter-regex.conf を生成するようにすると管理しやすくなります。
設定ファイルは、どのような分割でも自由ですが、意図したとおりの順番でファイルを統合できるように、
ファイル名の先頭を番号にしておきます。
ファイル名 | 想定変更頻度 | 設定内容 |
---|---|---|
00-settings.conf | 低 | milter-regex の動作に関する設定 |
10-passlist.conf | 低 | 必須の許可リスト |
20-blocklist.conf | 中 | サイト・ローカルの拒否ルール |
21-blockhelo.conf | 低 | 無効なHELOなどの拒否ルール |
分割した設定ファイルを milter-regex の設定ファイル milter-regex.conf に統合するスクリプト
#!/bin/bash DATADIR=/var/lib/milter-regex ・・・ 上記の分割した設定ファイルの保管パス(任意のパス) CONF=milter-regex.conf rm $DATADIR/$CONF for FILE in `ls $DATADIR/*.conf | sort` do if [ `basename $FILE` = $CONF ] ; then continue fi cat $FILE >> $DATADIR/$CONF done
milter-regex で GeoIP を利用するための動作に関する設定です。
#################################################################################################### ##### ##### 00-settings.conf ##### #################################################################################################### # ipv4file, ipv6file # # Before use keyword 'country', both these keywords must be specified. # # Get RIR allocation data # # (1) Download IP address allocation lists from the RIR ( Regianl Internet Registry ) # ftp://ftp.afrinic.net/pub/stats/afrinic/delegated-afrinic-latest # ftp://ftp.apnic.net/pub/stats/apnic/delegated-apnic-latest # ftp://ftp.arin.net/pub/stats/arin/delegated-arin-extended-latest # ftp://ftp.lacnic.net/pub/stats/lacnic/delegated-lacnic-latest # ftp://ftp.ripe.net/pub/stats/ripencc/delegated-ripencc-latest # # (2) Convert IP address allocation lists from ASCII format to binary format # cat delegated-*-latest | grep '|..|ipv[46]|' | sort -t '|' -k 3,4 | /usr/local/sbin/milter-regex-ip-prep ipv4.dat ipv6.dat # # Maximum path length is 1023 characters. # ipv4file "/var/lib/milter-regex/ipv4.dat" ipv6file "/var/lib/milter-regex/ipv6.dat" # geoipCashMax # # Default 100K ( Minimum size ) # Unit None: Byte | k/K: KByte | m/M: MByte # geoipCashMax 1M # geoipCashKeep # # Default 7D # Unit None: Second | h/H: Hour | d/D: Day # geoipCashKeep 7D # geoipDebugLog # # For development purpose, this keyword can force syslog level LOG_DEBUG to LOG_INFO. # Only enable syslog output in GEOIP source code, not whole milter-regex. # # Default DEBUG # Values DEBUG | INFO # #geoipDebugLog DEBUG
ループバック・アドレスとローカル・ネットワークは、必須の許可リストです。
#################################################################################################### ##### ##### 10-passlist.conf ##### #################################################################################################### # ループバック・アドレスとローカル・ネットワークの無条件送信許可 accept connect // /^127\./ connect // /^10\./ connect // /^169\.254\./ connect // /^172\.(1[6-9]|2[0-9]|3[0-1])\./e connect // /^192\.168\./ connect // /^::1$/ connect // /^f[cd]/i connect // /^fe80:/i connect // /^192\.0\.2\.$/ ・・・ メール・サーバー自身や自サイトのグローバル・アドレスを指定する。 connect // /^2001:db8:$/i ・・・ メール・サーバー自身や自サイトのグローバル・アドレスを指定する。
受信拒否のルールです。
スパム・メールに特徴的なルールが見つかった時、メインテナンスして下さい。
20-blocklist.conf(更新 )
不正なHELOや受信拒否するHELOです。 受信拒否、中継拒否のリストは、必要に応じてそれぞれのサイトでメインテナンスして下さい。
#################################################################################################### ##### ##### 21-blockhelo.conf ##### #################################################################################################### # HELOでこちらのサーバー名やIPアドレスを名乗る reject "Refused connection by site policy. ( Malformed HELO )" helo /^foobar\.example\.jp$/i and connect // /^127\.0\.0\.1$/n and connect // /^192\.0\.2\.1$/n and connect // /^::1$/n helo /^192\.0\.2\.1$/ and connect // /^127\.0\.0\.1$/n and connect // /^192\.0\.2\.1$/n and connect // /^::1$/n helo /^localhost$/i and connect // /^127\.0\.0\.1$/n and connect // /^192\.0\.2\.1$/n and connect // /^::1$/n helo /^127\.0\.0\.1$/ and connect // /^127\.0\.0\.1$/n and connect // /^192\.0\.2\.1$/n and connect // /^::1$/n # HELOがピリオドだけ reject "Refused connection by site policy. ( Invalid HELO )" helo /^\.$/ # HELOの拒否 reject "Refused connection by site policy." helo /^User$/i helo /^ylmf-pc$/ helo /^info-api\.ru$/ helo /^dc3-dc1$/ helo /^masscan$/ helo /^gerg$/ helo /^admin$/i helo /^scanner\.sslsonar\.org$/ # HELOのTLDが存在しない reject "Refused connection by site policy. ( Nonexistence TLD )" helo /\.domain$/ helo /\.localdomain$/ helo /\.local$/ # HELOの第2レベルが example helo /^(.+\.)?example\.[^.]+$/ei
192.0.2.1 は、メール・サーバーのグローバル・アドレスを設定します。
foobar.example.jp は、メール・サーバーのホスト名を設定します。
任意のパスに設定することができます。
また、それぞれのパスは、別々のパスに設定しても問題ありません。
milter-regex のソケット・ファイル
後述の sendmail.mc の INPUT_MAIL_FILTER で、このパスを指定します。
分割管理する設定ファイルのパス
「 2. milter-regex の設定ファイルの分割管理と milter-regex.conf の生成 」、
「 7. S25R の公開ホワイトリストを milter-regex の様式に変換して取り込む の
2つのサンプル・スクリプト中の変数 DATADIR で、このパスを指定します。
ディレクトリを作成します。
ディレクトリの所有者は、実行ユーザー milter に設定します。
mkdir /var/lib/milter-regex chown milter:milter /var/lib/milter-regex
sendmail.mc に milter-regex の指定を追加します。
INPUT_MAIL_FILTER(`milter-regex',`S=local:/var/run/milter/milter-regex.sock, F=, T=S:1m;R:1m')dnl
sendmail.mc から sendmail.cf を生成します。 その際、sendmail.mc に「 include(`../m4/cf.m4') 」のようなカレント・ディレクトリを基点とした指定がある場合は、 カレント・ディレクトリを生成用のディレクトリに移動します。(下記の例では、/usr/share/sendmail/cf/cf )
# 現在の sendmail.cf のバックアップ・コピーを取得する cp -p /etc/mail/sendmail.cf /etc/mail/sendmail.cf-yyyymmdd-hhmm # 生成用のパスに移動する cd /usr/share/sendmail/cf/cf # sendmail.mc から sendmail.cf を生成する m4 /etc/mail/sendmail.mc | cat -s > /etc/mail/sendmail.cf
MILTER_REGEX=/usr/local/sbin/milter-regex MILTER_REGEX_CONF=/var/lib/milter-regex/milter-regex.conf MILTER_REGEX_SOCK=/var/run/milter/milter-regex.sock MILTER_REGEX_PID=/var/run/milter/milter-regex.pid MILTER_REGEX_UID=milter MILTER_REGEX_GID=milter MILTER_RUN=`dirname $MILTER_REGEX_SOCK` if [ ! -d $MILTER_RUN ] ; then mkdir -p $MILTER_RUN chown $MILTER_REGEX_UID $MILTER_RUN chmod o-rwx $MILTER_RUN fi $MILTER_REGEX -c $MILTER_REGEX_CONF -u $MILTER_REGEX_UID -U $MILTER_REGEX_UID -G $MILTER_REGEX_GID -p $MILTER_REGEX_SOCK -r $MILTER_REGEX_PID
アクセス・カウント:
2022/05/29 | 複数の方法(GreetPause, milter-regex, milter-greylist)を組み合わせて利用し、 milter-regex の役割分担でスパム・メールに特徴的なルールで効果の持続が期待できるものに特化した設定を公開。 |