Ubuntu Server でメールサーバを構築するページです。 †
Postfix †
Postfixは複雑になりすぎたSendmailのかわりによく使われるSMTPサーバ用のソフトである。インストールは apt一発でOKだが、メールサーバの設定形式が聞かれるので、自分の条件に合わせる必要がある。(もちろん、後から設定ファイルを修正すれば問題ない。)
今回はメール中継用のサーバを利用するので、「サテライトシステム」を選択した。
設定 †
設定は基本的に main.cf を変更すればよい。
postfixを「サテライトシステム」を選択してインストールした直後の main.cf:
main.cf.orig
設定例
# ホスト名
myhostname = mail.example.com
# aliasの設定
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
# メール送信の設定
myorigin = /etc/mailname
# メールの最終目的地とみなす範囲の指定
mydestination = mail.example.com, localhost.example.com, localhost
# ローカルメール以外は mailgw に送る
relayhost = relay.example.com
# 信頼できるクライアントのネットワークを指定
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
# メールボックスの容量制限なし
mailbox_size_limit = 0
# メールのサイズ容量制限(20MB)
message_size_limit = 20971520
recipient_delimiter = +
# 全てのアクティブなインターフェースで待ち受ける
inet_interfaces = all
# メールの格納方式を Maildir方式にする
home_mailbox = Maildir/
# ヘッダをチェックするファイルの場所を指定
header_checks = regexp:/etc/postfix/header_checks
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no
# appending .domain is the MUA's job.
append_dot_mydomain = no
# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h
readme_directory = no
# TLS の設定
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
# 不明なユーザ宛のメールやホストネーム宛のメールが届いた際に
# エラーコードを 450 ではなく 550 を返すようにする
unknown_local_recipient_reject_code = 550
unknown_address_reject_code = 550
unknown_client_reject_code = 550
unknown_hostname_reject_code = 550
/etc/postfix/header_checksに以下の記述をすることで、ローカルクライアントのIPアドレスなどを送信しないようにできる。(参照:Postfix (SMTPサーバー)/Ubuntu 8.04)
/^Received:.*192\.168\..*/ IGNORE
/^Received:.*127\.0\.0\.1.*/ IGNORE
main.cfの内容を変更したら、postfixに設定ファイルを強制的に読み込ませる。(ただし、inet_interfacesを変更した場合にはpostfixを再起動する必要あり。参照:Postfixの基本設定 (ほげおメモ))
Maildir形式に変更する †
MailBox形式では受信したメールがメールスプールに1つのファイルとして保存されるので、もしもメールスプールが壊れてしまうと、メール全体が読めなくなってしまう。その点、Maildir形式ならばメールは ~/Maildir 以下に1通ごと別のファイルとして保存されるので安心である。また、Quotaを使ってメール容量に制約もかけやすい。(参照:メールサーバー構築(Postfix+Dovecot) - Fedoraで自宅サーバー構築)
$ mkdir -p ~/Maildir/{new, cur, tmp}
$ chown -R 700 ~/Maildir
新規ユーザを追加した際に自動的に Maildir が作成されるように /etc/skel にテンプレートを作っておくと便利。
$ sudo mkdir -p /etc/skel/Maildir/{new,cur,tmp}
$ sudo chmod -R 700 /etc/skel/Maildir
トラブル対応 †
File too large †
/var/log/maillog に以下のようなメッセージが表示されて、メールが受信できなくなる。(情報:かっぱの金町Blog: postfixのmailboxの容量制限)
cannot access mailbox /var/mail/hoge for user hoge error writing message: File too large
これは、postfixで設定したメールボックスの最大容量を越えてしまったのが原因である。一時的に最大値を大きく設定して、該当ユーザに不要なメールをメールボックスから削除してもらい、また元の最大値に戻せばよい。
SASL †
SASLを用いてSMTP-AUTH対応にする。ここが一番ハマった。ubuntuでは postfix が chroot しているので、saslauthd が postfix から見えるようにしなくてはいけない。本来ならば、セキュリティレベルを上げるためにLDAPやSASLパスワードを利用したいが、それは今後の課題ということで...
postfixのchroot対策をしても、再起動すると /var/run が tmpfs に置かれるのでシンボリックリンクがクリアされてしまう。(Bug #138931 in cyrus-sasl2 (Ubuntu): “Can't use saslauthd to authenticate both postfix and cyrus due to /var/run/saslauthd being on tmpfs”)
sasl2-binのインストール †
$ sudo apt-get install sasl2-bin
インストールしただけでは saslauthd は自動起動しないので、/etc/default/saslauthd を以下のように変更する。
START=no
↓
START=yes
saslauthd を起動して、SMTP認証のテストを行う。
$ sudo /etc/init.d/saslauthd start
$ sudo testsaslauthd -s smtp -u ユーザ名 -p [ユーザの平文パスワード]
0: OK "Success." ←このように表示されたら大丈夫
参照:Postfix (SMTPサーバー)/Ubuntu 8.04:SMTP認証の利用設定
postfix の chroot 対策 †
SASLの設定をしてメールソフトから送信しようとしたが、以下のエラーが発生して、メールを送れなかった。
Dec 26 14:12:19 hogehoge postfix/smtpd[27318]: connect from kerokero[xx.xx.xx.xx]
Dec 26 14:12:51 hogehoge postfix/smtpd[27318]: warning: SASL authentication failure:
cannot connect to saslauthd server: No such file or directory
Dec 26 14:12:51 hogehoge postfix/smtpd[27318]: warning: SASL authentication failure:
Password verification failed
Dec 26 14:12:51 hogehoge postfix/smtpd[27318]: warning: kerokero[xx.xx.xx.xx]:
SASL PLAIN authentication failed: generic failure
Dec 26 14:12:51 hogehoge postfix/smtpd[27318]: warning: SASL authentication failure:
cannot connect to saslauthd server: No such file or directory
Dec 26 14:12:51 hogehoge postfix/smtpd[27318]: warning: kerokero[xx.xx.xx.xx]:
SASL LOGIN authentication failed: generic failure
Dec 26 14:13:10 hogehoge postfix/smtpd[27318]: disconnect from kerokero[xx.xx.xx.xx]
かなり悩んだが、ここに解決法が記述されていた。
$ sudo /etc/init.d/saslauthd stop
$ sudo rm -r /var/run/saslauthd/
$ sudo mkdir -p /var/spool/postfix/var/run/saslauthd
$ sudo ln -s /var/spool/postfix/var/run/saslauthd /var/run
$ sudo chgrp sasl /var/spool/postfix/var/run/saslauthd
$ sudo adduser postfix sasl
$ sudo /etc/init.d/saslauthd start
これで解決と思ったが、サーバを再起動するとまた /var/run/saslauthd が作られてしまう。ということで、Dovecot SASL を使うよう方針を変えた。
Dovecot †
IMAPやPOP3サーバ用ソフト。詳細は、Ubuntu/Server/Mail/Dovecotにて解説。
RoundCube WebMail †
Ajaxを用いたWebMailソフト。(本家サイト) 2008年の年末に0.2-stable版が公開された。日本語対応も進んでいるらしい。2009-01-09現在、Ubuntuには古い0.1-rc2用のパッケージしかなかったので、手動でインストールしてみた。
必要なパッケージのインストール †
メール本体を格納するデータベースとPHPが必要。今回はRDBMにMySQLを使ったので、以下のパッケージをインストールした。
$ sudo apt-get install php5-mcrypt php-auth php-net-smtp php-net-socket \
php-mail-mime ucf tinymce mysql-server mysql-client php5-mysql php-db
MySQLをインストールする際に、rootのパスワードを作成するよう促されるので、パスワードを設定しておく。(もちろん、後で作成することも可能)
PHP Fileinfoのインストール †
情報元:XooNIps - EthnaWiki しかし、php5-dev をインストールすると他の開発系のソフトも入ってしまうため、実際にインストールはしなかった。別マシンでビルドして、できたファイルだけ入れればよいのかもしれない。
fileinfo拡張のインストール手順
これもUbuntuの場合。
$ sudo aptitude install php5-dev
してあればpeclコマンドが使えた気がするので、まずfileinfo拡張が要求するlibmagic-devをインストール
$ sudo aptitude install libmagic-dev
そして次にpeclコマンド
$ sudo pecl install fileinfo
WARNING: "pear/Fileinfo" is deprecated in favor of \
"channel://php-src/ext/fileinfo/in php sources"
downloading Fileinfo-1.0.4.tgz ...
Starting to download Fileinfo-1.0.4.tgz (5,835 bytes)
.....done: 5,835 bytes
3 source files, building
running: phpize
Configuring for:
PHP Api Version: 20041225
Zend Module Api No: 20060613
Zend Extension Api No: 220060519
building in /var/tmp/pear-build-root/Fileinfo-1.0.4
running: /tmp/pear/cache/Fileinfo-1.0.4/configure
Build process completed successfully
Installing '/usr/lib/php5/20060613+lfs/fileinfo.so'
install ok: channel://pear.php.net/Fileinfo-1.0.4
これでインストールされるので、最後に表示されるfileinfo.soのインストール先ディレクトリを覚えておいて、これを転送先サーバの同じディレクトリにコピーする。
$ scp /usr/lib/php5/20060613+lfs/fileinfo.so user@server:/usr/lib/php5/20060613+lfs/
/etc/php5/conf.d/fileinfo.iniを作成する。
extension=fileinfo.so
その後でapacheを再起動する。
プログラムのダウンロードと展開 †
$ cd workdir
$ wget http://nchc.dl.sourceforge.net/sourceforge/roundcubemail/roundcubemail-0.2-stable.tar.gz
$ tar zxvf wget roundcubemail-0.2-stable.tar.gz
$ sudo mv roundcubemail-0.2-stable /var/www
$ cd /var/www
$ sudo ln -s roundcubemail-0.2-stable webmail
$ sudo chown -R www-data:www-data roundcubemail-0.2-stable
データベースの設定(MySQLの場合) †
RoundCube WebMailで使用する空のデータベースを作成し、テーブルレイアウトと roundcube user のアクセス権を設定する。その際、roundcube user のパスワードも設定しておくとよい。なお、この時設定したパスワードは 'config/db.inc.php' に記述しなければいけない。さらに、MySQL Ver.4.1 以降では、データベースの文字コードを UTF-8 に設定する。
データベースの作成
$ mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.0.51a-3ubuntu5.4 (Ubuntu)
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> CREATE DATABASE roundcube DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
Query OK, 1 row affected (0.00 sec)
mysql> GRANT ALL PRIVILEGES ON roundcube.* TO roundcube@localhost \
IDENTIFIED BY 'ユーザroundcubeのパスワード';
Query OK, 0 rows affected (0.00 sec)
mysql> quit
Bye
作成したデータベースにテーブルを作成
$ mysql -u roundcube -p roundcube < ./SQL/mysql.initial.sql
ブラウザを用いた各種設定 †
0.2-stableでは直接設定ファイルを書き換えるだけでなく、ブラウザ上で各種設定が行えるようになった。
START INSTALLATIONをクリックすると、サーバにインストールされているソフトウェアのチェックをしてくれる。
なんとMySQLをインストールしたはずなのに、認識されていない。これは、php5-mysql をインストールした後に Apache2 を再起動しなかったため。ついでに php5-gd もインストールした後に Apache2 を再起動すると、以下の画面のように無事 MySQL が認識された。
#ref(): File not found: "roundcubewebmail16.png" at page "Ubuntu/Server/Mail"
IMAP †
IMAPの仕組みをよく理解していないので、Dovecotと RoundCube WebMail の連携がうまくいかない。勉強の参考になりそうなサイトをリストアップしておく。
http → https へリダイレクトする †
WebMailのログイン画面が http を使っていると、ユーザ名とパスワードが平文で流れてしまうので、セキュリティ上問題がある。間違えて http:// 経由でアクセスした場合でも強制的に https:// にリダイレクトするようにしておけば安心である。Apache の場合、mod_write を使うと簡単に実現可能である。
Apache2でSSLを動かすには、Ubuntu/Server/Web/Apache2/SSLを有効にするを参照のこと。
リンク †
Squirrelmail †
少し前までフリーのWebmailソフトの定番だった。ただ、多言語対応が遅れていたため、最近のUTF-8が標準のロケールになっているLinuxディストリビューションではあまり使われなくなってきた?
Mailmanによるメーリングリスト管理 †
ブラウザ上でメーリングリストの管理ができるようになるツール。設定等は、Ubuntu/Server/Mail/Mailmanを参照のこと。
リンク †