DMARCレポートツール「parsedmarc」をインストール
前に試したオープンソースのツールはうまくインストールできなかったので、他にいいツールはないものかと検索し、parsedmarcをインストールしたときの覚書。
環境: CentOS Stream 9, Python 3.9.17
1.parsedmarcとは?
オープンソースのDMARC解析ツール。
IMAPやAPI経由でDMARCレポートのメールを解析して、他のシステムが使いやすい形式で出力する。
Python製。
オープンソースの全文検索エンジン「Elasticsearch 」とダッシュボード可視化ツール「Kibana」と組み合わせることで、グラフ形式で分かりやすく可視化することが可能。
公式サイト
- parsedmarc documentation - Open source DMARC report analyzer and visualizer — parsedmarc 8.6.1 documentation
- GitHub | domainaware/parsedmarc: A Python package and CLI for parsing aggregate and forensic DMARC reports
- parsedmarc · PyPI
ここで
「GoogleのLooker StudioでDMARCレポートを表示できる方法があるのでは?」
と思って調べたけど、今はないみたい。
2.parsedmarcをインストール
公式サイトに従ってPythonの環境を整える。
# dnf install python39 python3-virtualenv python3-setuptools python3-devel libxml2-devel libxslt-devel
parsedmarcユーザーを追加する。
# useradd parsedmarc -r -s /bin/false -m -b /opt
parsedmarcユーザー権限でPython仮想環境を作る
# sudo -u parsedmarc virtualenv /opt/parsedmarc/venv
Python仮想環境に入る。
# source /opt/parsedmarc/venv/bin/activate
parsedmarcユーザー権限でparsedmarcをインストール。
(venv)# sudo -u parsedmarc /opt/parsedmarc/venv/bin/pip install -U parsedmarc
(venv)# parsedmarc --version
parsedmarc-8.6.1がインストールされた。
3.parsedmarcの設定ファイル生成して動作テスト
公式サイトのサンプルを見ながら設定ファイルを作る。
参考: Using parsedmarc — parsedmarc 8.6.1 documentation
(venv)# cd /opt/parsedmarc/
(venv)# vi parsedmarc.ini
[general]save_aggregate = Truesave_forensic = True[imap]host = imap.mail.jpuser = dmarc@mail.jppassword = password[mailbox]watch = Truedelete = False#[elasticsearch]#hosts = 127.0.0.1:9200#ssl = False
実行してみる。
(venv)# parsedmarc -c /opt/parsedmarc/parsedmarc.ini --debug
監視状態になるので、dmarcレポートが付いたメールをこのメールアドレス(上の例ではdmarc@mail.jp)へ転送してみる。
「Quit with ctrl-c」と書いてあるけどctrl-cで止まらない。
ctrl-zで停止できる。
そのうち修正されていると思う。
Python仮想環境から出る。
(venv)# deactivate
4.Elasticsearchをインストール
parsedmarcで処理した後、可視化するにはElasticsearchとKibanaをインストールする必要がある。
まずは全文検索エンジン「Elasticsearch」をインストールする。
参考: Install Elasticsearch with RPM | Elasticsearch Guide [8.10] | Elastic
RPMリポジトリを登録してdnfインストール。
# rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
# vi /etc/yum.repos.d/elastic.repo
[elasticsearch]name=Elasticsearch repository for 8.x packagesbaseurl=https://artifacts.elastic.co/packages/8.x/yumgpgcheck=1gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearchenabled=0autorefresh=1type=rpm-md
# dnf install --enablerepo=elasticsearch elasticsearch
8.10.2-1がインストールされた。
パスワードが表示されるのでメモしておく。
パスワードを保存してサービス起動。
# echo "aaa-bbb-ccc" > /opt/parsedmarc/elasticsearch_pwd.tmp
# chmod 644 /opt/parsedmarc/elasticsearch_pwd.tmp
# systemctl start elasticsearch
エラー。
ログを確認。権限のエラーだった。
# less /var/log/messages
サービスがelasticsearch_pwd.tmpを見れるようにする。
# chmod 755 /opt/parsedmarc/
サービス起動して確認
# systemctl start elasticsearch
# systemctl status elasticsearch
設定ファイルも確認
# less /etc/elasticsearch/elasticsearch.yml
動作確認。
SSLとパスワードを付けないとアクセスできないようになっている。
# curl --cacert /etc/elasticsearch/certs/http_ca.crt -u elastic:aaa-bbb-ccc https://localhost:9200
{"name" : "vm-dev1.hoge.co.jp","cluster_name" : "elasticsearch","cluster_uuid" : "78pYQychSJWnjsjTYh10pg","version" : {"number" : "8.10.2","build_flavor" : "default","build_type" : "rpm","build_hash" : "6d20dd8ce62365be9b1aca96427de4622e970e9e","build_date" : "2023-09-19T08:16:24.564900370Z","build_snapshot" : false,"lucene_version" : "9.7.0","minimum_wire_compatibility_version" : "7.17.0","minimum_index_compatibility_version" : "7.0.0"},"tagline" : "You Know, for Search"}
5.Kibanaをインストール
次にダッシュボード可視化ツール「Kibana」をインストールする。
参考: Install Kibana with RPM | Kibana Guide [8.10] | Elastic
リポジトリを追加してインストール。
# less /etc/yum.repos.d/elastic.repo
[kibana-8.x]name=Kibana repository for 8.x packagesbaseurl=https://artifacts.elastic.co/packages/8.x/yumgpgcheck=1gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearchenabled=1autorefresh=1type=rpm-md
# dnf install kibana
8.10.2-1がインストールされた。
何か大事そうなメッセージが表示された。
Kibana is currently running with legacy OpenSSL providers enabled! For details and instructions on how to disable see https://www.elastic.co/guide/en/kibana/8.10/production.html#openssl-legacy-providerCreated Kibana keystore in /etc/kibana/kibana.keystore/usr/lib/tmpfiles.d/elasticsearch.conf:1: Line references path below legacy directory /var/run/, updating /var/run/elasticsearch → /run/elasticsearch; please update the tmpfiles.d/ drop-in file accordingly.
サービスとして起動して確認。
# systemctl start kibana
# systemctl status kibana
設定ファイルも確認。
# less /etc/kibana/kibana.yml
ログ確認
# journalctl --unit kibana
httpでアクセスしてみる。
# curl http://localhost:5601/?code=898358
他の端末からアクセスするためにファイヤーウォールを停止
# systemctl stop firewalld
windowsからブラウザでアクセスしてみる。
…表示されない。
windowsのtelnetでアクセスしてみる。
PS> telnet vm-dev1 5601
接続できない。
他の端末から接続できるように設定ファイルを編集
参考: Configure Kibana | Kibana Guide [8.10] | Elastic
# less /etc/kibana/kibana.yml
#server.host: "localhost"server.host: "0.0.0.0"
再起動して接続確認。
# systemctl restart kibana
ブラウザでアクセスすると「Enrollment token」を貼り付けろと出る。
よくわからないけど、生成してみる。
# /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana
Verification requiredとなるので、kibana-verification-codeを実行してみる。
# /usr/share/kibana/bin/kibana-verification-code
コンソールに表示されたコードを入力するとConfigure Elastic to get startedになる。
Completing setupで進まない…。
ログ確認
# journalctl --unit kibana
Sep 28 14:06:57 vm-dev1.jp kibana[2509]: [2023-09-28T14:06:57.848+09:00][INFO ][plugins.securitySolution.endpoint:metadata-check-transforms-task:0.0.1] no endpoint installation found
分からない。
ローカルネットワークの仮想マシン上でやっているからかな?
Enrollment tokenを聞かれたのは「?code=898358」でアクセスしたからだと思う。
後で調査する。
6.parsedmarcとelasticsearchとkibanaを連携させる。
parsedmarcの設定ファイルにelasticsearchを追記。
# less /opt/parsedmarc/parsedmarc.ini
[elasticsearch]hosts = https://elastic:aaa-bbb-ccc@127.0.0.1:9200ssl = Truecert_path = /etc/elasticsearch/certs/http_ca.crt
parsedmarcをサービス化する。
参考: Using parsedmarc — parsedmarc 8.6.1 documentation
権限でエラーになったのでGroupはelasticsearchにした。
# vi /etc/systemd/system/parsedmarc.service
[Unit]Description=parsedmarc mailbox watcherDocumentation=https://domainaware.github.io/parsedmarc/Wants=network-online.targetAfter=network.target network-online.target elasticsearch.service[Service]Environment="PATH=/opt/parsedmarc/venv/bin/"ExecStart=/opt/parsedmarc/venv/bin/parsedmarc -c /opt/parsedmarc/parsedmarc.iniUser=parsedmarcGroup=elasticsearchRestart=alwaysRestartSec=5m[Install]WantedBy=multi-user.target
サービス起動、確認。
# chmod +x /etc/systemd/system/parsedmarc.service
# systemctl start parsedmarc
# systemctl status parsedmarc
エラーになったらログを確認して再起動。
# journalctl -f --unit parsedmarc
# systemctl daemon-reload
# systemctl restart parsedmarc
試しにdmarcレポートが付いたメールを転送してみる。
ログを監視しながら。
# journalctl -f
処理されているっぽいけどブラウザでkibanaにアクセスしても反映されているか分からない。
時間切れ。
また調査予定。