Postfix第一世代の手順を記録として残しておく。いつの記事が確認してみたら,このページは,2009年
Postfix第一世代の手順を記録として残しておく。いつの記事が確認してみたら,このページは,2008年の七夕あたりくらいに頑張っていたらしい。

------

*Postfixをインストールする [#a95a9283]
いままで、Qmailを使っていたのだが、Postfixを使ってみたくなり、ちくちくとインストールをしていた。

インストールの方法は...&br;
%%最近は、portsからportinstallを使ったり、pkg_add -r を使ってインストールがマイブームです。&br; %%
%%と云うより簡単だし。%%

と、サーバを低消費電力がうたい文句のATOM君に換えたので再々...インストール(何回目だろう(T_T;

基本的にはportinstallを使ってインストールした。&br;
インストール一回目はオプションを聞かれるのでメモ&br;
(二回目からは聞かれなくなる。オプションを再設定する場合、[[FreeBSD_Ports]]参照)&br;
#ref(Postfix/postfix_option.jpg,left,nowrap,添付ファイルの画像)

sendmailの停止とpostfixの起動をrc.confに記述&br;
postgreyはお好みで
 #
 # sendmail stop
 #
 sendmail_enable="NO"
 sendmail_submit_enable="NO"
 sendmail_outbound_enable="NO"
 sendmail_msp_queue_enable="NO"
 
 #
 # postfix
 #
 postfix_enable="YES"
 postgrey_enable="YES"



**スペースで失敗したのね。SMTP_AUTH with Cyrus SASL [#v58c1786]
%%で、下記の失敗したときは、Cyrus SASL Supportにチェックを入れてインストールしたと思う。%%

- [[Cyrus SASLとPostfixで空白を挿入して失敗>Postfix/auth_with_space]]

スペースを取り去ることによってPostfixが上手く動作し始めたようなので次は、

**POPサーバだ!Dovecot [#l22ad377]
と思って、Postfixと相性が良さそうなPOPサーバを探していたところ、どうも[[Dovecot>http://www.dovecot.jp/]]が良いようなのでこれをインストールする。&br;
これもportsからインストールした。

 telnet localhost 110
で確認してみると
 > telnet localhost 110
 Trying 127.0.0.1...
 Connected to localhost.foo.net.
 Escape character is '^]'.
 +OK Dovecot ready.
 USER リアルユーザ
 +OK
 PASS リアルユーザパスワード
 +OK Logged in.
 quit
 +OK Logging out.
 Connection closed by foreign host.
 >
動作しているみたい。

さて、やりたいことは、バーチャルドメインとバーチャルユーザを管理したいわけで、いちいちリアルユーザを登録するのは面倒。&br;
調べていくと[[サバカン日記+>http://www.isokiti.tv/~isobetti/sabakan/]]さんの[[postfixとdovecotでバーチャルドメイン(バーチャルメールボックス構築編)壱>http://www.isokiti.tv/~isobetti/sabakan/index.php?e=171]]がビンゴなわけで、「やりたいこと」がまさにビンゴ

- バーチャルドメインで複数のドメインを扱う
- smtp-authを使う
-- パスワード(POPとsmtp-auth)をdovecotだけで管理するため、dovecot-saslを使う
-- システムアカウントはdovecotでpamを利用する設定を行い、smtp-authもPOPもまかなう
- ssl(tls)を使う
-- 暗号化していないsmtp-auth認証は拒否(sslをつかわないユーザ対策)
-- POPも平文認証を拒否(sslを使わない場合はAPOPを要求)
- メインのドメインはバーチャルメールボックスを使わずシステムユーザで使用する
- ssl証明書は自己証明書をメーラーにインストールしてもらう

というわけで[[サバカン日記+>http://www.isokiti.tv/~isobetti/sabakan/]]さんの設定を真似っこしながら設定をしていくことにする。

まだできてない(T_T);

*** バーチャルドメインとバーチャルメールボックス [#s8422d1d]
一つのホストで複数のドメインを管理する「バーチャルドメイン」とホストに実ユーザが存在しなくてもメールを受け取れるバーチャルメールボックスを設定したい。結構オプションがあるのでとりあえず列記してみる。

-virtual
-virtual_alias_domains
-virtual_alias_expansion_limit
-virtual_alias_maps
-virtual_alias_recursion_limit
-virtual_gid_maps
-virtual_mailbox_
-virtual_mailbox_base
-virtual_mailbox_domains
-virtual_mailbox_limit
-virtual_mailbox_lock
-virtual_mailbox_maps
-virtual_minimum_uid
-virtual_transport
-virtual_uid_maps


|virtual_alias_domains||$virtual_alias_mapsに対応する仮想ドメインのリスト|
|virtual_alias_expansion_limit||virtual_alias_mapsによって、1つの受信者アドレスから展開されるアドレス数の最大値|
|virtual_alias_maps||仮想ドメインのメールアドレスと実メールアドレスの対応検索テーブルのリスト|
|virtual_alias_recursion_limit||virtual_alias_mapsの展開の繰り返し数の最大値|
|virtual_mailbox_base|○|仮想ユーザのメールボックスのベースディレクトリ|
|virtual_mailbox_domains|○|virtual配送エージェントで配送するドメインのリスト|
|virtual_mailbox_limit|○|メールボックスの最大サイズ(バイト単位)|
|virtual_mailbox_lock||UNIX形式のメールボックスにメールを格納する際のロック形式のリスト|
|virtual_mailbox_maps|○|仮想ユーザのメールアドレスとメールボックスの対応検索テーブルのリスト|
|virtual_transport||$virtual_mailbox_domainsに適合するドメインの場合に使用される配送エージェント|
|virtual_uid_maps|○|仮想ユーザのUIDを取り出すためのテーブル|
|virtual_gid_maps|○|仮想ユーザのGIDを取り出すためのテーブル|
|virtual_minimum_uid||仮想ユーザのUIDとして使用できる最小の数値|


virtual_aliasとvirtual_mailboxがvirtualという項目で説明されているので、なんとんく混乱していた。&br;
「virtual_aliasとvirtual_mailboxとvirtual_transportは同時に設定するとエラーがでる。」という記述があったので目が覚めた。
今回設定したいのは、&br;
■ドメインごとの仮想ユーザのメールボックスに配送する&br;
ということで設定する項目(一覧表)に○をつけてみた。

**virtual_mailboxの設定 [#c72cb6a4]
何を決めなくちゃいけないか?どこに設定しなくちゃいけないか?が整理されていなかったらしい>自分

-仮想メールボックスのベースディレクトリは、/usr/local/vmailにする。特に理由があるわけぢゃないんだけど、なんとなく。
-virtual_mailbox_mpasは/usr/local/etc/postfix/virtual_mailboxに記述することにする。
-gid, uidともstaticな5000にする。
-とりあえず、ハッシュテーブルを使うことにする。
-ハッシュテーブルは メールアドレス TAB 格納ディレクトリっぽい。最後を/で終わるとMaildir形式

 virtual_mailbox_domains = DOMAIN1.com, DOMAIN2.net
 virtual_mailbox_base    = /usr/local/vmail
 virtual_mailbox_maps    = hash:/usr/local/etc/postfix/virtual_mailbox
 virtual_gid_maps        = static:5000
 virtual_uid_maps        = static:5000

でもって/usr/local/etc/postfix/virtual_mailboxは
 webmaster@DOMAIN1.com <-TAB-> DOMAIN1/webmaster/
 user@DOMAIN1.com      <-TAB-> DOMAIN1/user/
 webmaster@DOMAIN2.net <-TAB-> DOMAIN2/webmaster/

となるのかな。

そのあと、
 # postmap /usr/local/etc/postfix/virtual_mailbox
としてhash形式のデータベースに変換する。

*SPAMメール対策ツール Postgrey [#u3b1c992]
スパムメール対策として[[Postgrey (Postfix Greylistig Policy Server)日本語ポータル>http://www.kozupon.com/postgrey/index.html]]を参考にPostgreyをインストールした。

インストールは至って簡単(といってもソースからインストールした訳ではなくports)
 # cd /usr/ports
 # portinstall mail/postgrey

インストールが終了したらとりあえず、起動してみる。
 # /usr/local/sbin/postgrey --inet=10023 -d
としてみるが起動せずorz.&br;
そそ、rc.confに記述が必要。
 # vi /usr/local/etc/rc.conf
  :
  :
 postgrey_enabl="YES"

これで、起動できる。

んでもって、postfixのmain.cfのsmtpd_recipient_restrictionsに追記する。
 # vi /usr/local/etc/postfix/main.cf
  :
  :
 smtpd_recipient_restrictions = permit_mynetworks, 
                                     :
                                check_policy_service inet:127.0.0.1:10023
                                     :
ほほー、ここで10023が出てくるのねん。

 # postfix reload
postfixを再起動する。

このあと、携帯からとりあえず、メールを送ってみる。&br;
このとき、tailでlogをモニタしてみる
 # tail -20 /var/log/maillog
最初は、newとなり、接続を切断している。&br;
1分ごとに再送して来て、5分後にpassに変わってメールを受信した。

効果はてきめんで、いままでさんざん来ていたSPAMが来なくなった。&br;
ただ、whitelist(むないように許可するリスト)はあえて作ってみなかったので暫くはログを監視する日々となりそう。

そうか、whitelistを作成する目的は、postgrey日本語ポータルとかで「whilelistは信頼できる人に予め配信を許可したい」とタイトルが付いているけど、相手のメールサーバとこちらのメールサーバに余計な負荷をかけない目的もあるのかなぁとも思ったりして。&br;
少しだけ炭素排出量を減らすことができる!?

* 配送されなかったメールを削除する。 [#m24f4b03]
なんらかの問題により配送されなかったメールをpostfixは一定期間配送しようとがんばる。&br;

でもそのメールはいらなかったりする場合に削除したい。&br;
ログからIDを見つけたので、findでdeferとdeferredに情報があることがわかったので、とりあえず、手動で片っ端から消していった。&br;
それ程見当違いでもなかったけど、postfix deferのキーワードでGoogle様のお告げを待ったところ、まるっきり同じことをしている方がいたのでメモ&br;
[[ [postfix]キューから削除>http://slashdot.jp/~quabbin/journal/448283]]

[[ deferredキュー>http://www.postfix-jp.info/trans-2.2/jhtml/QSHAPE_README.html#deferred_queue]]

で、本当は、手動で消しちゃうんぢゃなく、&br;
 # postsuper -d ALL deferred
が正しいやり方。

[[quabbinの日記>http://slashdot.jp/~quabbin/]]さんのところでは、その後の検証をおこなっているが、ここでqueueの状態を確認するコマンドも使っていたので、更にメモ

 # postqueue -p

これでqueueの中に何が残っているか確認できる。

[[Postfixのページ>http://www.postfix-jp.info/]]でまた勉強だな。