Oracle Linux 8にApache HTTP ServerとWildflyを構築


!!NOTICE!!

この記事の内容は、ほかの手順とまとめて以下の記事に転記しました。
今後は転記先をメンテするためそちらを見てください。

【証明書自動更新対応版】Oracle CloudとCloudflareとLet's Encryptでつくる!HSTSプリロード対応APサーバクラスタ

この記事の概要

OCIインスタンス上Oracle Linux 8にApache HTTP ServerとWildfly(JBossAS)をインストールする。

前提

  • OS: Red Hat Enterprise Linux release 8.2 (Ootpa)
  • Java: openjdk version "1.8.0_265"
  • Apache HTTP Server: Apache/2.4.37 (Oracle Linux)
  • Wildfly: Release: 12.0.3.Final
  • 断りがない場合コマンドはrootユーザで実行しています

Wildflyの構築

1. JDKのインストール

yum install -y java-1.8.0-openjdk.x86_64

2. wildflyユーザの作成

groupadd -r wildfly
useradd -r -g wildfly -d /opt/wildfly -s /sbin/nologin wildfly

3. WildflyのDL&展開

wgetするURLは適宜お好みで。

cd /opt
wget https://download.jboss.org/wildfly/20.0.1.Final/wildfly-20.0.1.Final.zip
unzip -q wildfly-20.0.1.Final.zip
ln -s wildfly-20.0.1.Final wildfly

4. Wildfly起動確認

sh /opt/wildfly/bin/standalone.sh

2020-09-15 09:47:48,958 INFO  [org.jboss.as] (Controller Boot Thread) WFLYSRV0025: WildFly Full 20.0.1.Final (WildFly Core 12.0.3.Final) started in 13956ms - Started 314 of 580 services (370 services are lazy, passive or on-demand)

無事起動したようです。Ctrl+Cで停止します。

5. systemdデーモン起動させる

デーモン起動用のスクリプトはすでに用意されているので配置するだけですぐにデーモン起動できるようになります。

mkdir -p /etc/wildfly
cp /opt/wildfly/docs/contrib/scripts/systemd/wildfly.conf /etc/wildfly/
vi /etc/wildfly/wildfly.conf

定義内容は必要に応じて編集してください。私はバインドアドレスを0.0.0.0 -> 127.0.0.1に変えました。

cp /opt/wildfly/docs/contrib/scripts/systemd/launch.sh /opt/wildfly/bin/
chmod 744 /opt/wildfly/bin/launch.sh
cp /opt/wildfly/docs/contrib/scripts/systemd/wildfly.service /etc/systemd/system/
chown -R wildfly /opt/wildfly*
systemctl daemon-reload
systemctl start wildfly
systemctl enable wildfly

6. Wildfly管理ユーザの作成

管理コンソールからWildflyの設定をいじれるように管理ユーザを設定しておく必要があります。

cd /opt/wildfly/bin
./add-user.sh

細かくは割愛しますがプロンプトに従ってManagement Userを追加してください。
詳しくは公式のドキュメントへ。

Apache HTTP Serverの構築

1. Apache HTTP Serverのインストール

yum install -y httpd

2. セキュリティ対策

デフォルト設定のままだとセキュリティ上リスクがあるため是正しておきます。

デフォルトコンテンツの削除

通常公開しないウェルカムページなどの不要コンテンツは極力排除します。

cd /etc/httpd/conf.d
mv welcome.conf welcome.conf.org
mv autoindex.conf autoindex.conf.org

ディレクトリ内容一覧表示機能の無効化

vi /etc/httpd/conf/httpd.conf

#Options Indexes FollowSymLinks
Options FollowSymLinks

TRACEメソッドの無効化

XST対策としてTRACEメソッドを無効化します。

vi /etc/httpd/conf/httpd.conf

# ファイル末尾に追記
TraceEnable off

バージョン情報表示機能の無効化

HTTPレスポンスヘッダにWebサーバのバージョンを含まないようにします。

vi /etc/httpd/conf/httpd.conf

# ファイル末尾に追記
ServerTokens ProductOnly
ServerSignature off

フレーム内ページ表示を同一ドメイン内のみに許可する

クリックジャッキング対策として、HTTPレスポンスヘッダにX-Frame-Optionsヘッダを追加します。

# 新規にファイル作成
vi /etc/httpd/conf.modules.d/headers.conf

# ファイル末尾に追記
Header append X-FRAME-OPTIONS SAMEORIGIN

Apache HTTP ServerとWildflyの連携

Apache HTTP ServerへのリクエストをWildflyへ引き込みます。

1. リバースプロキシの設定

80番ポートへのアクセスを8080番ポート(WildflyのHTTPリスナ)へ向けます。

# 新規にファイル追加
vi /etc/httpd/conf.modules.d/wildfly.conf

<VirtualHost *:80>
  ProxyPass / http://127.0.0.1:8080/
  ProxyPassReverse / http://example.net/
</VirtualHost>

2. 定義チェック&再起動

ここまで設定できたら定義ファイルをテストしてApache HTTP Serverを再起動します。

httpd -t
systemctl restart httpd

動作確認

http://example.com のように、シンプルに80番ポートにアクセスしてみて、Wildflyのウェルカムページが見えれば成功です。

まとめ

OCIのLBでSSLに対応しており、バックエンド側通信はHTTPで構築してみました。Web/APサーバでSSL化しようとすると複雑になるのでLBで終端できるのはいいかんじです。

参考:攻撃を受ける前に見直すApacheの基本的なセキュリティ10のポイント