SpamAssassinでの除去は、設定が大変で、精度がもう少し高かったらなー。
で、「RSPAMD」を!
確かに、postfix回り、その他のツール系も設定が楽になりました。
かつ、迷惑メールの判断も、それなりにいいですー。
関連記事
迷惑メール対策 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のキャッシュは、後回しにします・・・
1 2 3 4 |
# 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がインストールされました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# 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 インストール
1 2 3 4 |
# 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 設定
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# 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つを設定します。
1 2 3 4 5 6 7 8 9 |
# rspamadm pw Enter passphrase: (閲覧用パスワードを入れる) (出力された英数字文字 閲覧用) # rspamadm pw Enter passphrase: (管理用パスワードを入れる) (出力された英数字文字 管理用) |
1 2 3 4 |
vi /etc/rspamd/local.d/worker-controller.inc password = "(出力された英数字文字 閲覧用)"; enable_password = "(出力された英数字文字 管理用)"; |
↑worker-controller.incというファイルに保存をします。
RSPAMD 設定 その他
1 2 3 4 5 6 7 8 |
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
設定時に登録してもいいのですが・・・(汗)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
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」などの情報を追加するための設定。
1 2 3 4 5 |
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
に
1 |
enabled = false; |
という風に書くと、「設定しない」という事になります。明示的に、「false」としなくても、設定ファイルが無ければ、「false」となります。
上記は、「Elasticsearchモジュール」
SPAMD 起動
1 2 |
# systemctl start rspamd # systemctl enable rspamd |
/var/log/rspamd/rspamd.log
にログが書かれますので、エラーなどがあれば、見てみます。
WEB セッティング nginx
webから見られるようにします。
nginx セッティング
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
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にアクセスするとパスワードを求められますので、「管理用」もしくは、「閲覧用」のパスワードを入れます。
DKIM モジュール
送信時のDKIMモジュールを設定します。
Postfix 3.4 [迷惑メール対策 DKIM] CentOS7 (マルチドメイン)
と同じ感じです。
1 2 3 4 5 |
# 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行追加
1 2 3 4 5 6 7 8 9 |
vi /etc/rspamd/local.d/dkim_signing.conf --------------------------- domain { (ドメイン) { selector = "(セレクタ)"; path = "/etc/opendkim/keys/(ドメイン)/(セレクタ).private"; } } use_domain = "header"; |
↑rspamdとの連携設定です。
1 2 |
# cat /etc/opendkim/keys/(ドメイン)/(セレクタ).txt (セレクタ)._domainkey IN TXT ・・・ |
上記のファイルをDNSに登録をします。
アンチウィルスモジュール Clamav
clamavと連携をして、ウィルスチェックを行います。
Clamav インストール
1 |
# yum install openssl openssl-devel libcurl-devel zlib-devel libpml-devel libxml2-devel json-c-devel bzip2-devel pcre2-devel ncurses-devel sendmail-devel |
↑関連ソフトのインストール
1 2 3 |
# ./configure --sysconfdir=/etc # make -j2 # make install |
Clamav 設定と起動
1 2 |
/etc/clamd.conf.sample /etc/freshclam.conf.sample |
というファイルができますので、
それぞれ、
1 2 |
/etc/clamd.conf /etc/freshclam.conf |
にコピーをします。
1 2 3 4 5 6 |
# 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」に統一をします。
1 2 |
# vi /usr/lib/tmpfiles.d/clamav.conf d /var/run/clamd 0755 _rspamd _rspamd |
↑「/var/run/clamd」が再起動後も消えないようにする
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
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 |
1 |
# freshclam -d -u _rspamd |
↑ウイルス定義ファイルをダウンロードします。
デーモン、かつ「_rspamd」ユーザとして起動をします
1 2 3 4 5 6 |
# 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) |
↑ウィルスパターンデータベースがアップデートされました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
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 |
1 |
# clamd |
↑起動まで、少し時間がかかります。
1 2 |
# netstat -an |grep 3310 tcp 0 0 127.0.0.1:3310 0.0.0.0:* LIST |
↑と、3310ポートがオープンとなります。
1 2 3 4 5 6 7 |
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との連携
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
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から来るメールは、チェックしない。
ウィルスチェックテスト
1 |
# wget http://www.eicar.org/download/eicar.com -O /tmp/eicar_sig.txt |
↑というように、サンプルウイルスをダウンロードします。
/tmp/eicar_sig.txt
の中身は、1行。
この内容を本文のテキストに入れて、設定したpostfixに送付してみます。
1 2 3 4 5 6 |
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メモリでは、
1 |
ERROR: daemonize() failed: Cannot allocate memory |
というようにエラーがでて、起動されません・・・
最低、3Gのメモリが必要かと思います。
メールの流通量、その他、アプリの事を考えると、それ以上必要かと思います。
RSPSMDの挙動
基本、スパム(迷惑メール)と判断されると、送信者に返信されます。
1 2 |
<送信先メールアドレス>: host (RSPAMD稼働中サーバー)said: 554 5.7.1 Spam message rejected (in reply to end of DATA command) |
また、判断が微妙なものは、受信するというような設定もできます。
迷惑メールっぽいメールが、すり抜けるたり、迷惑メールとして、誤判断するときが、時折ありますが、SpamAssasinの初期より精度が高く、サーバ管理者は楽になります。
Postfix回り、回りのツール類の設定が楽です。
Postfix 連携
1 2 3 4 5 6 |
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)
https://rspamd.com/announce/2019/10/11/rspamd-2.0.html
yum updateでアップデートをしましたが、
問題なくアップデートされたようです・・・
1.9.4 -> 2.0へのアップでした。
今回で、CentOS6は、サポート外になり、CentOS8がパッケージ対象として
追加されたようです・・・
これから、様子を見ていこうと思います。
Rspamd 2.2リリース(2019/11/23)
Rspamd 2.2がリリースされました。
yum updateで、アップデートできました・・
1 2 3 4 5 6 7 8 9 10 11 |
# 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傘下にある会社。
今度、試してみたいと思います。