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してみる。