<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE refentry 
  PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
  "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
<refentry id="install-to-centos">
<refmeta>
  <refentrytitle role='top_of_page' id='install-to-centos.top_of_page'>CentOS 8へインストール</refentrytitle>
  <refmiscinfo>milter managerライブラリ</refmiscinfo>
</refmeta>
<refnamediv>
  <refname>CentOS 8へインストール</refname>
  <refpurpose>CentOS 8へのmilter managerのインストール方法</refpurpose>
</refnamediv>
<refsect1>
  <title>このドキュメントについて</title>
  <para>
  CentOS 8に特化したmilter managerのインストール方法について説明します。 CentOSに依存しない一般的な インストール情報は
  <link linkend='install'>インストール</link>
  を見てください。
</para>
  <para>CentOSのバージョンは8.3を想定しています。また、root権限での実行はsudo を使用することを想定しています。sudoを利用していない場合はsuなどroot権 限で実行してください。</para>
</refsect1>

<refsect1>
  <title>パッケージのインストール</title>
  <para>MTAは標準でインストールされているPostfixを利用することとします。</para>
  <para>milterはspamass-milter、clamav-milter、milter-greylistを使用することと します。各milterはEPELにあるものを利用します。そのため、EPELを有効にし ます。</para>
  <programlisting>% sudo dnf install -y epel-release</programlisting>
  <para>EPELを有効にしたらmilterをインストールします。</para>
  <programlisting>% sudo dnf install -y spamass-milter-postfix clamav-scanner-systemd clamav-update clamav-milter clamav-milter-systemd milter-greylist</programlisting>
  <para>また、グラフ作成用にRRDtoolもインストールします。</para>
  <programlisting>% sudo dnf install -y rrdtool</programlisting>
</refsect1>

<refsect1>
  <title>milter managerパッケージのインストール</title>
  <para>milter managerはdnfでインストールできます。</para>
  <para>まず、dnfリポジトリを登録します。</para>
  <programlisting>% curl -s https://packagecloud.io/install/repositories/milter-manager/repos/script.rpm.sh | sudo bash</programlisting>
  <para>
  参考: 
  <ulink url='https://packagecloud.io/milter-manager/repos/install'>&lt;URL:https://packagecloud.io/milter-manager/repos/install&gt;</ulink>
  
</para>
  <para>
  <code>ruby:3.0</code>
  モジュールを有効にします。
</para>
  <programlisting>% sudo dnf module -y enable ruby:3.0</programlisting>
  <para>登録が完了したらmilter managerをインストールできます。</para>
  <programlisting>% sudo dnf install -y milter-manager</programlisting>
</refsect1>

<refsect1>
  <title>設定</title>
  <para>milterの基本的な設定方針は以下の通りです。</para>
  <para>
  必要のない配送遅延をできるだけ抑えるため、milter-greylistは
  <ulink url='http://gabacho.reto.jp/anti-spam/'>S25R</ulink>
  にマッチする ときのみ適用します。しかし、これはmilter-managerが自動で行う ため、特に設定する必要はありません。
</para>
  <para>SELinux を有効にしたまま milter-manager を使用するためには多くの設定を 変更する必要があるため、ここでは SELinux のポリシーモジュールのうち postfix と milter を無効にして設定を進めることにします。</para>
  <programlisting>% sudo semodule -d postfix
% sudo semodule -d milter</programlisting>
  <refsect2>
  <title>spamass-milterの設定</title>
  <para>まず、spamdの設定をします。</para>
  <para>デフォルトの設定ではスパム判定されたメールは件名に「[SPAM]」 が追加されます。もし、これが嫌な場合は /etc/mail/spamassassin/local.cfを以下のように変更します。</para>
  <para>変更前:</para>
  <programlisting>rewrite_header Subject [SPAM]</programlisting>
  <para>変更後:</para>
  <programlisting># rewrite_header Subject [SPAM]</programlisting>
  <para>また、スパム判定された場合のみ、その詳細をヘッダに追加するよ うにする場合は以下を追加します。</para>
  <programlisting>remove_header ham Status
remove_header ham Level</programlisting>
  <para>システム起動時にspamdを起動するようにします。</para>
  <programlisting>% sudo systemctl enable spamassassin</programlisting>
  <para>spamdを起動します。</para>
  <programlisting>% sudo systemctl start spamassassin</programlisting>
  <para>spamass-milterは以下のように設定します。</para>
  <itemizedlist>
  <listitem>
  <para>本文変更機能を無効にする。</para>
</listitem>
  <listitem>
  <para>スコア15以上で拒否する。</para>
</listitem>
</itemizedlist>
  <para>/etc/sysconfig/spamass-milterを以下のように変更します。</para>
  <para>変更前:</para>
  <programlisting>#EXTRA_FLAGS=&quot;-m -r 15&quot;</programlisting>
  <para>変更後:</para>
  <programlisting>EXTRA_FLAGS=&quot;-m -r 15&quot;</programlisting>
  <para>システム起動時にspamass-milterを起動するようにします。</para>
  <programlisting>% sudo systemctl enable spamass-milter</programlisting>
  <para>spamass-milterを起動します。</para>
  <programlisting>% sudo systemctl start spamass-milter</programlisting>
</refsect2>

  <refsect2>
  <title>clamav-milterの設定</title>
  <para>ClamAVで使用するウィルス定義を自動更新する設定をします。</para>
  <para>/etc/freshclam.confを次のように変更します。「Example」はコメントアウト し、「NotifyClamd」はコメントを外し値を変更しています。それ以外の項目 はコメントを外しています。</para>
  <para>変更前:</para>
  <programlisting>Example
#LogFacility LOG_MAIL
#NotifyClamd /path/to/clamd.conf</programlisting>
  <para>変更後:</para>
  <programlisting>#Example
LogFacility LOG_MAIL
NotifyClamd /etc/clamd.d/scan.conf</programlisting>
  <para>最初は手動でfreshclamを実行します。</para>
  <programlisting>% sudo freshclam</programlisting>
  <para>clamdの設定をします。</para>
  <para>/etc/clamd.d/scan.confを次のように変更します。「Example」はコメントア ウトし、それ以外の項目はコメントを外しています。</para>
  <para>変更前:</para>
  <programlisting>Example
#LogFacility LOG_MAIL
#LocalSocket /run/clamd.scan/clamd.sock</programlisting>
  <para>変更後:</para>
  <programlisting>#Example
LogFacility LOG_MAIL
LocalSocket /run/clamd.scan/clamd.sock</programlisting>
  <para>システム起動時にclamdを起動するようにします。</para>
  <programlisting>% sudo systemctl enable clamd@scan</programlisting>
  <para>clamdを起動します。</para>
  <programlisting>% sudo systemctl start clamd@scan</programlisting>
  <para>clamav-milterの設定をします。</para>
  <para>/etc/mail/clamav-milter.confを次のように変更します。「Example」はコメ ントアウトし、それ以外の項目はコメントを外しています。</para>
  <para>変更前:</para>
  <programlisting>Example
#MilterSocket /run/clamav-milter/clamav-milter.socket
#MilterSocketMode 660
#ClamdSocket tcp:scanner.mydomain:7357
#LogFacility LOG_MAIL</programlisting>
  <para>変更後:</para>
  <programlisting>#Example
MilterSocket /run/clamav-milter/clamav-milter.socket
MilterSocketMode 660
ClamdSocket unix:/run/clamd.scan/clamd.sock
LogFacility LOG_MAIL</programlisting>
  <para>clamdのソケットにアクセスできるようにclamiltをclamscanグループに追加します。</para>
  <programlisting>% sudo usermod -G clamscan -a clamilt</programlisting>
  <para>システム起動時にclamav-milterを起動するようにします。</para>
  <programlisting>% sudo systemctl enable clamav-milter</programlisting>
  <para>clamav-milterを起動します。</para>
  <programlisting>% sudo systemctl start clamav-milter</programlisting>
</refsect2>

  <refsect2>
  <title>milter-greylistの設定</title>
  <para>/etc/mail/greylist.confを編集し、以下のような設定にします。</para>
  <itemizedlist>
  <listitem>
  <para>IPアドレスのマッチには前半24ビットのみを使う（送信元が複 数のMTAを利用している場合のGreylistの悪影響を抑えるため）</para>
</listitem>
  <listitem>
  <para>再送チェック時間を30分後（デフォルト）から10分後に短くす る（Greylistの悪影響を抑えるため）</para>
</listitem>
  <listitem>
  <para>オートホワイトリストの期間を1日（デフォルト）から1週間に 伸ばす（Greylistの悪影響を抑えるため）</para>
</listitem>
  <listitem>
  <para>信用するドメインの場合はSPFにパスしたらGreylistを使わない （信用するドメインはmilter managerで指定する）</para>
</listitem>
  <listitem>
  <para>デフォルトでGreylistを使う</para>
</listitem>
</itemizedlist>
  <note>
  <para>Greylistの悪影響を抑えるために制限を緩めているため、迷惑 メールが通過する確率がやや高くなりますが、誤判定時の悪影響を 抑える方を重視するべきです。Greylistですべての迷惑メールをブ ロックしようとするのではなく、Greylistで検出できない迷惑メー ルはSpamAssassinなど他の手法で対応します。milter managerはそ のように複数のmilterを組み合わせた迷惑メール対策システムの構 築を支援します。</para>
</note>
  <para>変更前:</para>
  <programlisting>socket &quot;/run/milter-greylist/milter-greylist.sock&quot;
# ...
racl whitelist default</programlisting>
  <para>変更後:</para>
  <programlisting>socket &quot;/run/milter-greylist/milter-greylist.sock&quot; 660
# ...
subnetmatch /24
greylist 10m
autowhite 1w
sm_macro &quot;trusted_domain&quot; &quot;{trusted_domain}&quot; &quot;yes&quot;
racl whitelist sm_macro &quot;trusted_domain&quot; spf pass
racl greylist sm_macro &quot;trusted_domain&quot; not spf pass
racl greylist default</programlisting>
  <para>システム起動時にmilter-greylistを起動するようにします。</para>
  <programlisting>% sudo systemctl enable milter-greylist</programlisting>
  <para>milter-greylistを起動します。</para>
  <programlisting>% sudo systemctl start milter-greylist</programlisting>
</refsect2>

  <refsect2>
  <title>milter-managerの設定</title>
  <para>まず、clamav-milterのソケットにアクセスできるようにmilter-managerを clamiltグループに加えます。</para>
  <programlisting>% sudo usermod -G clamilt -a milter-manager</programlisting>
  <para>同様に、milter-greylistのソケットにアクセスできるように milter-managerをmailグループとgrmilterグループに加えます。</para>
  <programlisting>% sudo usermod -G mail -a milter-manager
% sudo usermod -G grmilter -a milter-manager</programlisting>
  <para>同様に、spamass-milterのソケットにアクセスできるようにmilter-managerを postfixグループに加えます。</para>
  <programlisting>% sudo usermod -G postfix -a milter-manager</programlisting>
  <para>milter-managerはシステムにインストールされているmilterを検出 します。以下のコマンドでspamass-milter、clamav-milter、 milter-greylistを検出していることを確認してください。</para>
  <programlisting>% sudo /usr/sbin/milter-manager -u milter-manager -g milter-manager --show-config</programlisting>
  <para>以下のように表示されていれば検出は成功しています。</para>
  <programlisting>...
define_milter(&quot;milter-greylist&quot;) do |milter|
  milter.connection_spec = &quot;unix:/run/milter-greylist/milter-greylist.sock&quot;
  ...
  milter.enabled = true
  ...
end
...
define_milter(&quot;clamav-milter&quot;) do |milter|
  milter.connection_spec = &quot;unix:/var/run/clamav-milter/clamav-milter.socket&quot;
  ...
  milter.enabled = true
  ...
end
...
define_milter(&quot;spamass-milter&quot;) do |milter|
  milter.connection_spec = &quot;unix:/run/spamass-milter/postfix/sock&quot;
  ...
  milter.enabled = true
  ...
end
...</programlisting>
  <para>
  milterの名前、ソケットのパス、enabledがtrueになっていることを確認して ください。異なっていた場合は、
  <link linkend='configuration'>設定</link>
  を参考に /etc/milter-manager/milter-manager.local.confで設定してください。ただ、 できれば、設定を変更せずに使用できるようにしたいと考えています。もし、 検出できなかった環境のことを教えてもらえれば、 milter-manager.local.confで設定しなくとも使用できるように検出方法を改 良することができるかもしれません。
</para>
  <para>これでmilter-managerの設定は完了です。</para>
  <para>システム起動時にmilter-managerを起動するようにします。</para>
  <programlisting>% sudo systemctl enable milter-manager</programlisting>
  <para>milter-managerを起動します。</para>
  <programlisting>% sudo systemctl start milter-manager</programlisting>
  <para>milter-test-serverで起動の確認をすることができます。</para>
  <programlisting>% sudo -u milter-manager -H milter-test-server -s unix:/var/run/milter-manager/milter-manager.sock</programlisting>
  <para>このように表示されれば成功です。</para>
  <programlisting>status: accept
elapsed-time: 0.128 seconds</programlisting>
  <para>起動に失敗しているときはこのように表示されます。</para>
  <programlisting>Failed to connect to unix:/var/run/milter-manager/milter-manager.sock</programlisting>
  <para>失敗している時はログを頼りに問題を解決します。--verboseオプショ ンをつけると詳細なログが表示されます。また、デーモンプロセス にしないことにより、標準出力にもログが表示されます。</para>
  <para>/etc/sysconfig/milter-managerに以下の内容を追加します。これによ り、標準出力に詳細なログが表示されます。</para>
  <programlisting>OPTION_ARGS=&quot;--verbose --no-daemon&quot;</programlisting>
  <para>milter-managerをもう一度起動します。</para>
  <programlisting>% sudo systemctl restart milter-manager</programlisting>
  <para>問題があればログが表示されます。起動しているmilter-managerは Ctrl+cで終了することができます。</para>
  <para>問題が解決した後は、/etc/sysconfig/milter-managerに追加した OPTION_ARGSをコメントアウトし、デーモンプロセスで起動するよう に戻してから、milter-managerを起動しなおしてください。</para>
</refsect2>

  <refsect2>
  <title>Postfixの設定</title>
  <para>Postfixを有効にします。</para>
  <programlisting>% sudo systemctl enable postfix
% sudo systemctl start postfix</programlisting>
  <para>次に、milterの設定をします。</para>
  <para>/etc/postfix/main.cfに以下を追加します。</para>
  <programlisting>milter_protocol = 6
milter_default_action = accept</programlisting>
  <para>それぞれ以下のような設定です。</para>
  <variablelist>
  <varlistentry>
  <term id='install-to-centos.milter-protocol'>milter_protocol = 6</term>
  <listitem>
  <para>milterプロトコルバージョン6を使います。</para>
</listitem>
</varlistentry>
  <varlistentry>
  <term id='install-to-centos.milter-default-action'>milter_default_action = accept</term>
  <listitem>
  <para>milterに接続できないときはメールを受信します。milterとの 通信に問題がある場合でもメールサーバの機能を停止させない ためには、この設定が有効です。ただし、milterを復旧させる までの間に、スパムメールやウィルスメールを受信してしまう 可能性が高くなります。</para>
  <para>迅速に復旧できる体制がととのっているのであれば、acceptで はなく、tempfailを指定するのがよいでしょう。デフォルトで はtempfailになっています。</para>
</listitem>
</varlistentry>
  <varlistentry>
  <term id='install-to-centos.milter-mail-macros'>milter_mail_macros = {auth_author} {auth_type} {auth_authen}</term>
  <listitem>
  <para>SMTP Auth関連の情報をmilterに渡します。milter-greylistな どが使用します。</para>
</listitem>
</varlistentry>
</variablelist>
  <para>続いて、Postfixにmilter-managerを登録します。spamass-milter、 clamav-milter、milter-greylistはmilter-manager経由で利用する ので、Postfixにはmilter-managerだけを登録すればよいことに注 意してください。</para>
  <para>/etc/postfix/main.cfに以下を追加します。</para>
  <programlisting>smtpd_milters = unix:/var/run/milter-manager/milter-manager.sock</programlisting>
  <para>Postfixの設定を再読み込みします。</para>
  <programlisting>% sudo systemctl reload postfix</programlisting>
  <para>以上で設定は完了です。</para>
  <para>milter-managerはいくつかsyslogにログを出力します。mail.info に出力するので、正常に動作していればmilter-managerからのログ が/var/log/maillogにログがでるはずです。テストメールを送信 して確認してください。</para>
</refsect2>

</refsect1>

<refsect1>
  <title>まとめ</title>
  <para>milter-managerを導入することにより、milterとPostfixを連携さ せる手間が削減されています。</para>
  <para>通常であれば、/etc/postfix/main.cfにspamass-milter、clamav-milter、 miler-greylistのそれぞれのソケットを指定する必要があります。 しかし、milter-managerを導入することにより、milter-managerの ソケットのみを指定するだけですむようになりました。各milterの ソケットはmilter-managerが検出するため、typoなどの小さいです が気づきにくいミスに惑わされることがなくなります。</para>
  <para>また、ここでは触れませんでしたが、milter-managerはsystemctl enableされ ているかどうかも検出します。そのため、milterを無効にしたい場合は、他の サービスと同様に以下のような手順になります。</para>
  <programlisting>% sudo systemctl stop milter-greylist
% sudo systemctl disable milter-greylist</programlisting>
  <para>milterを無効にしたら、milter-managerの設定を再読み込みします。 milter-managerはmilterが無効になったことを検出し、無効になったmilterと は接続しなくなります。</para>
  <programlisting>% sudo systemctl reload milter-manager</programlisting>
  <para>Postfixの/etc/postfix/main.cfを変更する必要はありません。</para>
  <para>CentOS上でmilterを複数使っている場合は、milter-managerを導入 して、管理コストを削減することができます。</para>
  <para>
  milter managerは運用を支援するツールも提供しています。インストールは必 須ではありませんが、それらを導入することで運用コストを削減することがで きます。それらのツールもインストールする場合は
  <link linkend='install-options-to-centos'>CentOSへインストール （任意）</link>
  を参照してください。
</para>
</refsect1>
</refentry>
