3:メールサーバ
さて次は、一番タイヘンなメールサーバ。メールサーバは、
1. 実際のメールの送受信を担当するSMTP(ここではpostfixを使います)
2. postfixが受け取ったメールをメールソフトに提供するメールサーバ(ここではdovecotを使います)
3. メールを送ろうとしている人が信頼できるかどうかの認証を行う認証デーモン(ここではsaslauthdを使います)
を入れる必要があります。
サーバを動かしているマシンそのもの、あるいは、家庭のLAN内のマシンからだけ送信を行うのであれば、3はなくてもいいようですが、外出先から自宅のメールを読み、それに対して「自宅サーバから」返信をしたいということはあると思います。しかしpostfixは、外部から無節操にサーバを使ってSPAMなどを送られないように、なんらかの手段で認証をしないとメール送信を受け付けないようになっているみたいです。 それをクリアするのに3が必要ということです。
とりあえず、必要なソフトをまとめてインストールしましょう。
apt-get install postfix dovecot-common dovecot-pop3d dovecot-imapd sasl2-bin
以下、各ソフトの設定方法。
dovecotの設定
/etc/dovecot/dovecot.conf をちょっと編集するだけ。
protocols = none
という行があると思う(noneじゃないかもしれない)ので、それを
protocols = imap imaps pop3 pop3s
に変更。あと、
#disable_plaintext_auth = yes
という行がある(暗号化していない認証は拒絶。ただしローカルネットワーク内の場合はその限りではない、という設定らしい。暗号化はとりあえずしないので、これはnoにしないと動かない)ので、これを
disable_plaintext_auth = no
あとは
/etc/init.d/dovecot restart
でOK。
postfixの設定
/etc/postfix/main.cf の編集が中心です。
myhostname = xxxxx ←あなたがつけた名前
になってると思うけど、そのままでもたぶん問題ないけど、ドメイン名が決まっているなら
myhostname = uayeb.com
のようにしておいたほうが。
それから、
mydestination = xxxxx, localhost.localdomain, , localhost
という行があると思いますが、この末尾にドメイン名を(バーチャルドメインで複数ドメインを管理するならすべてのドメイン名を)記載します。
mydestination = xxxxx, localhost.localdomain, , localhost, uayeb.com, ……com, ….jp 等々
あと、
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
という行があると思いますが、LAN内のPCは特権的に認証抜きで送受信ができるようにしてもよいことにするなら、たとえば192.168.1.0/24 のようにネットワークアドレスを追加します。
mynetworks = 127.0.0.0/8 192.168.1.0/24 [::ffff:127.0.0.0]/104 [::1]/128
とか。
あと、追加の設定と意味は以下のとおり。
home_mailbox = Maildir/ ←メールをmaildir形式(メールを1通ごとに1つのファイルにする方法。たぶんそのほうがいいと思う。メールのファイルはユーザーディレクトリ直下のMaildirフォルダに保存されます)
mydomain = uayeb.com ←不要かもしれないが一応。uayeb.comの部分はあなたのドメイン名。
smtpd_sasl_auth_enable = yes ←以下は、送信時にユーザー認証が成立した場合には送信を受け付けるための設定です。
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_application_name = smtpd
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes ←昔のOutlookでの不完全な認証も受け付けるためのようです
smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination
また、最近はプロバイダがOP25Bのブロックをしているので、自宅以外の場所から自宅メールサーバを使って送信を行いたい場合には、587番のSubmissionポートを使った送受信にも対応しておかないと、そもそも自宅サーバへのアクセス(25番ポート)ができない可能性がある。この対応は簡単で、/etc/postfix/master.cf の
#submission 〜
となっているところの頭の#を取って、
submission 〜
とするだけ。
最後に、postfixの再起動。
/etc/init.d/postfix restart
saslauthdの設定
上↑で用いる、ユーザー認証のためのシステム。
こちらのサイトをたいへんたいへん参考にさせていただきました。
こちらをまとめただけになりますが、
まず、 /etc/default/saslauthd の冒頭のほうにある、
start = no を
start = yes に変更。
次に、 /etc/postfix/sasl の下に smtpd.conf というファイルを作り、
pwcheck_method: auxprop
と記述。
それから、postfixへの変更は上にすでに書いたのでOK。あとは、このサーバからメールを送信するユーザーひとりひとりに対して、ユーザー名とパスワードを設定する必要があります。これには、
saslpasswd2 -c -u uayeb.com username ←uayeb.com のところはあなたのドメイン名、usernameのところはユーザー名
と入力し、パスワードを聞かれるので2回入力すればOKです。ユーザーが複数いる場合はこの作業を繰り返します。これで作られたパスワードは、/etc/sasldb2に保存されます。
最後に、Ubuntuの場合(Debianの場合?)ならではのおまじないが必要になります。Ubuntuでは、セキュリティホールなどを使ってpostfixに悪さをされないように、postfixを/var/spool/postfix にchroot(これより上に行かせない)するんだそうです。ところが、saslauthdのパスワードファイルは/etc/sasldb2 に置かれるので、postfixはこれを読みにいけない。しかも、このファイルはrootユーザーかrootグループでないと読めない。postfixは、postfixというユーザーとしてアクセスをするので、仮にsasldb2にアクセスできても中身が読めない、ということのようだ。
この回避策として、多くのサイトに、rm -r /var/run/saslauthd ……など5行で構成される手法が掲載されている。正直、私にはどういう意味なのかあまりよくわからない。そもそも、rm -rなんてことは、できればしたくない。その点、上で紹介したサイトには、そういうヤバい「削除」を伴わず、趣旨がよくわかり、3行ですむ処理方法が記載されている。以下のとおりだ。
chgrp postfix /etc/sasldb2 ←ファイル /etc/sasldb2 の所有者グループを(rootから)postfixに変更
chmod 640 /etc/sasldb2 ←640なので、rootはこのファイルを読み書きでき、グループユーザー(postfix)は読み出しのみができ、それ以外の人は読み書き禁止にする。
ln /etc/sasldb2 /var/spool/postfix/etc ←postfixがアクセス可能な/var/spool/postfix/etc内に、sasldb2のリンクを張る
これで問題なく動いているので、私はこちらをおすすめしておきます。
あとは、
/etc/init.d/saslauthd restart
で再起動すればOK。