晴耕雨読

working in the fields on fine days and reading books on rainy days

Postfix & Dovecot のサーバ構築

CentOS で Postfix と Dovecot を使って smtp と pop3 サーバを構築する方法について説明します。

Postfix で SMTP サーバ

まずは smtp サーバを構築する方法について。 はじめに Postfix のインストールをします。

~]# yum install postfix

設定ファイルは /etc/postfix/ にあるので、バックアップを取っておいて main.cf 編集します。

~]# cd /etc/postfix
~]# cp main.cf main.cf.bak
~]# vim main.cf

/etc/postfix/main.cf の編集

myhostname = example.co.jp   # メールサーバのホスト名
inet_interfaces = all        # 全てのメールを受け取る(外部・内部からのメール)
mynetworks = 127.0.0.0/8     # ローカルからのメールのみ転送
home_mailbox = Maildir/      # メールの保存場所と保存形式(「/」は必須)

メールの保存形式には2つあり、全てのメールを1つのファイルに保存する形式と、1メール毎に1つのファイルに保存する形式があります。 1メール毎に1つのファイルに保存する方がメールの管理がしやすい(古いメールから削除することができる)ので、home_mailbox = Maildir/ とするのが一般的です。

最後に Postfix を起動します。

~]# systemctl start postfix

メールの送信は telnet で確認できます。 筆者の環境は MacOS の VirtualBox で CentOS を起動しているので、 ポートフォーワーディングでホストポートの 25 番をゲストポートの 25 番にしてから、 MacOS上のターミナルで telnet で接続後、helo, mail from, … と入力していきます。

~]$ telnet localhost 25
helo a
mail from: test@example.com
rcpt to: root@example.co.jp
data
subject: test
hello!
.
quit

送信後に、サーバ側の /root/Maildir/new/ にメールが入っていれば成功です。 (test@example.co.jp 宛に送信した場合は、/home/test/Maildir/new/ に入ります)

上手く送信できない場合は、次の項目を確認してください。

  • ss -talpn コマンドで smtp(プログラム名は master)が LISTEN しているか
  • Firewall で tcp/25 が開いているか
  • メールサーバの /var/log/maillog にエラーは表示されていないか
  • SELinux で拒否されていないか


Dovecot で POP3 サーバ

次に pop3 サーバを構築する方法について。 はじめに Dovecot のインストールをします。 dovecot の他に clucene-core もインストールされます。

~]# yum install dovecot

設定ファイルは /etc/dovecot/ にあるので、バックアップを取っておいて編集していきます。

/etc/dovecot/conf.d/10-mail.conf

mail_location = maildir:~/Maildir   # メールの保存場所

/etc/dovecot/conf.d/10-auth.conf

disable_plaintext_auth = no         # 平文認証を無効化しない

/etc/dovecot/conf.d/10-ssl.conf

ssl = no                            # SSL/TLSを使用しない

安全性ガン無視ですので、安全な通信がしたい場合は

  • 証明書 : /etc/pki/dovecot/certs/dovecot.pem
  • 秘密鍵 : /etc/pki/dovecot/private/dovecot.pem

をそれぞれ配置してから設定を変更する必要があります。

最後に dovecot を起動します。

~]# systemctl start dovecot

dovecot は root でのログインができないので、適当に test ユーザを作っておきます。

~]# useradd test
~]# passwd test

まずは test ユーザ宛てにメールを送信

~]$ telnet localhost 25
helo a
mail from: a@a.a
rcpt to: test@example.co.jp
data
subject: foobar
hello, foobar
.
quit

続いて、pop3 は 100 番を使うので同様にポートフォーワードして、ホスト側から telnet を使って受信します。 pass では test ユーザのパスワードを入力します(平文認証が許可されているので、パスワードは平文になります)。

~]$ telnet localhost 110
user test
pass test
list

list でメールの一覧が番号と共に表示されます。 メッセージの取り出しは retr <番号> です。

retr 1
+OK 284 octets
Return-Path: <a@a.a>
X-Original-To: test@example.co.jp
Delivered-To: test@example.co.jp
Received: from a (gateway [10.0.2.2])
	by example.co.jp (Postfix) with SMTP id 1D5898BED15
	for <test@example.co.jp>; Thu,  7 Mar 2019 19:14:12 +0900 (JST)
subject: foobar

hello, foobar
.

読み終わったら quit で終了します。

参考文献