Rspamdで「ウィルス対策」「Spam対策」「DKIM・DMARC・ARC」対応を一気にしてしまいましょう。前回のクォータ設定ではDovecotの設定が中心でしたが、今回はPostfixの設定が中心となります。FreeBSD 14.1で動作確認しています。
RspamdとClamAVのインストール
Rsapmdとウィルスチェックに用いるClamAVをインストールしましょう。また、Rsapmdで用いる「redis」(キーバリュー型のデータベース)もインストールします。いつものごとく、pkgからインストールします。
pkg install -y rspamd clamav redis
これでインストールが完了します。
ClamAVの設定
/usr/lcoal/etc/clamd.conf
「/usr/local/etc/clamd.conf」に次のパッチを当てます。
*** /usr/local/etc/clamd.conf.sample Thu Sep 12 10:04:30 2024
--- /usr/local/etc/clamd.conf Wed Sep 18 02:31:45 2024
***************
*** 78,84 ****
# Optional path to the global temporary directory.
# Default: system specific (usually /tmp or /var/tmp).
! #TemporaryDirectory /var/tmp
# Path to the database directory.
# Default: hardcoded (depends on installation options)
--- 78,84 ----
# Optional path to the global temporary directory.
# Default: system specific (usually /tmp or /var/tmp).
! TemporaryDirectory /tmp
# Path to the database directory.
# Default: hardcoded (depends on installation options)
テンポラリディレクトリを「/var/tmp」から「/tmp」に変更しているだけです。
設定が終わったら、CalmAVを起動する前に最新のパターンファイルを導入します。
freshclam
このコマンドの実行には、少し時間がかかります。実行が終わったら
service clamav_clamd enable
service clamav_clamd start
service clamav_freshclam enable
service clamav_freshclam start
を実行して、ClamAVの起動をします。
clamav_clamdは、要求に応じてウィルススキャンを行うdaemonで、clamav_freshclamはパターンファイルを自動更新するdaemonです。
resisの設定
redisは初期設定のまま動かします。次のコマンドで実行してください。
service redis enable
service redis start
Rspamdの設定
次にRspamdの設定を行います。まずは、ディレクトリを作成します。
mkdir /usr/local/etc/rspamd/local.d
次に、初期設定ファイルをこのフォルダに配置します。
/usr/local/etc/rspamd/local.d/antivirus.conf
ウィルス検知を行わせるための設定ファイルになります。「/usr/local/etc/rspamd/local.d/antivirus.conf」ファイルを次の内容で作成します。
clamav {
action = "reject";
message = '${SCANNER}: virus fond: "${VIRUS}"';
symbol = "CLAM_VIRUS";
type = "clamav";
servers = "/var/run/clamav/clamd.sock";
whitelist = "/usr/local/etc/rspamd/antivirus.wl";
}
/usr/local/etc/rspamd/local.d/mx_check.conf
送信元が正しいMXサーバを持っているかどうか(正確には、Rsapmdの該当ページを参照してください)を確認するためのファイルです。「/usr/local/etc/rspamd/local.d/mx_check.conf」ファイルを次の内容で作成してください。
enabled = true;
/usr/local/etc/rspamd/local.d/milter_headers.conf
メールヘッダにどのような情報を書き出すかを設定するファイルになります。「/usr/local/etc/rspamd/local.d/milter_headers.conf」ファイルを次の内容で作成してください。
use = ["authentication-results", "x-spamd-bar"];
extended_spam_headers = yes;
routines {
authentication-results {
header = "Authentication-Results";
remove = 1;
add_smtp_user = true;
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-spamd-bar {
header = "X-Spamd-Bar";
positive = "+";
negative = "-";
neutral = "/";
remove = 0;
}
}
「SPF」「DKIM」「DMARC」の検証結果をヘッダに記録するとともに、SPAM判定についてのヘッダへの記録方法を指定しています。
/usr/local/etc/rspamd/local.d/dmarc.conf
受信側としてのDMARCの動作を決めるためのファイルです。「/usr/local/etc/rspamd/local.d/dmarc.conf」ファイルを次の内容で作成しますが、ドメインの部分(report_setting内)は書き換えてください。
reporting {
enabled = true;
}
actions = {
quarantine = "add_header";
reject = "reject";
}
send_reports = true;
report_settings {
org_name = "EXAMPLE.COM";
domain = "example.com";
email = "postmaster@example.com";
}
/usr/local/etc/rspamd/local.d/redis.conf
redisについての設定ファイルです。「/usr/local/etc/rspamd/local.d/redis.conf」ファイルを次の内容で作成してください。
write_servers = "localhost";
read_servers = "localhost";
/usr/local/etc/rspamd/local.d/multimap.conf
IPアドレス単位や送信者単位でSPAM判定を回避するホワイトリストを定義できるようにします。次の内容で「/usr/local/etc/rspamd/local.d/multimap.conf」ファイルを作成してください。
ip_whitelist {
type = "ip";
prefilter = "true";
map = "${DBDIR}/ip_whitelist.map";
symbol = "IP_WHITELIST";
action = "accept";
}
whitelist_sender_doamin {
type = "from";
filter = "email:domain";
map = "${DBDIR}/sender_domain_whitelist.map";
symbol = "WHITELIST_SENDER_DOMAIN";
action = "accept";
}
sender_from_whitelist_user {
type = "from";
filter = "email:user";
map = "${DBDIR}/sender_from_whitelist_user.map";
symbol = "SENDER_FROM_WHITELIST_USER";
action = "accept";
}
実際のホワイトリストは、許可IPアドレスが「/var/db/rspamd/ip_whitelist.map」、許可ドメインは「/var/db/rspamd/sender_domain_whitelist.map」、許可送信者は「/var/db/rspamd/sender_from_whitelist_user.map」になります。必要に応じて作成してください(ファイルが無くてもエラーにはなりません)。もしこれらのホワイトリストのファイルの作成したら
cd /var/db/rsoamd
chown rspamd:rspamd *
と所有者を変更し、Rsapmdが書き込めるようにしておいてください。
DKIMキーの生成
送信側としては「DKIMキー」を作成しなければなりません。そこでRspamdに作成させるとしましょう。次のコマンドを実行してください。
rspamadm configwizard
実行すると、次のような表示がされると思います。
____ _
| _ \ ___ _ __ __ _ _ __ ___ __| |
| |_) |/ __|| '_ \ / _` || '_ ` _ \ / _` |
| _ < \__ \| |_) || (_| || | | | | || (_| |
|_| \_\|___/| .__/ \__,_||_| |_| |_| \__,_|
|_|
Welcome to the configuration tool
We use /usr/local/etc/rspamd/rspamd.conf configuration file, writing results to /usr/local/etc/rspamd
Modules enabled: metadata_exporter, mid, settings, milter_headers, spf, dkim_signing, antivirus, rbl, neural, whitelist, phishing, chartable, force_actions, greylist, regexp, replies, multimap, mx_check, fuzzy_check, arc, trie, once_received, dkim, emails, dmarc, history_redis, asn, bayes_expiry, mime_types, hfilter, ratelimit, forged_recipients, maillist
Modules disabled (explicitly): aws_s3, dcc, external_relay, p0f, rspamd_update, bimi, http_headers, known_senders, gpt, spamtrap
Modules disabled (unconfigured): ip_score, dynamic_conf, reputation, maps_stats, clickhouse, spamassassin, fuzzy_collect, external_services, metric_exporter, elastic, url_redirector, clustering
Modules disabled (no Redis):
Modules disabled (experimental):
Modules disabled (failed):
Do you wish to continue?[Y/n]:
「続けますか?」と聞かれているので、そのままENTERキーを押します。
Setup WebUI and controller worker:
Controller password is not set, do you want to set one?[Y/n]:
WebUI(Rsapmdの動作確認等がWebから行えます)のパスワードを設定するように求められますので、そのままENTERキーを押します。
Enter passphrase:
と表示されたら、パスワードを入力します。
Set encrypted password to: $2$ygdum7x8rsohx7kccyeoaswoh4uxk6t4$xtei4ghhg95ktetpidimaraj1ibe9p66gwirqz14h71wyn96ef9b
と表示されますが、これは入力したパスワードのハッシュ値で、これが設定ファイルに書き込まれます。設定ファイルは「/usr/local/etc/rspamd/local.d/worker-controller.inc」になります。続けて
Do you want to setup dkim signing feature?[y/N]:
と聞かれます。DKIMキーをすでに生成している(及びバックアップを取ってある)のであれば、このままENTERキーを押して無視できますが、初回は生成するので、「Y」と入力してからENTERキーを押します。
How would you like to set up DKIM signing?
1. Use domain from mime from header for sign
2. Use domain from SMTP envelope from for sign
3. Use domain from authenticated user for sign
4. Sign all mail from specific networks
Enter your choice (1, 2, 3, 4) [default: 1]:
デフォルトで構いませんので、そのままENTERキーを押します。
Do you want to sign mail from authenticated users? [Y/n]:
認証されたユーザからのメールにDKIMで署名するかどうか聞かれます。そのままENTERキーで大丈夫です。
Allow data mismatch, e.g. if mime from domain is not equal to authenticated user domain? [Y/n]:
認証されたユーザのドメインと送信元ドメインの不一致などを認めるかどうか、と聞かれますので、そのままENTERキーを入力します。
Do you want to use effective domain (e.g. example.com instead of foo.example.com)? [Y/n]:
有効なドメインを使うかどうか、と聞かれるので、これもそのままENTERキーを押します。
Enter output directory for the keys [default: /var/db/rspamd/dkim/]:
デフォルトのキーファイルが配置されるディレクトリを選択します。「/var/db/rspamd/dkim/」ディレクトリ配下になります。このままで大丈夫ですので、そのままENTERキーを押します。
Enter domain to sign:
DKIMでサインするドメインを聞かれるので、ドメイン(例えばexample.com)を入力します。
Enter selector [default: dkim]:
DKIMのキーのセレクタ(デフォルトではdkim)を聞かれます。そのままで大丈夫ですのでENTERキーを押します。
Do you want to create privkey /var/db/rspamd/dkim/example.com.dkim.key[Y/n]:
秘密鍵ファイル(この例では「/var/db/rspamd/dkim/example.com.dkim.key」)を作成しますか?と聞かれています。必要ですので、ENTERキーを押します。
次に「DKIMキーの公開鍵」が表示されます。これをDNSにセットするので、必ずコピーしてください。今回の例では、次のように表示されます。
You need to chown private key file to rspamd user!!
To make dkim signing working, to place the following record in your DNS zone:
v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuo9TwwGFJSrM2vxvs4mhp1zYtVxyGoMCF+7v8nn/Ov9aESeLiMRzWX/SvhbXtOjqi36rp5ytoFmrZgjLrJJqW/SkEbOlFgYnso9ERHNQ5qIwOk/I7WL6/SRi8SNSul0F2YmvtXYavbuBZxH/v4jSL2nM2UNqRHc1FKFWOTVOfca1PP6yXmnIdm5m8c3hotGWMtpnrY1FY+ZCYkeOsPmMokKRlsXN8kqgGB2jmptuoXy3f4yw49pwoj0/lG5Xipwzyoy7VRz8eO7JyGIc5LQTiKNA47emrcQmWprtHTgvU/j4gVoRnRYSH2yZMWP8XNUwdMMpL+naPhIYKw20t1L1fwIDAQAB
Do you wish to add another DKIM domain?[y/N]:
「v=DKIM1; k=rsa p=...」の部分がDNSに登録する部分です。繰り返しますが、必ずDKIMの公開鍵をコピーしてください。必要なのは、「v=DKIM1; k=rsa; p=...」の部分です。
「別のドメインのDKIMキーを追加するかどうか」を聞かれていますので、必要ならば「Y」とENTERキーを入力しキーの作成を繰り返してください。必要なDKIMキーが揃えば、そのままENERキーを押して終了します。
File: /usr/local/etc/rspamd/local.d/dkim_signing.conf, changes list:
use_domain => header
allow_hdrfrom_mismatch => true
domain => {[example.com] = {[selector] = dkim, [path] = /var/db/rspamd/dkim/example.com.dkim.key}}
allow_username_mismatch => true
sign_authenticated => true
use_esld => true
allow_hdrfrom_mismatch_sign_networks => true
Apply changes?[Y/n]:
と、「/usr/local/etc/rspamd/local.d/dkim_signing.conf」に変更を加えていいかどうか聞かれますので、そのままENTERキーを押して、変更を確定します。
Create file /usr/local/etc/rspamd/local.d/dkim_signing.conf
1 changes applied, the wizard is finished now
*** Please reload the Rspamd configuration ***
/usr/local/etc/rspamd/local.d/arc.conf
ARCの署名に必要なファイルを用意します。次のコマンドを実行して、雛形を作ります。
cd /usr/lcoal/etc/rspamd/local.d
cp dkim_signing.conf arc.conf
次に、arc.confの編集を行います。最初は次のようになっています。
use_domain = "header";
allow_hdrfrom_mismatch = true;
allow_hdrfrom_mismatch_sign_networks = true;
allow_username_mismatch = true;
domain {
exmple.com {
path = "/var/db/rspamd/dkim/example.com.dkim.key";
selector = "dkim";
}
example.net {
path = "/var/db/rspamd/dkim/example.net.dkim.key";
selector = "dkim";
}
}
use_esld = true;
必要なのは「domain {...}」の部分だけなので、それ以外を削除してしまいます。
domain {
exmple.com {
path = "/var/db/rspamd/dkim/example.com.dkim.key";
selector = "dkim";
}
example.net {
path = "/var/db/rspamd/dkim/example.net.dkim.key";
selector = "dkim";
}
}
これでこのファイルは完成です。
DKIMキーの所有者の変更
次に、キーファイルの所有者を変更します。シェルで次のコマンドを実行します。
cd /var/db/rsapmd/dkim
chown rspamd:rspamd *
これをしないと、RpamdがDKIMの秘密鍵を読み込めず、メールの署名に失敗します。
ここまで設定したら、「/usr/local/etc/rspamd.conf」ファイルと、「/usr/local/etc/rspamd/local.d/」フォルダ配下のファイルは、バックアップを取っておくといいと思います。また、「/var/db/rspamd/dkim/」フォルダ配下のファイルもバックアップが必要です。
Rspamdの実行
では、Rspamdを実行しましょう。次のコマンドを入力してください。
service rspamd enable
service rspamd start
これでRsapmdが起動しました。
DNSの設定
DNSにDKIMキーを設定する必要があります。また、DMARCにも対応するため、必要なレコードを追加します。ゾーンファイルに次の値を設定します。
ホスト | レコードのタイプ | |
@ | TXT | "v=spf1 mx ~all" |
_domainkey | TXT | "t=y; o=~" |
dkim._domainkey (DKIMキー.domainkey) | TXT | Rsapmdで表示された公開鍵(長いですが1行で)。例えば… "v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuo9TwwGFJSrM2vxvs4mhp1zYtVxyGoMCF+7v8nn/Ov9aESeLiMRzWX/SvhbXtOjqi36rp5ytoFmrZgjLrJJqW/SkEbOlFgYnso9ERHNQ5qIwOk/I7WL6/SRi8SNSul0F2YmvtXYavbuBZxH/v4jSL2nM2UNqRHc1FKFWOTVOfca1PP6yXmnIdm5m8c3hotGWMtpnrY1FY+ZCYkeOsPmMokKRlsXN8kqgGB2jmptuoXy3f4yw49pwoj0/lG5Xipwzyoy7VRz8eO7JyGIc5LQTiKNA47emrcQmWprtHTgvU/j4gVoRnRYSH2yZMWP8XNUwdMMpL+naPhIYKw20t1L1fwIDAQAB" |
_adsp._domainkey | TXT | "dkim=unknown" |
_dmarc | TXT | "v=DMARC1; p=none;" |
SPFの設定例も載せてありますが、送信元をMXホストに設定しています。もちろん、「"v=SPF1 ip4:192.168.0.1 ~all"」等でも構いませんので、実態に応じて変更してください。DKIMとDMARCの設定としては最小限になっています。
Postfixの設定
ここまで設定したら、PostfixとRsapmdを連携させます。次のパッチを「/usr/local/etc/postfix/main.cf」に当ててください。
*** main.cf.orig Wed Nov 6 07:09:04 2024
--- main.cf Wed Nov 6 07:09:10 2024
***************
*** 752,754 ****
--- 752,759 ----
# Thunderbird Workaround
# (This allows Thunderbird to recognize STARTTLS when create account)
smtpd_forbid_unauth_pipelining = no
+
+ # mail filter
+ smtpd_milters = inet:localhost:11332
+ non_smtpd_milters = $smtpd_milters
+ milter_default_action = accept
この変更を行って、Postfixに設定ファイルを読み込ませれば設定完了です。では次のコマンドを実行してください。
service postfix reload
メールの送受信をして、問題がないかどうか確認してみてください。
DKIM・DMARCの設定チェック
Gmailのアカウントを持っていれば、簡単に署名が行われているかどうか確認できます。Gmailにメールを送信し、WebでGmailにアクセスして受信し、そのメッセージのソースを確認すると、DKIM・DMARCの対応がきちんとできているかどうか確認ができます。成功していれば次にように「SPF」「DKIM」「DMARC」に'PASS'と表示されるはずです。