いちげんさん方式対応qmail-1.03 + vpopmail-5.2.1 インストールメモ #--------------------------------------------------------------------------------------------- # いちげんさん方式 概要 #--------------------------------------------------------------------------------------------- 現社会では日常的にインターネット上でメールのやりとりが行われています。メールのやりとりが頻繁に行われることを利用して、一方的にメールを送りつける悪徳業者(SPAM 業者) などが近年増加しています。今回は、必要のない一方的なSPAM メールをサーバー上で排除するために考案された、いちげんさん方式のメールサーバーを構築します。 いちげんさん方式とは、送信されてきたメールを一度で受け取るのではなく、一度一時エラーとして返送し、再送されてきたメールのみを受け取る方式を言います。この方式は、SPAM 業者の用いるメールサーバーは多人数に対して高速配信を行うため、一時配送エラーメールに対しては効率の問題で、再送しないという心理を利用しています。 #--------------------------------------------------------------------------------------------- # いちげんさん方式 システム概要 #--------------------------------------------------------------------------------------------- メールサーバーには、設定が容易なqmail を使用します。また、qmail をバーチャル対応にするため、vpopmail パッケージを利用します。 ▼ いちげんさん方式で用いるファイル いちげんさん方式に対応するため、一時配送エラーや通常配送の判断を行う下記のリストを用います。 ・ホワイトリスト : white-smtp ・ブラックリスト : black-smtp ・一時配送リスト : moderate-smtp ・一時拒否リスト : default-smtp ● ホワイトリスト 配送を一時的に拒否することなく配送する、送信元メールサーバーIP アドレス、もしくはドメインを記載します。 記述方法: =.jp:allow,RBLSMTPD="" 210.156.176.2:allow,RBLSMTPD="" ● ブラックリスト 配送を永続的に拒否する、送信元メールサーバーIP アドレス、もしくはドメインを記載します。このリストに記述されたIP アドレス、もしくはドメインを持つメールサーバーからの配送はすべて553 配送エラーとして扱われます。 記述方法: 66.73.229.199:allow,RBLSMTPD="-DENY (You Look Like Spammer)" ● 一時配送リスト 配送を一時的に拒否したメールサーバーIP アドレスが記載され、以降このリストに掲載されたIP アドレスを持つメールサーバーからのメール配送は通常通り、一時配送エラーなしに配送されます。 ● 一時拒否リスト 通常変更する必要はありません。このリストには配送されたメールを一時配送エラーとして扱うための定義が書かれています。 ● tcp-smtp ファイル、およびtcp-smtp.cdb ファイル 一時拒否判断をtcpserver にて行うため、tcpserver が参照するCDB ファイルを用意する必要があります。このCDB ファイルは、上記リストを全て結合して作成される「tcp-smtp」をCDB 化して作成します。 なお、実際のCDB ファイルには、POP BEFORE SMTP 用のアクセス制御ファイルである「open-smtp 」の内容も含まれています。 ※ 注意 ) CDB ファイル中の一時拒否判断はIP アドレスで記載された定義が優先されます。つまり、下記の記述があった場合、後者が優先されて判断されます。 > ***.***.***.*** の逆引き結果がwww.***.jp である場合 =.jp:allow,RBLSMTPD="" ***.***.***.***:deny,RBLSMTPD="" ▼ 運用方法 いちげんさん方式を実運用するにはいちげんさん方式に用いる各種リストのメンテナンスが重要となります。 ● 一時配送リストの更新について 一時配送リストは、メールサーバーが”一時配送エラー”の判断をした時点で更新されます。つまり、「ログ監視プログラム」によって、一時エラー配送ログ(配送ステータス:451) を監視し、発見したと同時に「一時リスト更新プログラム」によって、一時配送リストに”配送許可”の記述を追加します。 > 更新手順 1. ログ監視プログラムがtcpserver のログ(/var/log/maillog等) を監視する 2. rblsmtpd のログを発見した場合、「一時リスト更新プログラム」にログ中の発見した行を渡す ↓ 以降「一時リスト更新プログラム」の処理 3. rblsmtpd のログが配送ステータス451 である場合、一時配送リスト(modarate-smtp) に”配送許 可”の行を追加する 4. いちげんさん方式によって使われるリストの全行を結合し、「tcp-smtp」を新規に書き出す 5. clearopensmtp プログラムによって「open-smtp」の内容 +「tcp-smtp」の内容をCDB ファイルに反 映する ● 一時配送リストのクリアについて 一時配送リストをクリアせずに運用した場合、ある時点で、再送してきたメールサーバーに対しては以降永久的に配送を許可します。この運用では、続けてSPAM 配送を行ってきた場合には通常通り配送できてしまいます。よって、一時配送リストは一定期間ごとにクリアする必要があります。一時配送リストをクリアするには、「一時リスト更新プログラム」を用います。 > クリア手順 ↓ 以降「一時リスト更新プログラム」の処理 1. 一時配送リストを削除する 2. いちげんさん方式によって使われるリストの全行を結合し、「tcp-smtp」に新規に書き出す 3. clearopensmtp プログラムによって「open-smtp」の内容 +「tcp-smtp」の内容をCDB ファイルに反 映する #--------------------------------------------------------------------------------------------- # 関連パッケージ #--------------------------------------------------------------------------------------------- 下記のパッケージ及び、必要に応じてqmail にパッチを施してください。なお、パッチの説明は別紙を参照してください。 ・qmail-1.03.tar.gz | MTA Server 本体(×2用意する必要あり) ・vpopmail-5.2.1.tar.gz | POP Before SMTP, qmail のバーチャル環境を実現する ・ucspi-tcp-0.88.tar.gz | tcpserver 及び周辺プログラム一式 ・qmail-reject.tar.gz | いちげんさんお断りプログラム一式 #--------------------------------------------------------------------------------------------- # 関連パッケージのインストール方法 #--------------------------------------------------------------------------------------------- 下記の関連パッケージをインターネットよりダウンロード後、/usr/local/src 直下に全てのプログラムを配置します。その後、全てのプログラムを解凍します。 # su root # cd /usr/local/src # wget qmail-1.03.tar.gz # wget vpopmail-5.4.0.tar.gz # wget ucspi-tcp-0.88.tar.gz # wget qmail-date-localtime.patch # wget qmail-103.patch # wget qmail-smtpd-relay-reject.patch # tar zxvf qmail-1.0.3.tar.gz # tar zxvf vpopmail-5.4.0.tar.gz # tar zxvf ucspi-tcp-0.8.8.tar.gz qmail, vpopmail の各ツールを起動するユーザー、及びグループを予め追加する必要があります。なお、追加するユーザー全てに対してログイン不可なシェルを割り当ててください(/etc/shells に登録済みであること!)。 ・qmail ディレクトリを作成 # mkdir /usr/local/qmail ・qmail で利用するグループ、ユーザーを作成 # groupadd qmail # groupadd nofiles # useradd -g nofiles -d /usr/local/qmail/alias -s /bin/nologin alias # useradd -g nofiles -d /usr/local/qmail -s /bin/nologin qmaild # useradd -g nofiles -d /usr/local/qmail -s /bin/nologin qmaill # useradd -g nofiles -d /usr/local/qmail -s /bin/nologin qmailp # useradd -g qmail -d /usr/local/qmail -s /bin/nologin qmailq # useradd -g qmail -d /usr/local/qmail -s /bin/nologin qmailr # useradd -g qmail -d /usr/local/qmail -s /bin/nologin qmails ・vpopmail ディレクトリを作成 # mkdir -p /usr/local/vpopmail/etc # touch /usr/local/vpopmail/tcp-smtp ← 初めにtcp-smtp を作成してください ・vpopmail で利用するグループ、ユーザーを作成 # groupadd vchkpw # useradd -g vchkpw -d /usr/local/vpopmail -s /bin/nologin vpopmail ・qmail をインストール # cd /usr/local/src/qmail-1.03 # patch -s < ../qmail-date-localtime.patch # patch -s < ../qmail-smtpd-relay-reject.patch # patch -s < ../qmail-103.patch # vi conf-qmail # 1 行目 :qmail のインストール先を/usr/local/qmail にする # make # make setup # make check # ./config ← /var/qmail/control 以下の設定ファイル群を作成 ・ucspi-tcp をインストール # cd /usr/local/src/ucspi-tcp-0.80 # make # make setup # make check ・vpopmail をインストール # cd /usr/local/src/vpopmail-5.4.0 # ./configure \ --prefix=/usr/local/vpopmail \ --enable-roaming-users=y \ --enable-tcpserver-file=/usr/local/vpopmail/etc/tcp-smtp \ --enable-tcprules-prog=/usr/local/ucspi-tcp/bin/tcprules --enable-qmaildir=/usr/local/qmail/ \ --enable-logging=y --enable-qmail-ext=n # make # make install-strip ※ vpopmail の./configure オプションについては別紙を参照してください。 さらに、vpopmail の各アカウントを「/var」パーティションにて一元管理するため、「/usr/local/vpopmail/domains」を「/var/vpopmail」にシンボリックリンクを貼ります。 # mv /usr/local/vpopmail/domains /var/vpopmail # ln -s /var/vpopmail /usr/local/vpopmail/domains # chown vpopmail:vchkpw /usr/local/vpopmail/domains 上記手順が正常に行われれば、以下の環境が作成されます。 vpopmail :/usr/local/vpopmail 以下にインストール qmail :/usr/local/qmail 以下にインストール この時点で、qmail をいちげんさん方式に対応させるため、次のプログラムをqmail インストールディレクトリ/usr/local/qmail に解凍し、インストールします。 # cd /usr/local/qmail # tar xzvf qmail-reject.tar.gz 解凍後、次のファイルがqmail インストールディレクトリ配下に生成されます。 ./bin/moderate : 一時リスト更新プログラム ./bin/watchlog : ログ監視プログラム ./bin/watchlogd : ログ監視プログラム起動スクリプト ./bin/qmHandle : キュー操作プログラム ./relay/white-smtp : ホワイトリスト ./relay/black-smtp : ブラックリスト ./relay/default-smtp : 一時拒否リスト ./log : いちげんさんログ記憶用ディレクトリ #--------------------------------------------------------------------------------------------- # qmail の設定 #--------------------------------------------------------------------------------------------- いちげんさん方式を構成するためには、qmail に適切な設定を行う必要があります。 ● me ファイル(メールサーバー自体の設定) 自身のドメインを記述します。シェルスクリプトやCGI などで、サーバー内部からメールを送信する場合、補完されるドメインを記載します。 ● locals ファイル(受信側の設定) 通常、qmail で受信するドメインはlocals ファイルに記載しますが、vpopmail によってドメインをバーチャル管理する際はlocals に管理するドメインを記述してはいけません。 locals ファイルはvpopmail によって更新されるので、特に手動で編集する必要はありません。 ● virtualdomains ファイル(バーチャルドメインの設定) virtualdomains ファイルはバーチャルドメインを管理するためにqmail が参照するファイルです。virtualdomains ファイルはvpopmail によって更新されるので、特に手動で編集する必要はありません。 #--------------------------------------------------------------------------------------------- # バーチャルドメイン、仮想メールアカウントの作成 #--------------------------------------------------------------------------------------------- バーチャルドメイン/仮想メールアカウントは全てvpopmail にて管理されます。vpopmail にてメールサーバーを構成していない環境下では、POP アカウントは全てqmail によって管理されていました。vpopmail にてバーチャル対応されたことによりPOP アカウントは全てvpopmail がCDB パスワードファイルによって一元管理されます。 ※ バーチャルドメイン、仮想メールアカウントの登録・削除・編集方法は別紙を参照してください。 #--------------------------------------------------------------------------------------------- # 起動スクリプト作成 #--------------------------------------------------------------------------------------------- ● qmail のqmail-start を起動するためのスクリプトを用意 まずはqmail のqmail-startd を起動させるスクリプトを用意します。これはqmail パッケージにすでに用意してあるのでこれを利用します。なお、今回はMaildir 形式でqmail を利用するのでスクリプトを変更します。 # cd /usr/local/qmail # cp ./boot/home ./rc # chmod 700 ./rc # vi rc ↓ ココから ------------------------------------------------ #!/bin/sh # Using splogger to send the log through syslog. # Using qmail-local to deliver messages to ~/Mailbox by default. exec env - PATH="/var/qmail/bin:$PATH" \ qmail-start ./Maildir/ splogger qmail ~~~~~~~~~~ ← Maildir 形式に変更 ↑ ココまで ------------------------------------------------ ● qmail 起動スクリプトを作成する # cd /etc/rc.d/init.d/ # vi qmail ↓ ココから ------------------------------------------------ #!/bin/sh # # qmail いちげんさん & vpopmail 対応qmail 起動スクリプト # # chkconfig: 2345 80 30 # description: Qmail Server # # config: /usr/local/qmail/controls/ # # 共通シェル関数を読み込む . /etc/rc.d/init.d/functions QMAILPATH=/usr/local/qmail VPOPMAILPATH=/usr/local/vpopmail TCPSERVERPATH=/usr/local/ucspi-tcp case "$1" in start) echo -n $"Starting qmail" sh $QMAILPATH/rc & # いちげんさん配送用SMTP 起動 # 1. -p にてパラノイドチェックを行う # 2. -v にて詳細ログを取得する # 3. SMTP ログはLOCAL6 ファシリティーにて記憶する # $TCPSERVERPATH/bin/tcpserver -p -v \ -u `/usr/bin/id -u qmaild` -g `/usr/bin/id -g qmaild` \ -x $VPOPMAILPATH/etc/tcp-smtp.cdb \ 0 25 \ $TCPSERVERPATH/bin/rblsmtpd -r rbl.test.com \ $QMAILPATH/bin/qmail-smtpd 2>&1 | \ $QMAILPATH/bin/splogger qmail-smtpd 22 & # POP3 起動【 tcpserver 経由 】 # 1. -H -R にてリモート先に関する情報を集めない # 2. -v にてログを詳細に出力 # 3. POP ログはMAILLOG ファシリティーにて記憶する # $TCPSERVERPATH/bin/tcpserver -H -R \ 0 110 \ $QMAILPATH/bin/qmail-popup `/bin/cat $QMAILPATH/control/me` \ $VPOPMAILPATH/bin/vchkpw \ $QMAILPATH/bin/qmail-pop3d Maildir 2>&1 | \ $QMAILPATH/bin/splogger pop3d 2 & #--------------------------------------------------------------------------- echo touch /var/lock/subsys/qmail ;; stop) echo -n $"Shutting down qmail" # POP3/SMTP 停止 PID1=`/bin/ps -ax | /bin/grep "tcpserver.*0 [110|25].*" | /bin/awk '{print $ 1}'` # qmail 停止 PID2=`/bin/ps -aef | /bin/grep qmail | /bin/awk '{print $2}'` if [ "x$PID1" != "x" -a "x$PID2" != "x" ] ; then /bin/kill ${PID2} ${PID1} 1> /dev/null 2>&1 fi echo rm -f /var/lock/subsys/qmail ;; restart) $0 stop $0 start ;; *) echo "Usage: qmail {start|stop|restart}" exit 1 esac exit 0 ↑ ココまで ------------------------------------------------ #--------------------------------------------------------------------------------------------- # qmail, ログ監視プログラムの起動 #--------------------------------------------------------------------------------------------- 以上でqmail,vpopmail の設定、起動スクリプトの全ての作業が終了しました。下記のスクリプトを実行することによりqmail はtcpserver 経由で起動されます。 qmail 起動方法 ・・・ /etc/rc.d/init.d/qmail start qmail 停止方法 ・・・ /etc/rc.d/init.d/qmail stop また、tcpserver が出力したSYSLOG ファシリティーLOCAL6 に対応したログを監視するためのプログラムを起動し、ログを監視する必要があります。 ログ監視プログラム起動方法 ・・・ /usr/local/qmail/bin/watchlogd start ログ監視プログラム停止方法 ・・・ /usr/local/qmail/bin/watchlogd stop ※ 注意 ) ファシリティーLOCAL6 に対応したログファイルは必ず「/var/log/ichigenlog」としてください。「ログ監視プログラム」は「/var/log/ichigenlog」を監視するように設計されています。 #--------------------------------------------------------------------------------------------- # いちげんさんログに関して #--------------------------------------------------------------------------------------------- いちげんさん方式によって記憶されるログは全て/usr/local/qmail/log 配下に記憶されます。 /usr/local/qmail/log/moderate.log :一時配送を許可した送信元IP アドレス /usr/local/qmail/log/black.log :配送拒否した送信元IP アドレス なお、上記ログのうち、「moderate.log」に関しては「一時リスト更新プログラム」を一定時間ごとに呼び出すことで、クリアされ、「tcp-smtp」CDB ファイルに反映されます。 また、同時刻に上記2つのログ共に、「/usr/local/qmail/log/backup」に”blk_[日時].log”または”mod_[日時].log”の形式でバックアップされます。