迷惑メール対策ツール「Rspamd」の導入。Postfix,CentOS7

SpamAssassinでの除去は、設定が大変で、精度がもう少し高かったらなー。
で、「RSPAMD」を!
確かに、postfix回り、その他のツール系も設定が楽になりました。
かつ、迷惑メールの判断も、それなりにいいですー。

関連記事 2021/06/18 更新

迷惑メール対策ツール「Rspamd」の導入。Postfix、CentOS Stream release 8版
迷惑メールを除去してくれるツール、「Rspamd」。 の「CentOS Stream release 8」版です。 ほとんど変わりなく、インストールできます。 前提作業 CentOSバージョン...

↑ CentOS Stream8 版です。

Rspamdによる迷惑メールの排除実績 2021(2021/05/21)

Rspamdによる迷惑メール(Spam)減少効果(2020/08/08)

Postfix,Rspamd(迷惑メールツール)関係、メールサーバーまとめ(2020/02/22)

迷惑メール対策ツール、Rspamd。サブドメインで振り分け(2020/02/11)

迷惑メール対策ツール、Rspamd。ホワイトリスト、ブラックリスト(2020/01/19)

迷惑メール対策 Rspamd ホワイトリストの設定(2019/11/30)

迷惑メール対策、Rspamdのメール振り分け。Postfix,CentOS7(2019/08/26)

迷惑メールフィルタリングツール【Rspamd】 個別設定(詳細設定)(2019/08/17)

Rspamd、DMARCモジュール、SPFジュール、Postfix,CentOS7(2019/08/08)

Postfix 設定

Postfixの設定は、以下の設定まで行っておきます。

Postfix 3.4 ソースインストール CentOS7(マルチドメイン)

Postfix 3.4 [dovecot] CentOS7(マルチドメイン)

Postfix 3.4 [SSL 送受信] CentOS7(マルチドメイン)

redis インストール

NoSQL系のDB「redis」が必須になっています。
その他、DNSのキャッシュもあったほうがいいみたい。
DNSのキャッシュは、後回しにします・・・

# yum -y install epel-release
# yum install -y redis
# redis-server --version
Redis server v=3.2.12 sha=00000000:0 malloc=jemalloc-3.6.0 bits=64 build=7897e7d0e13773f

↑redisがインストールされました。
# systemctl start redis.service
# systemctl status redis.service
● redis.service - Redis persistent key-value database
   Loaded: loaded (/usr/lib/systemd/system/redis.service; disabled; vendor preset: disabled)
  Drop-In: /etc/systemd/system/redis.service.d
           └─limit.conf
   Active: active (running) since XXX 2019-XX-XX 20:45:41 JST;
 Main PID: 2692 (redis-server)
   CGroup: /system.slice/redis.service
           └─2692 /usr/bin/redis-server 127.0.0.1:6379

XXX XX 20:45:41 X systemd[1]: Starting Redis persistent key-value database...
XXX XX 20:45:41 X systemd[1]: Started Redis persistent key-value database.

# systemctl enable redis.service

↑自動起動をさせます。

RSPAMD インストール

# yum install epel-release
# curl https://rspamd.com/rpm-stable/centos-7/rspamd.repo > /etc/yum.repos.d/rspamd.repo
# rpm --import https://rspamd.com/rpm-stable/gpg.key
# yum install rspamd

RSPAMD 設定

# rspamadm configwizard
  ____                                     _
 |  _ \  ___  _ __    __ _  _ __ ___    __| |
 | |_) |/ __|| '_ \  / _` || '_ ` _ \  / _` |
 |  _ < \__ \| |_) || (_| || | | | | || (_| |
 |_| \_\|___/| .__/  \__,_||_| |_| |_| \__,_|
             |_|

Welcome to the configuration tool
We use /etc/rspamd/rspamd.conf configuration file, writing results to /etc/rspamd
Modules enabled: hfilter, phishing, mime_types, dkim_signing, asn, settings, regexp, arc, bayes_expiry, trie, rbl, ip_score, metadata_exporter, elastic, fuzzy_check, mid, multimap, chartable, surbl, dkim, maillist, once_received, emails, dmarc, forged_recipients, milter_headers, whitelist, force_actions, spf
Modules disabled (explicitly): url_tags, url_reputation, spamtrap, dcc, mx_check, rspamd_update
Modules disabled (unconfigured): spamassassin, clickhouse, metric_exporter, dynamic_conf, clustering, reputation, fuzzy_collect, external_services, antivirus, maps_stats
Modules disabled (no Redis): greylist, url_redirector, replies, neural, ratelimit, history_redis
Modules disabled (experimental): 
Modules disabled (failed): 
Do you wish to continue?[Y/n]: 
Setup WebUI and controller worker:
Controller password is not set, do you want to set one?[Y/n]: N (★ここだけ、N。あとは、エンター)
Redis servers are not set:
The following modules will be enabled if you add Redis servers:
        * greylist
        * url_redirector
        * replies
        * neural
        * ratelimit
        * history_redis
Do you wish to set Redis servers?[Y/n]: 
Input read only servers separated by `,` [default: localhost]: 
Input write only servers separated by `,` [default: localhost]: 
Do you have any password set for your Redis?[y/N]: 
Do you have any specific database for your Redis?[y/N]: 
Do you want to setup dkim signing feature?[y/N]: 
You have 1 sqlite classifiers
Expire time for new tokens [100d]: 
Reset previous data?[y/N]: 
Do you wish to convert them to Redis?[Y/n]: 
cannot find /var/lib/rspamd/bayes.spam.sqlite and /var/lib/rspamd/bayes.ham.sqlite, skip conversion
Converted classifier to the from sqlite to redis
File: /etc/rspamd/local.d/classifier-bayes.conf, changes list:
backend => redis
new_schema => true
expire => 8640000

File: /etc/rspamd/local.d/redis.conf, changes list:
write_servers => localhost
read_servers => localhost

Apply changes?[Y/n]: 
Create file /etc/rspamd/local.d/classifier-bayes.conf
Create file /etc/rspamd/local.d/redis.conf
2 changes applied, the wizard is finished now
*** Please reload the Rspamd configuration ***

↑rspamadm configwizardを走らせます。一カ所だけ、「NO」。

WEBから閲覧 / 管理パスワード

「rspamadm pw」というコマンドを使って、パスワードを設定します。
2つ設定します。入力したパスワード(文字列)を書き留めておきます。
生成された文字列を、設定ファイルに登録します。

「閲覧用」と「管理用」の2つを設定します。

# rspamadm pw
Enter passphrase: (閲覧用パスワードを入れる)

(出力された英数字文字 閲覧用)

# rspamadm pw
Enter passphrase: (管理用パスワードを入れる)

(出力された英数字文字 管理用)

vi /etc/rspamd/local.d/worker-controller.inc

password = "(出力された英数字文字 閲覧用)";
enable_password = "(出力された英数字文字 管理用)";

↑worker-controller.incというファイルに保存をします。

RSPAMD 設定 その他

vi /etc/rspamd/local.d/redis.conf
----------------------------------
write_servers = "localhost";
read_servers = "localhost";
 ↓
write_servers = "127.0.0.1:6379";
read_servers = "127.0.0.1:6379";
----------------------------------

↑と変更をします。

rspamadm configwizard
設定時に登録してもいいのですが・・・(汗)

vi /etc/rspamd/local.d/milter_headers.conf

use = ["spam-header", "x-spam-level", "x-spam-status", "x-virus", "authentication-results"];
skip_local = false;
skip_authenticated = true;
extended_spam_headers = true;
routines {
  spam-header {
    header = "X-Spam-Flag";
    remove = 1;
    value = "YES";
  }
  x-spam-level {
    header = "X-Spam-Level";
    remove = 1;
    char = "*";
  }
  x-spam-status {
    header = "X-Spam-Status";
    remove = 1;
  }
  x-virus {
    header = "X-Virus-Check";
    remove = 1;
    symbols = ["CLAM_VIRUS"];
  }
  authentication-results {
    header = "Authentication-Results";
    remove = 1;
    add_smtp_user = false;
    spf_symbols {
      pass = "R_SPF_ALLOW";
      fail = "R_SPF_FAIL";
      softfail = "R_SPF_SOFTFAIL";
      neutral = "R_SPF_NEUTRAL";
      temperror = "R_SPF_DNSFAIL";
      none = "R_SPF_NA";
      permerror = "R_SPF_PERMFAIL";
    }
    dkim_symbols {
      pass = "R_DKIM_ALLOW";
      fail = "R_DKIM_REJECT";
      temperror = "R_DKIM_TEMPFAIL";
      none = "R_DKIM_NA";
      permerror = "R_DKIM_PERMFAIL";
    }
    dmarc_symbols {
      pass = "DMARC_POLICY_ALLOW";
      permerror = "DMARC_BAD_POLICY";
      temperror = "DMARC_DNSFAIL";
      none = "DMARC_NA";
      reject = "DMARC_POLICY_REJECT";
      softfail = "DMARC_POLICY_SOFTFAIL";
      quarantine = "DMARC_POLICY_QUARANTINE";
    }
  }
}

↑到着したメールのヘッダに「X-Spam-Level」などの情報を追加するための設定。
X-Spam-Status: No, score=-0.05
Authentication-Results: (ホスト名);
        dkim=none;
        dmarc=none;
        spf=pass

↑というような情報が記録されます。

RSPAMD 設定ファイル

設定ファイルを書く場合は、「/etc/rspamd/local.d/」以下に書きます。
「/etc/rspamd/」にデフォルトの設定がありますが、
「/etc/rspamd/local.d/」の設定があると、上書きされて、優先されます。

各種拡張モジュールが用意されていますが、
/etc/rspamd/local.d/elastic.conf

enabled = false;

という風に書くと、「設定しない」という事になります。明示的に、「false」としなくても、設定ファイルが無ければ、「false」となります。
上記は、「Elasticsearchモジュール」

SPAMD 起動

# systemctl start rspamd
# systemctl enable rspamd

/var/log/rspamd/rspamd.log
にログが書かれますので、エラーなどがあれば、見てみます。

WEB セッティング nginx

webから見られるようにします。

nginx セッティング

server {
        listen       80;
        server_name  (FQDN);

        access_log /var/log/rspamd_acc_log;
        error_log /var/log/rspamd_err_log;

        location / {
                root   /usr/share/rspamd/www/;
                try_files $uri @proxy;
        }

        location @proxy {
                proxy_pass  http://127.0.0.1:11334;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Host $http_host;
        }
}

↑基本設定です。

WEBにアクセスするとパスワードを求められますので、「管理用」もしくは、「閲覧用」のパスワードを入れます。

WEB セッティング apache (httpd) (2020/08/03追記)

<Location /rspamd>
        Order allow,deny
        Allow from all
</Location>
<IfModule mod_rewrite.c>
        RewriteEngine  on
        RewriteRule ^/rspamd$ /rspamd/ [R,L]
        RewriteRule ^/rspamd/(.*) http://localhost:11334/$1 [P,L]
</IfModule>

↑ apacheの場合の設定です。
conf.d/userdir.conf

の最後のほうに記述します。
このファイルでなくても大丈夫です。

http://(サーバーのIP or FQDN):11334/
でもアクセスができますが、firewallなどにより、80もしくは、443(SSL)ポートでアクセスしたい場合、上記の設定が便利です。

RewriteEngine  on

↑上記の記述は重要です。

これで、
http://(FQDN)/rspamd/
で、アクセスができます。

DKIM モジュール

送信時のDKIMモジュールを設定します。

Postfix 3.4 [迷惑メール対策 DKIM] CentOS7 (マルチドメイン)
と同じ感じです。

# yum install opendkim
# mkdir /etc/opendkim/keys/(ドメイン)
# opendkim-genkey -d (ドメイン) -s (セレクタ) -D /etc/opendkim/keys/(ドメイン)/
# chown -R opendkim.opendkim /etc/opendkim/keys/(ドメイン)/
# chmod a+r /etc/opendkim/keys/(ドメイン)/(セレクタ).*

↑ 2019/11/24 後半2行追加
# chmod 755 /etc/opendkim/keys/

↑ 2020/08/03 追記
vi /etc/rspamd/local.d/dkim_signing.conf
---------------------------
domain {
    (ドメイン) {
        selector = "(セレクタ)";
        path = "/etc/opendkim/keys/(ドメイン)/(セレクタ).private";
    }
}
use_domain = "header";

↑rspamdとの連携設定です。
ドメインを複数設定する場合、「(ドメイン)」セクションを増やしていきます。(2020/08/26修正)
use_domain = “header”
のところは、複数ドメインになっても、1行です。(2020/08/03 追記)
# cat /etc/opendkim/keys/(ドメイン)/(セレクタ).txt 
(セレクタ)._domainkey      IN      TXT ・・・

上記のファイルをDNSに登録をします。

 

アンチウィルスモジュール Clamav

clamavと連携をして、ウィルスチェックを行います。

Clamav インストール

# yum install openssl openssl-devel libcurl-devel zlib-devel libpml-devel libxml2-devel json-c-devel bzip2-devel pcre2-devel ncurses-devel sendmail-devel

↑関連ソフトのインストール
# ./configure --sysconfdir=/etc
# make -j2
# make install

Clamav 設定と起動

/etc/clamd.conf.sample
/etc/freshclam.conf.sample

というファイルができますので、
それぞれ、
/etc/clamd.conf
/etc/freshclam.conf

にコピーをします。
# mkdir /usr/local/share/clamav
# mkdir /var/log/clamav/
# mkdir /var/run/clamd
# chown _rspamd._rspamd /var/log/clamav/
# chown _rspamd._rspamd /usr/local/share/clamav
# chown _rspamd._rspamd /var/run/clamd

↑RSPAMDで、実行しているユーザ「_rspamd」と同じユーザで起動をします。
そのため、周辺ファイルも、「_rspamd」に統一をします。
# vi /usr/lib/tmpfiles.d/clamav.conf
d /var/run/clamd 0755 _rspamd _rspamd

↑「/var/run/clamd」が再起動後も消えないようにする
vi /etc/freshclam.conf
---------------------------------------
Example
 ↓
#Example

#DatabaseDirectory /var/lib/clamav
 ↓
DatabaseDirectory /usr/local/share/clamav

#UpdateLogFile /var/log/freshclam.log
 ↓
UpdateLogFile /var/log/clamav/freshclam.log

#LogFileMaxSize 2M
 ↓
LogFileMaxSize 2M

#LogTime yes
 ↓
LogTime yes

#PidFile /var/run/freshclam.pid
 ↓
PidFile /var/run/clamd/freshclam.pid

#DatabaseOwner clamav
 ↓
DatabaseOwner _rspamd

# freshclam -d -u _rspamd

↑ウイルス定義ファイルをダウンロードします。
デーモン、かつ「_rspamd」ユーザとして起動をします
# tail /var/log/clamav/freshclam.log
Sat XXX  XX XX:01:07 2019 -> freshclam daemon 0.101.2 (OS: linux-gnu, ARCH: x86_64, CPU: x86_64)
Sat XXX  XX XX:01:07 2019 -> ClamAV update process started at Sat XXX  3 XX:XX:07 XXXX
Sat XXX  XX XX:01:07 2019 -> main.cvd is up to date (version: 58, sigs: 4566249, f-level: 60, builder: sigmgr)
Sat XXX  XX XX:01:45 2019 -> bytecode.cvd is up to date (version: 330, sigs: 94, f-level: 63, builder: neo)
Sat XXX  XX XX:01:48 2019 -> Database updated (6263732 signatures) from database.clamav.net (IP: XXX.XXX.XXX.XXX)

↑ウィルスパターンデータベースがアップデートされました。
vi /etc/clamd.conf
----------------------------------------------------------

Example
 ↓
#Example

#LogFile /tmp/clamd.log
 ↓
LogFile /var/log/clamav/clamd.log

#PidFile /var/run/clamd.pid
 ↓
PidFile /var/run/clamd.pid

#DatabaseDirectory /var/lib/clamav
 ↓
DatabaseDirectory /usr/local/share/clamav

#TCPSocket 3310
 ↓
TCPSocket 3310

#TCPAddr 127.0.0.1
 ↓
TCPAddr 127.0.0.1

#User clamav
 ↓
User _rspamd

# clamd

↑起動まで、少し時間がかかります。
# netstat -an |grep 3310
tcp        0      0 127.0.0.1:3310          0.0.0.0:*               LIST

↑と、3310ポートがオープンとなります。
tail /var/log/clamav/clamd.log

TCP: Bound to [127.0.0.1]:3310
TCP: Setting connection queue length to 20
LOCAL: Removing stale socket file /tmp/clamd.socket
LOCAL: Unix socket file /tmp/clamd.socket
LOCAL: Setting connection queue length to 20

↑ソケットも設定されています。

RSPAMDとの連携

vi /etc/rspamd/local.d/antivirus.conf

clamav {
  action = "reject";
  scan_mime_parts = true;
  scan_text_mime = true;
  scan_image_mime = true;
  message = '${SCANNER}: virus found: "${VIRUS}"';
  symbol = "CLAM_VIRUS";
  type = "clamav";
  servers = "127.0.0.1:3310";
  log_clean = true;
  patterns {
    JUST_EICAR = '^Eicar-Test-Signature$';
  }
  whitelist = "/etc/rspamd/antivirus.wl";
}

↑「action = “reject”」
は、ウィルスが来たら、受信しないで、送信者に返すという設定。

「/etc/rspamd/antivirus.wl」
は、IPアドレスを記述する。
そのIPから来るメールは、チェックしない。

ウィルスチェックテスト

# wget http://www.eicar.org/download/eicar.com -O /tmp/eicar_sig.txt

↑というように、サンプルウイルスをダウンロードします。

/tmp/eicar_sig.txt
の中身は、1行。
この内容を本文のテキストに入れて、設定したpostfixに送付してみます。

I'm afraid I wasn't able to deliver your message to the following addresses.
This is a permanent error; I've given up. Sorry it didn't work out.

(メールアドレス):
XXX.XXX.XXX.XXX failed after I sent the message.
Remote host said: 554 5.7.1 clamav: virus found: "Eicar-Test-Signature"

↑「virus found」というように返ってきます。

Clamav利用時のメモリ

VPSの2Gメモリでは、

ERROR: daemonize() failed: Cannot allocate memory

というようにエラーがでて、起動されません・・・

最低、3Gのメモリが必要かと思います。
メールの流通量、その他、アプリの事を考えると、それ以上必要かと思います。

RSPSMDの挙動

基本、スパム(迷惑メール)と判断されると、送信者に返信されます。

<送信先メールアドレス>: host (RSPAMD稼働中サーバー)said: 554 5.7.1 Spam
    message rejected (in reply to end of DATA command)

また、判断が微妙なものは、受信するというような設定もできます。

迷惑メールっぽいメールが、すり抜けるたり、迷惑メールとして、誤判断するときが、時折ありますが、SpamAssasinの初期より精度が高く、サーバ管理者は楽になります。
Postfix回り、回りのツール類の設定が楽です。

Postfix 連携

vi /etc/postfix/main.cf

# rspamd
smtpd_milters = inet:localhost:11332
milter_default_action = accept
milter_protocol = 6

上記の設定でOK!

Rspamd 2.0リリース(2019/10/28)

Rspamd 2.0 has been released

yum updateでアップデートをしましたが、
問題なくアップデートされたようです・・・

1.9.4 -> 2.0へのアップでした。

今回で、CentOS6は、サポート外になり、CentOS8がパッケージ対象として
追加されたようです・・・

これから、様子を見ていこうと思います。

Rspamd 2.2リリース(2019/11/23)

Rspamd 2.2がリリースされました。

yum updateで、アップデートできました・・

# yum update rspamd

=======================================================================================================================================
Package Arch Version Repository Size
=======================================================================================================================================
Updating:
rspamd x86_64 2.2-1 rspamd 5.3 M

Transaction Summary
=======================================================================================================================================
Upgrade 1 Package

「virustotal」というウィルスやマルウェアをチェックできるソフトで、これを利用できるようになったようです。
virustotalは、Google傘下にある会社。
今度、試してみたいと思います。

Rspamd 2.5 リリース(2020/04/01)

2.3と、2.4を飛ばして、2.5にアップデートしました。
アップデート内容を見ると、設定は変更しなくても大丈夫ようで・・・。

# yum update rspamd

Downloading packages:
rspamd-2.5-156.x86_64.rpm                                                                                                                            | 5.4 MB  00:00:19     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Updating   : rspamd-2.5-156.x86_64                                                                                                                                    1/2 
  Cleanup    : rspamd-2.2-1.x86_64                                                                                                                                      2/2 
  Verifying  : rspamd-2.5-156.x86_64                                                                                                                                    1/2 
  Verifying  : rspamd-2.2-1.x86_64                                                                                                                                      2/2 

Rspamd 2.6 リリース(2020/12/11)

9月末にリリースされた、2.6。順調に稼働をしています。
chromeで、webにログインするときに、

↑上記のログインウィンドウが出てこない場合があります。
「ログインできないー!」「パスワードが入力できない!」とか、慌てずに「キャッシュ」をクリアにすれば、上記のログインウィンドウが出てきますので、ご安心下さい。

Rspamd 2.7 リリース(2021/01/19)

2021年1月にリリースされた、2.7。

2021-01-xx xx:xx:xx #4653(main) <602295>; main; main: rspamd 2.7 is starting, build id: release

このバージョンは、バグフィックスがメイン、ということで、アップデートしても悪さはしないでしょう。順調に稼働中です。

タイトルとURLをコピーしました