#author("2018-05-10T15:46:03+09:00","default:nowsky","nowsky")
*Rspamd [#e4dfc9e1]
スパムメールチェック、メール電子署名、外部プログラム連携を実装するメール管理ソフトウェア。
スパムメール・ウイルスメールチェックを実装する場合、従来は複数のソフトウェアを組み合わせる必要があったが、
Rspamdを使用すると設定が簡素化される為、メンテナンス性が向上する。
 
殆どのコンポーネントはSQLiteにデータを書き込むが、NeuralNetworkプラグインなど高速処理が必要な物は、
Redis(RedisDictionaryServer)にデータを書き込む為、Redisも構築を行う必要がある。
#author("2018-05-10T17:12:13+09:00","default:nowsky","nowsky")
*Redis [#yef8d23a]
Redis(RemoteDictionaryServer)はインメモリデータベースを構築するソフトウェア。
全データをメモリ展開する為、ファイル書き込み型のRDBと比較して超高速動作する。
設定次第ではクエリ数に応じて自動的にファイルダンプする事も出来る為、
一定時間毎のデータ完全製を保つ事も可能となっている。
~
*参考サイト [#vc4f89ef]
-[[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]]
*参考サイト [#x15cd3cf]
-[[Redis:+https://redis.io/]]
-[[Redis Documentation:+https://redis.io/documentation]]
~
*構築環境 [#uffc015e]
-[[配布サイト:+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)
~
*インストール [#td80b960]
-&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
*インストール [#s7207449]
-&size(16){&font(b){1. インストール・起動準備};};
ディストリビューション毎にメンテナンスしているRedisでも基本機能は問題無い為、
今回はパッケージ管理でインストールを行う。
systemdスクリプトのシャットダウンコマンドは、Redisの待ち受けポートを設定している為、
環境に合わせてポート番号を変更する。
 # zypper install redis
 # cp /etc/redis/default.conf.example /etc/redis/default.conf
 # vi /usr/lib/systemd/system/redis*
 # vi /usr/lib/systemd/system/redis.service
 ---
 [Unit]
 Description=rapid spam filtering system
 After=nss-lookup.target network-online.target
 Documentation=https://rspamd.com/doc/
 Description=Redis is in-memory data structure store
 After=network.target
 
 [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
 LimitNOFILE=8192
 Type=notify
 User=redis
 Group=redis
 ExecStart=/usr/sbin/redis-server /etc/redis/default.conf
 ExecStop=/usr/bin/redis-cli -p 6379 shutdown
 
 [Install]
 WantedBy=multi-user.target
 
 # vi /etc/logrotate.d/rspamd
 # /etc/logrotate.d/redis
 ---
 /var/log/rspamd/rspamd.log {
 /var/log/redis/*.log {
     weekly
     compress
     rotate 4
     notifempty
     copytruncate
     su redis redis
     missingok
     ifempty
     sharedscripts
     create 0644 rspamd rspamd
     postrotate
         systemctl restart rspamd > /dev/null 2>/dev/null || true
     endscript
 }

-&size(16){&font(b){2. 起動確認};};
サービスを起動させるには、他のプログラムと同じくsystemctlで実行する。
Redisにはサービスの起動状態を確認するコマンドが用意されている。
設定は環境に合わせて行うが、maxmemory設定を入れておかないとメモリを食い潰すので注意する。
 # vi /etc/redis/default.conf
 ---
 maxmemory 256MB
 
 # groupadd rspamd
 # useradd -g rspamd -s /sbin/nologin rspamd
 # mkdir /var/log/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" 内に無効化したいモジュール名で保存する。
 # systemctl enable redis.service
 # systemctl start redis
 # redis-cli ping
 ---
 PONG