【備忘録】AlmaLinux9のPostfixからGmailへメールを送信してみた

こんにちは

今回はAlmaLinuxからgmailへメールを送信した際の自分用のメモになるので、あまり有益なものではないかもしれません

そのため、こんなことしたんだーくらいに思っていただけますと幸いです

 

▼やったこと

AlamLinux9のpostfixからGmailへメールを送信しました

なお、Gmailへのメール送信となるので、SPF, DKIM, DMARC あたりを設定しました

また、デフォルト状態のpostfixでは、オープンリレー状態になっているので、SMTP認証を導入しました

※ドメイン名は例として example.com で記載しており、サーバーのIPアドレスも 1111.1111.1111.1111 としています

 

▼流れ

1. Postfixのインストールと初期設定

2. SMTP設定(オープンリレー対策)

3. DNS上でSPFレコードの登録

4. DKIMのインストールと設定

5. Postfixと OpenDKIM の接続

6. DNS上でDKIMレコードの登録

7. DMARCレコードの登録

8. 動作確認

 

▼手順

1. Postfixのインストールと初期設定

まずはpostfixをインストールします

dnf install postfix

 

次に下記諸々初期設定していきます

※inet_interfaces や mynetworks を自サーバーだけに絞っており、この時点でオープンリレー対策はできていますが、念のため後程SMTP認証を設定します

vi /etc/postfix/main.cf
myhostname = hostname.example.com
mydomain = example.com
myorigin = $mydomain
inet_interfaces = localhost
inet_protocols = ipv4
mydestination = $myhostname, localhost.$mydomain, localhost
mynetworks = 127.0.0.0/8, 1111.1111.1111.1111/32

 

2. SMTP設定(オープンリレー対策)

オープンリレー対策としてSMTP関連の設定を入れます

こうすることで認証されたユーザー(今回だと自サーバーのみ)だけがメールを送信できるようになります

(=認証されいないユーザーはメールの送信ができなくなるので、海外などからの踏み台サーバーにされなくなります)

 

まずはcyrusをインストールします

dnf install cyrus-sasl cyrus-sasl-plain

 

下記をmain.cfに追記します(各設定値の詳細はこちらの記事をご確認ください)

smtpd_sasl_auth_enable = yes
smtpd_sasl_path = smtpd
smtpd_sasl_type = cyrus
smtpd_sasl_security_options = noanonymous
smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated, defer_unauth_destination

 

起動します

systemctl start saslauthd
systemctl enable saslauthd
systemctl status saslauthd

→ active (running) になっていればOKです

 

3. DNS上でSPFレコードの登録

Route53などのDNSサービスで下記をTXTレコードで登録します

なお、GmailではSPFかDKIMのどちらかがないと、受信自体を拒否されます

レコード名:example.com

値:”v=spf1 ip4:1111.1111.1111.1111 -all”

 

4. DKIMのインストールと設定

メールの到達率を上げるため、opendkimを利用して、DKIMの設定を進めていきます

DKIMについて

 

まずは、epelレポジトリをインストールします

dnf install epel-release

 

OpenDKIMをインストールします

dnf install opendkim opendkim-tools

 

※ここで下記のようなエラーが出力され、インストールに失敗するかもしれません

Last metadata expiration check: 0:01:14 ago on Sat 28 Mar 2026 08:14:40 PM JST.
Error:
 Problem 1: conflicting requests
  - nothing provides libmilter.so.1.0()(64bit) needed by opendkim-2.11.0-0.36.el9.x86_64 from epel
  - nothing provides libmemcached.so.11()(64bit) needed by opendkim-2.11.0-0.36.el9.x86_64 from epel
 Problem 2: conflicting requests
  - nothing provides libmemcached.so.11()(64bit) needed by opendkim-tools-2.11.0-0.36.el9.x86_64 from epel
(try to add '--skip-broken' to skip uninstallable packages or '--nobest' to use not only best candidate packages)

 

必要なパッケージがコンフリクトしているため、下記を実施してください(※参考記事

dnf config-manager --set-enabled crb

 

改めてOpenDKIMをインストールします

dnf install opendkim opendkim-tools

→ 正常にインストールできればOKです

 

インストールが完了したら下記秘密鍵の作成などを進めていきます

opendkim-genkey -v -b 1024 -D /etc/opendkim/keys/ -d example.com -s 20260329

→ 2048bitだとDNSへレコード登録するときに誤った値を生成してしまうみたいなので、あえて1024bitで作成しています

※実際に 2048bitだと、dkim=neutral (bad format) がメールヘッダーに記載されており、結果が PASS になりませんでした

 

権限を変更します

chwon opendkim:opendkim 20260329.txt
chwon opendkim:opendkim 20260329.private

 

作成が完了すると /etc/opendkim/keys/ 配下に .private と .txt が作成されます

# ls -la /etc/opendkim/keys/
total 16
drwxr-x--- 2 opendkim opendkim 4096 Mar 29 16:44 .
drwxr-xr-x 3 root     opendkim 4096 Mar 29 16:19 ..
-rw------- 1 opendkim

 

/etc/opendkim.conf ファイルで下記を設定します

vi /etc/opendkim.conf
Mode s
Socket local:/run/opendkim/opendkim.sock

→ 後述のpostfixのmain.cfと合わせる必要があります

 

KeyTable と SigningTable を有効化しなければ、DKIM認証自体が実行されないので注意してください

#KeyFile        /etc/opendkim/keys/default.private ★コメントアウトします
KeyTable /etc/opendkim/KeyTable ★コメントインします
SigningTable refile:/etc/opendkim/SigningTable ★コメントインします
ExternalIgnoreList refile:/etc/opendkim/TrustedHosts ★コメントインします
InternalHosts refile:/etc/opendkim/TrustedHosts ★コメントインします

 

/etc/opendkim/TrustedHosts へ localhost とドメイン名を記載し、自サーバーのみ信頼できるホストとして指定します

# OPENDKIM TRUSTED HOSTS
# To use this file, uncomment the #ExternalIgnoreList and/or the #InternalHosts
# option in /etc/opendkim.conf then restart OpenDKIM. Additional hosts
# may be added on separate lines (IP addresses, hostnames, or CIDR ranges).
# The localhost IP (127.0.0.1) should always be the first entry in this file.
127.0.0.1
::1
localhost
example.com
#host.example.com
#192.168.1.0/24

 

/etc/opendkim/KeyTable に下記を記載し、署名に使う秘密鍵を指定します

<セレクタ名>._domainkey.<ドメイン名> <ドメイン名>:<セレクタ名>:<秘密鍵ファイルのフルパス>
20260329._domainkey.example.com example.com:20260329:/etc/opendkim/keys/20260329.private

 

/etc/opendkim/SigningTable に下記を記載し、署名を行うドメイン名を指定します

*@<ドメイン名> <セレクタ名>._domainkey.<ドメイン名>
*@example.com 20260329._domainkey.example.com

 

OpenDKIMを起動します

systemctl start opendkim
systemctl enable opendkim
systemctl status opendkim

 

5. Postfixと OpenDKIM の接続

Postfix からメールを送信する際にDKIM認証を実施するように設定します

vi /etc/postfix/main.cf
smtpd_milters = unix:/run/opendkim/opendkim.sock
non_smtpd_milters = $smtpd_milters
milter_default_action = accept

→ smtpd_milters は /etc/opendkim.conf のSocket で記載したものと合わせます

 

6. DNS上でDKIMレコードの登録

公開鍵ファイル内の値をDNSヘ登録します

cat /etc/opendkim/keys/20260329.txt

 

7. DMARCレコードの登録

DMARCはSPFやDKIMの認証結果を利用する仕様なので、事前にどちらか設定済みである必要があります

そのうえで、認証に失敗したメールの取り扱いポリシーに関する設定をDMARCで記載します

なお、設定自体はDNSへレコードを設定するのみとなります

DMARCについて

 

TXTレコードで下記のようなものをDNSへ登録します

レコード名:_dmarc.example.com

値:”v=DMARC1; p=none; sp=reject; rua=mailto:test@example.com”

 

8. 動作確認

メールを送信し、下記のようにすべてPASSになっていればOKです

なお、おそらく最初は迷惑メールボックスに入っていると思うので、「迷惑メールではない」を押下して、正常に受信できるようにしましょう

 

▼おわりに

いかがでしたでしょうか。

今回はあまり詳細な説明はせずにとにかく自分用に書き殴ったに近い形となりましたが、基本的なところは抑えているような気はしています。

正直DKIMが詰まりすぎて一瞬諦めそうになりましたが、エラー内容の確認と試行錯誤で何とかPASSするようになったので、そこは達成感がありました。

また、オープンリレー対策など名前は聞いたことはありましたが、実際に触ったことはなかったので、手を動かしながら理解できた気がします。

それではまた。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA