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はdnfでインストールできます。
まず、dnfリポジトリを登録します。
% curl -s https://packagecloud.io/install/repositories/milter-manager/repos/script.rpm.sh | sudo bash
参考: 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
まず、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は以下のように設定します。
/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で使用するウィルス定義を自動更新する設定をします。
/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
/etc/mail/greylist.confを編集し、以下のような設定にします。
# note 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
まず、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を有効にします。
% sudo systemctl enable postfix % sudo systemctl start postfix
次に、milterの設定をします。
/etc/postfix/main.cfに以下を追加します。
milter_protocol = 6 milter_default_action = accept
それぞれ以下のような設定です。
続いて、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へインストール(任意)を参照してください。