Rspamd

スパムメールチェック、電子署名付与、外部プログラム連携を実装するメール管理ソフトウェア。
スパムフィルタ・ウイルスチェックを実装する場合、従来は複数のソフトウェアを組み合わせていたが、
Rspamdのみで管理する事が出来るのでメンテナンス性が向上する。
 
殆どのコンポーネントはSQLiteにデータを書き込むが、
ニューラルネットワーク、メール構文解析など高度・高速処理が必要な物は、
Redis(RemoteDictionaryServer)にデータを書き込む為、Redisも構築する必要がある。

参考サイト

構築環境

  • 配布サイト
  • 公式ドキュメント
     
    IP/FQDNSERVER-ASERVER-B
    OSopenSUSE Leap 42.3openSUSE Leap 42.3
    IP10.0.0.110.0.0.2
    FQDNmx1.test.orgmx2.test.org
    SQLitelocalhostlocalhost
    Redis127.0.0.1127.0.0.1
    MAILtest-mail☆mail.test.org
    ※ MAILの星マークは「@」に置換して下さい
     
    ParameterSERVER-ASERVER-B
    USERrspamd
    GROUPrspamd
    VERSIONv1.7.4
    PREFIX/usr/local/rspamd
    DB/var/lib/rspamd
    ※ PREFIXは後でバージョン番号にリネームして下さい
    left,nowrap

インストール

  • 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
     
  • 2. 起動準備
    実行ユーザ、systemdスクリプト、ログローテートを設定しておく。
    Rspamdはファイル入出力を多量に使う為、
    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
     
  • 3. 基礎設定
    初期設定にはコンフィグウィザードを利用出来るが、細かい設定は直接編集する必要がある。
    Rspamdのコンフィグは優先度順に階層化されており、棲み分けは下記の通りとなる。
    • 既存設定に追記修正する物は "local.d" ディレクトリ内に設定
    • 設定を強制上書きする場合は "override.d" ディレクトリに保存
    • デフォ設定を直編集する時は "modules.d" ディレクトリを編集

ただし、基本的には "local.d" にて設定を上書修正しておき、
モジュールを無効化する場合のみ "override.d" 内に "enabled=false" を1行記載する。
 
設定ファイルの拡張子は ".conf/.inc" の二つが存在する。
対応する拡張子は設定ファイル毎に違う為、呼び出し元となる "modules.d" を都度確認する。

# 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

・Redisのイニシャライズ
Do you wish to convert them to Redis?[Y/n]: y

・設定の保存
Apply changes?[Y/n]: y

 

  • 4. オプション設定
    ウィザードだけでは細かい設定が出来ない為、モジュール毎のコンフィグを直編集する。
    なお、下記は特に重要となる項目の参考値のみ記載。
     
    各モジュールの概要・設定項目は公式ドキュメントを確認した上で設定する。
    ただし、物によってはドキュメントに記載されていないが、モジュールに直編集する事が可能な場合がある為、
    必要に応じてソースコードも確認する。
    • local.d/actions.conf
       設定内容
  • local.d/classifier-bayes.conf
     設定内容
  • local.d/dkim_signing.conf
     設定内容
  • local.d/history_redis.conf
     設定内容
  • local.d/logging.inc
     設定内容
  • local.d/milter_headers.conf
     設定内容
  • local.d/mime_types.conf
     設定内容
  • local.d/options.inc
     設定内容
  • local.d/phishing.conf
     設定内容
  • local.d/redis.conf
     設定内容
  • local.d/worker-controller.inc
     設定内容
     
  • 5. WebGUI画面
    RspamdはWebUIを備えており、WebUIからメール解析状況の確認・スパムメール学習などを行う事が出来る。
    通常は、IP:127.0.0.1/TCP:11334で待ち受けているが変更する事も出来る。
    ただし、WebUIは通信暗号化に対応していない為、SSL化を行う場合にはNginxをリバプロ動作させる必要がある。
    設定方法はオフィシャルで公開されているのでそちらを参照。
    例としてSSL通信を強制しつつ、リバプロ動作させるNginx設定を下記記載する
  • nginx.conf
     設定内容
     
  • 6. クラスタリング
    Rspamdはクラスタリング構成を取る事が出来る。
    ただ、クラスタリングと言っても一般的なActive/Activeクラスタでは無く、
    WebUIを通した管理通信をクラスタ内のサーバへ同時適用する事や、
    ステータスをクラスタ全体で合算して表示するなど管理統合に限定される。
    例として Master:10.0.0.1、Slave:10.0.0.2 でクラスタを構築する設定例を記載する
  • local.d/options.inc
     設定内容
  • local.d/worker-controller.inc
     設定内容

スパム判定

  • A. 正規・迷惑メール学習
    正確にスパムメール判定を行う為には、大量のスパムメールと正規メールの学習が必要になる。
    本番環境で学習を行う場合、ユーザ領域を直接処理するとデッドロックする可能性がある為、
    ProcMail等で全メールを別ディレクトリにコピーしておき、ユーザアクセス領域とは別処理させる。
    ・迷惑メール学習(1通)
    # rspamc -c bayes -h 127.0.0.1:11334 learn_spam /${FilePath}/mail.eml
     
    ・迷惑メール学習(複数)
    # rspamc -c bayes -h 127.0.0.1:11334 learn_spam /${FilePath}/
     
    ・正常メール学習(1通)
    # rspamc -c bayes -h 127.0.0.1:11334 learn_ham /${FilePath}/mail.eml
     
    ・正常メール学習(複数)
    # rspamc -c bayes -h 127.0.0.1:11334 learn_ham /${FilePath}/
     
  • B. 迷惑メールヘッダー
    milter_headerの設定により迷惑メールヘッダーのスコアを変更出来る。
    大まかに、詳細パラメータで制御を行う物とシンボル制御の2種類がある。
    詳細は公式ドキュメントのmilter_header項目を参照。
    • [x-spamd-bar]
       ヘッダー情報
  • [x-spamd-result]
     ヘッダー情報
  • [x-spam-status]
     ヘッダー情報

添付ファイル: filewiki_rspamd_01.png 23件 [詳細]