#!/usr/bin/env bash # サーバー上で root として手動実行する # domains.txt からドメインを読み取り、DKIM 鍵生成と OpenDKIM テーブルを生成して # コンテナを起動する。ドメインを追加・削除するたびに再実行する。 set -euo pipefail MAIL_DIR="$(cd "$(dirname "$0")" && pwd)" DOMAINS_FILE="$MAIL_DIR/domains.txt" OPENDKIM_DIR=/etc/opendkim KEY_DIR="$OPENDKIM_DIR/keys" SELECTOR=mail PRIMARY=hetzner.yyamashita.com if [[ "$(id -u)" -ne 0 ]]; then echo "ERROR: root として実行してください" >&2 exit 1 fi # domains.txt から有効なドメインを読み込む mapfile -t SERVICE_DOMAINS < <(grep -vE '^\s*(#|$)' "$DOMAINS_FILE") echo "=== 対象ドメイン ===" for d in "${SERVICE_DOMAINS[@]}"; do echo " $d"; done echo " $PRIMARY (プライマリ)" # DKIM 鍵生成(初回のみ) echo "" echo "=== DKIM 鍵 ===" mkdir -p "$KEY_DIR" chmod 700 "$KEY_DIR" if [[ -f "$KEY_DIR/${SELECTOR}.private" ]]; then echo " 既存の鍵を使用: $KEY_DIR/${SELECTOR}.private" else echo " opendkim-tools をインストール..." DEBIAN_FRONTEND=noninteractive apt-get install -y -qq opendkim-tools echo " 2048bit RSA 鍵を生成中..." cd "$KEY_DIR" opendkim-genkey -b 2048 -s "$SELECTOR" -d yyamashita.com chmod 600 "$KEY_DIR/${SELECTOR}.private" echo " 生成完了" fi # OpenDKIM テーブル生成 echo "" echo "=== OpenDKIM テーブル生成 ===" { for d in "${SERVICE_DOMAINS[@]}"; do echo "${SELECTOR}._domainkey.${d} ${d}:${SELECTOR}:${KEY_DIR}/${SELECTOR}.private" done echo "${SELECTOR}._domainkey.${PRIMARY} ${PRIMARY}:${SELECTOR}:${KEY_DIR}/${SELECTOR}.private" } > "$OPENDKIM_DIR/KeyTable" echo " KeyTable : $OPENDKIM_DIR/KeyTable" { for d in "${SERVICE_DOMAINS[@]}"; do echo "*@${d} ${SELECTOR}._domainkey.${d}" done echo "*@${PRIMARY} ${SELECTOR}._domainkey.${PRIMARY}" } > "$OPENDKIM_DIR/SigningTable" echo " SigningTable: $OPENDKIM_DIR/SigningTable" cat > "$OPENDKIM_DIR/TrustedHosts" << 'EOF' 127.0.0.1 ::1 172.16.0.0/12 10.0.0.0/8 EOF echo " TrustedHosts: $OPENDKIM_DIR/TrustedHosts" # コンテナ起動 echo "" echo "=== コンテナ起動 ===" bash "$MAIL_DIR/deploy.sh" # 公開鍵を表示 echo "" echo "=== DKIM 公開鍵 (Route 53 各ドメインに設定) ===" echo "セレクター: ${SELECTOR}._domainkey.<ドメイン>" echo "---" cat "$KEY_DIR/${SELECTOR}.txt" echo "---" echo "" echo "Done." echo "次: python3 $MAIL_DIR/dns/setup-route53.py"