FreeNAS 9.3 jail に sendmail を設定・1

NL54L + FreeNAS に jail を新しく作って MTA を動かします。平たく言うとメールサーバを FreeNAS jail で立てる、と。

メールサーバみたいな基本的なサービスは母艦の方に立てるのが筋だと思います。が、母艦は FreeNAS だし、UNIXの本来の哲学「大鑑巨砲主義の否定」に立って、独立した環境にしたいと考えたのでした。歪んだ理解ですかね？まぁいいや。

MTA は sendmail を選択。理由は複数。

* FreeBSD のデフォルトである
* 技術で尊敬できる友人の言葉: 「MTA は sendmail で十分！」
* sendmail でも Maildir 形式を扱えるらしい →[Sendmail で Maildir を使う](http://ya.maya.st/mail/sendmail-maildir.html)

という訳で、今更ながら sendmail を勉強しながら設定してみました。とりあえず、ごく基本的な設定で、電子メールの受け答えが出来るようになる所まで。

# 参考文献

* [FreeBSD ハンドブック - 第20章 電子メール - 20.3. sendmail の設定](https://www.freebsd.org/doc/ja_JP.eucJP/books/handbook/sendmail.html) : 情報は可能な限り一次情報に近い所を参照。
* [sendmail設定(1)必要最小限の設定で使ってみる](http://server-setting.info/centos/sendmail_1_simple_setting.html) : 一次情報を踏まえた上で、わかり易い解説を参照。
* [telnetでメール送信](http://ash.jp/net/telnet_smtp.htm) : メール送受信のテスト用に telnet を使います。SMTPプロトコルについては山のように説明がありますのでお好きなサイトを。このサイトは送信例だけを最小限に例示してくれて、しかもwebページとして軽いです。この程度は丸暗記しとけって意見は正論ですが…間が空いてしまうとどうしても…


# 導入

jail 構築後、インストールは不要。 FreeNAS にはデフォルトで入っています。但しデーモンとして起動はしていません。

まずは sendmail の設定、それからコンパイルして起動です。が、メールの格納ディレクトリとしては、 FreeNAS 母艦の方でストレージを用意したい。この辺から段々怪しくなってきますな。

## jail へのストレージの追加

FreeNAS のメインメニューから、適当なデータセットを作ります。

* 名前はとりあえず ```mail``` とか。
* クォータは0、即ち容量制限無し。

それから、新規に作成した jail へ、そのデータセットを割り当てます。場所は ```/media/mail``` とします。こんな所に凝っても管理しにくくなるだけです。って、いつも下らない凝り方で散々苦労するお前が言うか:sweat_smile: >自分

そして基本的な権限の設定。

```
# ls -l /media
total 1
drwxr-xr-x  2 mailnull  mailnull  3 Jan 31 03:04 mail
```

## 設定ファイル

### ```/etc/mail/access```

アクセス定義です。

```
To:mydomain.example.com  OK
Connect:10.0.1           RELAY
```

example.com は例示用に予約されているドメインです。自分のドメインに置き換えてください。

私の家庭内LANのIPアドレスは 10.0.1.* ですので、それに合わせて中継を設定します。

### ```/etc/mail/aliases```

メールアドレスの別名定義です。 root を自分 (katz) 宛にする設定を末尾に追加しました。また、ユーザーはシステムで定義する本物のアカウントではありません。偽物です。仮想ユーザ…って用語はありませんよね、何と言うんだろう。勉強不足でスミマセン。

```
# cd /etc/mail
# mv aliases aliases.org
# cp -p aliases.org aliases
# vi aliases
# diff -u0 aliases.org aliases
--- aliases.org 2014-07-11 08:50:16.000000000 +0900
+++ aliases     2016-01-30 18:40:27.880695923 +0900
@@ -79,0 +80,4 @@
+
+# 2016.01.30. by Katz
+root:          katz
+katz:          /media/mail/katz
```

### ```/etc/mail/local-host-names```

このサーバで受信対象となるドメインを登録します。 ```/etc/mail/access``` で OK としたドメインですね。

```
mydomain.example.com
```

### /etc/mail/virtusertable, /etc/mail/mailertable

この２つはとりあえず不要という事で。

## 起動

```
# cd /etc/mail
# make
cp freebsd.mc mymachine.mc
/usr/bin/m4 -D_CF_DIR_=/usr/share/sendmail/cf/
/usr/share/sendmail/cf/m4/cf.m4
 mymachine.mc > mymachine.cf
cp freebsd.submit.mc mymachine.submit.mc
/usr/bin/m4 -D_CF_DIR_=/usr/share/sendmail/cf/
/usr/share/sendmail/cf/m4/cf.m4
 mymachine.submit.mc > mymachine.submit.cf
/usr/sbin/makemap hash access.db < access
chmod 0640 access.db
/usr/sbin/sendmail -bi -OAliasFile=/etc/mail/aliases
/etc/mail/aliases: 30 aliases, longest 10 bytes, 305 bytes total
chmod 0640 /etc/mail/aliases.db
```

rc.conf を修正します。

```
--- rc.conf.org 2016-01-30 16:03:46.622695912 +0900
+++ rc.conf     2016-01-30 18:34:05.375695656 +0900
@@ -3,4 +3 @@
-sendmail_enable="NO"
-sendmail_submit_enable="NO"
-sendmail_outbound_enable="NO"
-sendmail_msp_queue_enable="NO"
+sendmail_enable="YES"
```

sendmail 起動。

```
# /etc/rc.d/sendmail start
Starting sendmail.
```

## Firewallなど

メールの為の穴を開け、外からのメールを受信できるようにします。ウチの防火壁はネットの入り口に別の機械を置いて設定しています。またメール自体も、外部のサーバを通ってそこから転送する仕組にしています。というわけで詳細は省略。

# 実験

適当なスマホか何かを使用し、今回のメールサーバで受信されるような宛先でメール送信。うまく受信できると、mbox形式で ```/media/mail/katz``` にメールが追記されます。

更に別PCから telnet で接続し、「外」を通って受信するようにメール送信。手順の詳細は省略。最初に参考文献として挙げたサイトを参照。mboxに受信できたメールのヘッダを見れば経路がわかります。何事も無かった事を確認。

# 次は

次は IMAP4 サーバを立てます。そこでlmtpサーバを設定してローカル配送をさせます。