- 追加された行はこの色です。
- 削除された行はこの色です。
#author("2018-05-10T23:33:19+09:00","default:nowsky","nowsky")
#author("2018-05-13T17:18:30+09:00","default:nowsky","nowsky")
*Rspamd [#kfbc9f81]
スパムメールチェック、メール電子署名、外部プログラム連携を実装するメール管理ソフトウェア。
スパムメール・ウイルスメールチェックを実装する場合、従来は複数のソフトウェアを組み合わせる必要があったが、
Rspamdを使用すると設定が簡素化される為、メンテナンス性が向上する。
殆どのコンポーネントはSQLiteにデータを書き込むが、NeuralNetworkプラグインなど高速処理が必要な物は、
Redis(RemoteDictionaryServer)にデータを書き込む為、Redisも構築を行う必要がある。
~
*参考サイト [#k13967fe]
-[[Rspamd:+https://rspamd.com/]]
-[[Soukaku's HENA-CHOKO Blog:+https://www.downtown.jp/~soukaku/archives/2017/1118_175322.html]]
-[[Rspamdで迷惑メールを判定:+https://gato.intaa.net/archives/9407]]
~
*構築環境 [#r4abcaa7]
-[[配布サイト:+https://github.com/vstakhov/rspamd/releases/]]
-[[公式ドキュメント:+https://rspamd.com/doc/]]
#block
|LEFT:80|LEFT:180|LEFT:180|c
|CENTER:~Parameter|CENTER:~SERVER-A|CENTER:~SERVER-B|h
|&color(#2020ff){OS};|openSUSE Leap 42.3|openSUSE Leap 42.3|
|&color(#2020ff){IP};|10.0.0.1|10.0.0.2|
|&color(#2020ff){USER};|>|rspamd|
|&color(#2020ff){GROUP};|>|rspamd|
|&color(#2020ff){VERSION};|>|v1.7.4|
|&color(#2020ff){PREFIX};|>|/usr/lcoal/rspamd-1.7.4|
#block(next)
未設画像
#block(end)
~
*インストール [#n591e033]
-&size(16){&font(b){1. インストール};};
yum/apt-get/zypper辺りのパッケージ管理でもインストールする事が出来るが、
Rspamd公式がオフィシャルパッケージを推奨している為、今回はソースコードをビルドして利用する。
構築例ではopenSUSEを利用しているがCentOS/Debianでも同手順で構築可能である。
# zypper install ragel libevent-devel sqlite3-devel file-devel
# zypper install lua lua-devel lua51-luajit lua51-luajit-devel
# zypper install pcre-devel pcre2-devel libfann-devel libfann2
# zypper install jemalloc-devel libjemalloc2 gd-devel
# cd /usr/local/src
# wget https://github.com/vstakhov/rspamd/archive/1.7.4.tar.gz
# tar zxvf 1.7.4.tar.gz
# cd rspamd-1.7.4
# cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/rspamd \
-DINSTALL_EXAMPLES=ON \
-DINSTALL_WEBUI=ON \
-DENABLE_JEMALLOC=ON \
-DENABLE_LUAJIT=ON \
-DENABLE_SQLITE=ON \
-DENABLE_REDIRECTOR=ON \
-DENABLE_URL_INCLUDE=ON \
-DENABLE_TORCH=ON \
-DENABLE_FANN=ON \
-DENABLE_PCRE2=ON \
-DENABLE_GD=ON
# make && make install
-&size(16){&font(b){2. 起動準備};};
実行ユーザ、systemdスクリプト、ログローテート設定を準備する。
systemdスクリプトにはLimitNOFILEを埋め込み、ファイルディスクリプタを上書きする。
設定ファイル・インストール先ディレクトリも書き換えている為、
環境に合わせて名前も変更する。
# vi /usr/lib/systemd/system/rspamd.service
---
[Unit]
Description=rapid spam filtering system
After=nss-lookup.target network-online.target
Documentation=https://rspamd.com/doc/
[Service]
LimitNOFILE=1048576
NonBlocking=true
ExecStart=/usr/local/rspamd/bin/rspamd -c /etc/rspamd/rspamd.conf -f
ExecReload=/bin/kill -HUP $MAINPID
User=rspamd
Group=rspamd
RuntimeDirectory=rspamd
RuntimeDirectoryMode=0755
Restart=always
[Install]
WantedBy=multi-user.target
# vi /etc/logrotate.d/rspamd
---
/var/log/rspamd/rspamd.log {
weekly
compress
rotate 4
missingok
ifempty
sharedscripts
create 0644 rspamd rspamd
postrotate
systemctl restart rspamd > /dev/null 2>/dev/null || true
endscript
}
# groupadd rspamd
# useradd -g rspamd -s /sbin/nologin rspamd
# mkdir /var/log/rspamd /var/lib/rspamd
# chown rspamd.rspamd /var/log/rspamd /var/lib/rspamd
# cd /usr/local
# mv rspamd rspamd-1.7.4
# ln -s /usr/local/rspamd-1.7.4 rspamd
# ln -s /usr/local/rspamd/etc/rspamd /etc/rspamd
-&size(16){&font(b){3. 基礎設定};};
初期設定はコンフィグウィザードを利用するが、細かい設定は直接編集する必要がある。
ただし、Rspamdのコンフィグは階層化されており、
既存設定に追記する物は&color(#2020ff){ "local.d" };ディレクトリに設定し、
設定を上書きする場合は&color(#2020ff){ "override.d" };ディレクトリに保存する必要がある。
また、設定ファイルの拡張子も [.conf][.inc] の二つが存在する。
利用する拡張子は設定ファイル毎に違う為、呼び出し元ファイルを確認する。
また、モジュールを無効化する場合は [enabled = false;] のみを記載した設定を作成し、
"local.d" 内に無効化したいモジュール名で保存する。
Redisの接続パスワード、DKIM設定などは環境に合わせて設定する。
# rspamadm configwizard
---
・設定の開始
Do you wish to continue?[Y/n]: y
・WEB管理画面の設定
Controller password is not set, do you want to set one?[Y/n]: y
Enter passphrase:
・Redisの設定
Do you wish to set Redis servers?[Y/n]: y
Input read only servers separated by `,` [default: localhost]: localhost
Input write only servers separated by `,` [default: 127.0.0.1]: 127.0.0.1
Do you have any password set for your Redis?[y/N]: y
Do you have any specific database for your Redis?[y/N]: y
・DKIM設定(今回は未使用)
Do you want to setup dkim signing feature?[y/N]: n
・トークンタイムアウト
Expire time for new tokens [100d]: 100d
・設定の出力
Reset previous data?[y/N]: y
・データイニシャライズ
Do you wish to convert them to Redis?[Y/n]: y
・設定の保存
Apply changes?[Y/n]: y
-&size(16){&font(b){4. オプション設定};};
ウィザードの設定だけでは細かい制御が出来ない為、ローカル設定を別途作成する。
モジュール概要は [[公式ドキュメント:+https://rspamd.com/doc/modules/]] がパラメータを公開しているのでそちらを参照
--"local.d/actions.conf"
#region(&color(#ff0000){設定内容};)
[[コチラ:+https://gato.intaa.net/archives/12407]] で解説している迷惑メール判定閾値の変更
reject = null;
add_header = 10;
greylist = null;
#endregion
--"local.d/classifier-bayes.conf"
#region(&color(#ff0000){設定内容};)
Rspamd学習データを格納するSQLiteの設定
backend = "sqlite3";
languages_enabled = true;
min_tokens = 11;
min_learns = 200;
tokenizer {
name = "osb";
}
cache {
path = "${DBDIR}/learn_cache.sqlite";
}
statfile {
symbol = "BAYES_HAM";
path = "${DBDIR}/bayes.ham.sqlite";
spam = false;
}
statfile {
symbol = "BAYES_SPAM";
path = "${DBDIR}/bayes.spam.sqlite";
spam = true;
}
#endregion
--"local.d/history_redis.conf"
#region(&color(#ff0000){設定内容};)
Redisの制御設定。nrowsはデフォルト値から増強する事を推奨。
servers = 127.0.0.1:6379;
key_prefix = "rs_history";
nrows = 10000;
compress = true;
subject_privacy = false;
#endregion
--"local.d/logging.inc"
#region(&color(#ff0000){設定内容};)
Rspamdのログ保存設定。ファイル直書き・syslog出力の二つが出来る。
デバッグログを設定すると、特定もモジュールのみデバッグログ出力する事も出来る。
type = "file";
filename = "/var/log/rspamd/rspamd.log";
log_urls = true;
log_re_cache = true;
debug_modules = [];
#endregion
--"local.d/mime_types.conf"
#region(&color(#ff0000){設定内容};)
メール添付ファイル種類毎のスコア設定。
攻撃に使われやすい拡張子を高スコア設定にしたり、強制削除フラグを付与する。
bad_extensions = {
ace = 4,
arj = 4,
bat = 2,
cab = 3,
com = 2,
exe = 1,
jar = 2,
lnk = 4,
scr = 4,
};
bad_archive_extensions = {
pptx = 0.1,
docx = 0.1,
xlsx = 0.1,
pdf = 0.1,
jar = 3,
js = 0.5,
vbs = 4,
};
archive_extensions = {
zip = 1,
arj = 1,
rar = 1,
ace = 1,
7z = 1,
cab = 1,
};
#endregion
--"local.d/options.inc"
#region(&color(#ff0000){設定内容};)
Rspamdの基本動作設定。DNSサーバのロードバランス、RspamdCluster設定もこのファイルで行う。
RspamdにはC言語モジュール・LUAモジュールの二つが存在するが、
C言語モジュールの読込み設定はこのファイルの [filters] で設定する。
ただし、一部のLuaモジュールはC言語モジュールを必須としているので注意。
filters = "chartable,dkim,spf,surbl,regexp,fuzzy_check";
raw_mode = false;
one_shot = false;
dns {
# nameserver = "master-slave:127.0.0.1:53:10,8.8.8.8:53:1";
timeout = 1s;
sockets = 16;
retransmits = 5;
}
classify_headers = [
"User-Agent",
"X-Mailer",
"Content-Type",
"X-MimeOLE",
];
history_rows = 10000;
allow_raw_input = true;
words_decay = 10000;
local_addrs = "127.0.0.1/32";
#endregion