<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>メールセキュリティ &#8211; セキュリティエンジニアのブログ</title>
	<atom:link href="https://cybermemo.blog/tag/mail-security/feed" rel="self" type="application/rss+xml" />
	<link>https://cybermemo.blog</link>
	<description>セキュリティエンジニアの学習記録</description>
	<lastBuildDate>Tue, 13 Oct 2026 08:37:29 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.3</generator>

<image>
	<url>https://cybermemo.blog/wp-content/uploads/2025/09/cropped-プロフィール用アイコン-32x32.png</url>
	<title>メールセキュリティ &#8211; セキュリティエンジニアのブログ</title>
	<link>https://cybermemo.blog</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>メール技術検証 セキュリティ設定・検証編</title>
		<link>https://cybermemo.blog/mail-security-testing</link>
					<comments>https://cybermemo.blog/mail-security-testing#respond</comments>
		
		<dc:creator><![CDATA[miyuki]]></dc:creator>
		<pubDate>Tue, 13 Oct 2026 08:35:56 +0000</pubDate>
				<category><![CDATA[セキュリティ]]></category>
		<category><![CDATA[検証]]></category>
		<category><![CDATA[メールセキュリティ]]></category>
		<guid isPermaLink="false">https://cybermemo.blog/?p=913</guid>

					<description><![CDATA[<p><img src="https://cybermemo.blog/wp-content/uploads/2026/08/検証アイキャッチ-1024x768.png" class="webfeedsFeaturedVisual" /></p>はじめに 何をしたいか 実際にメールサーバーを構築し、メールの送受信の仕組みを理解する。また、SPF・DKIM・DMARCによる送信ドメイン認証、SMTP AUTHによるユーザー認証、TLSによる通信の暗号化について、設 [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img src="https://cybermemo.blog/wp-content/uploads/2026/08/検証アイキャッチ-1024x768.png" class="webfeedsFeaturedVisual" /></p>
<h2 class="wp-block-heading">はじめに</h2>



<h3 class="wp-block-heading">何をしたいか</h3>



<p class="wp-block-paragraph">実際にメールサーバーを構築し、メールの送受信の仕組みを理解する。<br>また、SPF・DKIM・DMARCによる送信ドメイン認証、SMTP AUTHによるユーザー認証、TLSによる通信の暗号化について、設定と動作検証を通して理解を深める。<br>本記事では、SMTP AUTH・STARTTLSの設定と動作確認に加え、SPF・DKIM・DMARCの設定および認証結果の確認を実施する。<br><br>メール技術検証 構築編　<a href="https://cybermemo.blog/mail-server-setup">https://cybermemo.blog/mail-server-setup</a><br>メール技術検証 セキュリティ設定・検証編　本記事</p>



<h3 class="wp-block-heading">本記事で構築する構成</h3>



<p class="wp-block-paragraph">DNSの構成および設定内容は、一部簡略化して記載。<br>※構成図に使用したアイコンは、<a href="https://sozai.cman.jp/">素材サイト「CMAN」</a>からダウンロードしたものです。</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="576" src="https://cybermemo.blog/wp-content/uploads/2026/10/構成図-2-1024x576.png" alt="構成図" class="wp-image-951" srcset="https://cybermemo.blog/wp-content/uploads/2026/10/構成図-2-1024x576.png 1024w, https://cybermemo.blog/wp-content/uploads/2026/10/構成図-2-300x169.png 300w, https://cybermemo.blog/wp-content/uploads/2026/10/構成図-2-768x432.png 768w, https://cybermemo.blog/wp-content/uploads/2026/10/構成図-2.png 1280w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h3 class="wp-block-heading">検証環境</h3>



<p class="wp-block-paragraph">仮想化ソフトウェア：Oracle VirtualBox<br>ゲストOS：Ubuntu Server 26.04.1 LTS（amd64）<br>SMTPサーバー：Postfix 3.10.6<br>IMAPサーバー：Dovecot 2.4.2<br>DKIM署名：OpenDKIM 2.11.0<br>DMARC検証：OpenDMARC 1.4.2<br>権威DNS：BIND 9.20.24<br>フルリゾルバ：Unbound 1.24.2<br>内部ネットワーク：192.168.56.0/24<br>検証ドメイン：child.lab.test<br>メールサーバー：mail.child.lab.test（192.168.56.50）</p>



<h2 class="wp-block-heading">SMTP AUTH</h2>



<h3 class="wp-block-heading">SMTP AUTHの設定</h3>



<pre class="wp-block-code"><code># SMTPの設定確認
$ sudo postconf -n | grep -E '^(smtpd_sasl_|smtpd_tls_|smtpd_recipient_restrictions|smtpd_relay_restrictions)'
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
smtpd_tls_cert_file = /etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file = /etc/ssl/private/ssl-cert-snakeoil.key
smtpd_tls_security_level = may

# Dovecotの認証設定を確認(一部結果を抜粋)
$ sudo doveconf -n
passdb pam {
}
userdb passwd {
}
(中略)
<span class="swl-marker mark_orange">service auth {</span>                      # Postfix用の認証ソケットが設定されていない<span class="swl-marker mark_orange">
  unix_listener auth-userdb {
  }</span>

# Postfix用の認証ソケットをDovecotで追加
$ sudo vim /etc/dovecot/conf.d/10-master.conf
service auth {
  unix_listener auth-userdb {
  }
<span class="swl-marker mark_orange">  unix_listener /var/spool/postfix/private/auth {
    group = postfix
    mode = 0660
    user = postfix</span>
  }
}

# Dovecotを再起動
$ sudo systemctl restart dovecot
$ sudo systemctl is-active dovecot
active

# 認証ソケットを確認
$ sudo ls -l /var/spool/postfix/private/auth
srw-rw---- 1 postfix postfix 0 Oct 11 09:44 /var/spool/postfix/private/auth

# PostfixでSMTP AUTHを有効化する
$ sudo postconf -e 'smtpd_sasl_type = dovecot'　　# 認証処理にDovecotを使用する
$ sudo postconf -e 'smtpd_sasl_path = private/auth'　　# Dovecotの認証ソケットを指定する
$ sudo postconf -e 'smtpd_sasl_auth_enable = yes'　　# SMTP AUTHを有効にする
$ sudo postconf -e 'smtpd_tls_auth_only = yes'　　# TLSで保護された接続でのみSMTP AUTHを許可する
$ sudo postconf -n | grep -E '^(smtpd_sasl_|smtpd_tls_auth_only)'
smtpd_sasl_auth_enable = yes
smtpd_sasl_path = private/auth
smtpd_sasl_type = dovecot
smtpd_tls_auth_only = yes

# チェックと再読み込み
$ sudo postfix check
$ sudo postfix reload
postfix/postfix-script: refreshing the Postfix mail system</code></pre>



<h3 class="wp-block-heading">SMTP AUTHの動作確認</h3>



<pre class="wp-block-code"><code># Clientで作業
# SMTPの接続/設定確認
# TLSで暗号化される前のSMTP AUTHを禁止できている
$ nc 192.168.56.50 25
220 mail.child.lab.test ESMTP Postfix (Ubuntu)
EHLO client.child.lab.test
250-mail.child.lab.test
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-DSN
250-SMTPUTF8
250 CHUNKING

# SMTP AUTHの認証に必要なユーザー名とパスワードをBase64形式に変換
# 控えておく
$ printf '\0mailadmin\0パスワード' | base64 -w 0
echo
Base64の文字列が表示される

# STARTTLSで接続
# SMTP AUTHが利用可能
$ openssl s_client \
> -connect 192.168.56.50:25 \
> -starttls smtp \
> -servername mail.child.lab.test \
> -crlf -quiet
Connecting to 192.168.56.50
depth=0 CN=mail.child.lab.test
<span class="swl-marker mark_orange">verify error:num=18:self-signed certificate</span>　　# 自己署名証明書を使用している場合のエラーコード
verify return:1
depth=0 CN=mail.child.lab.test
verify return:1
250 CHUNKING
EHLO client.child.lab.test
250-mail.child.lab.test
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
<span class="swl-marker mark_orange">250-AUTH PLAIN</span>
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-DSN
250-SMTPUTF8
250 CHUNKING
<span class="swl-marker mark_orange">AUTH PLAIN Base64の文字列を入力</span>
235 2.7.0 Authentication successful
QUIT

# 認証失敗した時の挙動確認
$ openssl s_client \
> -connect 192.168.56.50:25 \
> -starttls smtp \
> -servername mail.child.lab.test \
> -crlf -quiet
Connecting to 192.168.56.50
depth=0 CN=mail.child.lab.test
verify error:num=18:self-signed certificate
verify return:1
depth=0 CN=mail.child.lab.test
verify return:1
250 CHUNKING
EHLO client.child.lab.test
250-mail.child.lab.test
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH PLAIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-DSN
250-SMTPUTF8
250 CHUNKING
AUTH PLAIN Base64の文字列を入力
535 5.7.8 Error: authentication failed: (reason unavailable)
QUIT</code></pre>



<h3 class="wp-block-heading">SMTPのTLS証明書設定/検証</h3>



<pre class="wp-block-code"><code># メールサーバーで作業
# Dovecotの証明書確認
# Dovecotの証明書をSMTPでも利用できる
$ sudo openssl x509 \
> -in /etc/dovecot/private/dovecot.pem \
> -noout -subject -issuer -dates -ext subjectAltName
&#91;sudo: authenticate] Password:
subject=CN=mail.child.lab.test
issuer=CN=mail.child.lab.test
notBefore=Oct 11 03:46:37 2026 GMT
notAfter=Oct 11 03:46:37 2027 GMT
X509v3 Subject Alternative Name:
    DNS:mail.child.lab.test

# 証明書と秘密鍵の対応確認
$ sudo openssl x509 \
> -in /etc/dovecot/private/dovecot.pem \
> -pubkey -noout |
> openssl pkey -pubin -outform DER |
> openssl dgst -sha256
SHA2-256(stdin)= eb94739707f633c7d23b69869be9c52956e955615fe93d9a9ad66d0d6b5dcc52　　
$ sudo openssl pkey \
> -in /etc/dovecot/private/dovecot.key \
> -pubout -outform DER |
> openssl dgst -sha256
SHA2-256(stdin)= eb94739707f633c7d23b69869be9c52956e955615fe93d9a9ad66d0d6b5dcc52　　# ハッシュ値が一致

# Postfixの証明書設定を確認
$ postconf -f smtpd_tls_cert_file smtpd_tls_key_file
smtpd_tls_cert_file = /etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file = /etc/ssl/private/ssl-cert-snakeoil.key

# Postfixの証明書設定を変更
$ sudo postconf -e 'smtpd_tls_cert_file = /etc/dovecot/private/dovecot.pem'
$ sudo postconf -e 'smtpd_tls_key_file = /etc/dovecot/private/dovecot.key'
$ postconf -f smtpd_tls_cert_file smtpd_tls_key_file
smtpd_tls_cert_file = /etc/dovecot/private/dovecot.pem
smtpd_tls_key_file = /etc/dovecot/private/dovecot.key

# 設定チェックと再読み込み
# warningとなっているため、今回の検証環境ではrootに変更
$ sudo postfix check
postfix/postfix-script: warning: not owned by root: /var/spool/postfix/etc/resolv.conf
$ ls -l /var/spool/postfix/etc/resolv.conf
-rw-r--r-- 1 systemd-resolve systemd-resolve 920 Oct 12 01:55 /var/spool/postfix/etc/resolv.conf
$ sudo chown root:root /var/spool/postfix/etc/resolv.conf
$ ls -l /var/spool/postfix/etc/resolv.conf
-rw-r--r-- 1 root root 920 Oct 12 01:55 /var/spool/postfix/etc/resolv.conf
$ sudo postfix check
$ sudo postfix reload
postfix/postfix-script: refreshing the Postfix mail system

# Clientで作業
# PostfixがDovecotと共通の自己署名証明書を提示しているか確認
~$ openssl s_client \
> -connect 192.168.56.50:25 \
> -starttls smtp \
> -servername mail.child.lab.test \
> -showcerts
Connecting to 192.168.56.50
CONNECTED(00000003)
depth=0 CN=mail.child.lab.test
verify error:num=18:self-signed certificate
verify return:1
depth=0 CN=mail.child.lab.test
verify return:1
---
Certificate chain
 0 s:CN=mail.child.lab.test
   i:CN=mail.child.lab.test
   a:PKEY: RSA, 3072 (bit); sigalg: sha256WithRSAEncryption
   v:NotBefore: Oct 11 03:46:37 2026 GMT; NotAfter: Oct 11 03:46:37 2027 GMT
-----BEGIN CERTIFICATE-----
(以下省略)

# Dovecotの証明書を再利用
~$ openssl s_client \
> -connect 192.168.56.50:25 \
> -starttls smtp \
> -servername mail.child.lab.test \
> -CAfile ~/mail-server.crt \
> -verify_hostname mail.child.lab.test \
> -verify_return_error
Connecting to 192.168.56.50
CONNECTED(00000003)
depth=0 CN=mail.child.lab.test
verify return:1
---
Certificate chain
 0 s:CN=mail.child.lab.test
   i:CN=mail.child.lab.test
   a:PKEY: RSA, 3072 (bit); sigalg: sha256WithRSAEncryption
   v:NotBefore: Oct 11 03:46:37 2026 GMT; NotAfter: Oct 11 03:46:37 2027 GMT
---
Server certificate
(中略)
---
New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384
Protocol: TLSv1.3
Server public key is 3072 bit
This TLS version forbids renegotiation.
Compression: NONE
Expansion: NONE
No ALPN negotiated
Early data was not sent
<span class="swl-marker mark_orange">Verify return code: 0 (ok)</span>　　# エラーなし
---　
(以下省略)</code></pre>



<h3 class="wp-block-heading">WiresharkでSMTP通信をキャプチャ</h3>



<p class="wp-block-paragraph">IMAPのときと同様に、STARTTLSによるTLSハンドシェイク以降の通信が暗号化されている。</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="241" src="https://cybermemo.blog/wp-content/uploads/2026/10/wireshark_smtp_tls-1024x241.png" alt="wireshark_smtp_tls" class="wp-image-924" srcset="https://cybermemo.blog/wp-content/uploads/2026/10/wireshark_smtp_tls-1024x241.png 1024w, https://cybermemo.blog/wp-content/uploads/2026/10/wireshark_smtp_tls-300x71.png 300w, https://cybermemo.blog/wp-content/uploads/2026/10/wireshark_smtp_tls-765x180.png 765w, https://cybermemo.blog/wp-content/uploads/2026/10/wireshark_smtp_tls-1536x361.png 1536w, https://cybermemo.blog/wp-content/uploads/2026/10/wireshark_smtp_tls.png 1602w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading">SPF</h2>



<h3 class="wp-block-heading">SPFの設定</h3>



<pre class="wp-block-code"><code># Child DNSのゾーンファイルにTXTレコードを追加
$ sudo vim /etc/bind/db.child.lab.test
<code>$TTL 3600

@       IN SOA ns dnsmaster (
                2026101201 ; Serial
                3600       ; Refresh
                900        ; Retry
                4800     ; Expire
                86400      ; Negative Cache TTL
)

        IN NS   ns

ns      IN A    192.168.56.20
www     IN A    192.168.56.100
mail    IN A    192.168.56.50
@       IN MX   10 mail.child.lab.test.</code># Serialを変更
<code>@       IN TXT  "v=spf1 ip4:192.168.56.50 -all"</code> # SPFの設定を追記

# 構文チェック
$ sudo named-checkzone child.lab.test /etc/bind/db.child.lab.test
zone child.lab.test/IN: loaded serial 2026101201
OK

# BINDを再読み込み
$ sudo rndc reload child.lab.test
zone reload queued

# Clientで確認
$ dig @192.168.56.30 child.lab.test TXT +short
"v=spf1 ip4:192.168.56.50 -all"

# メールサーバーにDNSの参照先を設定
$ sudo vim /etc/netplan/00-installer-config.yaml
# This is the network config written by 'subiquity'
<code>network:
  ethernets:
    enp0s3:
      dhcp4: true
      dhcp6: true
      match:
        macaddress: macaddress
      set-name: enp0s3

    enp0s8:
      dhcp4: false
      addresses:
        - 192.168.56.50/24</code>
<code>      nameservers:
        addresses:
          - 192.168.56.30
        search:
          - ~child.lab.test</code>　# 追記部分
<code>  version: 2</code>
$ sudo netplan generate
$ sudo netplan try

# pypolicyd-spfをインストール
$ sudo apt install postfix-policyd-spf-python

# pypolicyd-spfの設定確認
$ cat /etc/postfix-policyd-spf-python/policyd-spf.conf
#  For a fully commented sample config file see policyd-spf.conf.commented

debugLevel = 1　　　　　　　　　# ログの詳細度
TestOnly = 1　　　　　　　　　# テストモード。SPFの判定結果による拒否を実施しない

HELO_reject = Fail　　　　　　　　　# HELOドメインのSPF結果がFailの場合の拒否方針
Mail_From_reject = Fail　　　　　　　　　# MAIL FROMドメインのSPF結果がFailの場合の拒否方針

PermError_reject = False　　　　　　　　　# SPFの恒久的な評価エラーでは拒否しない
TempError_Defer = False　　　　　　　　　# SPFの一時的な評価エラーでは配送を延期しない

skip_addresses = 127.0.0.0/8,::ffff:127.0.0.0/104,::1　　　　　　# 指定したループバックアドレスを検査対象から除外

# Mail_From_rejectをFalseへ変更
$ sudo vim /etc/postfix-policyd-spf-python/policyd-spf.conf
Mail_From_reject = False 

# Postfix設定を確認
$ postconf -n smtpd_recipient_restrictions smtpd_relay_restrictions smtpd_sasl_auth_enable mynetworks
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
smtpd_sasl_auth_enable = yes
mynetworks = 127.0.0.0/8 &#91;::ffff:127.0.0.0]/104 &#91;::1]/128

# SPFポリシーサービスをPostfixに登録
$ sudo postconf -M 'policyd-spf/unix=policyd-spf unix - n n - 0 spawn user=policyd-spf argv=/usr/bin/policyd-spf'
$ sudo postconf -e 'smtpd_recipient_restrictions = check_policy_service unix:private/policyd-spf'

# Postfixの再読み込み
$ sudo postfix check
$ sudo postfix reload
postfix/postfix-script: refreshing the Postfix mail system

# 設定が反映されているか確認
$ postconf -n smtpd_recipient_restrictions
smtpd_recipient_restrictions = check_policy_service unix:private/policyd-spf</code></pre>



<h3 class="wp-block-heading">SPFの検証</h3>



<pre class="wp-block-code"><code># Clientからメールサーバーへメールを送信
~$ openssl s_client -connect mail.child.lab.test:25 -starttls smtp -servername mail.child.lab.test -CAfile ~/mail-server.crt -verify_hostname mail.child.lab.test -verify_return_error -crlf -quiet
Connecting to 192.168.56.50
depth=0 CN=mail.child.lab.test
verify return:1
250 CHUNKING
EHLO client.child.lab.test
250-mail.child.lab.test
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH PLAIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-DSN
250-SMTPUTF8
250 CHUNKING
AUTH PLAIN Base64の文字列を入力
235 2.7.0 Authentication successful
MAIL FROM:&lt;sender@child.lab.test>
250 2.1.0 Ok
RCPT TO:&lt;mailadmin@child.lab.test>
250 2.1.5 Ok
DATA
354 End data with &lt;CR>&lt;LF>.&lt;CR>&lt;LF>
From: sender@child.lab.test
To: mailadmin@child.lab.test
Subject: SPF Test

This is an SPF test mail.
.
250 2.0.0 Ok: queued as 4765340192
QUIT
221 2.0.0 Bye

# メールサーバーで受信メールを確認
$ sudo cat /var/mail/mailadmin
From sender@child.lab.test  Mon Oct 12 06:22:57 2026
Return-Path: &lt;sender@child.lab.test>
X-Original-To: mailadmin@child.lab.test
Delivered-To: mailadmin@child.lab.test
Received-SPF: <span class="swl-marker mark_orange">Fail (mailfrom)</span> identity=mailfrom; client-ip=192.168.56.40; helo=client.child.lab.test; envelope-from=sender@child.lab.test; receiver=child.lab.test　　# 192.168.56.50だけを許可しているため、192.168.56.40からの送信はFail
Received: from client.child.lab.test (unknown &#91;192.168.56.40])
        by mail.child.lab.test (Postfix) with <span class="swl-marker mark_orange">ESMTPSA</span> id 4765340192　　# SMTP AUTH：成功　　　
        for &lt;mailadmin@child.lab.test>; Mon, 12 Oct 2026 06:22:33 +0000 (UTC)
From: sender@child.lab.test
To: mailadmin@child.lab.test
Subject: SPF Test

This is an SPF test mail.

# 一時的にSPFレコードへクライアントのIPを追加
@       IN TXT  "v=spf1 ip4:192.168.56.50 <span class="swl-marker mark_orange">ip4:192.168.56.40</span> -all"

# 構文チェック
$ sudo named-checkzone child.lab.test /etc/bind/db.child.lab.test
zone child.lab.test/IN: loaded serial 2026101201
OK

# BINDを再読み込み
$ sudo rndc reload child.lab.test
zone reload queued

# メールサーバーでSPFレコードを確認
$ dig @192.168.56.30 child.lab.test TXT +short
"v=spf1 ip4:192.168.56.50 ip4:192.168.56.40 -all"

# Clientからメールサーバーへメールを送信
$ openssl s_client -connect mail.child.lab.test:25 -starttls smtp -servername mail.child.lab.test -CAfile ~/mail-server.crt -verify_hostname mail.child.lab.test -verify_return_error -crlf -quiet
(以下省略)

# メールサーバーで受信メールを確認
# SPF:Passを確認
$ sudo cat /var/mail/mailadmin
From sender@child.lab.test  Mon Oct 12 06:44:42 2026
Return-Path: &lt;sender@child.lab.test>
X-Original-To: mailadmin@child.lab.test
Delivered-To: mailadmin@child.lab.test
Received-SPF: <span class="swl-marker mark_orange">Pass</span> (mailfrom) identity=mailfrom; client-ip=192.168.56.40; helo=client.child.lab.test; envelope-from=sender@child.lab.test; receiver=child.lab.test
Received: from client.child.lab.test (unknown &#91;192.168.56.40])
        by mail.child.lab.test (Postfix) with ESMTPSA id AC4CD40192
        for &lt;mailadmin@child.lab.test>; Mon, 12 Oct 2026 06:44:11 +0000 (UTC)
From: sender@child.lab.test
To: mailadmin@child.lab.test
Subject: SPF Test2

This is an SPF test mail2.</code></pre>



<h2 class="wp-block-heading">DKIM</h2>



<h3 class="wp-block-heading">DKIMの設定</h3>



<pre class="wp-block-code"><code># OpenDKIMのインストール
$ sudo apt update
$ sudo apt install opendkim opendkim-tools
$ opendkim -V
opendkim: OpenDKIM Filter v2.11.0
        Compiled with OpenSSL 3.5.5 27 Jan 2026
(以下省略)
~$ sudo systemctl status opendkim
● opendkim.service - OpenDKIM Milter
     Loaded: loaded (/usr/lib/systemd/system/opendkim.service; enabled; preset: enabled)
     Active: <span class="swl-marker mark_orange">active</span> (running) since Mon 2026-10-12 06:57:57 UTC; 53s ago

# 鍵の保存ディレクトリを作成
$ sudo mkdir -p /etc/opendkim/keys/child.lab.test

# DKIM署名に使用する秘密鍵と公開鍵を生成
$ cd /etc/opendkim/keys/child.lab.test
$ sudo opendkim-genkey -b 2048 -s mail2026 -d child.lab.test
$ sudo ls -l /etc/opendkim/keys/child.lab.test/
total 8
-rw------- 1 root root 1704 Oct 12 07:01 mail2026.private
-rw------- 1 root root  512 Oct 12 07:01 mail2026.txt
$ sudo chown opendkim:opendkim /etc/opendkim/keys/child.lab.test/mail2026.private
$ sudo chmod 600 /etc/opendkim/keys/child.lab.test/mail2026.private
$ sudo ls -l /etc/opendkim/keys/child.lab.test/
total 8
-rw------- 1 opendkim opendkim 1704 Oct 12 07:01 mail2026.private
-rw------- 1 root     root      512 Oct 12 07:01 mail2026.txt
$ sudo cat mail2026.txt
mail2026._domainkey     IN      TXT     ( "v=DKIM1; h=sha256; k=rsa; "
          "p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs+gujScccmTP7w433GOLV0ddx7/jHv/WVMtn/6JxyVhcFQpCkr6oi13zR6yQPcgoDxvInlk1FkVcB2OfCO/18zxeSLLpoH0FqVGemSInM5lkc/ZLPEIbdgTqOki3i/0ZcYKo7KVE173FyA109a3SuJoEPHn6RFWsAXFwAvzF5FUTBMyCEXwHBCRdyCr8OMbSwqH6zS6Q4Kyizx"
          "q9GGqweQwWYmruZcXArwEaFI3iYDZF5T9rfbfwRoAe6tAzdRgjIl7ntFa9PrKauSfUp8hCiKFg+rSErvNec5wBx8Sq1MyKJ77EQ8DkqtpE1/P+FWc72oD/IWkO+xgA/V9tkDHKnwIDAQAB" )  ; ----- DKIM key mail2026 for child.lab.test

# Child DNSのゾーンファイルにTXTレコードを追記
$ sudo vim /etc/bind/db.child.lab.test
<code>$TTL 3600

@       IN SOA ns dnsmaster (
                2026101202 ; Serial
                3600       ; Refresh
                900        ; Retry
                4800     ; Expire
                86400      ; Negative Cache TTL
)

        IN NS   ns

ns      IN A    192.168.56.20
www     IN A    192.168.56.100
mail    IN A    192.168.56.50
@       IN MX   10 mail.child.lab.test.
@       IN TXT  "v=spf1 ip4:192.168.56.50 ip4:192.168.56.40 -all"</code>　# Serialを変更
# DKIM公開鍵のTXTレコードを追記
<code>mail2026._domainkey     IN      TXT     ( "v=DKIM1; h=sha256; k=rsa; "
          "p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs+gujScccmTP7w433GOLV0ddx7/jHv/WVMtn/6JxyVhcFQpCkr6oi13zR6yQPcgoDxvInlk1FkVcB2OfCO/18zxeSLLpoH0FqVGemSInM5lkc/ZLPEIbdgTqOki3i/0ZcYKo7KVE173FyA109a3SuJoEPHn6RFWsAXFwAvzF5FUTBMyCEXwHBCRdyCr8OMbSwqH6zS6Q4Kyizx"
          "q9GGqweQwWYmruZcXArwEaFI3iYDZF5T9rfbfwRoAe6tAzdRgjIl7ntFa9PrKauSfUp8hCiKFg+rSErvNec5wBx8Sq1MyKJ77EQ8DkqtpE1/P+FWc72oD/IWkO+xgA/V9tkDHKnwIDAQAB" )  ; ----- DKIM key mail2026 for child.lab.test</code>

# 構文チェック
$ sudo named-checkzone child.lab.test /etc/bind/db.child.lab.test
zone child.lab.test/IN: loaded serial 2026101202
OK

# BINDを再読み込み
$ sudo rndc reload child.lab.test
zone reload queued

# 設定が反映されているか確認
# Child DNSで確認
$ dig @127.0.0.1 mail2026._domainkey.child.lab.test TXT +noall +answer
mail2026._domainkey.child.lab.test. 3600 IN TXT "v=DKIM1; h=sha256; k=rsa; " "p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs+gujScccmTP7w433GOLV0ddx7/jHv/WVMtn/6JxyVhcFQpCkr6oi13zR6yQPcgoDxvInlk1FkVcB2OfCO/18zxeSLLpoH0FqVGemSInM5lkc/ZLPEIbdgTqOki3i/0ZcYKo7KVE173FyA109a3SuJoEPHn6RFWsAXFwAvzF5FUTBMyCEXwHBCRdyCr8OMbSwqH6zS6Q4Kyizx" "q9GGqweQwWYmruZcXArwEaFI3iYDZF5T9rfbfwRoAe6tAzdRgjIl7ntFa9PrKauSfUp8hCiKFg+rSErvNec5wBx8Sq1MyKJ77EQ8DkqtpE1/P+FWc72oD/IWkO+xgA/V9tkDHKnwIDAQAB"

# Clientで確認
$ dig @192.168.56.30 mail2026._domainkey.child.lab.test TXT +noall +answer
mail2026._domainkey.child.lab.test. 3600 IN TXT "v=DKIM1; h=sha256; k=rsa; " "p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs+gujScccmTP7w433GOLV0ddx7/jHv/WVMtn/6JxyVhcFQpCkr6oi13zR6yQPcgoDxvInlk1FkVcB2OfCO/18zxeSLLpoH0FqVGemSInM5lkc/ZLPEIbdgTqOki3i/0ZcYKo7KVE173FyA109a3SuJoEPHn6RFWsAXFwAvzF5FUTBMyCEXwHBCRdyCr8OMbSwqH6zS6Q4Kyizx" "q9GGqweQwWYmruZcXArwEaFI3iYDZF5T9rfbfwRoAe6tAzdRgjIl7ntFa9PrKauSfUp8hCiKFg+rSErvNec5wBx8Sq1MyKJ77EQ8DkqtpE1/P+FWc72oD/IWkO+xgA/V9tkDHKnwIDAQAB"

# DKIMの設定ファイルを編集
# 末尾に設定を追加、TrustAnchorFileをコメントアウト
$ sudo vim /etc/opendkim.conf
<code># TrustAnchorFile               /usr/share/dns/root.key
Domain                  child.lab.test
Selector                mail2026
KeyFile                 /etc/opendkim/keys/child.lab.test/mail2026.private
InternalHosts 127.0.0.1,192.168.56.40,192.168.56.50</code>
$ sudo systemctl restart opendkim
$ sudo systemctl is-active opendkim
active

# Postfixにアクセス権限を付与
$ sudo usermod -aG opendkim postfix
$ id postfix
uid=104(postfix) gid=108(postfix) groups=108(postfix),113(opendkim)

# PostfixにMilterを設定
$ sudo postconf -e 'milter_default_action = accept'　　# OpenDKIMに接続できなくてもメール配送を継続する
$ sudo postconf -e 'milter_protocol = 6'　　# Milterの通信バージョンを指定する
$ sudo postconf -e 'smtpd_milters = unix:/run/opendkim/opendkim.sock'　　# SMTP経由のメールをOpenDKIMに渡す
$ sudo postconf -e 'non_smtpd_milters = $smtpd_milters'　　# SMTP以外の方法で投入したメールもOpenDKIMに渡す
$ sudo postfix check
$ sudo systemctl restart postfix
$ postconf -n | grep -i milter
milter_default_action = accept
milter_protocol = 6
non_smtpd_milters = $smtpd_milters
smtpd_milters = unix:/run/opendkim/opendkim.sock</code></pre>



<h3 class="wp-block-heading">DKIMの検証</h3>



<pre class="wp-block-code"><code># Clientからメールを送信
$ openssl s_client -connect mail.child.lab.test:25 \
  -starttls smtp \
  -servername mail.child.lab.test \
  -CAfile ~/mail-server.crt \
  -verify_hostname mail.child.lab.test \
  -verify_return_error -crlf -quiet
Connecting to 192.168.56.50
(以下省略)

# メールサーバーで受信メールを確認
# DKIM-Signatureが付与されていることを確認
From sender@child.lab.test  Mon Oct 12 08:54:54 2026
Return-Path: &lt;sender@child.lab.test>
X-Original-To: mailadmin@child.lab.test
Delivered-To: mailadmin@child.lab.test
<span class="swl-marker mark_orange">DKIM-Signature</span>: v=1; a=rsa-sha256; c=relaxed/simple; d=child.lab.test;
        s=mail2026; t=1791795294;
        bh=HVREf258z0xWefGDJ0Yl3/J6t5bA18K5/8ObJPMRfHw=;
        h=From:To:Subject:From;
        b=I99FPsCf8csL+TX07Xxw+iuEQigTv073pNf3OEVyHRk2hupX4uMrY9imolccLIA5s
         5j6ZROnAIf9Cal6vYTNEsczcV41lODJzE9i3sYHJO0sXdR8ul0sl3y5jMYYlEikRYD
         dU8LQb4tO4FKoxzUmeMZYQntV8No2JlwROflgyNpAf5CBY4j20QgXZX2BkLWpExTkf
         jInayD52LQSnN1SwPTcAMRrE/+ay4WCr9iIZxDGFx68kmnwPtBlQPa6kNu+W5hUszC
         PMma5U0rIIyCPqfqy8pphp73b3SATSRQ2vAMOq6a1i/sMEtwLrwGghBXhHFx7shagZ
         zCEygIX68tHkg==
Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=192.168.56.40; helo=client.child.lab.test; envelope-from=sender@child.lab.test; receiver=child.lab.test
Received: from client.child.lab.test (unknown &#91;192.168.56.40])
        by mail.child.lab.test (Postfix) with ESMTPSA id A4FDB4048A
        for &lt;mailadmin@child.lab.test>; Mon, 12 Oct 2026 08:53:56 +0000 (UTC)
From: sender@child.lab.test
To: mailadmin@child.lab.test
Subject: DKIM Test2

This is a DKIM test mail.</code></pre>



<h2 class="wp-block-heading">DMARC</h2>



<h3 class="wp-block-heading">DMARCの設定</h3>



<pre class="wp-block-code"><code># Child DNSのゾーンファイルにTXTレコードを追記
$ sudo cat /etc/bind/db.child.lab.test
<code>$TTL 3600

@       IN SOA ns dnsmaster (
                2026101301 ; Serial
                3600       ; Refresh
                900        ; Retry
                4800     ; Expire
                86400      ; Negative Cache TTL
)

        IN NS   ns

ns      IN A    192.168.56.20
www     IN A    192.168.56.100
mail    IN A    192.168.56.50
@       IN MX   10 mail.child.lab.test.
@       IN TXT  "v=spf1 ip4:192.168.56.50 ip4:192.168.56.40 -all"</code> # Serialを変更
<code>_dmarc  IN TXT  "v=DMARC1; p=none"</code>　　　　　　　　　　　　　　　　# DMARCのTXTレコードを追記
<code>mail2026._domainkey     IN      TXT     ( "v=DKIM1; h=sha256; k=rsa; "
          "p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs+gujScccmTP7w433GOLV0ddx7/jHv/WVMtn/6JxyVhcFQpCkr6oi13zR6yQPcgoDxvInlk1FkVcB2OfCO/18zxeSLLpoH0FqVGemSInM5lkc/ZLPEIbdgTqOki3i/0ZcYKo7KVE173FyA109a3SuJoEPHn6RFWsAXFwAvzF5FUTBMyCEXwHBCRdyCr8OMbSwqH6zS6Q4Kyizx"
          "q9GGqweQwWYmruZcXArwEaFI3iYDZF5T9rfbfwRoAe6tAzdRgjIl7ntFa9PrKauSfUp8hCiKFg+rSErvNec5wBx8Sq1MyKJ77EQ8DkqtpE1/P+FWc72oD/IWkO+xgA/V9tkDHKnwIDAQAB" )  ; ----- DKIM key mail2026 for child.lab.test</code>

# 構文チェック
$ sudo named-checkzone child.lab.test /etc/bind/db.child.lab.test
zone child.lab.test/IN: loaded serial 2026101301
OK

# BINDを再読み込み
$ sudo rndc reload child.lab.test
zone reload queued

# 設定が反映されているか確認
$ dig @192.168.56.30 _dmarc.child.lab.test TXT +short
"v=DMARC1; p=none"

# システムのパッケージリストを更新
$ sudo apt update

# opendmarcのインストール
$ sudo apt install opendmarc
<img decoding="async" width="150" height="38" class="wp-image-940" style="width: 150px;" src="https://cybermemo.blog/wp-content/uploads/2026/10/opendmarc_install1.png" alt="opendmarc_install" srcset="https://cybermemo.blog/wp-content/uploads/2026/10/opendmarc_install1.png 1202w, https://cybermemo.blog/wp-content/uploads/2026/10/opendmarc_install1-300x77.png 300w, https://cybermemo.blog/wp-content/uploads/2026/10/opendmarc_install1-765x196.png 765w, https://cybermemo.blog/wp-content/uploads/2026/10/opendmarc_install1-1024x262.png 1024w" sizes="(max-width: 150px) 100vw, 150px" />　　# インストール中にConfiguration opendmarcという画面が表示された場合は、Noを選択
$ sudo systemctl status opendmarc
● opendmarc.service - OpenDMARC Milter
     Loaded: loaded (/usr/lib/systemd/system/opendmarc.service; enabled; preset: enabled)
     Active: <span class="swl-marker mark_orange">active</span> (running) since Tue 2026-10-13 01:35:28 UTC; 11min ago

# DMARCの設定確認
$ sudo grep -Ev '^\s*(#|$)' /etc/opendmarc.conf
PidFile /run/opendmarc/opendmarc.pid
PublicSuffixList /usr/share/publicsuffix/public_suffix_list.dat
Socket local:/run/opendmarc/opendmarc.sock
Syslog true
UMask 0002
UserID opendmarc

# OpenDMARCのソケットを確認
$ sudo ls -l /run/opendmarc/opendmarc.sock
srwxrwxr-x 1 opendmarc opendmarc 0 Oct 13 01:35 /run/opendmarc/opendmarc.sock

# Postfixにアクセス権限を付与
$ id postfix
uid=104(postfix) gid=108(postfix) groups=108(postfix),113(opendkim)
$ sudo usermod -aG opendmarc postfix
$ id postfix
uid=104(postfix) gid=108(postfix) groups=108(postfix),113(opendkim),114(opendmarc)

# PostfixのMilter設定を確認
$ postconf -n | grep -E '^(smtpd_milters|non_smtpd_milters|milter_)'
milter_default_action = accept
milter_protocol = 6
non_smtpd_milters = $smtpd_milters
smtpd_milters = unix:/run/opendkim/opendkim.sock

# OpenDMARCをPostfixに追加する
$ sudo postconf -e 'smtpd_milters = unix:/run/opendkim/opendkim.sock, unix:/run/opendmarc/opendmarc.sock'
$ postconf smtpd_milters
smtpd_milters = unix:/run/opendkim/opendkim.sock, unix:/run/opendmarc/opendmarc.sock

# SPF認証の設定追加
# SPFSelfValidate trueを末尾に追記
$ sudo vim /etc/opendmarc.conf
SPFSelfValidate true

# 設定を反映
$ sudo systemctl restart opendmarc
$ sudo systemctl restart postfix
$ systemctl is-active opendmarc postfix
active
active</code></pre>



<h3 class="wp-block-heading">DMARCの検証</h3>



<pre class="wp-block-code"><code># Clientからメールを送信
$ openssl s_client -connect mail.child.lab.test:25 \
  -starttls smtp \
  -servername mail.child.lab.test \
  -CAfile ~/mail-server.crt \
  -verify_hostname mail.child.lab.test \
  -verify_return_error -crlf -quiet
Connecting to 192.168.56.50
(以下省略)

# メールサーバーで受信メールを確認
# dmarc=passを確認
From sender@child.lab.test  Tue Oct 13 02:09:08 2026
Return-Path: &lt;sender@child.lab.test>
X-Original-To: mailadmin@child.lab.test
Delivered-To: mailadmin@child.lab.test
Authentication-Results: mail.child.lab.test; <span class="swl-marker mark_orange">dmarc=pass</span> (p=none dis=none) header.from=child.lab.test
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=child.lab.test;
        s=mail2026; t=1791857348;
        bh=UH5pfhxH2N0PJp+Qxwe04zP8C0HOnIaxyKHuTHJezRQ=;
        h=From:To:Subject:From;
        b=Vxh0p/nQOggKGNdP0qnKZuyeqAZBG540j5PxQt97MUNr3rYnoRhiafxrE7LBvVbdn
         vohjxAPat9DhLCKXKJMaUKDsWhn/al7qSQQf6k6uNrW2RjAA6XGML8DjaJfm83Ib9M
         OFqoTtk0EykEYNQIgcekzktfTtAOtLY5Dg7AjkFX5l2DIZYatUM4z3TPaaOKPbbgqH
         9JWWwI9UOFQ8A4olnGIoKEmNaal8IpjIRoln6pUs73VAFZnES3Sfg3nmRjzGY8ayjY
         okLCnruNPAs9IAzoROsXO/IYAAZ4VVML9exLy++qjrDoH0OX5VWiZ7az4gWkmfYhmI
         eToD1Km3UKDYQ==
Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=192.168.56.40; helo=client.child.lab.test; envelope-from=sender@child.lab.test; receiver=child.lab.test
Received: from client.child.lab.test (unknown &#91;192.168.56.40])
        by mail.child.lab.test (Postfix) with ESMTPSA id 368E44048B
        for &lt;mailadmin@child.lab.test>; Tue, 13 Oct 2026 02:08:39 +0000 (UTC)
From: sender@child.lab.test
To: mailadmin@child.lab.test
Subject: DMARC Pass Test

This is a DMARC test.

# dmarc=fail の確認
# Clientからメールを送信
# MAIL FROM:&lt;sender@child.lab.test>、From: sender@example.com で送信元を不一致にする
$ openssl s_client -connect mail.child.lab.test:25 \
  -starttls smtp \
  -servername mail.child.lab.test \
  -CAfile ~/mail-server.crt \
  -verify_hostname mail.child.lab.test \
  -verify_return_error -crlf -quiet
Connecting to 192.168.56.50
(以下省略)

# メールサーバーで受信メールを確認
# dmarc=fail、Received-SPF: Pass、DKIM-Signature:なし
<span class="swl-marker mark_orange">From sender@child.lab.test</span>  Tue Oct 13 02:15:27 2026
Return-Path: &lt;sender@child.lab.test>
X-Original-To: mailadmin@child.lab.test
Delivered-To: mailadmin@child.lab.test
Authentication-Results: mail.child.lab.test; <span class="swl-marker mark_orange">dmarc=fail</span> (p=reject dis=none) header.from=example.com
Received-SPF: <span class="swl-marker mark_orange">Pass</span> (mailfrom) identity=mailfrom; client-ip=192.168.56.40; helo=client.child.lab.test; envelope-from=sender@child.lab.test; receiver=child.lab.test
Received: from client.child.lab.test (unknown &#91;192.168.56.40])
        by mail.child.lab.test (Postfix) with ESMTPSA id 7DAB04048B
        for &lt;mailadmin@child.lab.test>; Tue, 13 Oct 2026 02:15:04 +0000 (UTC)
<span class="swl-marker mark_orange">From: sender@example.com</span>
To: mailadmin@child.lab.test
Subject: DMARC Fail Test

This is a DMARC fail test.</code></pre>



<h2 class="wp-block-heading">まとめ</h2>



<p class="wp-block-paragraph">今回の検証では、前回構築したメールサーバーにSMTP AUTHとSTARTTLSを導入し、ユーザー認証と通信の暗号化が正常に行われることを確認した。<br>また、SPF・DKIM・DMARCを導入し、SPFによる送信元IPアドレスの認証、DKIMによる電子署名の付与、DMARCによる認証結果の評価を確認した。<br>今回の検証から、SMTP AUTHはメール送信時のユーザー認証、STARTTLSは通信経路の暗号化、SPF・DKIM・DMARCは送信ドメインの認証やメールの改ざん検知などそれぞれ異なる役割を持つことが分かった。<br>メールの安全性を高めるためには、これらの技術を組み合わせて利用することが重要だと理解できた。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://cybermemo.blog/mail-security-testing/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>メール技術検証 構築編</title>
		<link>https://cybermemo.blog/mail-server-setup</link>
					<comments>https://cybermemo.blog/mail-server-setup#respond</comments>
		
		<dc:creator><![CDATA[miyuki]]></dc:creator>
		<pubDate>Tue, 13 Oct 2026 08:35:51 +0000</pubDate>
				<category><![CDATA[セキュリティ]]></category>
		<category><![CDATA[検証]]></category>
		<category><![CDATA[メールセキュリティ]]></category>
		<guid isPermaLink="false">https://cybermemo.blog/?p=874</guid>

					<description><![CDATA[<p><img src="https://cybermemo.blog/wp-content/uploads/2026/08/検証アイキャッチ-1024x768.png" class="webfeedsFeaturedVisual" /></p>はじめに 何をしたいか 実際にメールサーバーを構築し、メールの送受信の仕組みを理解する。また、SPF・DKIM・DMARCによる送信ドメイン認証、SMTP AUTHによるユーザー認証、TLSによる通信の暗号化について、設 [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img src="https://cybermemo.blog/wp-content/uploads/2026/08/検証アイキャッチ-1024x768.png" class="webfeedsFeaturedVisual" /></p>
<h2 class="wp-block-heading">はじめに</h2>



<h3 class="wp-block-heading">何をしたいか</h3>



<p class="wp-block-paragraph">実際にメールサーバーを構築し、メールの送受信の仕組みを理解する。<br>また、SPF・DKIM・DMARCによる送信ドメイン認証、SMTP AUTHによるユーザー認証、TLSによる通信の暗号化について、設定と動作検証を通して理解を深める。<br>本記事では、メールサーバーの構築と基本的な動作確認を実施する。<br>SPF・DKIM・DMARCによる送信ドメイン認証、SMTP AUTHによるユーザー認証、TLSによる通信の暗号化については次の記事で検証する。<br><br>メール技術検証 構築編　本記事<br>メール技術検証 セキュリティ設定・検証編　<a href="https://cybermemo.blog/mail-security-testing">https://cybermemo.blog/mail-security-testing</a></p>



<h3 class="wp-block-heading">本記事で構築する構成</h3>



<p class="wp-block-paragraph">DNSの構成および設定内容は、一部簡略化して記載。<br>OpenDKIM、OpenDMARC、SMTP AUTHについては、次の記事で設定/検証する。<br>※構成図に使用したアイコンは、<a href="https://sozai.cman.jp/">素材サイト「CMAN」</a>からダウンロードしたものです。</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="576" src="https://cybermemo.blog/wp-content/uploads/2026/10/構成図-2-1024x576.png" alt="構成図" class="wp-image-951" srcset="https://cybermemo.blog/wp-content/uploads/2026/10/構成図-2-1024x576.png 1024w, https://cybermemo.blog/wp-content/uploads/2026/10/構成図-2-300x169.png 300w, https://cybermemo.blog/wp-content/uploads/2026/10/構成図-2-768x432.png 768w, https://cybermemo.blog/wp-content/uploads/2026/10/構成図-2.png 1280w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h3 class="wp-block-heading">検証環境</h3>



<p class="wp-block-paragraph">仮想化ソフトウェア：Oracle VirtualBox<br>ゲストOS：Ubuntu Server 26.04.1 LTS（amd64）<br>SMTPサーバー：Postfix 3.10.6<br>IMAPサーバー：Dovecot 2.4.2<br>権威DNS：BIND 9.20.24<br>フルリゾルバ：Unbound 1.24.2<br>内部ネットワーク：192.168.56.0/24<br>検証ドメイン：child.lab.test<br>メールサーバー：mail.child.lab.test（192.168.56.50）</p>



<h2 class="wp-block-heading">構築</h2>



<h3 class="wp-block-heading">DNSにMXレコードを設定</h3>



<p class="wp-block-paragraph"><a href="https://cybermemo.blog/dnssec-lab-setup" data-type="link" data-id="https://cybermemo.blog/dnssec-lab-setup">DNSSEC検証 準備・DNS構築編</a> で構築した環境を利用。</p>



<pre class="wp-block-code"><code># Child DNSのゾーンファイルにMXレコードを追加
$ sudo vim /etc/bind/db.child.lab.test
<code>$TTL 3600

@       IN SOA ns dnsmaster (
                2026101001 ; Serial
                3600       ; Refresh
                900        ; Retry
                4800     ; Expire
                86400      ; Negative Cache TTL
)

        IN NS   ns

ns      IN A    192.168.56.20
www     IN A    192.168.56.100
</code># Serialを変更
<code>mail    IN A    192.168.56.50
@       IN MX   10 mail.child.lab.test.</code> 　# mailの設定を追記

# 構文チェック
$ sudo named-checkzone child.lab.test /etc/bind/db.child.lab.test
zone child.lab.test/IN: loaded serial 2026101001
OK

# BINDを再読み込み
$ sudo rndc reload child.lab.test
zone reload queued

# Clientで名前解決ができるか確認
$ dig @192.168.56.30 mail.child.lab.test A

; &lt;&lt;&gt;&gt; DiG 9.20.24-1ubuntu0.3-Ubuntu &lt;&lt;&gt;&gt; @192.168.56.30 mail.child.lab.test A
; (1 server found)
;; global options: +cmd
;; Got answer:
;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: <span class="swl-marker mark_orange">NOERROR</span>, id: 34602　　#エラーなし
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;mail.child.lab.test.           IN      A

;; ANSWER SECTION:
<span class="swl-marker mark_orange">mail.child.lab.test.    3600    IN      A       192.168.56.50</span>　　# 設定したAレコードが返ってきている

;; Query time: 6 msec
;; SERVER: 192.168.56.30#53(192.168.56.30) (UDP)
;; WHEN: Sat Oct 10 05:41:23 UTC 2026
;; MSG SIZE  rcvd: 64

$ dig @192.168.56.30 child.lab.test MX

; &lt;&lt;&gt;&gt; DiG 9.20.24-1ubuntu0.3-Ubuntu &lt;&lt;&gt;&gt; @192.168.56.30 child.lab.test MX
; (1 server found)
;; global options: +cmd
;; Got answer:
;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: <span class="swl-marker mark_orange">NOERROR</span>, id: 17047　　#エラーなし
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;child.lab.test.                        IN      MX

;; ANSWER SECTION:
<span class="swl-marker mark_orange">child.lab.test.         3600    IN      MX      10 mail.child.lab.test.</span>　　# 設定したMXレコードが返ってきている

;; Query time: 7 msec
;; SERVER: 192.168.56.30#53(192.168.56.30) (UDP)
;; WHEN: Sat Oct 10 05:45:43 UTC 2026
;; MSG SIZE  rcvd: 64</code></pre>



<h3 class="wp-block-heading">Postfixのインストールと設定</h3>



<pre class="wp-block-code"><code># システムのパッケージリストを更新
$ sudo apt update

# Postfixのインストール
$ sudo apt install postfix
<img decoding="async" width="150" height="108" class="wp-image-877" style="width: 150px;" src="https://cybermemo.blog/wp-content/uploads/2026/10/postfix_install_1.png" alt="postfix_install_1" srcset="https://cybermemo.blog/wp-content/uploads/2026/10/postfix_install_1.png 649w, https://cybermemo.blog/wp-content/uploads/2026/10/postfix_install_1-300x215.png 300w" sizes="(max-width: 150px) 100vw, 150px" />　　
<img decoding="async" width="150" height="30" class="wp-image-878" style="width: 150px;" src="https://cybermemo.blog/wp-content/uploads/2026/10/postfix_install_2.png" alt="postfix_install_2" srcset="https://cybermemo.blog/wp-content/uploads/2026/10/postfix_install_2.png 1248w, https://cybermemo.blog/wp-content/uploads/2026/10/postfix_install_2-300x61.png 300w, https://cybermemo.blog/wp-content/uploads/2026/10/postfix_install_2-768x155.png 768w, https://cybermemo.blog/wp-content/uploads/2026/10/postfix_install_2-1024x207.png 1024w" sizes="(max-width: 150px) 100vw, 150px" />
# インストール中にPostfixConfigurationという画面が表示された場合は、
　Internet Siteを選択し、System mail nameはメールドメイン(child.lab.test)を入力

# ステータス確認
$ sudo systemctl status postfix
&#91;sudo: authenticate] Password:
● postfix.service - Postfix Mail Transport Agent (main/default instance)
     Loaded: loaded (/usr/lib/systemd/system/postfix.service; enabled; preset: enabled)
     Active: <span class="swl-marker mark_orange">active (running)</span> since Sat 2026-10-10 06:08:45 UTC; 11min ago

# Postfixの設定を確認。下線部分が修正箇所
$ postconf myhostname mydomain myorigin mydestination inet_interfaces mynetworks
<span class="swl-marker mark_orange">myhostname = mail</span>
<span class="swl-marker mark_orange">mydomain = localdomain</span>
myorigin = /etc/mailname
<span class="swl-marker mark_orange">mydestination = $myhostname, child.lab.test, mail, localhost.localdomain, localhost</span>
inet_interfaces = all
mynetworks = 127.0.0.0/8 &#91;::ffff:127.0.0.0]/104 &#91;::1]/128

# Postfixの設定を修正
$ sudo postconf -e 'myhostname = mail.child.lab.test'
$ sudo postconf -e 'mydomain = child.lab.test'
$ sudo postconf -e 'mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain'

# Postfixの設定チェック
# resolv.confの所有者がrootではないため警告が発生している
$ sudo postfix check
postfix/postfix-script: warning: not owned by root: /var/spool/postfix/etc/resolv.conf

# resolv.confの所有者/所有グループをrootに変更
$ ls -l /var/spool/postfix/etc/resolv.conf
-rw-r--r-- 1 systemd-resolve systemd-resolve 920 Oct 10 06:08 /var/spool/postfix/etc/resolv.conf
$ sudo chown root:root /var/spool/postfix/etc/resolv.conf
$ ls -l /var/spool/postfix/etc/resolv.conf
-rw-r--r-- 1 root root 920 Oct 10 06:08 /var/spool/postfix/etc/resolv.conf

# Postfixの設定を再チェック
# 何も表示されなければ問題なし
$ sudo postfix check

# Postfixを再読み込み
$ sudo postfix reload
postfix/postfix-script: refreshing the Postfix mail system

# Postfixの設定を再確認
$ postconf myhostname mydomain myorigin mydestination inet_interfaces mynetworks
myhostname = mail.child.lab.test
mydomain = child.lab.test
myorigin = /etc/mailname
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
inet_interfaces = all
mynetworks = 127.0.0.0/8 &#91;::ffff:127.0.0.0]/104 &#91;::1]/128</code></pre>



<h3 class="wp-block-heading">メールサーバー（Postfix）へメールを送信</h3>



<pre class="wp-block-code"><code># TCP/25番ポートがLISTENになっていることを確認
$ sudo ss -lntp | grep ':25 '
LISTEN 0      100          0.0.0.0:25        0.0.0.0:*    users:(("master",pid=1272,fd=13))
LISTEN 0      100             &#91;::]:25           &#91;::]:*    users:(("master",pid=1272,fd=14))

# ここからclient端末へ切り替えて、SMTP接続
# SMTPサーバーへ接続
$ nc -C 192.168.56.50 25
220 mail.child.lab.test ESMTP Postfix (Ubuntu)

# メール送信
# 下線部分が入力箇所
<span class="swl-marker mark_orange">EHLO client.child.lab.test</span>
250-mail.child.lab.test
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-DSN
250-SMTPUTF8
250 CHUNKING
<span class="swl-marker mark_orange">MAIL FROM:&lt;sender@child.lab.test&gt;</span>
250 2.1.0 Ok
<span class="swl-marker mark_orange">RCPT TO:&lt;mailadmin@child.lab.test&gt;</span>
250 2.1.5 Ok
<span class="swl-marker mark_orange">DATA</span>
354 End data with &lt;CR&gt;&lt;LF&gt;.&lt;CR&gt;&lt;LF&gt;
<span class="swl-marker mark_orange">From: sender@child.lab.test
To: mailadmin@child.lab.test
Subject: SMTP Test

This is a test mail.
.</span>
250 2.0.0 Ok: queued as 9EB2140252
<span class="swl-marker mark_orange">QUIT</span>

# メールサーバー側でメール確認
$ sudo cat /var/mail/mailadmin
From sender@child.lab.test  Sat Oct 10 12:23:43 2026
Return-Path: &lt;sender@child.lab.test&gt;
X-Original-To: mailadmin@child.lab.test
Delivered-To: mailadmin@child.lab.test
Received: from client.child.lab.test (unknown &#91;192.168.56.40])
        by mail.child.lab.test (Postfix) with ESMTP id 9EB2140252
        for &lt;mailadmin@child.lab.test&gt;; Sat, 10 Oct 2026 12:21:09 +0000 (UTC)
From: sender@child.lab.test
To: mailadmin@child.lab.test
Subject: SMTP Test

This is a test mail.</code></pre>



<h3 class="wp-block-heading">WiresharkでSMTP通信をキャプチャ</h3>



<p class="wp-block-paragraph">せっかくなので、SMTP通信がWiresharkでどう見えるのか確認しておく。</p>



<p class="wp-block-paragraph">SMTPでフィルタした結果。</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="253" src="https://cybermemo.blog/wp-content/uploads/2026/10/wireshark_smtp-1024x253.png" alt="wireshark_smtp" class="wp-image-881" srcset="https://cybermemo.blog/wp-content/uploads/2026/10/wireshark_smtp-1024x253.png 1024w, https://cybermemo.blog/wp-content/uploads/2026/10/wireshark_smtp-300x74.png 300w, https://cybermemo.blog/wp-content/uploads/2026/10/wireshark_smtp-766x189.png 766w, https://cybermemo.blog/wp-content/uploads/2026/10/wireshark_smtp-1536x379.png 1536w, https://cybermemo.blog/wp-content/uploads/2026/10/wireshark_smtp.png 1588w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">TCPストリーム</p>



<figure class="wp-block-image size-full"><img decoding="async" width="400" height="618" src="https://cybermemo.blog/wp-content/uploads/2026/10/wireshark_tcpstream.png" alt="wireshark_tcpstream" class="wp-image-882" srcset="https://cybermemo.blog/wp-content/uploads/2026/10/wireshark_tcpstream.png 400w, https://cybermemo.blog/wp-content/uploads/2026/10/wireshark_tcpstream-194x300.png 194w" sizes="(max-width: 400px) 100vw, 400px" /></figure>



<h3 class="wp-block-heading">Dovecotのインストール</h3>



<pre class="wp-block-code"><code># システムのパッケージリストを更新
$ sudo apt update

# Dovecotのインストール
$ sudo apt install dovecot-core dovecot-imapd

# ステータス確認
$ sudo systemctl status dovecot
● dovecot.service - Dovecot IMAP/POP3 email server
     Loaded: loaded (/usr/lib/systemd/system/dovecot.service; enabled; preset: enabled)
     Active: <span class="swl-marker mark_orange">active (running)</span> since Sat 2026-10-10 14:12:05 UTC; 5min ago</code></pre>



<h3 class="wp-block-heading">DovecotのTLS証明書作成</h3>



<pre class="wp-block-code"><code># Dovecotの設定を確認
$ sudo doveconf mail_driver passdb userdb ssl auth_allow_cleartext ssl_server_cert_file ssl_server_key_file
mail_driver = mbox
passdb pam {
}
userdb passwd {
}
ssl = yes
auth_allow_cleartext = no
ssl_server_cert_file = /etc/dovecot/private/dovecot.pem
ssl_server_key_file = /etc/dovecot/private/dovecot.key

# 証明書の内容を確認
# subjectとissuerがFQDNになっていない
$ sudo openssl x509 -in /etc/dovecot/private/dovecot.pem -noout -subject -issuer -dates -ext subjectAltName
subject=CN=mail
issuer=CN=mail
notBefore=Oct 10 06:07:02 2026 GMT
notAfter=Oct  7 06:07:02 2036 GMT
X509v3 Subject Alternative Name:
    DNS:mail

# ファイルを確認
# シンボリックリンクになっている
$ sudo ls -l /etc/dovecot/private/dovecot.key
lrwxrwxrwx 1 root root 38 Oct 10 14:12 /etc/dovecot/private/dovecot.key -&gt; /etc/ssl/private/ssl-cert-snakeoil.key
$ sudo ls -l /etc/dovecot/private/dovecot.pem
lrwxrwxrwx 1 root root 36 Oct 10 14:12 /etc/dovecot/private/dovecot.pem -&gt; /etc/ssl/certs/ssl-cert-snakeoil.pem

# シンボリックリンクを解除
$ sudo unlink /etc/dovecot/private/dovecot.pem
$ sudo unlink /etc/dovecot/private/dovecot.key

# 自己署名証明書を作成
$ sudo openssl req -x509 -newkey rsa:3072 -sha256 -nodes \
&gt; -keyout /etc/dovecot/private/dovecot.key \
&gt; -out /etc/dovecot/private/dovecot.pem \
&gt; -days 365 \
&gt; -subj "/CN=mail.child.lab.test" \
&gt; -addext "subjectAltName=DNS:mail.child.lab.test" \
&gt; -addext "extendedKeyUsage=serverAuth"

# 作成した証明書の確認
$ sudo ls -l /etc/dovecot/private/dovecot.pem
-rw-r--r-- 1 root root 1562 Oct 11 03:46 /etc/dovecot/private/dovecot.pem
$ sudo ls -l /etc/dovecot/private/dovecot.key
-rw------- 1 root root 2484 Oct 11 03:46 /etc/dovecot/private/dovecot.key
$ sudo openssl x509 \
&gt; -in /etc/dovecot/private/dovecot.pem \
&gt; -noout -subject -issuer -dates \
&gt; -ext subjectAltName \
&gt; -ext extendedKeyUsage
subject=CN=mail.child.lab.test
issuer=CN=mail.child.lab.test
notBefore=Oct 11 03:46:37 2026 GMT
notAfter=Oct 11 03:46:37 2027 GMT
X509v3 Extended Key Usage:
    TLS Web Server Authentication

# Dovecotの再起動
$ sudo systemctl restart dovecot
$ sudo systemctl is-active dovecot
active</code></pre>



<h3 class="wp-block-heading">Dovecotの動作確認</h3>



<pre class="wp-block-code"><code># clientで作業
# 接続確認
~$ openssl s_client -starttls imap \
&gt; -connect 192.168.56.50:143 \
&gt; -servername mail.child.lab.test
Connecting to 192.168.56.50
CONNECTED(00000003)
depth=0 CN=mail.child.lab.test
verify error:num=18:self-signed certificate
verify return:1
depth=0 CN=mail.child.lab.test
verify return:1
---
Certificate chain
 0 s:CN=mail.child.lab.test
   i:CN=mail.child.lab.test
   a:PKEY: RSA, 3072 (bit); sigalg: sha256WithRSAEncryption
   v:NotBefore: Oct 11 03:46:37 2026 GMT; NotAfter: Oct 11 03:46:37 2027 GMT
---
(中略)
---
New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384
Protocol: TLSv1.3
Server public key is 3072 bit
This TLS version forbids renegotiation.
Compression: NONE
Expansion: NONE
No ALPN negotiated
Early data was not sent
<span class="swl-marker mark_orange">Verify return code: 18 (self-signed certificate)</span>　　# 自己署名証明書を使用している場合のエラーコード
---
(中略)
---
read R BLOCK
a001 LOGOUT
* BYE Logging out
a001 OK Logout completed.
closed

# ネットワーク経由で証明書を取得
$ openssl s_client -starttls imap \
&gt; -connect 192.168.56.50:143 \
&gt; -servername mail.child.lab.test \
&gt; -showcerts &lt;/dev/null 2&gt;/dev/null \
&gt; | openssl x509 -outform PEM &gt; ~/mail-server.crt

# 取得した証明書の確認
$ openssl x509 -in ~/mail-server.crt -noout -subject -issuer -fingerprint -sha256
subject=CN=mail.child.lab.test
issuer=CN=mail.child.lab.test
sha256 Fingerprint=3E:DE:F6:A6:9D:55:DA:3C:62:D2:31:2F:DA:6A:DB:52:F5:FE:67:73:B7:4C:20:99:93:B1:89:BF:44:F2:10:21

# メールサーバーで作業
# メールサーバー側のフィンガープリントを確認
$ sudo openssl x509 \
&gt; -in /etc/dovecot/private/dovecot.pem \
&gt; -noout -fingerprint -sha256
&#91;sudo: authenticate] Password:
sha256 Fingerprint=3E:DE:F6:A6:9D:55:DA:3C:62:D2:31:2F:DA:6A:DB:52:F5:FE:67:73:B7:4C:20:99:93:B1:89:BF:44:F2:10:21

# clientで作業
$ openssl s_client -starttls imap \
&gt; -connect 192.168.56.50:143 \
&gt; -servername mail.child.lab.test \
&gt; -CAfile ~/mail-server.crt \　　# 指定した証明書を信頼の基点として、サーバー証明書を検証する
&gt; -verify_hostname mail.child.lab.test \　　# 証明書に記載されたサーバー名が、指定したホスト名と一致するか検証する
&gt; -verify_return_error　　# 証明書の検証に失敗した場合、エラーを無視せずTLS接続を中断する
Connecting to 192.168.56.50
CONNECTED(00000003)
depth=0 CN=mail.child.lab.test
verify return:1
(中略)
---
New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384
Protocol: TLSv1.3
Server public key is 3072 bit
This TLS version forbids renegotiation.
Compression: NONE
Expansion: NONE
No ALPN negotiated
Early data was not sent
<span class="swl-marker mark_orange">Verify return code: 0 (ok)</span>　　# エラーなし
---
(中略)
---
read R BLOCK

# IMAP認証と動作確認
# 下線部分が入力箇所
<span class="swl-marker mark_orange">a001 LOGIN mailadmin "パスワード"</span>
* CAPABILITY IMAP4rev1 SASL-IR LOGIN-REFERRALS ID ENABLE IDLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS THREAD=ORDEREDSUBJECT MULTIAPPEND URL-PARTIAL CATENATE UNSELECT CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS BINARY MOVE REPLACE SNIPPET=FUZZY PREVIEW=FUZZY PREVIEW SPECIAL-USE STATUS=SIZE SAVEDATE COMPRESS=DEFLATE INPROGRESS NOTIFY LITERAL+
a001 OK Logged in
<span class="swl-marker mark_orange">a002 SELECT INBOX</span>
* FLAGS (\Answered \Flagged \Deleted \Seen \Draft)
* OK &#91;PERMANENTFLAGS (\Answered \Flagged \Deleted \Seen \Draft \*)] Flags permitted.
* 3 EXISTS
* 3 RECENT
* OK &#91;UNSEEN 1] First unseen.
* OK &#91;UIDVALIDITY 1791695038] UIDs valid
* OK &#91;UIDNEXT 4] Predicted next UID
a002 OK &#91;READ-WRITE] Select completed (0.005 + 0.000 + 0.004 secs).
<span class="swl-marker mark_orange">a003 FETCH 1 BODY.PEEK&#91;]</span>
* 1 FETCH (BODY&#91;] {418}
Return-Path: &lt;sender@child.lab.test&gt;
X-Original-To: mailadmin@child.lab.test
Delivered-To: mailadmin@child.lab.test
Received: from client.child.lab.test (unknown &#91;192.168.56.40])
        by mail.child.lab.test (Postfix) with ESMTP id 9EB2140252
        for &lt;mailadmin@child.lab.test&gt;; Sat, 10 Oct 2026 12:21:09 +0000 (UTC)
From: sender@child.lab.test
To: mailadmin@child.lab.test
Subject: SMTP Test

This is a test mail.
)
a003 OK Fetch completed (0.001 + 0.000 secs).
<span class="swl-marker mark_orange">a004 LOGOUT</span></code></pre>



<h3 class="wp-block-heading">WiresharkでIMAP通信をキャプチャ</h3>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="274" src="https://cybermemo.blog/wp-content/uploads/2026/10/wireshark_imap-1024x274.png" alt="wireshark_imap" class="wp-image-910" srcset="https://cybermemo.blog/wp-content/uploads/2026/10/wireshark_imap-1024x274.png 1024w, https://cybermemo.blog/wp-content/uploads/2026/10/wireshark_imap-300x80.png 300w, https://cybermemo.blog/wp-content/uploads/2026/10/wireshark_imap-767x205.png 767w, https://cybermemo.blog/wp-content/uploads/2026/10/wireshark_imap.png 1441w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><th>No.</th><th>内容</th><th>通信内容</th></tr><tr><td>4～8</td><td>IMAP</td><td>平文でCAPABILITYの問い合わせと応答</td></tr><tr><td>9</td><td>STARTTLS</td><td>クライアントがTLSへの切り替えを要求</td></tr><tr><td>11</td><td>OK</td><td>サーバーがSTARTTLS要求を受け付ける</td></tr><tr><td>12</td><td>Client Hello</td><td>TLSハンドシェイク開始</td></tr><tr><td>14</td><td>Server Hello</td><td>TLS 1.3のハンドシェイクが進行</td></tr><tr><td>15～19</td><td>Application Dataなど</td><td>TLSの暗号化されたレコードが送受信される</td></tr><tr><td>21以降</td><td>Application Data</td><td>TLSで保護された通信が継続する</td></tr></tbody></table></figure>



<h2 class="wp-block-heading">まとめ</h2>



<p class="wp-block-paragraph">今回はPostfixとDovecotを使用してメールサーバーを構築し、SMTPによるメール送信とIMAPによるメール取得が正常に行えることを確認した。<br>また、IMAPのSTARTTLSによる通信の暗号化とサーバー証明書の作成も実施した。<br>次回はこの環境を使用してSMTP AUTH、SMTPのSTARTTLS、SPF・DKIM・DMARCを導入し、メールの認証や通信の暗号化について検証する。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://cybermemo.blog/mail-server-setup/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
