## CentOS 8へインストール CentOS 8へインストール — CentOS 8へのmilter managerのインストール方法 |

## このドキュメントについて

CentOS 8に特化したmilter managerのインストール方法について説明します。 CentOSに依存しない一般的な インストール情報は インストール を見てください。

CentOSのバージョンは8.3を想定しています。また、root権限での実行はsudo を使用することを想定しています。sudoを利用していない場合はsuなどroot権 限で実行してください。

## パッケージのインストール

MTAは標準でインストールされているPostfixを利用することとします。

milterはspamass-milter、clamav-milter、milter-greylistを使用することと します。各milterはEPELにあるものを利用します。そのため、EPELを有効にし ます。

    % sudo dnf install -y epel-release

EPELを有効にしたらmilterをインストールします。

    % sudo dnf install -y spamass-milter-postfix clamav-scanner-systemd clamav-update clamav-milter clamav-milter-systemd milter-greylist

また、グラフ作成用にRRDtoolもインストールします。

    % sudo dnf install -y rrdtool

## milter managerパッケージのインストール

milter managerはdnfでインストールできます。

まず、dnfリポジトリを登録します。

    % curl -s https://packagecloud.io/install/repositories/milter-manager/repos/script.rpm.sh | sudo bash

参考: <URL:https://packagecloud.io/milter-manager/repos/install>

`ruby:3.0` モジュールを有効にします。

    % sudo dnf module -y enable ruby:3.0

登録が完了したらmilter managerをインストールできます。

    % sudo dnf install -y milter-manager

## 設定

milterの基本的な設定方針は以下の通りです。

必要のない配送遅延をできるだけ抑えるため、milter-greylistは S25R にマッチする ときのみ適用します。しかし、これはmilter-managerが自動で行う ため、特に設定する必要はありません。

SELinux を有効にしたまま milter-manager を使用するためには多くの設定を 変更する必要があるため、ここでは SELinux のポリシーモジュールのうち postfix と milter を無効にして設定を進めることにします。

    % sudo semodule -d postfix
    % sudo semodule -d milter

### spamass-milterの設定

まず、spamdの設定をします。

デフォルトの設定ではスパム判定されたメールは件名に「[SPAM]」 が追加されます。もし、これが嫌な場合は /etc/mail/spamassassin/local.cfを以下のように変更します。

変更前:

    rewrite_header Subject [SPAM]

変更後:

    # rewrite_header Subject [SPAM]

また、スパム判定された場合のみ、その詳細をヘッダに追加するよ うにする場合は以下を追加します。

    remove_header ham Status
    remove_header ham Level

システム起動時にspamdを起動するようにします。

    % sudo systemctl enable spamassassin

spamdを起動します。

    % sudo systemctl start spamassassin

spamass-milterは以下のように設定します。

- 本文変更機能を無効にする。

- スコア15以上で拒否する。

/etc/sysconfig/spamass-milterを以下のように変更します。

変更前:

    #EXTRA_FLAGS="-m -r 15"

変更後:

    EXTRA_FLAGS="-m -r 15"

システム起動時にspamass-milterを起動するようにします。

    % sudo systemctl enable spamass-milter

spamass-milterを起動します。

    % sudo systemctl start spamass-milter

### clamav-milterの設定

ClamAVで使用するウィルス定義を自動更新する設定をします。

/etc/freshclam.confを次のように変更します。「Example」はコメントアウト し、「NotifyClamd」はコメントを外し値を変更しています。それ以外の項目 はコメントを外しています。

変更前:

    Example
    #LogFacility LOG_MAIL
    #NotifyClamd /path/to/clamd.conf

変更後:

    #Example
    LogFacility LOG_MAIL
    NotifyClamd /etc/clamd.d/scan.conf

最初は手動でfreshclamを実行します。

    % sudo freshclam

clamdの設定をします。

/etc/clamd.d/scan.confを次のように変更します。「Example」はコメントア ウトし、それ以外の項目はコメントを外しています。

変更前:

    Example
    #LogFacility LOG_MAIL
    #LocalSocket /run/clamd.scan/clamd.sock

変更後:

    #Example
    LogFacility LOG_MAIL
    LocalSocket /run/clamd.scan/clamd.sock

システム起動時にclamdを起動するようにします。

    % sudo systemctl enable clamd@scan

clamdを起動します。

    % sudo systemctl start clamd@scan

clamav-milterの設定をします。

/etc/mail/clamav-milter.confを次のように変更します。「Example」はコメ ントアウトし、それ以外の項目はコメントを外しています。

変更前:

    Example
    #MilterSocket /run/clamav-milter/clamav-milter.socket
    #MilterSocketMode 660
    #ClamdSocket tcp:scanner.mydomain:7357
    #LogFacility LOG_MAIL

変更後:

    #Example
    MilterSocket /run/clamav-milter/clamav-milter.socket
    MilterSocketMode 660
    ClamdSocket unix:/run/clamd.scan/clamd.sock
    LogFacility LOG_MAIL

clamdのソケットにアクセスできるようにclamiltをclamscanグループに追加します。

    % sudo usermod -G clamscan -a clamilt

システム起動時にclamav-milterを起動するようにします。

    % sudo systemctl enable clamav-milter

clamav-milterを起動します。

    % sudo systemctl start clamav-milter

### milter-greylistの設定

/etc/mail/greylist.confを編集し、以下のような設定にします。

- IPアドレスのマッチには前半24ビットのみを使う（送信元が複 数のMTAを利用している場合のGreylistの悪影響を抑えるため）

- 再送チェック時間を30分後（デフォルト）から10分後に短くす る（Greylistの悪影響を抑えるため）

- オートホワイトリストの期間を1日（デフォルト）から1週間に 伸ばす（Greylistの悪影響を抑えるため）

- 信用するドメインの場合はSPFにパスしたらGreylistを使わない （信用するドメインはmilter managerで指定する）

- デフォルトでGreylistを使う

Greylistの悪影響を抑えるために制限を緩めているため、迷惑 メールが通過する確率がやや高くなりますが、誤判定時の悪影響を 抑える方を重視するべきです。Greylistですべての迷惑メールをブ ロックしようとするのではなく、Greylistで検出できない迷惑メー ルはSpamAssassinなど他の手法で対応します。milter managerはそ のように複数のmilterを組み合わせた迷惑メール対策システムの構 築を支援します。

変更前:

    socket "/run/milter-greylist/milter-greylist.sock"
    # ...
    racl whitelist default

変更後:

    socket "/run/milter-greylist/milter-greylist.sock" 660
    # ...
    subnetmatch /24
    greylist 10m
    autowhite 1w
    sm_macro "trusted_domain" "{trusted_domain}" "yes"
    racl whitelist sm_macro "trusted_domain" spf pass
    racl greylist sm_macro "trusted_domain" not spf pass
    racl greylist default

システム起動時にmilter-greylistを起動するようにします。

    % sudo systemctl enable milter-greylist

milter-greylistを起動します。

    % sudo systemctl start milter-greylist

### milter-managerの設定

まず、clamav-milterのソケットにアクセスできるようにmilter-managerを clamiltグループに加えます。

    % sudo usermod -G clamilt -a milter-manager

同様に、milter-greylistのソケットにアクセスできるように milter-managerをmailグループとgrmilterグループに加えます。

    % sudo usermod -G mail -a milter-manager
    % sudo usermod -G grmilter -a milter-manager

同様に、spamass-milterのソケットにアクセスできるようにmilter-managerを postfixグループに加えます。

    % sudo usermod -G postfix -a milter-manager

milter-managerはシステムにインストールされているmilterを検出 します。以下のコマンドでspamass-milter、clamav-milter、 milter-greylistを検出していることを確認してください。

    % sudo /usr/sbin/milter-manager -u milter-manager -g milter-manager --show-config

以下のように表示されていれば検出は成功しています。

    ...
    define_milter("milter-greylist") do |milter|
      milter.connection_spec = "unix:/run/milter-greylist/milter-greylist.sock"
      ...
      milter.enabled = true
      ...
    end
    ...
    define_milter("clamav-milter") do |milter|
      milter.connection_spec = "unix:/var/run/clamav-milter/clamav-milter.socket"
      ...
      milter.enabled = true
      ...
    end
    ...
    define_milter("spamass-milter") do |milter|
      milter.connection_spec = "unix:/run/spamass-milter/postfix/sock"
      ...
      milter.enabled = true
      ...
    end
    ...

milterの名前、ソケットのパス、enabledがtrueになっていることを確認して ください。異なっていた場合は、 設定 を参考に /etc/milter-manager/milter-manager.local.confで設定してください。ただ、 できれば、設定を変更せずに使用できるようにしたいと考えています。もし、 検出できなかった環境のことを教えてもらえれば、 milter-manager.local.confで設定しなくとも使用できるように検出方法を改 良することができるかもしれません。

これでmilter-managerの設定は完了です。

システム起動時にmilter-managerを起動するようにします。

    % sudo systemctl enable milter-manager

milter-managerを起動します。

    % sudo systemctl start milter-manager

milter-test-serverで起動の確認をすることができます。

    % sudo -u milter-manager -H milter-test-server -s unix:/var/run/milter-manager/milter-manager.sock

このように表示されれば成功です。

    status: accept
    elapsed-time: 0.128 seconds

起動に失敗しているときはこのように表示されます。

    Failed to connect to unix:/var/run/milter-manager/milter-manager.sock

失敗している時はログを頼りに問題を解決します。--verboseオプショ ンをつけると詳細なログが表示されます。また、デーモンプロセス にしないことにより、標準出力にもログが表示されます。

/etc/sysconfig/milter-managerに以下の内容を追加します。これによ り、標準出力に詳細なログが表示されます。

    OPTION_ARGS="--verbose --no-daemon"

milter-managerをもう一度起動します。

    % sudo systemctl restart milter-manager

問題があればログが表示されます。起動しているmilter-managerは Ctrl+cで終了することができます。

問題が解決した後は、/etc/sysconfig/milter-managerに追加した OPTION_ARGSをコメントアウトし、デーモンプロセスで起動するよう に戻してから、milter-managerを起動しなおしてください。

### Postfixの設定

Postfixを有効にします。

    % sudo systemctl enable postfix
    % sudo systemctl start postfix

次に、milterの設定をします。

/etc/postfix/main.cfに以下を追加します。

    milter_protocol = 6
    milter_default_action = accept

それぞれ以下のような設定です。

milter_protocol = 6 | milterプロトコルバージョン6を使います。
milter_default_action = accept | milterに接続できないときはメールを受信します。milterとの 通信に問題がある場合でもメールサーバの機能を停止させない ためには、この設定が有効です。ただし、milterを復旧させる までの間に、スパムメールやウィルスメールを受信してしまう 可能性が高くなります。 迅速に復旧できる体制がととのっているのであれば、acceptで はなく、tempfailを指定するのがよいでしょう。デフォルトで はtempfailになっています。
milter_mail_macros = {auth_author} {auth_type} {auth_authen} | SMTP Auth関連の情報をmilterに渡します。milter-greylistな どが使用します。

続いて、Postfixにmilter-managerを登録します。spamass-milter、 clamav-milter、milter-greylistはmilter-manager経由で利用する ので、Postfixにはmilter-managerだけを登録すればよいことに注 意してください。

/etc/postfix/main.cfに以下を追加します。

    smtpd_milters = unix:/var/run/milter-manager/milter-manager.sock

Postfixの設定を再読み込みします。

    % sudo systemctl reload postfix

以上で設定は完了です。

milter-managerはいくつかsyslogにログを出力します。mail.info に出力するので、正常に動作していればmilter-managerからのログ が/var/log/maillogにログがでるはずです。テストメールを送信 して確認してください。

## まとめ

milter-managerを導入することにより、milterとPostfixを連携さ せる手間が削減されています。

通常であれば、/etc/postfix/main.cfにspamass-milter、clamav-milter、 miler-greylistのそれぞれのソケットを指定する必要があります。 しかし、milter-managerを導入することにより、milter-managerの ソケットのみを指定するだけですむようになりました。各milterの ソケットはmilter-managerが検出するため、typoなどの小さいです が気づきにくいミスに惑わされることがなくなります。

また、ここでは触れませんでしたが、milter-managerはsystemctl enableされ ているかどうかも検出します。そのため、milterを無効にしたい場合は、他の サービスと同様に以下のような手順になります。

    % sudo systemctl stop milter-greylist
    % sudo systemctl disable milter-greylist

milterを無効にしたら、milter-managerの設定を再読み込みします。 milter-managerはmilterが無効になったことを検出し、無効になったmilterと は接続しなくなります。

    % sudo systemctl reload milter-manager

Postfixの/etc/postfix/main.cfを変更する必要はありません。

CentOS上でmilterを複数使っている場合は、milter-managerを導入 して、管理コストを削減することができます。

milter managerは運用を支援するツールも提供しています。インストールは必 須ではありませんが、それらを導入することで運用コストを削減することがで きます。それらのツールもインストールする場合は CentOSへインストール （任意） を参照してください。