自宅サーバーで公開していた Web・メール・DNS を AWS に移し、家のサーバーを“内側”に下げた話
このブログやメール、ドメインの DNS は、長いあいだ自宅のサーバー1台でインターネットに公開していました。この1週間ほどで、公開している部分をまるごと AWS(Amazon Lightsail)に移し、家のサーバーはインターネットから見えない“内側”に下げました。その手順と、つまずいたところをまとめます。
なぜ家のサーバーから外に出したのか
- 家の事情でサービスが止まる:停電や回線の工事、ルーターの再起動のたびに、Web もメールも止まっていました。ルーターの記録を見ると、停電らしき再起動もありました
- メールが届かなくなったことがある:ウイルス検査のソフトが止まったのに気づかず、メールを約4週間受け取れていなかったことがありました
- 攻撃を家で受け止めている:調べてみると、ある晩だけでメールの不正ログインの試みが 1,300 回以上ありました。家の回線の入口を開けている限り、こうした攻撃は家に直接来ます
- 家の中でやりたいことが増えた:家のサーバーでは社内向けのサービス(ファイル共有・アカウント管理・監視)も動かしていて、公開用と同居させたくなかった
移行前と移行後の構成

| 移行前 | 移行後 | |
|---|---|---|
| Web(WordPress) | 家のサーバー | AWS |
| メール | 家のサーバー | AWS |
| DNS(ドメインの名前の管理) | 家のサーバー | AWS + ドメイン業者のセカンダリ DNS |
| 家の入口 | Web・メール・DNS 用に開けていた | VPN だけ |
| 家のサーバーの役割 | 公開+家の中のサービス | 家の中のサービス・テスト環境・監視 |
1. AWS Lightsail を選んだ理由
Amazon Lightsail は、AWS の中でも「月額が決まった、まとめ売りのサーバー」です。EC2(AWS の一般的なサーバー)のように細かい料金計算をしなくてよく、通信量もプランに含まれています。
- プラン:Linux の 4GB メモリ(2 vCPU・SSD 80GB・転送量 4TB)。料金表 では月 24 ドル。毎日の自動スナップショット(バックアップ)を足して、月 26〜28 ドルほどの見込みです(税は別。正確な金額は請求で確認中)
- 場所:東京リージョン
- OS:AlmaLinux 9。家のサーバーと同じ OS・同じ Web サーバー(Apache)にしたので、設定をほぼそのまま移せました
- Web・メール・DNS を1台にまとめています。メールのウイルス検査(ClamAV)がメモリを1GB ほど使うので、2GB のプランでは足りないと判断しました
ついでに AWS のアカウントを棚卸ししたら、2022年に試しに作ったまま忘れていたサーバーがアメリカ(オレゴン)で動き続けていて、毎月 26 ドルほどかかっていました。移行と同時に削除したので、差し引きの負担はほとんど増えていません。使っていないクラウドのサーバーは、たまに見直したほうがよさそうです。
2. サーバーの初期設定(守りを先に固める)
- OS を最新に更新して再起動。タイムゾーンを日本に、念のためスワップ(メモリ不足時の逃げ場)を 2GB 用意
- SSH(サーバーへのリモートログイン)は鍵だけでログインでき、root では入れない設定に。接続できる場所も家からだけに絞る
- fail2ban:何度もログインに失敗した相手を自動で締め出す
- ファイアウォールを二重に:Lightsail の管理画面のファイアウォールと、サーバー内の firewalld の両方で、必要な番号だけを開ける。ポートを足すときは両方に設定する
- 使わないサービス(rpcbind など)は止める
- Lightsail の自動スナップショットを毎日に設定
3. Web(WordPress)を移す
WordPress は「ファイル一式」と「データベース」の2つを移せば動きます。
- 家のサーバーから
/var/www/htmlを丸ごと複製(約7,000ファイル) - データベース(MariaDB)を書き出して読み込み。データベースはサーバーの中からだけ接続できるようにして、外には開けない
- PHP は 8.3。先に新サーバーで WordPress を更新して問題が出ないことを確かめ、そのあと家のサーバーも同じ版にそろえた
- 証明書は Let’s Encrypt(無料の SSL 証明書)を certbot で取得・自動更新
http://やwwwなしでのアクセスは、すべてhttps://www.の正式な URL へ転送(301)
配布が止まっていたページ作成のプラグイン(Nimble Builder)は、使っているページが無かったので無効にしました。
4. メールを移す(いちばん大変だったところ)
メールは Postfix(送受信)と Dovecot(メールソフトからの受け取り)で作り、送信したメールに電子署名を付ける OpenDKIM、迷惑メール判定の SpamAssassin、ウイルス検査の ClamAV を組み合わせています。
AWS に「25番ポートの制限解除」を申請する
AWS は迷惑メール対策のため、最初はメールの送信(25番ポート)を止めています。Lightsail の手順 に従って、制限の解除と、IP アドレスからサーバーの名前を引けるようにする「逆引き」の設定を申請しました。今回は1日かからずに処理されました。
なりすまし対策の3点セット(SPF・DKIM・DMARC)
- SPF:「このドメインのメールはこのサーバーから出します」と DNS に書く
- DKIM:送るメールに電子署名を付け、公開鍵を DNS に載せる
- DMARC:SPF・DKIM に合わないメールをどう扱うかを宣言する。最初は様子見の
p=noneにして、毎日届く集計レポートを確認してから強める予定
Gmail で受け取ったメールの「メッセージのソースを表示」で、3つとも PASS になっていることを確認しました(Google のメール送信者のガイドラインも参考にしました)。
メールボックスを移して切り替える
- 事前にメールボックスを丸ごとコピーしておき、切り替えの直前にもう一度、差分だけを同期
- Dovecot の管理ファイル(
dovecot-uidlist)も一緒に移すと、メールソフトが全部のメールを取り直す騒ぎを防げる - 同期が終わったら、DNS の MX(メールの届け先)と mail などの名前を新サーバーへ向ける
- 使われていなかった POP3 はやめて、IMAP(暗号化した接続)だけにした
5. DNS を移す
ドメインの名前の管理(DNS)は BIND で動かしています。DNS の引っ越しで大事なのは「順番」と「待ち時間」です。
- 切り替えの前に、各記録の有効期間(TTL)を 1日 → 5分に短くしておく。古い情報がキャッシュに長く残らないようにするため
- ドメインの登録業者の画面で、ネームサーバーの名前に結び付いた IP アドレス(ホストの登録)を新サーバーに変更。1回目は反映されず、設定し直したら反映された
- 登録業者のセカンダリ DNS(予備の DNS)も、情報の取り元を新サーバーに変更
- 反映を待つ間は、新旧の両方のサーバーで DNS の内容と通し番号(シリアル)をそろえておく
dig +short NS freebear.org
dig +short www.freebear.org @8.8.8.8
切り替え後は、上のようなコマンドで外の DNS(Google の 8.8.8.8 など)から見える内容を確認しました。
6. 切り替えの順番

全体で4日ほど。一度に全部を切り替えず、1つずつ移して確認してから次へ進めたので、メールの取りこぼしもなく移行できました。
7. 家のサーバーを“内側”に下げる
- ルーターの「外から家のサーバーへ」の転送(Web・メール・DNS 用)をすべて削除
- 家のサーバーのファイアウォールからも、外向けの許可を削除(家の中からはこれまでどおり使える)
- メールの受信と、外向けの DNS を止める。家のサーバーからの通知メールは Gmail 経由で送る
- 外出先から家の中を使うときは、ルーターの VPN を通す
- 家の WordPress は、本番の前に試すためのテスト環境として使うことにした(このブログのデザイン変更も、家で試してから本番に反映しています)
最後に、AWS 側から家の回線に向けて接続できる入口が残っていないかを一通り試し、VPN 以外は閉じていることを確認しました。
8. お互いを監視する
Uptime Kuma(死活監視)を家と AWS の両方に入れ、お互いを外から見張るようにしました。家の回線が止まれば AWS 側が、AWS のサーバーが止まれば家側がメールで知らせてくれます。あわせて Cacti で、CPU・メモリ・アクセス数・メールの件数などをグラフにしています。監視の画面は家(VPN 経由を含む)からだけ見られるようにしました。
つまずいたところ
- Gmail に IPv6 経由で送ると拒否された:IPv6 のアドレスには逆引きが設定されていなかったため。メールの送信は IPv4 だけにして解決
- 一部のメールが「SMTPUTF8」で返ってきた:日本語を含むメールの扱いの違い。Postfix の
smtputf8_enable = noで解決 - 迷惑メールの判定に使うブラックリストが引けない:AWS の共用 DNS からの問い合わせは拒否されることがある。サーバーの中だけで使う DNS(Unbound)を立てて解決
- ウイルス検査が止まるとメールの受信まで止まる:家のサーバーで4週間メールが届かなかった原因。検査ソフトが止まっても受信は続ける設定(
milter_default_action = accept)にし、止まったらメールで知らせる仕組みを足した - サーバーのメモリがぎりぎり:ウイルス検査だけで約1GB。PHP の同時実行数の上限を下げて調整し、様子を見て 8GB のプランも検討する
やってみての効果
- 停電や家の回線の工事があっても、ブログとメールは止まらなくなった
- 移行前は一晩で 1,300 回以上あったメールの不正ログインの試みが、家のサーバーでは 0 件になった(攻撃は AWS 側で fail2ban が締め出している)
- 家の中のサーバーは、テスト環境や家族のパソコンの管理に専念できるようになった
まとめ
自宅サーバーでの公開は楽しい反面、停電・回線・攻撃と、家の都合がそのままサービスに響きます。公開する部分だけをクラウドに出し、家は VPN の内側に下げる形にしたことで、安定性と安全性の両方がぐっと上がりました。月 4,000 円前後の出費はかかりますが、使っていなかった古いクラウドのサーバーを片付けたこともあって、トータルでは満足しています。自宅サーバーの運用に疲れてきた方の参考になればうれしいです。
