Changes in title
+FreeBSD 12 で自宅サーバ作成 メールサーバ編その2
Changes in tags
@@ -0,0 +1,536 @@
+## はじめに
+FreeBSD 12を使用した自宅サーバの構築を行った。FreeBSD 12はリリースされて間もない状態ですが、カーネルに標準でVIMAGEが取り込まれDNSの外向きと、内向きを別々のシステム(jail+VIMAGE)が同一ホストで構築できることから採用することにしました。その時の構築手順を備忘録の意味も含め、具体的にいくつかに渡り説明する。
+
+* [基本システム編その1](https://qiita.com/Chun3/items/2f891e5993c91b58ae5c)
+ - 背景
+ - 基本のインストール
+ - 日本語環境の設定
+* [基本システム編その2](https://qiita.com/Chun3/items/1e8fe5071c4a78d37e66)
+ - セキュリティ
+ - ftpサーバ
+* [基本システム編その3](https://qiita.com/Chun3/items/e5cc6a69542153649dc0)
+ - jail
+ - 基本システム編おわり
+* [jail内基本システム編](https://qiita.com/Chun3/items/4b11b9acdd080ecdab6c)
+ - 基本の設定(jail1・jail2共通)
+* [DNS編](https://qiita.com/Chun3/items/95ad3113202d111ee53c)
+ - DNSの構築におけるこれまでの問題
+ - bind9インストール
+ - NTPサーバ
+* [Let's Encrypt編](https://qiita.com/Chun3/items/4814c25c09756690133f)
+ - Let's Encryptについて
+ - certbotのインストール
+ - 各種設定
+ - 証明書の取得
+* [Webサーバ編](https://qiita.com/Chun3/items/286e567952cd9faf279f)
+ - インストール(apache2.4・webalizer・php7.3・postgresql11.2・mysql8.0)
+ - 設定
+* [メールサーバ編](https://qiita.com/Chun3/items/dc0e176c9de4f6b4bfb8)
+ - インストール(cyrus-sasl・postfix・dovecot・procmail・pflogsumm・policyd-spf)
+ - 設定・起動
+ - spfレコード送信設定
+* [ファイルサーバ編](https://qiita.com/Chun3/items/356b7fadd7aa5280ec65)
+ - sambaの選択
+ - samba3のインストール
+* [メールサーバ編その2](https://qiita.com/Chun3/items/4c15ee889b052df67bbd)(この記事)
+ - 概要
+ - OpenDKIM
+ - OpenDMARC
+ - ClamAV (clamav-milter)
+ - Spamassasin (spamass-milter)
+
+## 概要
+メールサーバ編その2では、認証及びウイルス/ SPAMコンテンツフィルタを対象にする。postfixとの連携はメールフィルター(Milter)により行う。
+
+* 認証
+<dl>
+ <dt>DKIM</dt><dd>電子署名を使用した送信ドメイン認証</dd>
+ <dt>DMARC</dt><dd>自分ドメインを詐称するメールの処理方法を指定</dd>
+</dl>
+* ウイルス/ SPAMコンテンツ
+<dl>
+ <dt>ClamAV</dt><dd>メールサーバ用のアンチウイルス</dd>
+ <dt>Spamassasin</dt><dd>スパム(迷惑メール)をブロックするためのフィルタ</dd>
+</dl>
+
+## OpenDKIM
+### インストール
+標準オプションで使用する
+
+```
+jail1 /root # pkg install opendkim
+Updating FreeBSD repository catalogue...
+FreeBSD repository is up to date.
+All repositories are up to date.
+The following 3 package(s) will be affected (of 0 checked):
+
+New packages to be INSTALLED:
+ opendkim: 2.10.3_11
+ lua52: 5.2.4
+ unbound: 1.9.0_1
+
+Number of packages to be installed: 3
+
+The process will require 9 MiB more space.
+2 MiB to be downloaded.
+(以下省略)
+```
+
+### 設定
+#### 使用宣言
+```/etc/rc.conf
+milteropendkim_enable="YES"
+```
+
+####opendkim.confの編集
+opendkimデーモンとpostfixがsocketで通信するが、各々が違うユーザで実行することからグループで共有させるためUMaskを変更している。
+
+```/usr/local/etc/mail/opendkim.conf
+##
+## opendkim.conf -- configuration file for OpenDKIM filter
+##
+## Copyright (c) 2010-2015, The Trusted Domain Project. All rights reserved.
+##
+Canonicalization simple/simple
+Domain example.jp
+KeyFile /var/db/dkim/example.jp.private
+LogWhy yes
+Mode sv
+ReportAddress "DKIM Error Postmaster" <postmaster@example.jp>
+Selector example.jp
+SendReports yes
+Socket local:/var/run/milteropendkim/socket
+SubDomains yes
+Syslog Yes
+SyslogSuccess yes
+UMask 002
+```
+
+```sh:/etc/group
+mailnull:*:26:postfix
+```
+
+#### 認証キーの作成
+
+```
+jail1 /root # mkdir /var/db/dkim
+jail1 /root # chmod 700 /var/db/dkim
+jail1 /root # opendkim-genkey -D /var/db/dkim -d example.jp -s example.jp
+jail1 /root # chown -R mailnull:mailnull /var/db/dkim
+jail1 /root # ls -l /var/db/dkim
+total 9
+-rw------- 1 mailnull mailnull 887 Mar 9 14:08 example.jp.private
+-rw------- 1 mailnull mailnull 311 Mar 9 14:08 example.jp.txt
+```
+
+#### 公開キー設定
+dkim用公開キーなどをDNSのTXTレコードに設定する。(/var/db/dkim/example.jp.txtの内容を設定)
+
+```/usr/local/etc/namedb/master/example.jp.zone
+_domainkey IN TXT "t=y; o=~"
+example.jp._domainkey IN TXT "v=DKIM1;........." ← /var/db/dkim/example.jp.txtの内容
+_adsp._domainkey IN TXT "dkim=unknown"
+```
+
+#### postfixの設定変更
+
+```/usr/local/etc/postfix/main.cf
+# mail filter
+smtpd_milters = unix:/var/run/milteropendkim/socket
+non_smtpd_milters = $smtpd_milters
+milter_default_action = accept
+```
+
+### 起動
+
+```
+jail1 /root # service milter-opendkim start
+Starting milteropendkim.
+jail1 /root # service postfix reload
+postfix/postfix-script: refreshing the Postfix mail system
+```
+
+## OpenDMARC
+### インストール
+標準オプションで使用するが、mysql56-clientが関連付けられているので、ports collectionからインストールする。
+mysql関連以外はpkgでインストールしたいので、mysql80-clientをロックし、まずpkgでインストールする。
+
+```
+jail1 /root # pkg lock mysql80-client
+Locking mysql80-client-8.0.15
+jail1 /root # pkg install opendmarc
+Updating FreeBSD repository catalogue...
+FreeBSD repository is up to date.
+All repositories are up to date.
+The following 13 package(s) will be affected (of 0 checked):
+
+New packages to be INSTALLED:
+ opendmarc: 1.3.2_1
+ p5-HTTP-Message: 6.18
+ p5-LWP-MediaTypes: 6.02_1
+ p5-HTTP-Date: 6.02_1
+ p5-URI: 1.76
+ p5-IO-HTML: 1.001_1
+ p5-Encode-Locale: 1.05
+ libspf2: 1.2.10_2
+ p5-Switch: 2.17_1
+ p5-Filter: 1.59
+ p5-DBI: 1.642
+ p5-DBD-mysql: 4.050
+ mysql56-client: 5.6.43
+
+Number of packages to be installed: 13
+
+The process will require 42 MiB more space.
+3 MiB to be downloaded.
+(途中省略)
+pkg: mysql80-client-8.0.15 conflicts with mysql56-client-5.6.43 (installs files into the same place). Problematic file: /usr/local/bin/mysql
+```
+
+mysql56-client: 5.6.43がインストールされずにその他はインストールされる。
+次にports collectionからインストールする。
+
+```
+jail1 /root # portinstall opendmarc
+[Reading data from pkg(8) ... - 166 packages found - done]
+---> Installing 'opendmarc-1.3.2_1' from a port (mail/opendmarc)
+---> Building '/usr/ports/mail/opendmarc'
+===> Cleaning for opendmarc-1.3.2_1
+(途中省略)
+```
+
+
+
+```
+[jail1] Installing opendmarc-1.3.2_1...
+===> Cleaning for p5-DBD-mysql-4.050
+===> Cleaning for p5-Devel-CheckLib-1.13
+===> Cleaning for opendmarc-1.3.2_1
+```
+
+3本のアプリがインストールを完了する。
+
+### 設定
+#### 使用宣言
+2行目のソケットの設定は、opendmarc.confで定義するが、rc.dにあるスタートアップスクリプトでinet接続が引数で指定されるためここでも宣言する。
+
+```/etc/rc.conf
+opendmarc_enable="YES"
+opendmarc_socketspec="/var/run/opendmarc/socket"
+```
+
+#### opendmarc.confの編集
+/usr/local/etc/mail/にサンプルファイルがあるのでコピーして編集する。
+
+```/usr/local/etc/mail/opendmarc.conf
+## opendmarc.conf -- configuration file for OpenDMARC filter
+##
+## Copyright (c) 2012-2015, The Trusted Domain Project. All rights reserved.
+
+AutoRestart ture
+BaseDirectory /var/run/opendmarc
+IgnoreHosts /usr/local/etc/mail/opendmarc_ignore.hosts
+IgnoreMailFrom example.jp
+Socket local:/var/run/opendmarc/socket
+SPFSelfValidate true
+UMask 002
+```
+
+#### IgnoreHostsの編集
+
+```/usr/local/etc/mail/opendmarc_ignore.hosts
+localhost
+::1
+2001:db8::/32
+127.0.0.0/8
+192.168.1.0/24
+```
+
+#### postfixの設定変更
+3行目のみ追加
+
+```/usr/local/etc/postfix/main.cf
+# mail filter
+smtpd_milters =
+ unix:/var/run/milteropendkim/socket
+ unix:/var/run/opendmarc/socket
+
+non_smtpd_milters = $smtpd_milters
+milter_default_action = accept
+```
+
+#### DNSにTXTレコード追加
+
+```/usr/local/etc/namedb/master/example.jp.zone
+_dmarc IN TXT "v=DMARC1; p=none; sp=none; ri=3600; rua=mailto:postmaster@example.jp; ruf=mailto:postmaster@example.jp"
+```
+
+### 起動
+
+```
+jail1 /root # service opendmarc start
+Starting opendmarc.
+jail1 /root # service postfix restart
+postfix/postfix-script: stopping the Postfix mail system
+postfix/postfix-script: starting the Postfix mail system
+```
+
+## ClamAV
+clamav-milterを使用する
+
+### インストール
+
+```
+jail1 /root # pkg install clamav-milter
+Updating FreeBSD repository catalogue...
+FreeBSD repository is up to date.
+All repositories are up to date.
+Updating database digests format: 100%
+The following 7 package(s) will be affected (of 0 checked):
+
+New packages to be INSTALLED:
+ clamav-milter: 0.101.1,1
+ curl: 7.64.0_1
+ libltdl: 2.4.6
+ unzoo: 4.4_2
+ libmspack: 0.9.1
+ arj: 3.10.22_7
+ arc: 5.21p
+
+Number of packages to be installed: 7
+
+The process will require 9 MiB more space.
+3 MiB to be downloaded.
+(以下省略)
+```
+
+### 設定
+#### 使用宣言
+
+```sh:/etc/rc.conf
+clamav_clamd_enable="YES"
+clamav_freshclam_enable="YES"
+clamav_milter_enable="YES"
+```
+
+#### freshclam.confの設定
+
+```sh:/usr/local/etc/freshclam.conf
+##
+## Example config file for freshclam
+## Please read the freshclam.conf(5) manual before editing this file.
+##
+DatabaseDirectory /var/db/clamav
+UpdateLogFile /var/log/clamav/freshclam.log
+LogFacility LOG_MAIL
+PidFile /var/run/clamav/freshclam.pid
+DatabaseOwner clamav
+DatabaseMirror database.clamav.net
+NotifyClamd /usr/local/etc/clamd.conf
+```
+
+#### clamd.confの設定
+
+```sh:/usr/local/etc/clamd.conf
+##
+## Example config file for the Clam AV daemon
+## Please read the clamd.conf(5) manual before editing this file.
+##
+LogFile /var/log/clamav/clamd.log
+PidFile /var/run/clamav/clamd.pid
+DatabaseDirectory /var/db/clamav
+LocalSocket /var/run/clamav/clamd.sock
+FixStaleSocket yes
+User clamav
+ScanMail yes
+```
+
+#### clamav-milter.confの設定
+
+```sh:/usr/local/etc/clamav-milter.conf
+##
+## Example config file for clamav-milter
+##
+MilterSocket /var/run/clamav/clmilter.sock
+FixStaleSocket yes
+User clamav
+PidFile /var/run/clamav/clamav-milter.pid
+ClamdSocket unix:/var/run/clamav/clamd.sock
+MaxFileSize 100M
+AddHeader Replace
+ReportHostname mail.example.jp
+VirusAction /usr/local/bin/my_infected_message_handler
+LogFacility LOG_MAIL
+LogInfected Basic
+```
+
+#### my_infected_message_handlerの作成
+
+```sh:/usr/local/sbin/my_infected_message_handler
+#!/bin/sh
+# REF: http://d.hatena.ne.jp/tak_yah/touch/20120229/1330481208
+#
+
+cat << EOM | mail -s "Virus Found by clamav-milter" root
+
+-------------------------------------------------------
+Virus Mail Information
+-------------------------------------------------------
+Queue-id: $2
+Message-id: $6
+Date: $7
+Subject: $5
+Sender: $3
+Destination: $4
+Virus Name: $1
+-------------------------------------------------------
+
+EOM
+```
+
+#### postfixの設定変更
+5行目のみ追加
+
+```/usr/local/etc/postfix/main.cf
+# mail filter
+smtpd_milters =
+ unix:/var/run/milteropendkim/socket
+ unix:/var/run/opendmarc/socket
+ unix:/var/run/clamav/clamav-milter.sock
+
+non_smtpd_milters = $smtpd_milters
+milter_default_action = accept
+```
+
+### 最新の定義ファイルを取得
+
+```
+jail1 /root # freshclam
+ClamAV update process started at Sat Mar 9 20:22:04 2019
+Downloading main.cvd [100%]
+main.cvd updated (version: 58, sigs: 4566249, f-level: 60, builder: sigmgr)
+Downloading daily.cvd [100%]
+daily.cvd updated (version: 25383, sigs: 1507935, f-level: 63, builder: raynman)
+Downloading bytecode.cvd [100%]
+bytecode.cvd updated (version: 328, sigs: 94, f-level: 63, builder: neo)
+Database updated (6074278 signatures) from database.clamav.net (IP: 104.16.218.84)
+WARNING: Clamd was NOT notified: Can't connect to clamd through /var/run/clamav/clamd.sock: No such file or directory
+```
+
+### 起動
+
+```
+jail1 /root # service clamav-clamd start
+Starting clamav_clamd.
+jail1 /root # service clamav-milter start
+Waiting for clamd socket..
+Starting clamav_milter.
+Waiting for clamav-milter socket..
+jail1 /root # service clamav-freshclam start
+Starting clamav_freshclam.
+jail1 /root # service postfix reload
+postfix/postfix-script: refreshing the Postfix mail system
+```
+
+## Spamassasin
+spamass-milterを使用する
+
+### インストール
+
+```
+jail1 /root # pkg install spamass-milter
+Updating FreeBSD repository catalogue...
+FreeBSD repository is up to date.
+All repositories are up to date.
+The following 29 package(s) will be affected (of 0 checked):
+
+New packages to be INSTALLED:
+ spamass-milter: 0.4.0_3
+ spamassassin: 3.4.2_3
+ p5-HTML-Parser: 3.72
+ p5-HTML-Tagset: 3.20_1
+ p5-Net-IDN-Encode: 2.500
+ p5-IO-Socket-SSL: 2.060
+ p5-Mozilla-CA: 20180117
+ p5-Net-SSLeay: 1.85
+ p5-IO-Socket-INET6: 2.72_1
+ p5-Socket6: 0.29
+ p5-Crypt-OpenSSL-RSA: 0.31
+ p5-Crypt-OpenSSL-Random: 0.15
+ p5-Crypt-OpenSSL-Bignum: 0.09
+ gnupg1: 1.4.23_1
+ p5-Net-CIDR-Lite: 0.21_1
+ p5-NetAddr-IP: 4.079
+ p5-Mail-SPF: 2.9.0_4
+ p5-Error: 0.17027
+ p5-Net-DNS-Resolver-Programmable: 0.009
+ p5-Net-DNS: 1.19,1
+ p5-Digest-HMAC: 1.03_1
+ p5-Mail-DKIM: 0.54
+ p5-Mail-Tools: 2.19
+ p5-TimeDate: 2.30_2,1
+ p5-Net-DNS-Resolver-Mock: 1.20171219
+ p5-Net-LibIDN: 0.12_4
+ libidn: 1.34_1
+ re2c: 0.14.3
+ p5-Encode-Detect: 1.01_1
+
+Number of packages to be installed: 29
+
+The process will require 15 MiB more space.
+4 MiB to be downloaded.
+(以下省略)
+```
+
+### 設定
+#### 使用宣言
+
+```sh:/etc/rc.conf
+spamd_enable=YES
+spamass_milter_enable="YES"
+spamass_milter_user="spamd"
+spamass_milter_group="spamd"
+spamass_milter_socket="/var/run/spamass-milter/spamass-milter.sock"
+spamass_milter_socket_owner="spamd"
+spamass_milter_socket_group="mail"
+spamass_milter_socket_mode="660"
+spamass_milter_localflags="-u spamd -- -u spamd"
+```
+
+#### postfixの設定変更
+6行目のみ追加
+
+```/usr/local/etc/postfix/main.cf
+# mail filter
+smtpd_milters =
+ unix:/var/run/milteropendkim/socket
+ unix:/var/run/opendmarc/socket
+ unix:/var/run/clamav/clamav-milter.sock
+ unix:/var/run/spamass-milter/spamass-milter.sock
+
+non_smtpd_milters = $smtpd_milters
+milter_default_action = accept
+```
+
+### ルールファイルの更新
+
+```
+jail1 /root # sa-update
+gpg: WARNING: using insecure memory!
+gpg: please see http://www.gnupg.org/documentation/faqs.html for more information
+```
+
+### 起動
+
+```
+jail1 /root # service sa-spamd start
+Starting spamd.
+jail1 /root # mkdir /var/run/spamass-milter
+jail1 /root # chown spamd:spamd /var/run/spamass-milter
+jail1 /root # service spamass-milter start
+Starting spamass_milter.
+jail1 /root # service postfix reload
+postfix/postfix-script: refreshing the Postfix mail system
+jail1 /root # service postfix reload
+postfix/postfix-script: refreshing the Postfix mail system
+```
