apacheの設定
更新日:2021/12/26
apacheのインストールと自動起動+疎通確認
apacheをインストールを行います。
以下のコマンドで依存パッケージも含めインストールされます。
[root@localhost ~]# dnf install httpd ←httpdをインストールする Last metadata expiration check: 0:01:55 ago on Sat 25 Dec 2021 11:32:24 PM JST. Dependencies resolved. ================================================================================ Package Arch Version Repo Size ================================================================================ Installing: httpd x86_64 2.4.37-43.module_el8.5.0+1022+b541f3b1 appstream 1.4 M Installing dependencies: apr x86_64 1.6.3-12.el8 appstream 129 k apr-util x86_64 1.6.1-6.el8 appstream 105 k centos-logos-httpd noarch 85.8-2.el8 baseos 75 k httpd-filesystem noarch 2.4.37-43.module_el8.5.0+1022+b541f3b1 appstream 39 k httpd-tools x86_64 2.4.37-43.module_el8.5.0+1022+b541f3b1 appstream 107 k mod_http2 x86_64 1.15.7-3.module_el8.4.0+778+c970deab appstream 154 k Installing weak dependencies: apr-util-bdb x86_64 1.6.1-6.el8 appstream 25 k apr-util-openssl x86_64 1.6.1-6.el8 appstream 27 k Enabling module streams: httpd 2.4 Transaction Summary ================================================================================ Install 9 Packages Total download size: 2.1 M Installed size: 5.6 M Is this ok [y/N]: ←「y」を入力してenterキー押下でインストールが開始されます
続いて、OS起動時に自動的にhttpdが起動するように設定を行います。
ついでに、インストール直後はhttpdサービスが立ち上がってないので、起動させます。
[root@localhost httpd]# systemctl status httpd ←現在のhttpdステータスを表示(停止中) ● httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled) Active: inactive (dead) Docs: man:httpd.service(8) [root@localhost httpd]# systemctl enable httpd ←OS起動時に自動起動するように設定 Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service. [root@localhost httpd]# systemctl start httpd ←httpdを起動 [root@localhost httpd]# systemctl status httpd ←httpdステータスを表示 ● httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled) Active: active (running) since Sat 2021-12-25 23:42:42 JST; 4s ago Docs: man:httpd.service(8) Main PID: 32166 (httpd) Status: "Started, listening on: port 80" Tasks: 213 (limit: 11264) Memory: 25.4M CGroup: /system.slice/httpd.service tq32166 /usr/sbin/httpd -DFOREGROUND tq32167 /usr/sbin/httpd -DFOREGROUND tq32168 /usr/sbin/httpd -DFOREGROUND tq32169 /usr/sbin/httpd -DFOREGROUND mq32170 /usr/sbin/httpd -DFOREGROUND (以下略)
CentOS8.4のインストール直後、ファイヤーウォールの設定で、外部からのアクセスはSSHなどの基本的なサービス以外禁止されています。
なので、http通信を許可するように、設定を変更します。
firewalldの設定や詳細はここでは省略します・・・。
[root@localhost httpd]# firewall-cmd --get-default-zone ←ファイヤーウォールのデフォルトで使用するzoneを表示 public [root@localhost httpd]# firewall-cmd --list-all --zone=public ←publicのzone設定を表示 public (active) target: default icmp-block-inversion: no interfaces: enp1s0 sources: services: cockpit dhcpv6-client ssh ←通信が許可されているのがこれだけの状態(httpが無い状態) ports: protocols: forward: no masquerade: no forward-ports: source-ports: icmp-blocks: rich rules: [root@localhost httpd]# firewall-cmd --add-service=http --zone=public --permanent ←publicにhttpのを受け入れるように設定追加 success [root@localhost httpd]# firewall-cmd --reload ←ファイヤーウォールの設定をリロード success [root@localhost httpd]# firewall-cmd --list-all --zone=public --permanent ←現在の設定を表示 public target: default icmp-block-inversion: no interfaces: sources: services: cockpit dhcpv6-client http ssh ←httpが追加されている ports: protocols: forward: no masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
この状態で、さきほど設定したサーバーと同じネットワークに接続しているPCのブラウザから、「http://(サーバーのIPアドレス)」でアクセスすると、HTTP Server Test Pageといった内容のページが表示されるはずです(apacheのデフォルトのHTML)。
ちなみに、httpd.confファイルは「/etc/httpd/conf/httpd.conf」にあります。
テスト用にダミーの証明書でhttps通信を出来るようにする
まず、apacheにSSLもモジュールを追加します。
以下のコマンドを使って、インストールを行います。
[root@localhost ~]# dnf install mod_ssl ←mod_sslをインストールする Last metadata expiration check: 16:03:52 ago on Sat 25 Dec 2021 11:47:13 PM JST. Dependencies resolved. ================================================================================ Package Arch Version Repository Size ================================================================================ Installing: mod_ssl x86_64 1:2.4.37-43.module_el8.5.0+1022+b541f3b1 appstream 136 k Transaction Summary ================================================================================ Install 1 Package Total download size: 136 k Installed size: 266 k Is this ok [y/N]: ←yを入力してenterキー押下で、インストールを開始
SSLの設定ファイルは「/etc/httpd/conf.d/ssl.conf」にあります。
中を開いてみると分かりますが
SSLCertificateFile /etc/pki/tls/certs/localhost.crt (証明書のパス)
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key (秘密鍵のパス)
という設定になっているので、このパスへ、独自に作成した公開鍵・秘密鍵のファイルを配置してあげます(もちろん、名前を変更することも可能)。
手順としては
(1)秘密鍵の作成
(2)CSRの作成
(3)CRTを作成
という3ステップ必要です。
(1)と(3)で作成したファイルをSSLモジュールの設定ファイルで指定したパスに配置すれば作業完了です。
[root@localhost ~]# openssl genrsa > localhost.key ←(1)秘密鍵を作成する Generating RSA private key, 2048 bit long modulus (2 primes) ....+++++ ..............................................................+++++ e is 65537 (0x010001) [root@localhost ~]# openssl req -new -key localhost.key > localhost.csr ←(2)CSRを作成する You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [XX]: ←以降、住所などの入力を求められるが、テスト用なので全部enter押下でOK State or Province Name (full name) []: Locality Name (eg, city) [Default City]: Organization Name (eg, company) [Default Company Ltd]: Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server's hostname) []: Email Address []: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: [root@localhost ~]# ls -l ←localhost.csrが出力されているか、確認 total 8 -rw-r--r--. 1 root root 952 Dec 26 16:39 localhost.csr ←これが今出力されたファイル -rw-r--r--. 1 root root 1671 Dec 26 16:39 localhost.key [root@localhost ~]# openssl x509 -days 9999 -req -sha256 -signkey localhost.key < localhost.csr > localhost.crt ←(3)CRTを作成 Signature ok subject=C = XX, L = Default City, O = Default Company Ltd Getting Private key [root@localhost ~]# ls -l total 12 -rw-r--r--. 1 root root 1115 Dec 26 16:51 localhost.crt ←これが今出力されたファイル -rw-r--r--. 1 root root 952 Dec 26 16:39 localhost.csr -rw-r--r--. 1 root root 1671 Dec 26 16:39 localhost.key
「/etc/httpd/conf.d/ssl.conf」の設定上
SSLCertificateFile /etc/pki/tls/certs/localhost.crt (証明書のパス)
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key (秘密鍵のパス)
といった感じになっているので、今作成したファイルを、上記パスにコピーします。
※「cp」コマンドを使ってコピーしてください。
SELinuxが有効になっている場合、cpコマンドでコピーしたものでないと、httpdの再起動時、SELinuxから介入されてファイルが読み込めず、エラーになります。
コピーが終わったら、元のファイルは消してもOKです。
[root@localhost ~]# cp localhost.crt /etc/pki/tls/certs/ [root@localhost ~]# cp localhost.key /etc/pki/tls/private/
そして、httpdを再起動すればhttpdの準備は完了です。
systemctl status httpd
デフォルトでは、ファイヤーウォールがhttpsのアクセスを受け付けていない状態なので、受け入れるよう設定します。
ここまで実施すれば、httpsでアクセス出来るようになっているはずです。
[root@localhost ~]# firewall-cmd --add-service=https --zone=public --permanent ←httpsの許可 success [root@localhost ~]# firewall-cmd --reload ←firewalldの設定リロードを行う success [root@localhost ~]# firewall-cmd --list-all --zone=public --permanent ←現在の設定値を表示 public target: default icmp-block-inversion: no interfaces: sources: services: cockpit dhcpv6-client http https ssh ←httpsが追加されている ports: protocols: forward: no masquerade: no forward-ports: source-ports: icmp-blocks: rich rules: