注意!
現在、多くのプロバイダでOP25Bが導入されているため、固定IPのLan内から送信する場合を除きSMTP-AUTHでの構築が
必須となっております。

管理人もOP25Bの影響を受けているため、現在はSMTP-AUTHにてメールサーバーを運用しています。
よってこちらで配布しているcourier-imap対応dracddracd対応courier-imapのバージョンはかなり古くなっております。

POP before SMTP(PbS)とは?

メールサーバーを構築する場合、送信メールサーバー(SMTPサーバー)と、受信メールサーバー(POP/IMAPサーバー)の構築が必要です。

Postfix を外部から利用する為には、POP before SMTP か、SMTP-AUTH のどちらかの送信認証機能が、必要になります。

POP before SMTP とは、メール送信する前にメール受信を行い、その際にユーザー認証を行います。
ユーザー認証時のユーザーのIPアドレスを一定時間サーバー側で記録しておき、一定時間内はそのIPアドレスからメール送信が可能というものです。

当サイトでは、送信メールサーバーには Postfix 受信メールサーバーには courier-imap(Maildir方式) を採用しています。

Maildir とは?

MTA(主にsendmail,postfix,qmailなど)のメールの格納方式には Mailbox方式とMaildir方式があります。

Mailbox方式
/var/spool/mail/ユー ザー名
というファイルにメールを蓄える方式で、1つの ファイルに複数のメールを蓄えます。

Maildir方式
/home/ユーザー名/Maildir/new
とい言うディレクトリの中に、1つのメールにつき1つのファイルを使用する方式です。

Maildir にする理由

Mailbox形式だと、1人のユーザー宛のメールは全て1つのファイルに格納される為、ファイルが壊れると全てのメールが
読めなくなる可能性があります。
しかしMaildir形式では、ファイルが壊れても1通のメールが読めなくなるだけで被害を最小限に抑える事が可能です。

また、Mailbox形式の場合、あるユーザーのメールでディレクトリが一杯になると、他のユーザーのメールが配送できなくなる可能性があります。
しかしMaildirならば、ユーザーのホームディレクトリに容量制限(quota)で制限をかけてしまえば事前に被害を防ぐ事が可能です。

上記の理由でYosi はMaildir をお勧めし、当サイトではcourier-imapを利用した Maildir形式 にて構築して行きます。

Maildir を作製する

Maildir形式を使用するにあたり /home/ユーザー名 の中にMaildir と言うディレクトリを作成する必要があります。

# mkdir -p /home/ユーザー名/Maildir/{new,cur,tmp}

/home/ユーザー名/Maildir のアクセス権を変更

# chown -R 所有者:グループ名 /home/ユーザー名/Maildir

例)

# chown -R yosi:yosi /home/yosi/Maildir ← 所有者、グループ名が yosi の場合

当サイト ユーザーの追加と削除 に記載の方法でユーザーを作成した場合、所有者、グループ名は同じになります。

※ Maildir を自動作製する
/etc/skel/の中身のディレクトリがユーザーを追加した時に自動で作成されます
なので skel の中に Maildir フォルダを作成しておくといちいち、後からディレクトリを作ったり、アクセス権を
変更する手間が省かれます。


# mkdir -p /etc/skel/Maildir/{new,cur,tmp}

# chmod -R 700 /etc/skel/Maildir/ ← パーミッション変更

Postfixの設定


# vi /etc/postfix/main.cf ← 設定ファイル編集

myhostname = server.xxxx.net ←ホスト名.ドメイン名を指定

mydomain = xxxx.net ← ドメイン名を指定

myorigin = $mydomain

inet_interfaces = all

mydestination = $myhostname, localhost.$mydomain $mydomain

# 550を指定し、存在しないユーザー宛てのメールを拒否し、即座にエラーメッセージを返すようします

unknown_local_recipient_reject_code = 550 ← コメントにする (# があれば削除)
#
unknown_local_recipient_reject_code = 450 ← # をつけてコメントアウト


# postfixのリレーの許可にdracを追加し、内部ネットワークアドレスとローカルホストアドレスを指定

mynetworks = 127.0.0.0/8, 192.168.0.0/24, check_client_access hash:/etc/mail/dracd ← 追記

relay_domains = $mydestination

alias_maps = hash:/etc/postfix/aliases

alias_database = hash:/etc/postfix/aliases


home_mailbox = Maildir/ ← メールボックスをMaildir方式を指定


※ メールボックスと、メールに容量制限する場合以下の二項目を追記します


mailbox_size_limit = 30720000 ←メールボックスの容量制限(例 30Mb)

message_size_limit = 1024000 ←メールのサイズ容量制限(例 1Mb)


smtpd_banner = $myhostname ESMTP unknown ← メールサーバー名を隠す


※メールボックスをMaildir方式を使用するので以下の二項目をコメントアウト

#
mail_spool_directory = /var/spool/mail

#mailbox_command = /some/where/procmail -a "$EXTENSION"


allow_percent_hack = yes


# /etc/rc.d/init.d/postfix restart ← 設定終了後に再起動

postfix+courier-imapでPOP before SMTP

postfixとcourier-imapを使ってMaildirのままPOP before SMTPをどうしても、やりたかっ たのでパッケージを作ってみました。

まず、Yosi がリビルドした courier-imap対応dracddracd対応courier-imap の2つをダウンロードしてください。

※ 注意!
リビルドで作製したcourier-imapと、dracdは、Aptでアップグレードした場合、送受信が上手く出来なくなります。
各種対処方法のページを参考に、Aptのアップグレード対象から必ず除外して下さい。


★ courier-imap対応dracd
dracd-1.12-0vl1courier.i386.rpm

dracd-1.12-0vl2courier.i386.rpm

dracd-1.12-0vl4courier.i386.rpm new!(2007 02/11)

★ dracd対応courier-imap
courier-imap-3.0.5-0vl1drac.i386.rpm

courier-imap-3.0.8-0vl2drac.i386.rpm

courier-imap-4.0.3-0vl1drac.i386.rpm new!(2006 04/01)


※ 参考
courier-imap4系のリビルドに関してPbS対応パッチを配布されている「うさぎたろうの秘密」の管理人の小町様に色々とご協力をいただき無事、リビルドが完成しました。

courier-imap3系ではPbS対応パッチを当てるだけで簡単にリビルドできましたが、courier-imap4系からは、
各種パッチのリビルドが必要となり手順がややこしい為、サイトでリビルド手順の公開は控えさせていただきます。

今までリビルドの経験があり、4系のリビルドで質問がある方は管理人Yosiまでご連絡ください。

courier-imapとdracdのインストール




# rpm -e qpopper ← courier-imapをインストールするので削除

# rpm -e imap ← courier-imapと競合するので削除


※注 courier-imap4系からcourier-authlibのインストールが必要です。
    courier-imap3系ではインストールする必要はないです。


# apt-get install courier-authlib ← courier-authlibインストール(※ courier-imap4系のみ)
パッケージリストを読みこんでいます... 完了
依存情報ツリーを作成しています... 完了
以下の追加パッケージがインストールされます:
  expect thread
以下のパッケージが新たにインストールされます:
  courier-authlib expect thread
アップグレード: 0 個, 新規インストール: 3 個, 削除: 0 個, 保留: 0 個
0B/582kB のアーカイブを取得する必要があります。
展開後に 1324kB のディスク容量が追加消費されます。
続行しますか? [Y/n]y ← y応答
変更を適用しています...
準備中...                   ########################################### [100%]
   1:thread                 ########################################### [ 33%]
   2:expect                 ########################################### [ 66%]
   3:courier-authlib        ########################################### [100%]
完了
当サイトよりcourier-imapと、dracdをDL後にインストール
# rpm -Uhv dracd-1.12-0vl4courier.i386.rpm

# rpm -Uhv courier-imap-4.0.3-0vl1drac.i386.rpm

portmapが立ち上がっていない場合は立ち上げます。
# /etc/rc.d/init.d/portmap start

dracdを立ち上げます。
# /etc/rc.d/init.d/dracd start

courier-imapを立ち上げます。
# /etc/rc.d/init.d/courier-imap start
Starting Courier-IMAP server: imap imap-ssl pop3 pop3-ssl

courier-authlibを立ち上げます。(※ courier-imap4系のみ)
# /etc/rc.d/init.d/courier-authlib start
Starting Courier authentication services: authdaemond

これだけの設定で、すでにPbSができるようになっているはずです。

POP before SMTP(PbS)のテスト


dracdがうまく動いているかチェックする

# ps axw |grep drac
/usr/sbin/rpc.dracd -i -e 5

これがあったらdracdは動いています。

$ db_dump -p /etc/mail/dracd.db
※db_dumpコマンドが使えない場合の対処法はこちら

VERSION=3
format=print
type=hash
HEADER=END
DATA=END

このように表示されると思います。


$ /usr/sbin/testdrac localhost 1.2.3.4
(dracのホストと許可するIPアドレスを与える)

もう一度以下のコマンドを打ってみます
$ db_dump -p /etc/mail/dracd.db

VERSION=3
format=print
type=hash
h_nelem=1
HEADER=END
1.2.3.4 ←IPが追加されているのを確認
1049726783,allow,RELAYCLIENT
DATA=END

このようにリレーホストが追加されているのを確認して下さい。

5分たってからもう一度実行します。
$ db_dump -p /etc/mail/dracd.db

追加されたIPがなくなっているのを確認して下さい。

ここまでできたら dracの動作は問題ありません。


POP認証が成功した場合に、dracに追加されているか確認する

まず、テストするユーザー宛にメールを送信します。

# mail ユーザー名 ← テストユーザーにメール送信
Subject: test ← 題名を入力後「Enter」
本文(テスト) ← 本文を入力後「Enter」
. ← 「.」を入力後「Enter」
Cc: ← 「Enter」

メールを受信すると/home/ユーザー名/Maildir の中に
cur/new/tmp の3種類のディレクトリが作製されると思います。

# ls -l /home/ユーザー名/Maildir/ ← cur、new、 tmp の3種類のディレクトリを確認

上記ディレクトリを確認したら
telnetで110番ポートに接続してPOP認証を行います。

$ telnet localhost 110
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
+OK Hello there.
USER xxxxxxx ←xxxの部分は貴方のユーザー名
+OK Password required.
PASS ****** ←****の部分は貴方のパスワード
+OK logged in.
quit
+OK Bye-bye.
Connection closed by foreign host.

OK logged in.が出たらPOPの認証はできています。

dracに追加されているか確認します。
$ db_dump -p /etc/mail/dracd.db

VERSION=3
format=print
type=hash
h_nelem=1
HEADER=END
127.0.0.1 ←追加されているのを確認
1049727481,allow,RELAYCLIENT
DATA=END

追加されていたらOKです。

POP使用の場合は110番ポート、IMAP使用の場合は143番ポートを使用します。

まずルータの設定で25番ポート、110番(POPの場合)または143番(IMAPの場合)ポートを空けます。

次にここのサイトでポートがきちんと空いているかチェックします。

リレーを許可する時間を調整する



/usr/sbin/rc.dracd を編集します。

初期値は/usr/sbin/rpc.dracd -i -e 5 &
で5分に設定しています。

例として
/usr/sbin/rpc.dracd -i -e 10 &

とすると、10分でリレーをふさぐ様になります。




Copyright c Vine Linuxで自宅サーバー. 2004 All Rights Reserved.