きっと正しくないレンタルサーバーの作り方 Vol.2 - ざっくりアーキテクト
はじめに
第2回めです(・∀・)。 今回は全体的なアーキテクトについて記述していこうと思います(・∀・)。
※注意! この一連の記事で紹介するコードは動作の概念を説明するものでありセキュリティーなどは意識していません(・∀・)。
実際に運用するシステムなどに使用しないでください(・∀・)。 (そのまま使うひともいないと思いますが)
また、私も記事を書きながら開発をしていくので「後になってみたら最初の方の記事間違えてたー」なんて事は起きそうです(・∀・)。
ご了承ください(・∀・)。
サーバー構成
全体の構成
まずは、全体の構成図(・∀・)。
ざっくりこのような構成を考えています(・∀・)。
システム本体サーバーには
- レンタルサーバーの管理ウェブサイト
- FTPサーバー
- メールサーバー
- ユーザー管理サーバー(LDAP、後述)
などを動かします(・∀・)。
レンタルサーバーA/Bは、実際にはAのみ構築します(・∀・)。
- ユーザー数が増えた場合などに B、C、D、… のように追加していける設計のために上記のような図を書いています(・∀・)。
アカウント管理
rentaserve.com では
- 管理者アカウント(以降「アカウント」と表記)
- ユーザーアカウント(以降「ユーザー」と表記) の二種類のアカウントがあります(・∀・)。
どちらもレンタルサーバーを使用するユーザーが使用するアカウントですが、ちょっと意味合いが異なります(・∀・)。
例えば
というサイトを作ったとしたら、mao を アカウント と呼びます(・∀・)。
そして
taro@mao.rentaserve.com jiro@mao.rentaserve.com saburo@mao.rentaserve.com
のようなメール / FTP アカウントを作成した場合、taro や jiro、saburo を ユーザー と呼びます(・∀・)。
rentaserve.com では
- アカウントを mariadb と LDAP で管理
- ユーザーを mariadb で管理
することにします(・∀・)。
LDAPを採用することにより、サーバーを複数台にした時にアカウントを一元管理しやすいためです(・∀・)。
ホスティングウェブサーバー
単純に Apache2.4 を使用します(・∀・)。 php-fpm を使用して PHP スクリプトを実行できるようにします(・∀・)。
別に nginx でも良いのですが、レンタルサーバーの利用者からすると .htaccess が使用できたほうが良いでしょう(・∀・)。
サブドメイン毎に設定ファイルを作成し、php-fpm の Unix ソケット経由で PHP を実行します(・∀・)。
セキュリティー確保のため、ユーザー毎に Unix ソケットを作成して PHP を実行します(・∀・)。
ホスティングPHP
前述した通り 8.1 を使用します(・∀・)。
php-fpm 用の設定を各ユーザーごとに作成して、そこにユーザー固有の設定を書くことによって xdebug などを設定可能にします(・∀・)。
また、
- exec など使い方によってはセキュリティー事故の危険性が高い関数を禁止する
- LDAP系の関数を使用禁止にする
- chroot を使用してホームディレクトリ以下までしかアクセスできないようにする
- php-fpm の実行ユーザーをアカウントユーザーと同一にする(www-data などで実行しない) のような細工をしておきます(・∀・)。
FTP
ProFTPd を使用します(・∀・)。 ユーザーは mariadb で管理し、ドメイン単位でアクセス先のディレクトリを制限します(・∀・)。 ドメイン単位でのアクセス制限とは、例えば mao というアカウントを作成したとして、そのアカウントが独自ドメイン「example.com」を取得した場合
- taro@mao.rentaserve.com
- /home/mao/public_html/mao.rentaserve.com 以下にアクセス可能
- jiro@example.com
- 独自ドメインの /home/mao/public_html/example.com 以下にアクセス可能
というような意味です(・∀・)。
別に一緒くたにしたり混在したりした管理も可能ですが、基本的に 「そのドメインのひとがそのドメインのウェブサイトを管理するだろうなー」 という方針のため、このような仕様にします(・∀・)。
また、FTPS(FTP over SSL)でのアクセスのみ可能とします(・∀・)。 生の FTP はセキュリティー的にアレなので使用させない方向で考えています(・∀・)。
独自ドメインを設定したユーザーの場合、FTPクライアントで証明書関連の警告が出るかも
メール
Postfix / Dovecot を使用します(・∀・)。
これもユーザー管理に mariadb を使用します(・∀・)。 メールは IMAP のみサポートし、POP3 はサポートしないことにします(・∀・)。 (特に理由はない)
こちらも IMAPS / SMTPS といった TLS 通信のみ許可する方向で考えています(・∀・)。
外部公開DNS
今回は PowerDNS を使用します(・∀・)。 (bind は使いにくい)
PowerDNS 採用の理由は
- レコードを mariadb で管理できる
- Debian/GNU Linux 11 標準のパッケージなので apt で簡単に使用できる
ためです(・∀・)。
ドメイン
とりあえず お名前.com を使用しています(・∀・)。 他のレジストラでも良いと思いますが、よく分かっていません(・∀・)w
独自ドメインについては rentaserve.com を権威DNSサーバーとして動作させ、ネームサーバーに rentaserve.com(ns1.rentaserve.com とか ns2.rentaserve.com とか作って)アクセスさせることで実現させるつもりです(・∀・)。
独自ドメインの設定時にネームサーバーが *.rentaserve.com ではない場合に弾くような仕組みです(・∀・)。
証明書
みんな大好き Let's Encrypt を使用します(・∀・)。
*.rentaserve.com のワイルドカードドメインを取得するためちょっと細工が必要そうです(・∀・)。
最後に
つらつらと長くなりましたが、次回から実際にサーバーを構築していこうと思います(・∀・)。