Rspamd

スパムメールチェック、メール電子署名、外部プログラム連携を実装するメール管理ソフトウェア。
スパムメール・ウイルスメールチェックを実装する場合、従来は複数のソフトウェアを組み合わせる必要があったが、
Rspamdを使用すると設定が簡素化される為、メンテナンス性が向上する。
 
殆どのコンポーネントはSQLiteにデータを書き込むが、NeuralNetworkプラグインなど高速処理が必要な物は、
Redis(RemoteDictionaryServer)にデータを書き込む為、Redisも構築を行う必要がある。

参考サイト

構築環境

  • 配布サイト
  • 公式ドキュメント
     
    ParameterSERVER-ASERVER-B
    OSopenSUSE Leap 42.3openSUSE Leap 42.3
    IP10.0.0.110.0.0.2
    USERrspamd
    GROUPrspamd
    VERSIONv1.7.4
    PREFIX/usr/lcoal/rspamd-1.7.4
    未設画像

インストール

  • 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スクリプト、ログローテート設定を準備する。
    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" ディレクトリに保存する必要がある。
    また、設定ファイルの拡張子も [.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
     
  • 4. オプション設定
    ウィザードの設定だけでは細かい制御が出来ない為、ローカル設定を別途作成する。
    モジュール概要は 公式ドキュメント がパラメータを公開しているのでそちらを参照
    下記は特に重要となる項目のみ参考として列挙。
  • "local.d/actions.conf"
     設定内容
  • "local.d/classifier-bayes.conf"
     設定内容
  • "local.d/history_redis.conf"
     設定内容
  • "local.d/logging.inc"
     設定内容
  • "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を備えており、メール解析状況の確認・スパムメール学習などを行う事が出来る。
    通常はIP:127.0.0.1/TCP:11334で待ち受けているが、設定により変更する事も出来る。
    ただし、WebUIは通信暗号化に対応していない為、SSL化を行う場合にはNginxをリバプロ動作させる必要がある。
    設定方法は オフィシャル で公開されているのでそちら参照の事。
    例としてSSL通信を強制しつつ、リバプロ動作させる設定を下記記載する
     設定内容
     
  • 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}/