POP befor SMTP / SMTP after POP : 2002.05.24


POP befor SMTP と SMTP after POP は、基本的に同じものですが、 管理者側から見ると前者、ユーザ側から見た場合後者が使われることが多いようです。 ほかの方法では SMTP-AUTH(rfc 2554) というのがあるようですが、 対応しているクライアントがまだ少ないようです。 仕組みは、popper を改造して、IP アドレスをどこかのファイルに吐き出し、 そのファイルに書かれているIPのみリレーを許すというものです。また、その ファイルは指定時間でexpireするような仕組みになっており、SPAMの踏み台に される可能性を最小限に抑えて、外部のホストからメール送信を許すというセ キュアなSMTP送信を実現しています。 実際の実装には、いくつかのやり方があるようです(似たり寄ったりですが ^^;)。MTA に sendmail を使っている場合、でもざっと調べたところで下記の ものがありました。たぶんまだまだあるでしょう。
  1. DRACD を使用する
    http://chem.ishii.utsunomiya-u.ac.jp/chem-net/mail/pop_b_smtp.html
  2. watcher2 を使用する
    http://www.kuee.kyoto-u.ac.jp/~kitano/popauth/
    http://www.venus.dti.ne.jp/~phashim/fmv/POPbeforeSMTP.html
    http://ucchi.avis.ad.jp/docs/popbeforesmtp.html
  3. poprelayd を使用する
    http://www1.plala.or.jp/fukafuka/install/poprelayd.html

2, 3 は qpopper 用で、特に2は作者が日本人なので(英語が苦手な人には)情 報が手に入りやすいです。1 は、imapd 用です。私の環境は RedHat 7.2 で、 imapd を使って pop 環境を実現している関係上、1 を選択しました。
下記に DRACD を使った例を紹介します(ほぼパクリです)。

  1. DRACのインストール
    1. DRACはportmapを使うので、/etc/init.d/portmapが動いているかどうか確認しておく.
    2. ソースファイルを入手し、展開後 drac/INSTALLを参考に drac/MakefileをLinux 用に編集する.以下のような感じです。
      INSTALL = install
      EBIN = /usr/local/sbin
      MAN = /usr/local/share/man/man
      DEFS = -DSOCK_RPC -DFCNTL_LOCK -DGETHOST -DDASH_C
      CC = 
      RANLIB = :
      CFLAGS = $(DEFS) -g -I/usr/include/db1
      LDLIBS = -ldb1
      TSTLIBS = -L. -ldrac
      RPCGENFLAGS = -C -I
      MANLIB = 3
      MANADM = 8
      
    3. 次に,以下の手順でコンパイル,インストールを行う.
      # make
      # sudo -s
      # make install
      # make install-man
      # cp libdrac.a /usr/local/lib/
      
    4. さらに、/etc/mail/dracd.allowを作成し,
       255.255.255.255 127.0.0.1
       255.255.255.255 メールサーバのIPアドレス
      
      としておく.
    5. 最後に起動スクリプトを作成する.drac/dracd-setup.linuxが起動スクリプトのひな形であるので,これを/etc/initd/dracdとしてコピーし,chkconfig が使えるよう、 ヘッダに
      # drac         Dynamic Relay Authorization Control 
      #
      # Author:      ftp://ftp.cc.umanitoba.ca/
      # chkconfig:   345 99 11
      # description: dracd
      # processname: dracd
      
      を付け加えておきましょう。
      また,起動スクリプト自体も次のように変更しておく.-iオプションにより/etc/mail/dracd.dbが初期化され,-e 15でPOPでクライアントが接続してから15分間SMTPの中継を受け付けるようになる.
              daemon /usr/local/sbin/rpc.dracd -i -e 15&
      
    6. 以上が終了したら,以下のコマンドによりdracを起動しておく. /etc/mail/dracd.dbが作成されればOKです.
      # /etc/init.d/dracd start
      
  2. DRAC対応版ipop3dのインストール
    1. ワシントン大学(ftp://ftp.cac.washington.edu/imap/)から 最新版のimapd(imap-2002.DEV.SNAP-0205201832)を 入手する.
    2. このままではDRACと連携できないので,次のパッチを当てる.
      # cd imap-2002.DEV.SNAP-0205201832/src/ipopd
      # patch -p1 < ipop3d.c.patch
      
      がうまく当たらないので手で当てましょう(簡単です)。
    3. さらに,imap-2002.DEV.SNAP-0205201832/src/ipopd/Makefile も修正する。 LDFLAGS に -ldrac を追加しておく。
      LDFLAGS = $(CCLIENTLIB) `cat $C/LDFLAGS`  -ldrac
    4. 次にimap-2002imap-2002.DEV.SNAP-0205201832/ディレクトリに戻った後,以下の手順によりプログラムをコンパイル,インストールする.
      # make lnp
      # sudo -s
      # cp imapd/imapd /usr/sbin/
      # cp ipopd/ipop2d /usr/sbin/
      # cp ipopd/ipop3d /usr/sbin/
      
  3. sendmail.cfの設定
    1. /etc/sendmail.cfを変更する. redhat 7.x では OK の箇所がRELAYFROMになっているが気にせずそのまま追加.
      1箇所目
      # level 8 config file format
      V8/Berkeley
      #### DRAC modification by S.K.
      Kdrac btree /etc/mail/dracd
      
      2箇所目
      ######################################################################
      ###  check_rcpt -- check SMTP `RCPT TO:' command argument
      ######################################################################
      (以後略)
      # check IP address
      R$*                             $: $&{client_addr}
      R$@                             $@ OK                   originated locally
      R0                              $@ OK                   originated locally
      R$=R $*                         $@ OK                   relayable IP address
      #### Insertion for DRAC(From Software design 1999/5)
      R$*                        $: $1 $| $(drac $1 $: $)
      R$* $|                     $: $1
      R$* $| $+                  $@ OK
      #### end of insertion
      R$*                             $: $>LookUpAddress  <$1> <?>  <$1>
      
      ここで,右辺と左辺の間はスペースではなく,タブを挿入すること.
    2. この後で,以下のコマンドによりsendmailを再起動させる.
      # /etc/init.d/sendmail restart