Postfix Qpopper Dracを使った POP before SMTP

PostfixとQpopperにPOP before SMTPを実装します。
Postfixは外部にも公開し、外部からSMTPを利用するときは一度POPで認証を受けてからとします。
APOPは今回は導入しません。

まずはPostfixのインストール

Postfix


ユーザーとグループの登録
# useradd postfix -d /var/spool/postfix -s /sbin/nologin
# groupadd postdrop
 
インスコ
$ tar -zxvf postfix.tar.gz
$ cd postfix
$ make
$ su
# make install


(いろいろ聞かれるが、デフォルトでオッケー。変えたきゃ変えて)


 

とりあえず、Postfixの設定。
Postfixの設定ファイルは /etc/postfix に入る。その中の main.cf がメインの設定ファイル。
変更点は以下の通り。

/etc/postfix/main.cf


myhostname = sv.scoutroll.net
mydomain = scoutroll.net
myorigin = $mydomain
inet_interface = all
mydestination = $myhostname, $mydomain, mail.$mydomain
mynetworks = 127.0.0.0/8
 

myhostname = ホスト名
mydomain = ドメイン名
myorigin = ローカルから送信された場合のFormフィールドの補完ドメイン
inet_interface = 信頼するインターフェイス
mydestination = ローカル配送するドメイン名
mynetworks = 信頼するネットワーク

ひとまず POP before SMTP は置いといて、上記のように設定します。
これでローカルからはどこでもメールのリレーができ、外部からのリレーはメールのあて先が $mydestination のドメインのみ(すなわち、このメールサーバー宛てのメールのみ)リレーを許可します。


Dracのインストール
DracはPOP認証したマシンに対してSMTPリレーを行えるようにリレー許可のデータベースを自動で生成してくれるプログラム。

Drac


$ tar -zxvf drac.tar.z ------カレントディレクトリに解凍されるので注意

Makefileの修正

INSTALL = install
EBIN = /usr/local/sbin
MAN = /usr/share/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
 
rpc.dracd.cの修正
#define DBFILE "/etc/postfix/dracd.db"
#defile ALFILE "/etc/postfix/dracd.allow"
 
インスト
# make
# make install
# make install-man
# cp libdrac.a /usr/lib/
 
起動ファイルの修正&コピー (起動ファイル dracd-setup.linux)
daemon /usr/local/sbin/rpc.dracd -e 10 &
 
# cp dracd-setup.linux /etc/init.d/dracd
# ln -s /etc/init.d/dracd /etc/rc.d/rc3.d/S78dracd
# ln -s /etc/init.d/dracd /etc/rc.d/rc5.d/S78dracd
 

drac.tar.z を解凍するとカレントディレクトリに展開されます。
そん中に入ってる、Makefile と rpc.dracd.c と dracd-setup.linux を変更してmakeします。
dracd-setup.linuxファイルの -e 10 というのは、POP認証を受けてから、何分間の間SMTPを利用できるかの設定です。上記の例だと、10分です。

DracはPOPサーバーとのやり取りをPortmapを使って行っています。なので、内部の通信でPortmapを使えるよう設定しておく必要がある。外部からはのーせんきゅー

POPで認証うけたIPは /etc/postfix/dracd.db に登録されます。そこで、postfix の main.cf の設定の追加をします。
main.cf の最後くらいに追加

/etc/postfix/main.cf


smtpd_recipient_restrictions =
  permit_mynetworks,
  check_client_access btree:/etc/postfix/dracd,
  check_relay_domains,
  reject
 

permit_mynetworks : mynetworksで設定したIPからの接続を許可
check_client_access btree:/etc/postfix/dracd : POP認証受けたIPの接続を許可
check_relay_domains : relay_domainsで設定したドメインからの接続を許可
reject : それ以外を拒否

dracd.dbを指定するときは拡張子の .db はつけないで。それと、hash:/etc/postfix/dracd ではなく btree:/etc/postfix/dracd なので間違えないよーに。


Qpopperのインストール


Qpopper


ユーザーの登録
# useradd pop -d /dev/null -s /sbin/nologin

インスト
$ tar -zxvf qpopper.tar.gz
$ cd qpopper
$ ./configure --with-drac
$ make
$ su
# make install
 

Qpopperをxinetdから起動させるために、/etc/xinetd.d/ に qpopperというファイルを作り、以下のように設定
そんでもってxinetの再起動

/etc/xinetd.d/qpopper


service pop3
{
 disable       = no
 socket_type    = stream
 wait         = no
 user         = root
 server       = /usr/local/sbin/popper
 server_args    = popper -s
 log_on_success += USERID
 log_on_failure  += USERID
}
 

テスト
PortmapとDracを起動して、POPに接続してみる。青文字は入力する部分

telnet localhost 110
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
+OK Qpopper (version 4.0.5) at ns3.pride.co.jp starting.
user (ユーザー)
+OK Password required for kazan.
pass (パスワード)
+OK kazan has 0 visible messages (0 hidden) in 0 octets.
quit
+OK Pop server at ns3.pride.co.jp signing off.
Connection closed by foreign host.

/etc/postfix/dracd.db が出来ていたら
db_dump -p /etc/postfix/dracd.db
を打って、以下のように出れば成功

VERSION=3
format=print
type=btree
HEADER=END
127.0.0.1
1049810864
DATA=END

もし、/etc/postfix/dracd.db が出来ていなかったら、dracdを再起動してみて、もっかいtelnetしてみる。