qmail でウィルスチェックサーバー構築 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− # 運用形態#--------------------------------------------------------------------------------------------- このドキュメントでは、qmail+vpopmail+tcpserver で構成されたメールサーバーでclamAV+clamSMTP によるウィルスチェックを行う設定について説明します。clamAV とclamSMTP はすでにインストールされているものとします。 ※ 運用イメージ ※ qmail にはそれ自身でコンテンツフィルタ機能を持ち合わせていないため、clamAV+clamSMTP への中継専用qmail とウィルスチェック結果を受け取り配送する配送専用qmail とを準備します。 中継専用qmail −→ clamSMTP+clamAV −→ 配信専用qmail PORT 25 で待機 PORT 1800 で待機 PORT 1900 で待機 PORT 110 で待機 以降の説明では、ウィルスチェックサーバーを構築するにあたり、それぞれのパッケージや設定ファイルの場所を下記のように設定してあるものとします。 自サーバーのドメイン | example01.jp 中継専用qmail ホームディレクトリ | /usr/local/qmail25 配信専用qmail ホームディレクトリ | /usr/local/qmail1900 tcpserver のアクセス制限ファイル | /usr/local/vpopmail/etc/tcp-smtp.cdb ※ 注意 vpopmail をconfigure する際に「--enable-qmaildir=/usr/local/qmail1900」とし、配送用qmail のassign ファイルを利用するよう指定します。 ※ 配送手順 ※ 例えば、qmail、vpopmail、tcpserver のPOP Before SMTP の設定を意識した具体的な配送手順は下記の通りです。 1.配信専用qmail に対してPOP を行う。これにより/usr/local/vpopmail/etc/open-smtp に、POP し たクライアントIP が記憶され、同時に/usr/local/vpopmail/etc/tcp-smtp.cdb が更新される 2.中継専用qmail にメール送信するために接続する。この際、POP Before SMTP により、/usr/local /vpopmail/etc/tcp-smtp.cdb 中に接続クライアントIP があれば、直ちにclamSMTP+clamAV へ中継さ れる ※ ローカル配送の場合はrcpthosts の記述により無条件で中継されます 3.clamSMTP+clamAV がウィルスチェックを行った後、送信するメールは配送専用qmail に中継される 4.配送専用qmail は無条件(tcpserver の接続制御の影響を受けない) にローカル配送または、リモー ト配送を行う ※ 配送専用SMTP サーバーはローカルからの接続のみ許可する(セキュリティーのため) # 起動スクリプト作成 #--------------------------------------------------------------------------------------------- POP Before SMTP により外部中継判断を行うタイミングは、外部クライアントが中継専用qmail に接続する時です。よって中継専用qmail を起動するtcpserver にてtcp-smtp.cdb ファイルを参照するように設定します。 ● 中継専用qmail 起動スクリプトを作成する ↓ /etc/rc.d/init.d/qmail25 ------------------------------------------------ #!/bin/sh # # qmail vpopmail 対応外向けqmail 起動スクリプト # # chkconfig: 345 80 30 # description: outer mail server # # 本スクリプトでは、ウィルスチェックサーバーにリレーするためのqmail を起動する # また、メールの一時受付窓口となっているため中継拒否判断を行う # . /etc/rc.d/init.d/functions QMAILPATH=/usr/local/qmail25 VPOPMAILPATH=/usr/local/vpopmail TCPSERVERPATH=/usr/local/ucspi-tcp [ -f $QMAILPATH/rc ] || exit 0 case "$1" in start) echo -n $"Starting qmail25: " #csh -cf "$QMAILPATH/rc &" sh $QMAILPATH/rc & # 外部SMTP 起動【 tcpserver 経由 】 # 1. -H -R にてリモート先に関する情報を集めない # 2. -v にてログを詳細に出力 # 3. -x にてIP アドレスによる外部中継判断を行う # $TCPSERVERPATH/bin/tcpserver -H -R -v \ -u `/usr/bin/id -u qmaild` -g `/usr/bin/id -g qmaild` \ -x $VPOPMAILPATH/etc/tcp-smtp.cdb \ 0 25 \ $QMAILPATH/bin/qmail-smtpd 2>&1 | \ $QMAILPATH/bin/splogger smtpd 3 & echo touch /var/lock/subsys/qmail25 ;; stop) echo -n $"Shutting down qmail25: " # SMTP 停止 PID1=`/bin/ps -ax | /bin/grep 'tcpserver.*0 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/qmail25 ;; restart) $0 stop $0 start ;; *) echo "Usage: qmail25 {start|stop|restart}" exit 1 esac exit 0 ↑ ココまで ------------------------------------------------ # chmod 755 /etc/rc.d/init.d/qmail25 ● 配信専用qmail 起動スクリプトを作成する ↓ /etc/rc.d/init.d/qmail1900 ---------------------------------------------- #!/bin/sh # # qmail vpopmail 対応内向けqmail 起動スクリプト # # chkconfig: 345 80 31 # description: inner mail server # . /etc/rc.d/init.d/functions QMAILPATH=/usr/local/qmail1900 VPOPMAILPATH=/usr/local/vpopmail TCPSERVERPATH=/usr/local/ucspi-tcp [ -f $QMAILPATH/rc ] || exit 0 case "$1" in start) echo -n $"Starting qmail1900: " #csh -cf "$QMAILPATH/rc &" sh $QMAILPATH/rc & # 内部SMTP 起動【 ウィルスチェック経由でのみ呼び出される 】 # 1. -H -R にてリモート先に関する情報を集めない # 2. -v にてログを詳細に出力 # /usr/local/ucspi-tcp/bin/tcpserver -H -R -v \ -u `/usr/bin/id -u qmaild` -g `/usr/bin/id -g qmaild` \ 0 1900 \ $QMAILPATH/bin/qmail-smtpd 2>&1 | \ $QMAILPATH/bin/splogger smtpd 3 & # 外部/内部兼用POP3 起動【 tcpserver 経由 】 # 1. -H -R にてリモート先に関する情報を集めない # 2. -v にてログを詳細に出力 # /usr/local/ucspi-tcp/bin/tcpserver -H -R \ 0 110 \ $QMAILPATH/bin/qmail-popup ns.test.com \ $VPOPMAILPATH/bin/vchkpw \ $QMAILPATH/bin/qmail-pop3d Maildir 2>&1 | \ $QMAILPATH/bin/splogger pop3d 3 & echo touch /var/lock/subsys/qmail1900 ;; stop) echo -n $"Shutting down qmail1900: " # POP3/SMTP 停止 PID1=`/bin/ps -ax | /bin/grep 'tcpserver.*0 [110|1900].*' | /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/qmail1900 ;; restart) $0 stop $0 start ;; *) echo "Usage: qmail {start|stop|restart}" exit 1 esac exit 0 ↑ ココまで ------------------------------------------------ # chmod 755 /etc/rc.d/init.d/qmail1900 # qmail 側の設定 #--------------------------------------------------------------------------------------------- 中継用qmail と配送用qmail はそれぞれ役割が異なるため、役割にあったパッチを当てるべきです。各qmail に当てるべきパッチは次の通りです。 中継用qmail に当てるパッチ qmail-errno.patch qmail-date-localtime.patch qmail-smtpd-relay-reject.patch chkuser-2.0.9-release.patch 配送用qmail に当てるパッチ qmail-errno.patch qmail-date-localtime.patch qmail-large-dns.patch qmail-maildir++.patch ウィルスチェックサーバーを構成するためには、qmail に適切な配送経路を教える必要があります。中継専用qmail、配信専用qmail を下記のように設定して下さい。 + 中継専用qmail 関連設定ファイルの編集 +--------------------------------------------------------------------------------------------- ● me ファイル 自サーバーのドメインを記述します。 ------------------------------------------------------------ example01.jp ------------------------------------------------------------ ● locals ファイル 中継専用qmail は、外部から受信したメールを無条件に中継させるため、locals ファイルには外部ドメインを記述しないでください。 ------------------------------------------------------------ localhost example01.jp ------------------------------------------------------------ ● rcpthosts ファイル 中継専用qmail でPOP Before SMTP による外部中継判断を行いますが、無条件で自身MTA が管理するドメイン宛にはメール配信できないといけないため、rcpthosts ファイルには自身MTA が管理するドメインを記述します。 ------------------------------------------------------------ localhost example01.jp ------------------------------------------------------------ ● smtproutes ファイル 中継専用qmail ではメールの配送をMX に任せるのではなく、clamSMTP+clamAV への静的経路を用います。clamSMTP+clamAV が待機するPORT 1800 への静的経路を設定します。 ------------------------------------------------------------ :127.0.0.1:1800 ------------------------------------------------------------ + 配送専用qmail 関連設定ファイルの編集 +--------------------------------------------------------------------------------------------- ● me ファイル 自身のドメインを記述します。 ------------------------------------------------------------ example01.jp ------------------------------------------------------------ ● locals ファイル 配信専用qmail では自身MTA が管理するドメイン宛メールはローカル配送しますが、MTA 自体バーチャル対応しているためlocals ファイルには自身が管理するドメインは記述しません。 ● rcpthosts ファイル 外部中継判断はすでに中継専用qmail にて行われているため、配信用qmail のrcpthosts ファイルには何も記載しません。 以上でqmail の設定が終わりました。 # clamSMTP 側の設定 #--------------------------------------------------------------------------------------------- clamSMTP では、中継用qmail から送られたメールを受け取る設定、およびウィルスチェック後のメールを配送用qmail に送り出す設定を行います。 # cd /usr/local/clamsmtp # vi clamsmtp.conf 編集 → OutAddress: 127.0.0.1:1800 編集 → Listen: 127.0.0.1:1900 以上でpostfix の設定が終わりました。 最後に、ゲートウェイ型ウィルスチェックを有効にするために、clamSMTP とclamAV、そして、メールサーバーqmail25、qmail1900 を起動して完成です。