OpenSMTPDとは
OpenSMTPDはOpenBSDプロジェクトのうちの一部として開発されているSMTPデー
モンで、OpenBSDの標準システムに含まれており、またLinux等への移植性も確
保されている。
今回は、Arch Linux上のOpenSMTPDを用いて自宅ローカルネットワークからの
メールをGmailのSMTPサーバを経由して送信できるようにする。
OpenSMTPDのインストール
ArchLinuxのOpenSMTPDパッケージはAURにあるので、yaourtを用いてビルドし
インストールする。特にPKGBUILDの編集などは必要ないようだ。
$ yaourt -S opensmtpd
インストールされる全ファイルの一覧は以下の通りである。軽量・安全・簡単を
売りにしているだけあって、ファイル数は少なく抑えられている。
[miku@test mail]$ yaourt -Ql opensmtpd
opensmtpd /etc/
opensmtpd /etc/mail/
opensmtpd /etc/mail/smtpd.conf
opensmtpd /etc/rc.d/
opensmtpd /etc/rc.d/smtpd
opensmtpd /usr/
opensmtpd /usr/bin/
opensmtpd /usr/bin/mailq
opensmtpd /usr/bin/newaliases
opensmtpd /usr/lib/
opensmtpd /usr/lib/systemd/
opensmtpd /usr/lib/systemd/system/
opensmtpd /usr/lib/systemd/system/smtpd.service
opensmtpd /usr/libexec/
opensmtpd /usr/libexec/mail.local
opensmtpd /usr/libexec/opensmtpd-portable/
opensmtpd /usr/libexec/opensmtpd-portable/makemap
opensmtpd /usr/sbin/
opensmtpd /usr/sbin/makemap
opensmtpd /usr/sbin/smtpctl
opensmtpd /usr/sbin/smtpd
opensmtpd /usr/share/
opensmtpd /usr/share/man/
opensmtpd /usr/share/man/man5/
opensmtpd /usr/share/man/man5/smtpd.conf.5.gz
opensmtpd /usr/share/man/man8/
opensmtpd /usr/share/man/man8/makemap.8.gz
opensmtpd /usr/share/man/man8/newaliases.8.gz
opensmtpd /usr/share/man/man8/smtpctl.8.gz
opensmtpd /usr/share/man/man8/smtpd.8.gz
smtpd.confの編集
デフォルトのsmtpd.confは以下のようになっている。設定ファイルの形式は、
pf.conf等に似ている。127.0.0.1でlistenしているため、内部へのmbox形式の
メール配送と外部へのメール送信のリレーのみを行うようになっている。
listenするインターフェース又はネットワークを10.0.0.0/8等に変更すれば、
LAN内のホストからの要求も受け付けるようになる。この際、accept from 〜等で
ネットワーク毎にルールを設定することもできる。
# $OpenBSD: smtpd.conf,v 1.2 2009/11/03 22:32:10 gilles Exp $
# This is the smtpd server system-wide configuration file.
# See smtpd.conf(5) for more information.
# XXX try to find a portable way to get the IP interface
#listen on lo0
listen on 127.0.0.1
map "aliases" { source db "/etc/mail/aliases.db" }
accept for local alias aliases deliver to mbox
accept for all relay
しかし、このままでは内部への配送は正しく行われるが、外部へのリレーは利
用しているプロバイダや回線の契約によってはOP25Bにより正しく行われない可
能性がある。そこで、GmailのSMTPサーバを経由し外部へのメール送信を行う
ように設定を変更する。
Gmailでは、STARTTLSを用いた認証を行うことでSMTPサーバを利用できる。
サーバホスト名はsmtp.gmail.com、ポート番号は587、アカウント名は"gmail
アカウント@gmail.com"、パスワードはGmailのものを用いる。
以上の変更点を適用したsmtpd.confは以下のようになった。
listen on lo
map "aliases" { source db "/etc/mail/aliases.db" }
map "secrets" { source db "/etc/mail/secrets.db" }
accept for local alias "aliases" deliver to mbox
accept from all for all relay via tls+auth://smtp.gmail.com:587 auth "secrets"
この他にも、Gmailのユーザ名とパスワードを保持刷るためのファイル
/etc/mail/secrets.dbが必要になる。このファイルはプレーンテキストで以下
のように書かれた/etc/mail/secretsを、makemapコマンドを用いて変換したも
のである。
smtp.gmail.com Gmailのアカウント名@gmail.com:Gmailのパスワード
このsecretsとsecrets.dbのパーミッションは640、オーナーはroot:_smtpdに
設定する。
smtpdの起動
smtpdの動作を確認するため、まずはコマンドラインから-d(Do not
daemonize)と-v(verbose output)オプションを付けて起動する。
試しにメールを送信してみる。
[miku@test ~]$ telnet localhost 25
Trying ::1...
Connected to localhost.
Escape character is '^]'.
220 test.k.hachune.net ESMTP OpenSMTPD
EHLO hachune.net
250-test.k.hachune.net Hello hachune.net [IPv6:::1], pleased to meet
you
250-8BITMIME
250-ENHANCEDSTATUSCODES
250-SIZE 18446744073709551615
250 HELP
MAIL FROM:
250 2.1.0 Sender ok
RCPT TO:
250 2.0.0 Recipient ok
DATA
354 Enter mail, end with "." on a line by itself
Subject: SMTPD Test
From: Miku Hachune
To: Phenomer
Date: Thu, 13 Sep 2012 17:29:26 +0900
mikumiku
.
QUIT
メールが正しく届いていればOK、もし届いていないようであればmailqや端末
上のログを確認する。
このままOpenSMTPDを使い続ける場合は、/etc/rc.confのDAEMONSにsmtpdを追
加しておく。
参考
OpenSMTPD
http://www.opensmtpd.org/
その他のメール クライアントの設定 - Gmail ヘルプ
https://support.google.com/mail/bin/answer.py?hl=ja&answer=78799