在Ubuntu 18.04、16.04上设置ParseDMARC来分析DMARC报告

ParseDMARC是一个开源的,自托管的DMARC报告分析器。 对于那些不知道的人,DMARC是一种电子邮件安全标准,可以保护您的域名免受电子邮件欺骗,还可以识别传入的欺骗电子邮件以保护最终用户。 在上一篇文章中,我们讨论了如何为您的域名创建DMARC DNS记录,在本教程中,我们将在Ubuntu 18.04 / 16.04服务器上设置ParseDMARC,以便我们可以分析DMARC报告。

先决条件

假定您已经为域名创建了DMARC DNS记录。

为了生成可视化数据,ParseDMARC依赖于Elasticsearch和Kibana,两者都占用大量RAM。 安装后,它们将使用大约2G的RAM,并且需要更多的RAM来处理数据。 因此,您需要一台至少具有3G RAM的服务器。 您可以单击此特殊链接,以在DigitalOcean上获得$ 100的免费信用。 (仅适用于新用户)。 如果您已经是DigitalOcean用户,则可以单击此特殊链接以在Vultr上获得$ 50的免费信用(仅适用于新用户)。 在DigitalOcean或Vultr上拥有帐户后,请在服务器上安装Ubuntu 18.04或16.04,然后按照以下说明进行操作。

在Ubuntu 18.04或Ubuntu 16.04上安装ParseDMARC

ParseDMARC是一个Python程序,可以从PyPI(Python软件包索引)软件存储库中安装。 首先,我们需要在Ubuntu 18.04 / 16.04上安装Python软件包安装程序。 在以下命令中,我们安装了 python3-pip 软件包,因为ParseDMARC只能与Python 3一起使用。 geoipupdate 软件包用于更新MaxMind GeoIP数据库。

sudo apt install python3-pip geoipupdate

然后使用以下命令安装最新稳定版本的ParseDMARC。

sudo -H pip3 install -U parsedmarc

查看有关 parsedmarc 包,您可以运行

pip3 show -f parsedmarc

要查看命令行选项,请运行

parsedmarc --help

在Ubuntu 18.04 / 16.04上安装Elasticsearch和Kibana

ParseDMARC是一个命令行程序,它产生难以读取的输出。 如果要在基于Web的界面中查看可视化的DMARC报告,则需要安装其他两个开源程序: ElasticsearchKibana。 Elasticsearch是一个搜索和分析引擎,Kibana允许用户在Elasicsearch中使用图表将数据可视化。

我们可以使用以下命令从官方存储库安装Elasticsearch和Kibana。 Elasticsearch是用Java编程语言编写的,因此我们还安装了 default-jre-headless (Java运行时环境)包中的最后一个命令。

sudo apt-get install -y apt-transport-https

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list

sudo apt-get update

sudo apt-get install -y default-jre-headless elasticsearch kibana

默认情况下,Elasticsearch systemd服务被禁用。 您可以使用以下命令启动并启用它。

sudo systemctl start elasticsearch

sudo systemctl enable elasticsearch

然后检查状态。

systemctl status elasticsearch

我们可以看到它现在已启用并正在运行。 (提示:如果此命令没有立即退出,请按Q退出。)

我们还需要对Kibaba做同样的事情。

sudo systemctl start kibana

sudo systemctl enable kibana

检查状态。

systemctl status kibana

Parsedmarc Kibana

为Kibana设置Nginx反向代理

Kibana Web服务器监听 127.0.0.1:5601。 我们可以使用Nginx设置反向代理,以允许远程访问并保护Kibana Web界面。 运行以下命令从Ubuntu 18.04、16.04存储库安装Nginx。

sudo apt install nginx

为Kibana创建一个Nginx虚拟主机文件。

sudo nano /etc/nginx/conf.d/kibana.conf

将以下行放入文件中。 根据需要替换占位符,并且您应该为子域创建DNS A记录。

server {
      listen 80;
      server_name dmarc.yourdomain.com;

      access_log /var/log/nginx/dmarc.access;
      error_log /var/log/nginx/dmarc.error;

      add_header X-Frame-Options SAMEORIGIN; 
      add_header X-Content-Type-Options nosniff;

      location / {
         proxy_pass http://127.0.0.1:5601;
         proxy_set_header Host $host;
         proxy_set_header X-Real-IP $remote_addr;
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      }
}

保存并关闭文件。 然后测试Nginx配置。

sudo nginx -t

如果测试成功,请重新加载Nginx以使更改生效。

sudo systemctl reload nginx

现在,您可以在以下位置访问Kibana仪表板 dmarc.yourdomain.com。 点击 Explore on my own 按钮。

dmarc报告分析器开源

启用HTTPS

为了在您通过域名访问Kibana仪表板时对HTTP流量进行加密,我们可以通过安装由Let’s Encrypt发行的免费TLS证书来启用HTTPS。 运行以下命令在Ubuntu 18.04、16.04服务器上安装Let’s Encrypt客户端(certbot)。

sudo apt install certbot

如果使用Nginx,则还需要安装Certbot Nginx插件。

sudo apt install python3-certbot-nginx

接下来,运行以下命令以获取并安装TLS证书。

sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d dmarc.yourdomain.com

现在应该获得证书并自动安装。

自托管dmarc分析仪

限制访问Kibana仪表板

默认情况下,Kibana不提供用户身份验证。 为了仅允许受信任的用户访问Kibana仪表板,我们可以在Nginx中启用HTTP基本身份验证。 首先,我们需要安装 apache2-utils 提供以下内容的软件包 htpasswd 密码文件创建工具。

sudo apt install apache2-utils

然后运行以下命令来创建 admin 用户。 您将需要设置密码。

sudo htpasswd -c /etc/nginx/htpasswd admin

接下来,编辑Kibana虚拟主机文件。

sudo nano /etc/nginx/conf.d/kibana.conf

将以下两行添加到 listen 443 ssl 服务器块。

auth_basic "Login required";
auth_basic_user_file /etc/nginx/htpasswd;

保存并关闭文件。 然后测试Nginx配置。

sudo nginx -t

如果测试成功,请重新加载Nginx以使更改生效。

sudo systemctl reload nginx

现在,您在网络浏览器中重新加载了Kibana仪表板,然后将要求您输入用户名和密码。

kibana HTTP基本认证

配置ParseDMARC

为了使用ParseDMARC并将数据发送到Elastisearch,我们需要创建一个配置文件。

sudo nano /etc/parsedmarc.ini

将以下行放入文件中。 如有必要,请更换临时持有人。

[general]
# Save aggregate and forensic reports to Elasticsearch
save_aggregate = True
save_forensic = True

[imap]
# Log into the DMARC report email address and download data.
host = mail.yourdomain.com
port = 993
ssl = True
user = [email protected]
password = your_password_here
watch = True

[elasticsearch]
# Send data to Elastichsearch, which listens on port 9200.
hosts = 127.0.0.1:9200
ssl = False

[smtp]
# For sending email
host = mail.yourdomain.com
port = 587
ssl = True
user = [email protected]
password = your_password_here
from = [email protected]

# send results to this address
to = [email protected]

保存并关闭文件。

将ParseDMARC作为系统服务运行

我们可以手动运行ParseDMARC parsedmarc -c /etc/parsedmarc.ini (暂时不要运行此命令),但是在后台将ParseDMARC作为systemd服务运行更为方便。 使用以下命令为ParseDMARC创建系统服务单元文件。

sudo nano /etc/systemd/system/parsedmarc.service

将以下行放入文件中。

[Unit]
Description=parsedmarc mailbox watcher
Documentation=https://domainaware.github.io/parsedmarc/
Wants=network-online.target
After=network.target network-online.target elasticsearch.service

[Service]
ExecStart=/usr/local/bin/parsedmarc -c /etc/parsedmarc.ini
User=parsedmarc
Group=parsedmarc
Restart=always
RestartSec=5m

[Install]
WantedBy=multi-user.target

保存并关闭文件。 该系统服务将以 parsedmarc 用户,因此我们需要使用以下命令创建用户。

sudo adduser --system --no-create-home --group parsedmarc

我们还需要保护 /etc/parsedmarc.ini 文件,因此只有root和 parsedmarc 群组用户可以阅读。

sudo chown parsedmarc /etc/parsedmarc.ini

sudo chmod 600 /etc/parsedmarc.ini

ParseDMARC将需要将MaxMind GeoIP数据库下载到 /usr/share/elasticsearch/modules/ingest-geoip 目录,所以 parsedmarc 用户需要具有写权限。

sudo setfacl -R -m "u:parsedmarc:rwx" /usr/share/elasticsearch/modules/ingest-geoip/

现在,我们可以启动并启用parsedmarc systemd服务。

sudo systemctl start parsedmarc

sudo systemctl enable parsedmarc

检查状态。

systemctl status parsedmarc

parsedmarc系统服务

ParseDMARC将开始从报告电子邮件地址获取DMARC报告,并将其发送到Elasticsearch进行分析。 如果您有很多DMARC报告电子邮件,请耐心等待ParseDMARC完成其工作。

如果 parsedmarc 服务未处于活动状态(正在运行),您可以运行以下命令查看问题所在。

sudo journalctl -eu parsedmarc

在Kibana中导入ParseDMARC对象

要将Kibana仪表板与ParseDMARC一起使用,首先需要导入ParseDMARC对象。 您可以使用以下命令将其下载到本地Linux或Mac计算机上。

wget https://raw.githubusercontent.com/domainaware/parsedmarc/master/kibana/export.ndjson

如果您使用Windows,则只需复制https链接并将其粘贴到浏览器地址栏中即可下载数据。

然后在Elastic Home页面中,单击Kibana以访问Kibana仪表板。

弹性kibana仪表板

然后在Kibana仪表板中,单击 Add your data 按钮。

在Kibana仪表板中添加数据

接下来,选择 Saved Objects 然后点击 Import 按钮导入您下载的ParseDMARC对象。 导入parsedmarc kibana对象

分析Kibana中的DMARC报告

一旦ParseDMARC systemd服务完成电子邮件的阅读,DMARC报告数据将显示在Kibana中。 我认为最有用的报告是DMARC摘要。 您可以通过以下方式进行检查 Saved Objects -> DMARC Summary 然后点击 view Dashboard 按钮。 您可以使用DMARC摘要进行的最有用的操作是识别未通过DMARC检查的合法来源。

  1. 筛选结果以仅显示未通过DMARC的消息。
  2. 然后,您可以查看邮件的处理方式(接收电子邮件服务器如何处理它们:什么也不做,放入垃圾邮件文件夹或拒绝它们)。
  3. 向下滚动以查看SPF对齐方式和DKIM对齐方式详细信息,以确定某些合法源未能通过DMARC检查的原因。

如果发件人不包括DKIM签名或没有反向DNS记录,则显然是垃圾邮件。

DKIM对齐详细信息

让我感到惊讶的是,某些邮箱提供商在转发我的合法电子邮件时会在DKIM签名中使用他们自己的域名。 其他邮箱提供商在DKIM签名中使用我的域名,但DKIM对齐仍然失败。 要进一步调查原因,您可以检查各个取证报告。

结论

我希望本教程可以帮助您在Ubuntu 18.04和Ubuntu 16.04上设置ParseDMARC来分析DMARC报告。 与往常一样,如果您发现这篇文章很有用,请订阅我们的免费新闻通讯以获取更多提示和技巧。 保重🙂

Sidebar