RockyLinux9.3で自宅サーバーを再構築V04・LAMPの「A」、Apache編

Linux (CentOS、Rocky、Ubuntu)

LAMP とは、Linux、Apache HTTP Server、MySQL、PHP(またはPerl、Python)の頭文字を取った略称です。
WordPressなど自分Web サイトの構築に適した環境です。
ここまでで、ある程度セキュリティ対策を施したRokeyLinux9の初期設定が終わっているので
LAMPの「L」は終了しています。
今回は、LAMPの「A」のApache環境を構築していきます。

Remi リポジトリのインポート

ApacheやPHPの最新バージョンを使用したい場合、Remi リポジトリのインストールが必要なようです。
https://www.linuxcapable.com/how-to-install-php-on-rocky-linux/
ここを参考にインストールしてみようと思いますが、Remi の前に、「crb」を有効にし「epel」のインストールが必要なようです。
その後、「remi」をインストールします。

Apache(httpd)

このサイトでも、下記でcentOS7 にインストールしました。

httpdのインストール

前回同様に「httpd」「httpd-tools」「mod_ssl」をインストールし、
「httpd」を起動し、サーバを再起動しても自動的に起動するように設定します。

Firewalld に許可

前回、「ssh」接続用に管理ゾーンを新規作成しました。
ウェブサーバーは、全体に公開するため、ネットワークアダプタで許可している「public」ゾーンだけに「http」サービスの許可すればいいように思っていいましたが、管理ゾーンの「admin」のアドレスでも確認するので、両方に追加が必要でした。
さらに、後で「https」の設定を行う予定なので、こちらも許可しておきます。

Apacheの動作確認

これで、Apacheのインストールと、Firewalldは終了しています。
自宅LAN内の他のPCのアドレスバーにサーバのIPアドレスを入力すれば、
テストページが表示されるはずです。
例えば、アドレスバーに、http://192.168.1.101(サーバアドレス)と入力して
テストページが表示されれば正常に動作しています

自宅から外部からのアクセスを確認するには、スマホなどのwifi設定を一旦解除し、
LTE接続にしてブラウザのアドレスバーに自宅のグローバルIPアドレス入力で確認できます。
ただし、事前にゲートウェイのルータで、80番ポートを、このサーバーのIPアドレスへ転送するように設定しておく必要があります。
自宅のグローバルアドレスを知る方法はネット上に沢山あります。
例えば、下記サイトでも知る事ができます。
https://www.cman.jp/network/support/go_access.cgi
確認がすんだら、ルータ設定は、すぐに戻しましょう。

Apache設定ファイル・httpd.conf、変更

  • 設定ファイルのバックアップ
  • Webサーバー管理者メールアドレスの変更
  • ホスト名の変更
  • Webサーバーが公開するファイルを格納するディレクトリ
    容量が大きくなる事を想定し、「/home」へ変更する
  • 公開ディレクトリのファイル一覧を制御させない
  • 必要であれば、Webサーバがプログラムを実行するCGIの設定
    デフォルト以外のディレクトリを使用する場合には、そのディレクトリを追加し
    「Options」ディレクティブに「ExecCGI」機能を追加。
    また、「AddHandler」で実行させたいスクリプトの拡張子を定義します。

ドキュメントルートディレクトリの作成

Webに公開するコンテンツ格納ディレクトリを設定変更したので、
そのディレクトリを作成します。

セキュリティ対策追加

ちょっと、OSバージョンの違いもありますが、こちらを参考に設定してみました。
https://www.rem-system.com/apache-security01/

テストページが表示されないようにする

テストページは、「/etc/httpd/conf.d/welcome.conf」が表示させてるみたいで
コメントを読むと、表示させたくないなら、「#」を付けてコメントアウトしろとあります。
さらに、削除しても、アップグレードで復活するとあるので、バックアップしてコメントアウトしました。
さらに、http://ドメイン名/icons/ でも「icon」一覧が表示されたりするので
こちらも、コメントアウトにしました。

httpd を再起動すると、表示されなくなりました。

telnet インストール

「telnet」は、ネットワークを介して通信を行うソフトウェアです。
「telnet」を利用する事で、いろいろなポートへのアクセス確認ができます。
これから、HTTPの状況を確認するのに使用するので、まずはインストールします。

Apacheバージョン情報とTRACEメソッドOFF

現在の状態を調べてみます。

「 Escape character is ‘^]’. 」の入力待ち後に、
「OPTIONS / HTTP/1.1」「host:localhost」「enter」を入力する必要があります
「Apache情報」と「TRACE」が有効になっているのがわかります。
セキュリティ的に「無効」にしたほうがいいとの事なので、無効にします。
「/etc/httpd/conf/httpd.conf」の最後に
「ServerTokens ProductOnly」
「ServerSignature off」
「TraceEnable off」を追加。
Apacheを再起動後、再度確認します

X-Frame-Optionsヘッダ設定

「mod_headers」機能が有効になっているかの確認をします。
「/etc/httpd/conf.modules.d/00-base.conf」で記載があるか?有効か?の確認をします。
記載があり、コメントになっていなければ、有効になっています。

「/etc/httpd/conf/httpd.conf」の最後に
「 Header append X-FRAME-OPTIONS “SAMEORIGIN” 」
を追加し、Apacheを再起動し、telnetで確認します

ドキュメントルートにindex.htmlを作成

上記でドキュメントルートを変更し、新しく作成したので、
デフォルトのトップページ「index.html」を作成しておきます。
保存後、ファイルの所有者を「Apache」のユーザー「apache」に変更し再起動しておきます。

自宅LAN内から、ブラウザのアドレスバーに、このサーバーのIPアドレスを入力するとこのページが表示されます。

Let’s Encrypt証明書でhttps化

上の画像でも確認できますが、最近は「http://」では「保護されていない通信」警告が表示されてしまいます。
「https化」は必須ですね。
ただし、https://はホスト名でのアクセスが必要になります、自宅のサーバーを公開するには、独自ドメインとDNSサーバーが必要になります。
このサイトのドメインはこちらで取得しました
独自ドメインの取得と管理は若干のコストがかかりますが、DNS管理は無料のサービスもあります。
ドメイン取得と「https化」の記事は、下記でも紹介しています。

ファイヤーウォール設定の確認

Firewallサービスで「https」を許可している必要があります。
上記ですでに設定済みですが、再度確認してみます。

「adminゾーン」と「publicゾーン」へ許可されています。

sslモジュールの確認

こちらも、「httpdのインストール」時に、追加インストールしましたが、確認してみます。

登録されていました。

Certbot クライアントのインストール

Let’s Encrypt は、クライアントソフトウェア「Certbot」を使用することで、SSL/TLS サーバ証明書の取得・更新作業を自動化できる仕組みになっています。
まずは、パッケージが用意されているか確認してみます。

EPELリポジトリに含まれていました。
Let’s Encrypt総合サイト情報を参考にインストールします。

インストールは完了しました。

certbot で証明書発行

certbotには、いくつかのプラグインがありますが、すでにWebサーバーが動作している場合には「webroot プラグイン」が使えます。
これは、Webサーバーの動作を変更する必要はないですが、外部からサーバーの80番ポートにアクセスできる必要があります。
Webサーバーが動作していない場合には、「Standaloneプラグイン」が使えます。
ただし、もし動作している場合には、停止しておく必要があります。
今回は、「webroot プラグイン」でやってみます。
追加するオプションは、「certonly」「–webroot」に「-w」オプションで、証明書ファイルを保存するディレクトリ、「-d」で証明書を適応するホスト名を指定します。

無事に証明書をGETできました!
証明書は3か月で更新になります。
更新は、「certbot」の「renew」で行いますが、「–dry-run」をつける事で確認できます。

「Congratulations」で、更新可能の確認ができました。

SSLサーバ証明書の設定

発行してもらった証明書を、設定ファイルに反映させます
「/etc/httpd/conf.d」内の「ssl.conf」を編集します

https:// でのアクセス確認

https://ドメイン名 でアクセスできるかの確認をします。
外部からの確認は、ルータの443ポートを通しておくと確認できますが、
同じLAN内でのPCでは、「hosts」ファイルを編集する事で可能になります
WindowsPCであれば、「C:\Windows\System32\drivers\etc\hosts」
linux であれば、「/etc/hosts」を編集します

これで、ローカル内であっても、「https://ドメイン名」でアクセス可能になります。

ApacheでHTTP/2を利用する

HTTP/2 を利用するには、次の環境が必要になります
参考:https://www.value-domain.com/media/http2/

・通信の暗号化が必須で、SSLサーバー証明書が必要です。
・マルチスレッド機能であるeventMPMが有効である事

eventMPMモジュールとhttp2モジュールの確認

eventMPMとhttp2モジュールは、RockyLinux9ではデフォルトで有効になっているようです。
確認してみます。

有効になっていました。

http2を有効にする

参考:Red Hat Customer Portal
まず、現状を確認してみます。
筆者は、Google Chrome で確認してみました。
Chromeを起動後、「F12」を押すと、表示されたWebページの横に
開発ツールのページが表示されます。
ここで、確認したい「https://www.hogehoge.com」のページを表示すると
「Network」タブの「Protocol」で確認できます。
「https://」でのアクセスになるので、IPアドレスではなくドメインになります。
ここでもし、「Name・・・Protocol」の表が出ていない場合には、「Ctrl」+「R」で
再読み込みすると、出てきます。

私の環境では、「http/1.1」で通信しているのが分かります。
ここで、参考ページを参考に、設定しようと思います。
仮想ホスト ごとに、設定する場合、<VirtualHost>ディレクティブの下の行で設定するようですが、全てのサーバーで有効にするには、メインの設定ファイル「httpd.conf」に追加するようです。
特に今回の私の環境は、仮想ホスト設定にはしていないので、メインで設定します。

最終行に、追加しまし、再起動しました。
再度、Chromeで確認してみます。
「http/1.1」から変化がない場合には、
Chromeの場合では、「Ctrl」+「Shift」+「Delete」で閲覧履歴データを削除し
ブラウザでページを表して「F12」で確認します。
「Protocol」が表示されていない場合には、「CTRL」+「R」やキャッシュ削除してみてください。

「h2」となっている事から、http2 で通信されている事が確認できます。

RockyLinux9.3で自宅サーバーを再構築・記事一覧

コメント

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