Feb 21, 2006

さくらの専用サーバ環境のメール設定

そろそろメールの設定もしておこうかと思った。完成形としてはPostfix + PostfixAdmin + Courier-IMAPという感じ。最小の手数での動作を目指す。

メールの設定(Postfix Admin編)

まずはpostfixadminをインストールし、MySQL上にデータベースを作成する。

$ cd /usr/ports/mail/postfixadmin; make install clean
$ cd /usr/local/www/postfixadmin
$ mysql -uroot -p < DATABASE_MYSQL.TXT

データベースはpostfixという名前で、ユーザ名postfix、パスワードpostfixでアクセスできるように設定されている。変更したい場合にはDATABASE_MYSQL.TXTに適宜変更を加えてから読み込むという方法と、phpMyAdminなどを使って変更する方法がある。

/usr/local/www/postfixadmin/config.inc.phpを適宜編集する。いろいろ変更することも可能だが、変更を最小限に留めたければ、change-this-to-your.domain.tldとなっている部分を自分のドメイン名に変更するだけでよい。

/usr/local/www/postfixadmin/admin/.htaccessを若干修正。オリジナルには脆弱性がある。

 --- .htaccess.bak       Sun Feb 19 03:18:10 2006
 +++ .htaccess   Tue Feb 21 11:58:26 2006
 @@ -3,6 +3,4 @@
  AuthName "Postfix Admin"
  AuthType Basic
 
 -<limit GET POST>
  require valid-user
 -</limit>

/usr/local/www/postfixadmin/admin/.htpasswdにパスワードを登録しなおす。デフォルトはadmin:adminになっていて誰でもクラックできるので要注意。

# cd /usr/local/www/postfixadmin/admin
# mv .htpasswd .htpasswd.bak
# htpasswd -c -m .htpasswd name

httpd.confの適切な箇所に以下を追加する。

Alias /postfixadmin/ "/usr/local/www/postfixadmin/"
<Directory "/usr/local/www/postfixadmin">
        Options Indexes
        AllowOverride AuthConfig
</Directory>

apachectl restartしてapacheを再起動し、/postfixadmin/setup.phpをブラウザでアクセスしてセットアップの確認を行う。問題がなければ、setup.phpを削除またはリネームした上で、admin sectionにアクセスして初期設定を行う。

使い方に関してはグーグルに聞くこと。

メールの設定(Postfix編)

インストール

まず、/usr/port/mail/postfixでmake installする。私がインストールしたバージョンは2.2.8_2,1である。コンパイルオプションをいろいろ聞かれるが、ここでの設定を行うには、少なくともMySQLがenableになっていなければならない。

設定

無事にインストールできたら、/usr/local/etc/postfix/main.cfの末尾に以下をざっくり追加する。

mydomain = your.domain.name
myorigin = $mydomain
mydestination =
local_transport = virtual
mynetworks_style = host
mynetworks = 59.106.XXX.XXX 127.0.0.1
home_mailbox = Maildir/
alias_maps =
alias_databases =
 
virtual_alias_maps = mysql:/usr/local/etc/postfix/mysql_virtual_alias_maps.cf
virtual_mailbox_base = /var/mail
virtual_mailbox_domains = mysql:/usr/local/etc/postfix/mysql_virtual_domains_maps.cf
virtual_mailbox_limit = 51200000
virtual_mailbox_maps = mysql:/usr/local/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_minimum_uid = 125
virtual_uid_maps = static:125
virtual_gid_maps = static:6
virtual_transport = virtual
 
# Additional for quota support
virtual_create_maildirsize = yes
virtual_mailbox_extended = yes
virtual_mailbox_limit_maps = mysql:/usr/local/etc/postfix/mysql_virtual_mailbox_limit_maps.cf
virtual_mailbox_limit_override = yes
virtual_maildir_limit_message = Sorry, the user's maildir has overdrawn his diskspace quota, please try again later.
virtual_overquota_bounce = yes

この設定では、Maildir形式のメールスプールが/var/mail/username@my.domain/というディレクトリに作られる。/var/mailのもともとのパーミッションに合わせて、ユーザpostfix(UID=125)、グループmail(GID=6)の権限で書き込むように設定している。/etc/passwd, /etc/groupを見て異なる値になっていたらその値に合わせる必要がある。

次にmain.cfで使っている4つのmysql_virtual_XX.cfファイルを用意する。各々の内容は以下の通り。

mysql_virtual_alias_maps.cf
user = postfix (データベースのユーザ名)
password = postfix (データベースのパスワード)
hosts = localhost
dbname = postfix
query = SELECT goto FROM alias WHERE address='%s' AND active='1'
mysql_virtual_domains_maps.cf
user = postfix (データベースのユーザ名)
password = postfix (データベースのパスワード)
hosts = localhost
dbname = postfix
query = SELECT domain FROM domain WHERE domain='%s'
#optional query to use when relaying for backup MX
#query = SELECT domain FROM domain WHERE domain='%s' AND backupmx='0' AND active='1'
mysql_virtual_mailbox_maps.cf
user = postfix (データベースのユーザ名)
password = postfix (データベースのパスワード)
hosts = localhost
dbname = postfix
query = SELECT maildir FROM mailbox WHERE username='%s' and active='1'
mysql_virtual_mailbox_limit_maps.cf
user = postfix (データベースのユーザ名)
password = postfix (データベースのパスワード)
hosts = localhost
dbname = postfix
query = SELECT quota FROM mailbox WHERE username='%s'

4つのファイルを作ったらmysql_virtual_XX.cfを人様に見られないようにchmod & chgrpしておく。

# chmod 640 mysql_*
# chgrp postfix mysql_*

SASLの設定などは後からでもできるので省略。

起動の設定

/etc/rc.confに以下の行を追加する。

postfix_enable="YES"
sendmail_enable="NONE" ("NO"ではなくて"NONE")

/etc/periodic.confに以下の行を追加する(なければ新規に作る)。

daily_clean_hoststat_enable="NO"
daily_status_mail_rejects_enable="NO"
daily_status_include_submit_mailq="NO"
daily_submit_queuerun="NO"

sendmailがまだ動いていたら停止+postfixをおもむろに起動。

# /etc/rc.d/sendmail stop
# /usr/local/etc/rc.d/postfix.sh start

メールの設定(Courier-IMAP編)

インストール

portinstallを使ってcourier-imapをインストールする。

$ portinstall -P courier-authlib-base courier-authlib-mysql courier-imap

Authdaemonの設定

/usr/local/etc/authlib/authdaemonrcを修正する。デフォルトでも問題ないかもしれないが、Postfix Adminで設定したアカウントだけでメールを授受するには以下のように設定する。

 --- authdaemonrc.dist   Tue Feb 21 09:06:33 2006
 +++ authdaemonrc        Tue Feb 21 09:20:18 2006
 @@ -27 +27 @@
 -authmodulelist="authuserdb authvchkpw authpam authldap authmysql authpgsql"
 +authmodulelist="authmysql"

/usr/local/etc/authlib/authmysqlrcも修正する。postfixの設定では、メールスプールが/var/mail/username@my.domain/というディレクトリに作られるようにしていた。下記は、/var/mail/username@my.domain/以下にあるメールスプールをユーザpostfix(UID=125)、グループmail(GID=6)の権限で読み書きするように設定している。

 --- authmysqlrc.dist    Tue Feb 21 09:08:13 2006
 +++ authmysqlrc Tue Feb 21 17:59:57 2006
 @@ -26,3 +26,3 @@
 -MYSQL_SERVER           mysql.example.com
 -MYSQL_USERNAME         admin
 -MYSQL_PASSWORD         admin
 +MYSQL_SERVER           localhost
 +MYSQL_USERNAME         postfix (データベースのユーザ名)
 +MYSQL_PASSWORD         postfix (データベースのパスワード)
 @@ -54 +54 @@
 -MYSQL_DATABASE         mysql
 +MYSQL_DATABASE         postfix
 @@ -61 +61 @@
 -MYSQL_USER_TABLE       passwd
 +MYSQL_USER_TABLE       mailbox
 @@ -70 +70 @@
 -MYSQL_CRYPT_PWFIELD    crypt
 +MYSQL_CRYPT_PWFIELD    password
 @@ -91 +91 @@
 -MYSQL_UID_FIELD                uid
 +MYSQL_UID_FIELD                '125'
 @@ -97 +97 @@
 -MYSQL_GID_FIELD                gid
 +MYSQL_GID_FIELD                '6'
 @@ -106 +106 @@
 -MYSQL_LOGIN_FIELD      id
 +MYSQL_LOGIN_FIELD      username
 @@ -111 +111 @@
 -MYSQL_HOME_FIELD       home
 +MYSQL_HOME_FIELD       '/var/mail/'
 @@ -128 +128 @@
 -# MYSQL_MAILDIR_FIELD  maildir
 +MYSQL_MAILDIR_FIELD    maildir

Courier-IMAPの設定

Courier-IMAPでは、pop3d, pop3d-ssl, imapd, imapd-sslの4つのアクセスメソッドが用意されている。-sslが付いているのは通信経路が暗号化されるが、暗号化のために必要な証明書に(お金を払いたくなければ)自己署名しなくてはならない。また、自己署名した証明書を使ったpop3d-ssl, imapd-sslに対して接続のたびにWarningを表示するようなメーラーもままある。

つまり、私が言いたいのは「面倒だからpop3dとimapdの設定だけここではする。-sslが使いたければ後で考える。」ということだ。

Courier-IMAPの設定ファイルは/usr/local/etc/courier-imap以下にあるが、ここでは何も変更しないでおく。何もしなくてもpop3とimapdは使えるからだ。

起動の設定

次に/etc/rc.confに以下の行を追加する。

courier_authdaemond_enable="YES"
courier_imap_imapd_enable="YES"
courier_imap_imapd_ssl_enable="NO"
courier_imap_pop3d_enable="YES"
courier_imap_pop3d_ssl_enable="NO"

最後に必要なデーモンを起動する。

# /usr/local/etc/rc.d/courier-authdaemond.sh start
# /usr/local/etc/rc.d/courier-imap-pop3d.sh start
# /usr/local/etc/rc.d/courier-imap-imapd.sh start

メールの設定(Postfix編SMTP-Auth対応)

ここまで説明した設定では、mynetworksに指定したホストからしかメールの送信を行えない。mynetworksに自分の使用するすべてのIPアドレスを指定しておくのも一つの解だが、ここではSMTP-Auth対応にする方法を述べる。

まず、postfixをインストールする際にSASL2とMySQLがenableにしてあるものとする。また、上の設定はすでに行ってあるものとする。

/usr/local/etc/postfix/main.cfの末尾に以下の設定を追加する。

# SMTP-Auth and TLS
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain =
smtpd_recipient_restrictions = permit_mynetworks,
    permit_sasl_authenticated, reject_unauth_destination
broken_sasl_auth_clients = yes

次に/usr/local/lib/sasl2/smtpd.confというファイルを作る。内容は以下の通り。

pwcheck_method: authdaemond
log_level: 3
mech_list: PLAIN LOGIN
authdaemond_path: /var/run/authdaemond/socket

さらにsmtpd(postfixユーザ権限で動作する)が/var/run/authdaemond/socketにアクセスできるようにする必要がある。安直にこれを実現するには、/var/run/authdaemondディレクトリのパーミッションを緩めに設定する方法とpostfixユーザをcourierグループに追加する方法がある。前者の方がセキュリティ上のインパクトが大きい。後者を実現するには/etc/groupのcourierグループにpostfixを追加すればよい。

 --- group.bak   Thu Feb 23 21:13:19 2006
 +++ group       Thu Feb 23 21:14:04 2006
 @@ -32 +32 @@
 -courier:*:465:
 +courier:*:465:postfix

以上の設定が済んだら、/usr/local/etc/rc.d/postfix.sh restartしてpostfixを再起動する。

ちなみに以上で説明したようにpwcheck_methodでauthdaemondを指定するには、cyrus-sasl2がWITH_AUTHDAEMONオプション付きでコンパイルされている必要がある。ただし、courier-authlibが先にインストールされていれば、オプションを明示的に設定されていなくても有効になる。うまく動かない場合にはcyrus-sasl2をインストールし直すことをお勧めする。

メーラーの設定はグーグルで調べること。残るは、pop3d, imapd, smtpdのTLS対応。

About Me

My Photo

つくばで働く研究者

Total Pageviews

Amazon

Copyright 2012 Ogawa::Buzz | Powered by Blogger
Design by Web2feel | Blogger Template by NewBloggerThemes.com