2026-05-02 ========== ■ 目的: 2026-05-01のサーバークラッシュ後、ドメイン認証作業に必要なメール送受信を最優先で復旧させる。 ■ 経緯 - 2026-05-01 サーバークラッシュ(旧構成: El Capitan + macOS Server 5 + 独自Apache 2.4.51 + PHP 8.0.6 + MariaDB 10.4.6)すべて消失 - Mojave 10.14.6 で再インストール → メールサーバ用途で brew が必要 → Mac mini 2012 が公式対応する最終版 Catalina 10.15.7 へアップデート ■ 実施作業 【メールサーバ構築】 - Postfix 3.2.2(Catalina標準)main.cf 旧設定流用、`content_filter = dkimsign:dummy` を一旦無効化して疎通確保 - システムユーザー作成: menou(502, /bin/bash), aneeson(503, false), boss(504, false), yuria(505, false) - /etc/aliases に4エイリアス追加 (akihiro→menou, yasuhiro→aneeson@mac.com, yasumitsu→boss, chikaco→yuria) - 各ユーザー ~/Maildir 作成、postmaster/root も menou へ - Postfix 起動 (port 25)、外部からSMTP受信動作確認(実際のメールも届いた) 【Dovecot IMAP 構築】 - Homebrew 5.1.8 インストール(Catalinaは Tier 3、要 NOPASSWD 一時設定) - brew curl をHOMEBREW_CURL_PATHに設定(標準curlのTLSがgithub等に接続不可) - dovecot 2.4.3 を brew で導入試行 → SHA256 不一致(upstream tarball 再リリース)で失敗 - dovecot-2.4.3.tar.gz をローカルからscpしてソースビルド - configure: --with-lua=no, --with-ldap=no を明示(lua依存問題回避) - imap-hibernate が make install から漏れたため個別ビルド・install - グループ dovecot/dovenull 作成、PAM service /etc/pam.d/dovecot 追加 - 自己署名証明書で起動 → ポート 143/993 LISTEN、IMAP login 成功 【SMTP Submission (587) + SASL AUTH】 - main.cf に Dovecot SASL + TLS 設定追加 - master.cf submission stanza を完全復元(permit_sasl_authenticated 等) - Python smtplib で 587 STARTTLS+AUTH 送信成功確認 【Let's Encrypt】 - acme.sh 導入、--standalone (port 80) で norizuki.com 証明書取得 - /etc/ssl/norizuki/norizuki.{crt,key} に配置、Postfix・Dovecot 切替 - /usr/local/bin/renew-le.sh + LaunchDaemon (毎日03:30) で自動更新 【DKIM 復旧】 - 旧 /etc/postfix/dkim/default.{private,public} 鍵流用、DNS TXT (default._domainkey) と一致確認 - /usr/local/lib/python2.7/.../dkim/ は Python 3 構文混入で動作不可 - pip3 install dkimpy で Python 3 + dkimsign コマンド導入 - /usr/local/bin/dkim-filter(bash wrapper)を python3/dkimsign 用に書き換え - master.cf dkimsign service の user=_postfix → user=nobody(前回クラッシュ原因の回避) - 587 経由送信で DKIM-Signature ヘッダ付与確認 (rsa-sha256, s=default, d=norizuki.com) 【判明した重大事項】 - NURO 光がアウトバウンド port 25 をブロック(Gmail/iCloud等への直接配信不可) - キューに溜まっていた未配信メール6件削除 - 外部宛送信成立には SMTPリレー(Gmail/SendGrid/SES の587経由)の追加導入が必須 ■ 動作中サービス(2026-05-02終了時点) - Postfix: 25, 587 LISTEN(com.apple.postfix.master 経由 LaunchDaemon) - Dovecot 2.4.3: 143, 993 LISTEN(org.dovecot.dovecot LaunchDaemon) - acme.sh 自動更新: com.norizuki.le-renew LaunchDaemon ■ 未着手・後日対応 - SSH 鍵 norizuki_rsa の再配置(現状パスワード認証のみ) - 外部送信用SMTPリレー設定(NURO 25ブロック対応) - yokosawa.cc 構成の再構築(同サーバ上で動作予定) - Web/PHP/DB は再構築せず(メール優先のため) ■ memory整理 - project_norizuki_server.md は本サーバ固有情報のため削除し、本ドメインのCLAUDE.mdに集約 2026-05-03 ========== ■ 状況: 前日構築の Dovecot 2.4.3 でメール受信不可(メーラー固まる)。原因究明と恒久対応。 ■ 実施作業 【NURO Biz 関連情報の記録】 - DNS 逆引き編集画面(PTR編集可能、159.28.108.0/29 の各 PTR 値)→ /Users/menou/Dropbox/www/norizuki.com/nuro_dns_ptr.txt - DNS セカンダリ契約情報(118.238.201.x からのゾーン転送許可、ns1/ns2.nuro.jp) → nuro_dns_secondary.txt - NURO Biz 契約基本情報(160.86.105.20 LAN1, /29 固定IP, 参照DNS 118.238.201.33等) → nuro_biz_contract.txt - OP25B(Outbound Port 25 Blocking)の制限と SMTPリレー要件 → nuro_smtp_op25b.txt - 現状の DNS は Network Solutions(worldnic.com)、NURO セカンダリ DNS は契約あるが未使用 【SMTP リレー設定(Gmail SMTP 経由)】 - NURO Biz の OP25B 確認、外部宛は relay 必須と判明 - Google アプリパスワード生成依頼 → 設定 - /etc/postfix/main.cf に relayhost = [smtp.gmail.com]:587 + SASL/TLS 設定追加 - /etc/postfix/sasl_passwd で認証情報、postmap で .db 化 - 重要: Catalina の libsasl2 PLAIN メカニズムが Gmail で "generic failure" になる → smtp_sasl_mechanism_filter = login で LOGIN のみに絞ることで成功 - 滞留していた gmail/icloud 宛 7件すべて無事配送、queue 空 【Dovecot 2.4.3 → 2.3.21.1 ダウングレード】 - Apple Mail で受信メールが落ちてこない → ログ調査 - Dovecot 2.4.3 の anvil daemon が assertion failure で panic(hash_conn == conn) - imap-login → imap プロセス間の TLS セッション引き継ぎが破綻、認証は通るが直後切断("out=457 No commands sent") - plain 143 では正常動作、993 IMAPS と 143 STARTTLS 両方で発症 - 各種ワークアラウンド(mail_max_userip_connections=0, anvil client_limit=1, imap-hibernate無効化)すべて効果なし - dovecot 2.3.21.1 ソースをローカルからscp転送 - macOS 非互換(st_atim/st_ctim → st_atimespec/st_ctimespec)パッチを当てて成功 - /usr/local/dovecot23/ に並列インストール、LaunchDaemon を 2.3 に切り替え - IMAPS 993 で 125メッセージ取得確認、Apple Mail で受信動作確認 【pf ファイアウォール + 自動ブラックリスト】 - 大量のSSL/PLAIN auth スキャン攻撃(user=internal の試行多数、複数IP)を確認 - /etc/pf.anchors/blacklist アンカー作成、whitelist/blacklist テーブル - whitelist: 10.0.1.0/24, 127.0.0.0/8, 159.28.108.1, 221.170.61.15 - 22/143/5900 は whitelist 限定、25/587/465/993/995/80/443 は公開 - 自動化スクリプト /usr/local/bin/auth-fail-blacklist.sh 作成 - dovecot.log を tail -F、smtpd/sshd/screensharingd を log stream で監視 - 認証失敗 2回でブラックリスト自動追加 + pfctl -T add で即時反映 - 失敗カウント /var/run/auth-fail-counts.txt、ログ /var/log/auth-blacklist.log - LaunchDaemon com.norizuki.auth-blacklist で常駐 + KeepAlive 【DNS 確認】 - SPF, DMARC, DKIM TXT 全部既に登録済みを確認(追加作業なし) - yokosawa.cc の MX が "10 *.yokosawa.cc."(ワイルドカード)→ 要修正だが今回未対応 - PTR 159.28.108.2 → ip9f1c6c02.ap.nuro.jp.(NXDOMAIN)→ NUROポータルで norizuki.com. に変更可能と判明、ユーザー手動対応待ち ■ 動作確認サマリー - 受信(外部→25→Maildir): ✓ - メーラー受信 IMAPS 993: ✓ (Dovecot 2.3) - メーラー送信 Submission 587 (TLS+SASL): ✓ - 外部宛配信(Gmail SMTPリレー経由): ✓ - DKIM 署名: ✓ (587経由のみ) - LE 自動更新: ✓ - pf 自動ブラックリスト: ✓ (2回失敗で遮断) ■ 残課題 - SSH 鍵 (~/.ssh/norizuki_rsa) を niac の authorized_keys に再配置 - PTR 159.28.108.2 の値変更(NUROポータル側、ユーザー対応) - yokosawa.cc MX レコード修正(worldnic 側、ユーザー対応) - yokosawa.cc サーバー側構築(必要に応じて) 2026-05-07 ========== ■ 状況: SSH ログインができなくなっていたため復旧 → Web ディレクトリの外付けRAID移行を実施。 ■ 実施作業 【SSH 復旧】 - サーバー側で /etc/ssh/sshd_config が PasswordAuthentication no に変更されていた様子 - ed25519 公開鍵 (~/.ssh/norizuki_rsa.pub を上書き) を niac の authorized_keys に登録(ユーザー対応) - 接続OK 【Apache vhost 構成の確認】 - Catalina 標準 Apache 2.4.41(httpd-wrapper 経由 launchd 起動) - User niac / Group staff - vhost: /etc/apache2/other/{norizuki.com,aneeson.com,yokosawa,atchat}.conf - 4ドメイン全部 DocumentRoot=/Users/niac/web/ - aneeson.com の中身は /Users/niac/web/aneeson.com/Aneeson/ 以下、index.html が refresh 【Web ディレクトリ移行(外付けLaCieへ)→ 失敗、ロールバック】 - 目的: 内蔵SSD破損時の保全のため /Volumes/LACIERAID2TB/web/ にホーム移動 - 手順: Apache stop → rsync /Users/niac/web/ → web.old に rename → /Users/niac/web を symlink → Apache start - 結果: 全ドメイン 403 Forbidden("file permissions deny server access"、errno 1 = EPERM) - 原因判明: macOS Catalina の TCC(Privacy保護)が launchd-spawned daemon(httpd-wrapper)から /Volumes/* への ファイルアクセスを EPERM で拒否する。Full Disk Access の手動付与が必要だが GUI 介入要。 - シンボリックリンク・ACL(_www allow read)すべて無効 - ロールバック: web.old → web に戻し、Apache 再起動 → 全 200 OK 復旧確認 【代替案: LaCieへの定期バックアップ(採用)】 - /usr/local/bin/web-backup.sh: rsync -a --delete /Users/niac/web/ → /Volumes/LACIERAID2TB/web/ - LaunchDaemon com.norizuki.web-backup(毎日 03:00) - 初回実行で 567M / 11312 files を LaCie に保管 - LaCie 未マウント時は skip - 復旧時は逆向き rsync で元に戻せる ■ 動作確認 - aneeson.com / 200, norizuki.com / 200, yokosawa.cc / 200, atchat.org / 200 - aneeson.com/Aneeson/Blog/Blog.html → 200 - LaCie 上に最新コピー存在 ■ 残課題 - PTR 159.28.108.2 の値変更(NUROポータル側、ユーザー対応) - yokosawa.cc MX レコード修正(worldnic 側、ユーザー対応) - LaCie 残容量 57GB → 監視や定期クリーンアップを検討 - sshd_config が誰によって変更されたか不明(自動更新?) → 監視推奨 2026-05-08 ========== ■ 状況: 続き作業 — ドメイン別アクセス権限整理、aneeson ログイン化、SMB試行(断念)、aneeson.com ブログシステム新設 ■ 実施作業 【ドメイン別 ACL 整理】 - aneeson.com: user:aneeson フル ACL + symlink /Users/aneeson/Sites/aneeson.com → /Users/niac/web/aneeson.com(C案) - norizuki.com: group:admin フル ACL - yokosawa.cc: 旧 macOS Server 時代の UUID 系 ACL を全クリア → group:admin + user:_www の正常 ACL に再付与 - atchat.org / atchat.jp: user:menou フル ACL - 全 ACL は file_inherit + directory_inherit 付きで新規ファイル自動継承 - menou を admin グループに追加(dseditgroup) 【aneeson ログイン化】 - aneeson のシェルを /usr/bin/false → /bin/bash - sshd_config が PasswordAuthentication no のため publickey 認証必須 - ログイン方法は保留(鍵登録 or password 全体的に再有効化、ユーザー判断待ち) 【SMB 共有試行 → 断念】 - 目的: aneeson が aneeson.com を編集するため /Users/niac/web/aneeson.com を SMB 共有 - smbd 有効化、share 定義(sharing -a)、pf 445 ポート開放(whitelist 限定)成功 - **問題**: aneeson の SMB 認証が通らない(同条件の menou は通る) - 原因仮説: macOS Catalina で dscl/sysadminctl で作成したユーザーは NTLM ハッシュが生成されない(GUI 介在が必要) - sysadminctl -resetPasswordFor、SecureToken 無効化、dscl 直接 passwd 等試行、すべて auth error - 方針転換: SMB 諦めて代替案へ 【ブログシステム新設(/blog/)】 - 経緯: SMB ではなく「通常のブログシステム」として構築する方向に変更 - 設置先: /Users/niac/web/aneeson.com/blog/ - 構成: - PHP 7.3 ベース、ファイル(JSON)保存式の単純ブログ - common.php: 共通レイアウト+データロード関数 - index.php: 記事一覧(最新 8 件) - post.php?slug=XXX: 個別記事 - archive.php: 年月別アーカイブ - feed.php: RSS 2.0 配信 - assets/blog.css: 旧 iWeb 3.0.4 のデザインを踏襲(700px 幅、グレー pinstripe、Cochin/Hiragino フォント、Aneesonロゴ) - assets/*.jpg/.png: 旧 Aneeson/Blog/Blog_files/ から流用 - posts/-.json: 1記事=1ファイル - 最初の試作: PHP 7.3 アロー関数未対応エラー → function() {} 形式に修正 - mod_rewrite 未ロードのため .htaccess で RewriteRule は使わず(feed.php へ直接アクセス) - 当初 iWeb の絶対配置複数レイヤ画像を再現しようとして崩れる → シンプル線形レイアウトに書き直し - サンプル記事 3 件を JSON で投入し、index/post/archive/feed すべて 200 OK 動作確認 【ヘッドレス Chrome 自己検証フロー導入】 - これまでスクリーンショットを都度ユーザーに依頼していたが Chrome --headless で自動取得可能と判明 - /Applications/Google Chrome.app/Contents/MacOS/Google Chrome --headless --disable-gpu --no-sandbox --user-data-dir=/tmp/cp --window-size=900,1400 --force-device-scale-factor=2 --screenshot=/tmp/X.png URL - Read tool で PNG を視覚確認できる → 反復修正のサイクルが大幅短縮 ■ 動作確認 - http://aneeson.com/blog/ → 記事一覧、Aneeson ロゴ、RSS リンク、Read more...、アーカイブへ... - http://aneeson.com/blog/post.php?slug=2026-04-25-sample-old → 個別記事ビュー、画像付き - http://aneeson.com/blog/archive.php → 年月別アーカイブ - http://aneeson.com/blog/feed.php → RSS フィード - 旧 Blog.html とほぼ同じ印象(700px 幅、グレー pinstripe、Aneeson ロゴ、モンキーフッターアイコン) ■ 残課題 - aneeson のログイン方法決定(PasswordAuthentication 全体再有効化 or 個別公開鍵登録) - ブログ管理画面 (/blog/admin/) の追加(記事投稿/編集フォーム、認証付き) - 旧 entori/ XML から新 JSON への記事一括コンバート - 画像アップロード機能、コメント機能(必要に応じて) - PTR 159.28.108.2 の値変更(NUROポータル側、ユーザー対応) - yokosawa.cc MX レコード修正(worldnic 側、ユーザー対応) 2026-05-08 ========== ■ 目的: yasumitsu@norizuki.com (boss アカウント) のメール受信動作確認、IMAP 認証失敗の原因特定と恒久対策。 ■ 経緯 - boss/Yn131500 で IMAP ログインしようとすると「アカウントかパスワードが違う」エラーが出るとの報告 - サーバ上で doveadm auth login boss Yn131500 は成功 → Dovecot 単体は問題なし ■ 実施作業 【メール受信状態の確認】 - boss アカウント存在 (uid=504, /Users/boss, shell=/bin/bash) 確認 - パスワード Yn131500 認証成功(dscl -authonly OK、doveadm auth OK) - /etc/aliases, /etc/postfix/aliases に yasumitsu→boss エントリ存在、postalias で展開確認 - 実配送テスト: sendmail で yasumitsu@norizuki.com 宛投稿 → /Users/boss/Maildir/new/ に正常着信 - yuria 側も同様に確認: shell=/bin/bash、Maildir 活発に利用中(IMAPで .Sent / .Sent Messages 等更新あり) 【CLAUDE.md 修正】 - メールアカウント表でboss/yuria のシェル記載が `/usr/bin/false` だったが実態は `/bin/bash`(local delivery のためログインシェル必須) - 両エントリとも `/bin/bash(local delivery のためログインシェル必須)` に更新 【IMAP 認証失敗の原因特定】 - openssl s_client で IMAP login 直接テスト: `boss` で成功、`yasumitsu`/`boss@norizuki.com`/`yasumitsu@norizuki.com` 失敗 → Dovecot は system user 名 (boss) のみで認証する仕様 - クライアント側設定は user=boss 正しい設定とのこと - tcpdump で送信元 IP を観測: 152.165.205.33 から TCP 993 への SYN は届くが SYN-ACK が返らない(サーバが遮断) - 過去ログ確認: 152.165.205.33 から boss で複数回 pam authentication error → 自動ブラックリスト登録済み - pf テーブル `blacklist` 内 + /etc/pf.anchors/blacklist.txt 内 両方に存在 - LAN クライアント (10.0.1.x) → RTX830 → PPPoE WAN(=152.165.205.33) → NURO → norizuki.com の経路で、LAN内からの接続も WAN IP に NAT変換されて到達するため、認証ミス1回で LAN 全体が遮断される構造 【ブラックリスト解除】 - pfctl -a blacklist -t blacklist -T delete 152.165.205.33 で実行時テーブルから削除(325→324件) - /etc/pf.anchors/blacklist.txt から該当行削除(バックアップ取得後) - whitelist 追加は未実施(恒久対応として 152.165.205.33 を whitelist に追加すべきだが、本日は解除のみ) ■ 結論・TODO - boss/yuria の local delivery + IMAP 認証は正常動作 - LAN 側マシンから norizuki.com への接続は RTX830 NAT で WAN IP (152.165.205.33) として到達 → 自動ブラックリストの誤発火に注意 - TODO: 152.165.205.33 を /etc/pf.anchors/whitelist.txt に追加して恒久遮断回避 - TODO: LAN クライアントの hosts/DNS で `norizuki.com → 10.0.1.48` 解決させて LAN 内ルートを使う案も検討 - TODO: クライアント慣習に合わせ Dovecot に `yasumitsu`/`yasumitsu@norizuki.com` を boss のエイリアスとして passdb 追加するか検討