FC4 付属の sendmail で POP before SMTP(qpopper+DRAC)への対応 †1. はじめに †このページでは Fedora Core 4 に付属されている sendmail に対して POP before SMTP*1 機能を実装するための手順書および解説です。POP before SMTP というのは、メールサーバの第三者による不正中継を防止するための手段の1つとして有名で、メールを受信することによりサーバの利用者であると認識し、SMTP(sendmail)サーバ側で一定期間その利用者の IP アドレスに対してメール中継(送信)を許可するという方法です。 具体的な認証の仕組みとしては、メール受信時に qpopper が dracd(DRAC本体) にメールを受信したぞという記録を送り、dracd が sendmail の参照する許可リストに利用者の IP アドレスを記述するものです。時間が経てば自動的に dracd は許可を取り消します。定期的にメールを受信するような設定にされていれば、特に「送信前には受信が必要」と構える必要は無いでしょう。この仕組みの唯一の欠点であり利点であるのが、メールを受信しないと送信出来ないと言うこと。送信が出来ない場合には、まず受信が正しく行われているか確認しなくてはいけません。 昨今は SMTP Auth という選択肢もありますが、急なシステム変更を行うことができない場合、あるいは新システムを導入しても POP Before SMTP でありつづけなくてはいけない(まぁ説明が面倒ですとか)等々の理由により、とにかく POP before SMTP を導入するぞー!とうい場合にお役に立てばと思います。 2. DRAC のセットアップ †2-1. DRAC ?? †POP Before SMTP 認証の認証許可・許可取り消しを司る dracd のセットアップを行います。 2-2. 作業手順 †1. ソースディレクトリに移動して drac というディレクトリを作ります $ cd /usr/local/src # mkdir drac 2. ディレクトリを作ったら、中に移動します。 $ cd drac 3. DRAC のソースを wget で入手します。 $ wget ftp://ftp.cc.umanitoba.ca/src/drac.tar.Z 4. tar を使いファイルを展開(解凍)します $ tar xfz drac.tar.Z 5. Makefile を編集します $ vi Makefile 6. ファイルを開いたら7行目以下をざっくり編集して、INSTALL 等の行をざっくり入れ替えます。 INSTALL = install EBIN = /usr/local/sbin MAN = /usr/local/man/man DEFS = -DSOCK_RPC -DFCNTL_LOCK -DGETHOST -DDASH_C CC = gcc RANLIB = : CFLAGS = $(DEFS) -g LDLIBS = -ldb TSTLIBS = -L. -ldrac RPCGENFLAGS = -C -I MANLIB = 3 MANADM = 8 7. Makefle の準備が終わったら make します $ make 特にエラーメッセージが出てこなければ大丈夫です。正常にコンパイルされています。もしエラーが出てしまって正しくコンパイルされていなければ、Makefile の記述が正しいかどうか疑ってください。 8. 次にインストールします。 # make install 9. 一緒に man*2 もセットアップしてしまいます。 # mkdir /usr/local/man/man3 # mkdir /usr/local/man/man8 # make install-man 10. 起動スクリプトを /etc/init.d にコピーします。後からサーバ起動時に自動で DRAC が起動するように設定するためです。 # cp dracd-setup.linux /etc/init.d/dracd 11. コピーした dracd ファイルを編集するため vi で開きます # vi /etc/init.d/dracd 12. dracd ファイルの7行目に以下の項目を追加します(#必要です) # chkconfig: 235 99 99 # description: for POP before SMTP # processname: rpc.dracd 引き続き 19 行目の記述も変更します(rpc.dracd をフルパスで指定します)。 daemon /usr/local/sbin/rpc.dracd& 13. Fedora Core にサービスとして dracd を登録します # /sbin/chkconfig --add dracd 動作確認は --list オプションで可能です。 # /sbin/chkconfig --list dracd dracd 0:off 1:off 2:on 3:on 4:off 5:on 6:off このようにランレベル 3, 5 で on としてありますので、マルチユーザモードでも、X11 が動いていても問題ないでしょう。 14. dracd の起動・停止テスト dracd の起動・停止は Fedora Core のその他の一般的なデーモンと操作方法は同じです。起動は start 、停止は stop です。 # /etc/init.d/dracd start Starting rpc.dracd daemon: [ OK ] ps で見ると、プロセスが動いている事が分かります。 # ps ax | grep dracd 7004 ? S 0:00 /usr/local/sbin/rpc.dracd 停止は stop です。 # /etc/init.d/dracd stop Stopping rpc.dracd daemon: [ OK ] 以上で drac のセットアップは終わりました。起動・停止テストをした場合は、再び rpc.dracd デーモンを起動させておいてください(start してください)。 3. dovecot 使用時の注意 †dovecot サーバを有効にしていると、次に作業を行う qpopper の稼働に支障が出る場合があります。pop3 サーバのみを無効にしたいので、以下の手順で作業を行ってください。 vi /etc/dovecot.conf で設定ファイルを開きます。8行目を見てください。 protocols = imap imaps もしこの中に pop3 があれば、pop3 の記述を削除して dovecot の再起動を行います。 # /etc/init.d/dovecot restart Dovecot Imap を停止中: [ OK ] Dovecot Imap を起動中: [ OK ] Imap のみ使えるように dovecot で残しておいても大丈夫です。 4. qpopper のインストール †4-1. qpopper ? †qpopper というのは POP3 サーバ(MRA) です。要はメールを受信するためのサーバです。Fedora Core では dovecotという非常に優れたサーバが入っていますが、残念、これが POP Before SMTP に対応していないので、qpopper という結構日本では有名な POP3 サーバをインストールすることにします。この qpopper 君が rpc.dracd に認証したよという情報を送る訳です。 4-2. qpopper のセットアップ作業 †1. ソースディレクトリに移動します $ cd /usr/local/src 2. wget でアーカイブを取得します。今日現在(2005/07/12)の最新版は 4.0.8 です。もしこのページの記述が古くなってダウンロードできなければ、ダウンロード用 ftp サイトを辿ってください*3。 $ wget ftp://ftp.qualcomm.com/eudora/servers/unix/popper/qpopper4.0.8.tar.gz 3. アーカイブを展開(解凍)します $ tar xfz qpopper4.0.8.tar.gz 4. ディレクトリを移動します $ cd qpopper4.0.8 5. さて、ここでは後々のため(apop や pop3s で使います) qpopper 動作用のアカウントを作成しておきます。UID, GID は適当です。好きな番号でも構いません。 # /usr/sbin/groupadd -g 102 pop3 # /usr/sbin/adduser -u 102 -g 102 pop3 -s /sbin/nologin 6. 次に ./configure を実行します。オプションは少し色々ありますが、後々のため、一通り指定しておくことにします。 # ./configure \ --enable-apop=/etc/mail/apop.auth \ --enable-popuid=pop3 \ --with-openssl \ --enable-log-login \ --enable-specialauth \ --with-drac=/usr/local/src/drac 7. 問題なければサクサクッとセットアップしてしまいましょう。 # make # make install これでファイルが /usr/local/sbin/popper にコピーされました。 5. xinetd の設定と動作確認 †セットアップした qpopper は xinetd*4経由でメールを受信することにします。 設定フィルを作成します。 # vi /etc/xinetd.d/qpopper 新規にファイルを作成します。以下の内容をそのままコピーしてください。 service pop3 { disable = no socket_type = stream wait = no user = root server = /usr/local/sbin/popper server_args = -s -R } サーバの引数に -s をつけているのは受信時の詳細なログを記録するためです。トラブルの時に役立ちます。-R はホスト名の逆引きを行いません。受信時間短縮のためです。 さて、ファイルを保存したら xinetd を再起動します。 # /etc/init.d/xinetd restart xinetd を停止中: [ OK ] xinetd を起動中: [ OK ] 特にエラーが出なければ作業完了です。 動作確認は telnet を使って手軽に行います。 $ telnet localhost 110 Trying 127.0.0.1... Connected to localhost (127.0.0.1). Escape character is '^]'. +OK Qpopper (version 4.0.8) at sion starting. <11021.1121178868@sion> このように qpopper が正常応答してくれれば問題ありません。終了は QUIT と入力してエンターです。 QUIT +OK Pop server at sion signing off. Connection closed by foreign host. あとは、念のため /var/log/maillog も確認してみましょう。メールの受信が正常に行われていれば次のようにメッセージが表示されます。tail -f /var/log/maillog で Jul 12 23:34:28 sion popper[11021]: (v4.0.8) Servicing request from "sion" at 127.0.0.1 Jul 12 23:37:02 sion popper[11060]: (v4.0.8) Servicing request from "192.168.11.102" at 192.168.11.102 Jul 12 23:37:02 sion popper[11060]: (v4.0.8) POP login by user "zem" at (192.168.11.102) 192.168.11.102 Jul 12 23:37:02 sion popper[11060]: [drac]: login by zem from host 192.168.11.102 (192.168.11.102) Jul 12 23:37:12 sion popper[11060]: Stats: zem 0 0 30 110356 192.168.11.102 192.168.11.102 これは zem というユーザが 192.168.11.102 というホストから sion というホストに接続し、認証が通ったので [drac] へ zem が login しましたよ、と情報を送っています。 正しく dracd が sendmail の為のファイルを更新しているかどうか調べてみましょう。対象ファイルは /etc/mail/dracd.db です。 # db_dump /etc/mail/dracd.db VERSION=3 format=bytevalue type=btree db_pagesize=512 HEADER=END 3139322e3136382e31312e313032 31313231313831303037 DATA=END これは生のデータなので、分かり易くするためには mekemap オプションで参照して確認します。IP と受信時刻が記録されます。 # makemap -u btree /etc/mail/dracd.db 192.168.11.102 1121181782 次に、そのまま /etc/mail/dracd.allow ファイルを編集します。自分自身からしか基本的に許可しないので、次のように書きます。 255.255.255.255 127.0.0.1 5. sendmail の設定 †5-1. 最期は sendmail の設定 †最終的にメールを送信するのは sendmail です。sendmail が dracd によって作成される許可リスト /etc/mail/dracd.db を参照するようにする事が次の作業です。 この作業では sendmail.cf の再構築を行います。環境が変わる恐れもありますので、一応事前にバックアップを取っておくことをおすすめいたします。 # cp -p /etc/mail/sendamil.cf /etc/mail/sendmail.cf.backup 5-2. sendmail.mc の編集と sendmail.cf の構築 †1. sendmail の設定ファイル sendmail.mc を開きます # vi /etc/mail/sendmail.mc ファイルを開いたら、一番末尾に次のように記述を追加します。 LOCAL_CONFIG Kdrac btree /etc/mail/dracd LOCAL_RULESETS SLocal_check_rcpt dnl # allow recent POP/IMAP mail clients to relay R$* $: $&{client_addr} R$+ $: $(drac $1 $: ? $) R? $@ ? R$+ $@ $#OK (※左右の文字列にあるのは空白ではなくタブ[TAB]です。空白では動作しません。mc ファイルへの記入時にはご注意下さい。) 2. sendmail.cf を再構築します # m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf 3. 最期に sendmail を再起動します。 # /etc/init.d/sendmail restart sendmail を停止中: [ OK ] sm-client を停止中: [ OK ] sendmail を起動中: [ OK ] sm-client を起動中: [ OK ] あとはメールソフト側から送信が可能かどうか、確認してみてください。 なお、初期状態ではメール受信後 30 分間の送信が許可されます。時間の変更は rpc.dracd の引数に -e xx(秒) と指定します。詳しくは man .rpcdracd をご覧下さい。 ハマりポイント †
メモ †
|