目次
統合システム構成図
外部クラウドサービスから境界防御、ホストとコンテナの独立環境まで。一切の省略を排除したアーキテクチャ全景です。
MyDNS.jp
DNS管理/委任Brevo(SMTP)
SMTPリレー送信Let's Encrypt
SSL証明書発行FortiGate 50E
ポート単位のNAT/VIP振り分けMail(25/587/993)
FortiGateからホストへ直接転送(従来通り)Web(80/443)
Phase 4以降はCaddyへ転送Caddy 172.16.1.18(DMZ)
HTTPS終端・リバースプロキシ/Let's Encrypt証明書自動発行hs.* → Headscale
SERVER・192.168.2.13:8080auth.* → Authentik
SERVER・192.168.2.16:9000www.* → サーバーホスト
172.16.1.2:80サーバーホスト
172.16.1.2 ・ example.com(親ドメイン)サーバーコンテナ
172.16.1.3 ・ adminuser.example.com(子ドメイン)Phase 4(Caddy導入)による変更点
従来はFortiGateがWeb(80/443)もMailと同様にサーバーホストへ直接転送していましたが、Caddyリバースプロキシの構築(Phase 4)により、FortiGateのVIP転送先は172.16.1.18(Caddy)に変更されています。CaddyがHTTPS終端とホスト名別振り分けを一元管理し、SERVERセグメントのHeadscale/Authentikもここから公開されます。Mail(25/587/993)はCaddyを経由せず、従来通りサーバーホストへ直接届きます。
コア・コンセプト:「受付係」によるドメイン別ルーティング
Caddy(Web)とFortiGate(Mail)を経由してホストに届いた通信を、ホスト上のApache/Postfixが宛先ごとに仕分けする仕組みです。
Zoom-in 1:外部クラウドインフラとの三位一体連携
example.comのグローバルIPを管理。wingサブドメインの管理権限をホストのBINDへ「委任(NSレコード)」。
ホスト(yama)とコンテナ(adminuser)の双方から利用。OP25B(25番ポートブロック)を回避し、SPF/DKIM/DMARCの正規証明を乗せて確実な到達率を保証。
Web(HTTPS)とMail(SSL/TLS)の暗号化証明書を無料発行。systemdタイマーにより90日サイクルの30日前に自動更新。
Zoom-in 3:サーバーホスト(example.com・172.16.1.2)
wing専用の権威DNS。自動更新スクリプト(cronで5分間隔)により、グローバルIPの変動に24時間追従しダウンタイムを最小化。
yamaドメインのメール送受信を担当。送信はBrevoリレー(Port 587)へ。
リバースプロキシとして、wing宛のWeb通信をコンテナへ中継。
ホストOS自体の防御。SELinuxはプロキシ通信を許可する特例設定(httpd_can_network_connect)を適用。
Zoom-in 4:サーバーコンテナ(adminuser.example.com・172.16.1.3)
wingドメイン専用のWebサイトを表示する本体。ホスト側の環境汚染を完全に防ぐ。
Postfix/Dovecot。コンテナ独自でもBrevo経由でメール送信(Port 587)を可能に。サブドメイン専用のメール環境として完結。
コンテナから送るメールの正当性を、ホスト上のBIND(DNS)に書き込んだレコードで証明。Fail2banによるコンテナ内ログの独立監視。
横断解説1:macvlanによる物理層の共有と論理層の分離
Physical NIC
Host Interface(eth0)
No IP assigned - state UP only
Container(adminuser)
Macvlan Virtual Network(macvlan0)
Critical Note:SSH切断の回避
ホストOSのルーティング破壊(SSH切断)を防ぐため、ホストOS側には仮想インターフェース(macvlan0)のIPアドレスを意図的に割り当てない(state UPのみ)。これにより、1つのNICから2つの完全に独立したIPを抽出し、FortiGateからの直接通信を可能にする。
横断解説2:究極の二重Brevoリレーと到達率100%への道
Postfix
SASL Auth
Brevo SMTP Relay
Internet
自宅回線の25番ポートブロック
自宅回線の25番ポートブロック(OP25B)を回避するため、Brevoをスマートホストとして利用(Port 587)。
STARTTLS + SASL
STARTTLSで暗号化トンネルを構築し、sasl_passwdを用いたBase64認証でBrevoへログイン。
ホスト・コンテナ双方から
ホスト(yama)とコンテナ(adminuser)の両方が、独立したSMTPキーを用いてBrevoへリレー送信。スパム判定を回避し、クリーンなIPからの正規配信を実現。
横断解説3:送信ドメイン認証(3重の身分証明)
SPF(正規の配達員リスト)
TXTレコードで「Brevoが代理送信すること」を正式に許可。IPアドレスの照合。
DKIM(電子実印)
CNAME経由で、メール内容が改ざんされていないことを暗号技術(公開鍵/秘密鍵)で数学的に証明。
DMARC(不合格時のルール)
偽物が届いた際の破棄・レポートポリシー(p=none)を宣言し、なりすましを防止。結果の最終統合判定。
横断解説4:サーバー要塞化を支える多層防御(Defense in Depth)
24時間体制の自動追放:Fail2ban
- Read Logs(maillog / secure)を常時監視
- Detect 5 Failures(maxretry=5 / findtime=10m)でSSH・Postfix-SASL・Dovecotへの総当たり攻撃を検知
- Block IP(firewall-cmd --ipset)で攻撃者IPを即座にブロック
- Release after 30m(bantime=30m)で一定時間後に解除
OS内部の絶対的看守:SELinux(Enforcing)
Disabledにはせず、強制モードを維持。Webサーバーが外部通信する特例(httpd_can_network_connect)や、証明書へのアクセス権(restoreconによるcert_t付与)を厳密に管理。
総括マトリックス:主要な実施事項と成功のための鍵
| 分野 | 項目 | 成功のための鍵 |
|---|---|---|
| DNS | 親子DNSの連携 | MyDNSでの委任と、ホスト上のBINDが常に「最新のグローバルIP」を公開していること。動的IPスクリプトの確実な稼働。 |
| 二重のBrevoリレー | ホスト(yama)もコンテナ(adminuser)も、それぞれBrevoへの認証を設定し、SPF/DKIM/DMARCで完全に保護すること。 | |
| Security | 多層防御の完遂 | FortiGate(物理)→ firewalld(OS)→ Fail2ban(ログ監視)→ SELinux(動作制限)をすべて有効に維持すること。 |
| Network | macvlanの構築 | コンテナがホストのルーティング(SSH)を壊さず、完全に独立した仮想インターフェースとして外部通信を確立すること。 |
一切の省略がない最終形
これが、安全性と拡張性を両立した要塞化インフラの全体像です。各詳細な構築手順は、Rocky Linux 9のセットアップ・セキュリティ・Webサーバー・Mailサーバーの各ページで解説しています。