さくらの専用サーバ環境のメール設定
そろそろメールの設定もしておこうかと思った。完成形としては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対応。
このエントリーのトラックバックURL: http://as-is.net/mt/mt-tb.cgi/495
Comments (0)