こんにちは
今回は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の設定を進めていきます
まずは、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へレコードを設定するのみとなります
TXTレコードで下記のようなものをDNSへ登録します
レコード名:_dmarc.example.com
値:”v=DMARC1; p=none; sp=reject; rua=mailto:test@example.com”
8. 動作確認
メールを送信し、下記のようにすべてPASSになっていればOKです
なお、おそらく最初は迷惑メールボックスに入っていると思うので、「迷惑メールではない」を押下して、正常に受信できるようにしましょう
▼おわりに
いかがでしたでしょうか。
今回はあまり詳細な説明はせずにとにかく自分用に書き殴ったに近い形となりましたが、基本的なところは抑えているような気はしています。
正直DKIMが詰まりすぎて一瞬諦めそうになりましたが、エラー内容の確認と試行錯誤で何とかPASSするようになったので、そこは達成感がありました。
また、オープンリレー対策など名前は聞いたことはありましたが、実際に触ったことはなかったので、手を動かしながら理解できた気がします。
それではまた。
