Ubuntu16.04上でPostfixを用いたローカル専用メールサーバを構築する

はじめに_

メールをやりとりするシステムを開発するために、ローカル上で動くメールサーバをPostfixを用いて作成する。

Postfixのインストール_

ホスト名を確認する。

% more /etc/hosts
127.0.0.1	localhost
127.0.1.1	gotoh-virtual-machine

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

Postfixのインストール時に「ローカル専用」を設定する。FQDNについてはデフォルトで良い。今回は「gotoh-virtual-machine」とした。

% sudo aptitude install postfix

mailxのインストール_

MTAであるmailxコマンドをインストールする。

% sudo aptitude install mailutils
% which mail
/usr/bin/mail

Ubuntu16.04上にいるユーザにメールを送ってみる。今回はユーザgotohがいるのでgotohにメールを送ってみる。

% mail gotoh@gotoh-virtual-machine
Cc: [Enterキー]
Subject: Test
Hello, this is test.
from Yuichi Goto
[Ctrl-D]

メールは Postfix経由で /var/mail/gotoh に保存される。

% tail /var/mail/gotoh

POP3サーバ(dovecot)のインストールと設定_

% sudo aptitude install dovecot-core dovecot-pop3d
% cd /etc/dovecot
% sudo vi dovecot.conf

localhost(127.0.0.1)からのみアクセスできるように変更する。

listen = 127.0.0.1

dovecotを再起動する。

sudo systemctl restart dovecot

Thunderbirdの設定_

メーラーのThunderbirdでメールを送ったり、メールを受信したりできるようにする。Thunderbirdはデフォルトでインストールされている。Thunderbirdを起動する。

Thunderbirdでメールアカウントの設定を行う。

  1. 最初のウィンドウで「メールアドレス」を「gotoh@gotoh-virtual-machine」(自分の環境に合わせること)、「パスワード」をログインパスワードに設定する。その後「続ける」をクリックする。
  2. 「受信サーバ」を「POP3」、「サーバのホスト名」を受信サーバおよび送信サーバともに「localhost」とする。また、「SSL」を「接続の保護なし」とする。その後「再テスト」をクリックする。
  3. 「完了」をクリックする。
  4. 警告のウィンドウがでるが「接続する上での危険性を理解しました」をチェックし、「完了」をクリックする。
  5. 「受信」をクリックし、さきほどのmailコマンドで送信したメールを受信する
  6. 同様にメールを「gotoh@gotoh-virtual-machine」(自分の環境に合わせること)に送り、届くことを確認する

Postfixにて非ユーザー宛のメールを受信して任意のプログラムに渡す_

現時点での設定を確認する。

% postconf -d | grep ^local_recipient_maps
local_recipient_maps = proxy:unix:passwd.byname $alias_maps

% postconf -d | grep ^alias_maps          
alias_maps = hash:/etc/aliases, nis:mail.aliases

% postconf -d | grep ^default_privs
default_privs = nobody

上述の3つのパラメータを変更する。

% cd /etc/postfix
% sudo cp -p main.cf main.cf.org
% vi main.cf

alias_maps と default_privsを以下のように変更する。

# 既存の記述に追加
alias_maps = hash:/etc/aliases, regexp:/etc/postfix/application.regexp

# 行ごと追記
default_privs = gotoh

変更したら、正規表現を書くファイルを用意する。

% sudo touch application.regexp

Postfixを再起動し、設定が変更されていることを確認する。

% sudo postfix reload
% postconf | grep ^alias_maps
alias_maps = hash:/etc/aliases, regexp:/etc/postfix/application.regexp

% postconf | grep ^default_privs 
default_privs = gotoh

メール振り分けの例_

/etc/postfix/application.regexp を編集する。たとえば、「数字4桁」-「英数字3文字」-d@foo.bar.jpというメールアドレスを受けとり、/tmp/mail-spool.txtというファイルに保存したければ以下のように記述する。ポイントは@の後ろが省略されることがあるので、「(@.*)?$」を記述すること。

以下の1行目が上述の処理、2行目は正規表現にひっかからないとき無視するように設定している。

/^[0-9]{4}-[0-9a-zA-Z]{3}-d(@.*)?$/ "| /bin/cat >> /tmp/mail-spool.txt"
/^.*(@.*)?$/ /dev/null

Thunderbirdで1234-abc-d@gotoh-virtual-machine(@の後ろは各自の環境に応じて変えること)にメールを送ってみる。

メールログで確認する。

% tail /var/log/mail.log
〜省略〜
Dec 25 10:07:46 gotoh-virtual-machine postfix/local[9570]: 70682B1C11: to=<1234-abc-d@gotoh-virtual-machine>, relay=local, delay=0.07, delays=0.06/0.01/0/0, dsn=2.0.0, status=sent (delivered to command:  /bin/cat >> /tmp/mail-spool.txt)
〜省略〜

当該ファイルを確認する。

% ls /tmp/mail-spool.txt 
/tmp/mail-spool.txt

% more /tmp/mail-spool.txt 
From owner-1234-abc-d@gotoh-virtual-machine.localdomain  Sun Dec 25 10:07:46 201
6
Return-Path: <owner-1234-abc-d@gotoh-virtual-machine.localdomain>
Delivered-To: 1234-abc-d@gotoh-virtual-machine
Received: from [127.0.0.1] (localhost [127.0.0.1])
	by gotoh-virtual-machine.localdomain (Postfix) with ESMTPS id 70682B1C11
	for <1234-abc-d@gotoh-virtual-machine>; Sun, 25 Dec 2016 10:07:46 +0900 
(JST)
To: 1234-abc-d@gotoh-virtual-machine
From: Yuichi Goto <gotoh@gotoh-virtual-machine>
Subject: =?UTF-8?B?44OG44K544OI?=
Message-ID: <77334061-9260-aaf2-b5a5-881335b27533@gotoh-virtual-machine>
Date: Sun, 25 Dec 2016 10:07:46 +0900
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101
 Thunderbird/45.5.1
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-2022-jp; format=flowed; delsp=yes
Content-Transfer-Encoding: 7bit

$B%F%9%H%a!<%k

メールがまるごと保存されているのがわかる。

戻る_