【Azure AD Application Proxy】自宅環境でWordPressを外部に公開してみる

IT

AzureAD Application Proxyを利用して、外部に公開してみようと思います。
AzureAD Application Proxyの場合、外部向きのTCP443が、空いていればいいので、わざわざIn方向の通信を開ける必要がありません。
つまり、自宅のネットワーク機器の設定が特段不要で、外部にWordPress公開が可能です。
また、自宅のグローバルIPが変動しても、DNS側にはCNAMEの設定だけなので、問題なく通信が可能です。

自宅内のアドレス解決に使うドメインと、インターネット上で利用するドメインを同じにすることで、
アプリケーション側への影響を少なくしています。

準備するもの

・WindowsServer(AzureAD Application Proxyのインストール先)
・Ubuntu(WordPressのインストール先)
・WordPress
・AzureADのテナント
・AzureADPremium P1ライセンス
・ドメイン
・内部向けDNSの設定ができるDNSサーバ

最終構成図

Ubuntuのインストール

下記より、UbuntuのISOをダウンロードし、適当な環境にインストールします。
Ubuntuを入手する | Ubuntu | Ubuntu
私は、ESXi上に2コア2GBのスペックで建てました(検証なので適当スペック。)
自宅内のDNSに登録するので、本来であれば、固定でIPアドレスを割り振るほうが、望ましいのですが、スキップします。めんどくさいので。本番で公開する場合は、固定したほうがいいです。

Ubuntuをインストールした後は、Terminalを開いて
sudo apt -y update
sudo apt -y upgrade

を実施しておきます。

WordPressのインストール

公式のインストール方法は、下記にあります。
WordPress のインストール – サポートフォーラム
ただ、読みにくいので、簡単に手順をまとめています。

WebサーバにApache、DBにMariaDBを利用します。
sudo apt install apache2 php php-mysql php-curl php-gd php-mbstring php-xml php-xmlrpc php-soap php-intl php-zip mariadb-server
2022年10月時点では、php8.1.2がダウンロードされました。


また、MariaDB側に、ユーザやデータベースを作成します。
sudo mysql -u root  ←MariaDBの中に入ります。
CREATE DATABASE WPDB DEFAULT CHARACTER SET utf8; ←WPDBというデータベースの作成
GRANT ALL PRIVILEGES ON WPDB.* TO WPUser@localhost IDENTIFIED BY 'p@ssw0rd'; ←WPDBに、WPUserユーザを作成してp@ssw0rdというパスワードで権限付与する。

WordPress本体をダウンロードし、Apacheの公開用フォルダに移動します。
wget https://ja.wordpress.org/latest-ja.tar.gz  ←WordPressのダウンロード
tar xvfz latest-ja.tar.gz ←ダウンロードしたファイルの解凍
rm -rf /var/www/html/ ←Apacheデフォルトの初期ファイルなどを消す
mv wordpress/ /var/www/html/ ←WordPressをWebサービスとして公開するために、場所移動
chown -R www-data:www-data /var/www/html/ ←Apacheが操作できるように、権限付与

WordPressアクセスへのHTTPS化

AzureAD Application経由の接続は、HTTPSが必須なので、サイト自体もHTTPS対応しておきます。
シンプルなWebページであれば、内部向きはHTTPサイトで作成しても問題ないと思うのですが、
今回は影響を最小限にするために、内部向きもHTTPSで作成します。

Apacheの変更をするために、confファイルを変更します。
vi /etc/apache2/sites-available/000-default.conf ←default.confの編集
このうち、ServerNameとなっている行を、コメントアウトを外して取得しているドメインに置き換えておきます。
ServerName wordpressappproxy.remakere.jp

また、証明書の取得には便利なLet’s encryptoを利用します。
apt install certbot ←certbotのインストール
certbot --apache ←certbotを利用して、apachをhttps化を進める
対話側に設定をすすめていきます。
内容が変わるので、全容は載せませんが、「メールアドレスの入力、https化するドメインの選択」ぐらいの選択が必要です。

certbotでの作業が終われば、念のため、systemctl restart apach を実施して、apachの再起動を行います。
その後、https://localhst やhttps://サーバのIPアドレス で接続HTTPSのサイトで接続できることを確認します。

内部向けDNSの設定

自宅内のDNS設定によりますが、私の場合はAD環境があるので、AD兼DNSサーバにAレコードを登録しておきます。

これで、自宅からだと、https://wordpressappproxy.remakere.jpに対して、内部経由で接続ができるようになりました。

WindowsServerのインストール

AzureAD Application Proxyの動作環境は、WindowsServerのため、WindowsServerを準備します。
WindowsServerは、180日はトライアル期間があるので、使い捨てでインストールします。
Windows Server 2019 | Microsoft Evaluation Center
私は、2コア4GBでESXi上に立てています。

AzureAD Applicationのインストール

WindowsServer上からでも、どこからでもいいのですが、アプリケーションコネクタ自体のインストーラをダウンロードして、サーバ上にインストールします。

https://portal.azure.com/#view/Microsoft_AAD_IAM/StartboardApplicationsMenuBlade/~/AppProxy/menuId~/null
のページから、コネクタサービスのダウンロードが可能です。

また、ダウンロードした後は、インストールをクリックして起動し、実際にInstallします。

コネクタをインストールして、管理者アカウントでログインをすると、AzureADのポータル上に、
インストールしたコネクタが表示されます。

AzureAD側へアプリケーションの登録

AzureAD Application Proxyをインストールしただけでは、自宅のアプリへアクセスできないので、
アプリケーションを追加します。

画像のパンくずリスト通りですが、エンタープライズアプリケーション→すべてのアプリケーション→AzureADギャラリーから、「独自のオンプレミスのアプリケーションの追加」を行います。

名前:適当でOKです。
内部URL:自宅の内部からアクセスするURLを入力します。https形式にします。
外部URL:自宅の内部URLと同じ形式にします。(AzureADに対して、カスタムドメインの追加が必要です)
事前認証:スクショはAzureAD認証ですが、パススルーにすると、認証はWebアプリ側に求められるようになります。つまり、認証なしでアクセスできるような設定も可能です。

また、Wordpressで1つのセッションで長時間かかることもないと思いますが、タイムアウトは長い形式にしておきます。
URLの変換についても、今回は内部と外部が同じため、「いいえ」で設定します。

外部向けDNSへCNAMEの登録

所有しているドメインの、CNAMEにAzureADのアプリケーション画面で指定された値を、設定します。

自宅の内部から、普通に名前解決しても、内部の名前解決で終わってしまうので、
DNS CHECKでCNAME検索を行い、きちんと返ってくるようになればOKです。

外部からのアクセス

自宅からアクセスしても、内部のみで完結する通信になるので、
携帯のテザリングなどを利用して、外部回線から実際にアクセスできるか試してみます。

まとめ

自宅で建てたWordPressをAzureAD Application Proxyを利用して、外部公開してみました。
この構成をとることで、自宅FW変更など、特に必要なく外部公開が可能です。
ただ、パフォーマンス上、一度Azureサイドを挟むので、懐疑的なところはあります。
ネットワークレベルのセキュリティで言えば、Wordpressをホストしているサーバ自体は、隠れたとこにあるので、高い気がします。
(ただWordpressのアプリ側のセキュリティは、あまり関係ないかも。)

コメント

タイトルとURLをコピーしました