CentOS 7 / Oracle Linux 7でWordPressサーバを建てる


この間、Oracle Linux 7ベースのOracle Autonomouse Linux 環境にWordPressサーバを建てる手順を書いたけど、そういえばベースとなるCent OS 7(Oracle Linux 7)環境でWordpressサーバを建てる手順を書いたことなかったな、と書いてみる。

前準備

CentOS7として基本的な設定を行っていく。

準備1:パッケージのアップデート

インストール済みのパッケージを最新にするため「yum update」を実行する

$ sudo yum update -y

準備2:日本時間にする

日本に住んでいる場合、日本時間表記の方が使いやすいので、OSも日本時間表示に設定する。

$ sudo timedatectl set-timezone Japan

変更されたことを確認するには「timedatectl」を実行する。

$ timedatectl
      Local time: Tue 2020-07-07 10:04:40 JST
  Universal time: Tue 2020-07-07 01:04:40 UTC
        RTC time: Tue 2020-07-07 01:04:38
       Time zone: Japan (JST, +0900)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: no
      DST active: n/a
$

準備3:パッケージの自動アップデート設定をする

方針にもよりますが、最近は死ぬパッケージが配布されることは少ないので、自動アップデートしてしまえ、と、yum-cronによる自動アップデート設定を入れています。

まず、yum-cron パッケージをインストールします。

$ sudo yum install yum-cron

次に /etc/yum/yum-cron.conf を編集して自動アップデートを有効にします。

$ sudo vi /etc/yum/yum-cron.conf

ファイル内にある「apply_updates = no」を「apply_updates = yes」に変更します。

変更後の該当部分は以下の様になります。

# Whether updates should be applied when they are available.  Note
# that download_updates must also be yes for the update to be applied.
apply_updates = yes

準備4:EPELレポジトリの追加

EPELレポジトリが必要になるので追加します。

$ sudo yum install epel-release

注:RHEL 7の場合は epelパッケージをダウンロードしてインストールします。

インターネット公開用準備

インターネット公開にあたりやっておいた方が良いことです。

fail2ban導入

公開サーバには各種アタックが頻繁にやってきます。管理用sshポートにも行われ無駄にCPU資源とトラフィックを食われます。

多少なりとも低減した方がいいので、fail2banというEPELレポジトリに含まれるソフトウェアを導入します。

fail2banは、ログイン失敗ログなどを監視し、一定数を超えたら該当するIPアドレスからのアクセスを一定期間受け付けなくする仕組みです。

$  sudo yum install fail2ban

fail2banの設定は /etc/fail2ban/ にあり、fail2ban.confやjail.confなどがあります。

しかし、ユーザ側で設定を追加修正したい場合はこれらのファイルを直接編集するのではなく、 /etc/fail2ban/jail.local というファイルを作成してそこに行っていきます。

$ sudo vi /etc/fail2ban/jail.local

/etc/fail2ban/jail.localには下記の様な内容を記載します。

[DEFAULT]
# 86400秒=24時間以内に5回不審なアクセスがあったら24時間BAN
bantime  = 86400
findtime  = 86400
maxretry = 5
# 259200秒=3日以内に5回不審なアクセスがあったら3日間BAN
#bantime  = 259200
#findtime  = 259200
#maxretry = 5

# 除外IP
ignoreip = 127.0.0.1 127.0.0.0/8 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16 <既知>の固定IPがあれば追加>

[sshd]
enabled = true
banaction = firewallcmd-ipset

bantime/findtimeは2種類書いてありますが、まずは24時間で設定して、管理アクセス等に問題がないことを確認したら3日に変更するなどしてください。

設定が終わったらfail2banサービスを起動するための設定を入れていきます。

まず、初期状態は起動しない設定であるためenableに変更します。

$ systemctl list-unit-files|grep fail
fail2ban.service                              disabled
$ sudo systemctl enable fail2ban.service
Created symlink from /etc/systemd/system/multi-user.target.wants/fail2ban.service to /usr/lib/systemd/system/fail2ban.service.
$ systemctl list-unit-files|grep fail
fail2ban.service                              enabled
$

次にfail2banを起動します。

$ systemctl status fail2ban.service
● fail2ban.service - Fail2Ban Service
   Loaded: loaded (/usr/lib/systemd/system/fail2ban.service; enabled; vendor preset: disabled)
   Active: inactive (dead)
     Docs: man:fail2ban(1)
$ sudo systemctl start fail2ban.service
$ systemctl status fail2ban.service
● fail2ban.service - Fail2Ban Service
   Loaded: loaded (/usr/lib/systemd/system/fail2ban.service; enabled; vendor preset: disabled)
   Active: active (running) since Tue 2020-07-07 10:23:36 JST; 2s ago
     Docs: man:fail2ban(1)
  Process: 2099 ExecStartPre=/bin/mkdir -p /run/fail2ban (code=exited, status=0/SUCCESS)
 Main PID: 2100 (f2b/server)
   CGroup: /system.slice/fail2ban.service
           mq2100 /usr/bin/python -s /usr/bin/fail2ban-server -xf start

Jul 07 10:23:36 phoenix-websa-jp systemd[1]: Starting Fail2Ban Service...
Jul 07 10:23:36 phoenix-websa-jp systemd[1]: Started Fail2Ban Service.
Jul 07 10:23:37 phoenix-websa-jp fail2ban-server[2100]: Server ready

動作確認を行います。

わざとパスワードを間違えるなどして /var/log/fail2ban.log にログが出力されることを確認します。

Webサーバ用ポート公開設定

標準ではdhcpv6-clientとsshのポートしか公開されていないため、Webサーバを建てても外部からアクセスできません。

http(ポート80)とhttps(ポート443)を公開する設定を行います。

まず現状を確認します。

$ sudo firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens3
  sources:
  services: dhcpv6-client ssh
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
$ 

httpとhttpsの公開設定を入れます。

$ sudo firewall-cmd --permanent --zone=public --add-service=http
success
$ sudo firewall-cmd --permanent --zone=public --add-service=https
success
$

reloadを行って設定を反映します。

$ sudo firewall-cmd --reload
success
$ sudo firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens3
  sources:
  services: dhcpv6-client http https ssh
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
$

php 7.4追加編

Oralce Linux 7だと簡単に追加できたりするPHP Packages for Oracle Linuxを利用する。

/etc/yum.repos.d/oracle-php.repo というファイルを作って下記を記載する。(sudo vi /etc/yum.repos.d/oracle-php.repo )

[ol7_developer_php74]
name=Oracle Linux $releasever PHP 7.4 Packages for Development and test ($basearch)
baseurl=https://yum.oracle.com/repo/OracleLinux/OL7/developer/php74/$basearch/
#gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
gpgcheck=0
enabled=1

phpをインストールします。あとでWordpressから要求されるパッケージもあるのでいろいろインストールします。(php-pecl-imagick と php-mbstring はパッケージの依存の問題でインストール不可だった )

$ sudo yum install php php-json php-bcmath php-pear-Net-Curl php-gd
<略>
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package                 Arch   Version               Repository           Size
================================================================================
Installing:
 php                     x86_64 7.4.7-1.0.1.el7       ol7_developer_php74 3.4 M
 php-bcmath              x86_64 7.4.7-1.0.1.el7       ol7_developer_php74  56 k
 php-gd                  x86_64 7.4.7-1.0.1.el7       ol7_developer_php74  72 k
 php-json                x86_64 7.4.7-1.0.1.el7       ol7_developer_php74  58 k
 php-pear-Net-Curl       noarch 1.2.5-10.el7          epel                 13 k
Installing for dependencies:
 apr                     x86_64 1.4.8-5.el7           base                103 k
 apr-util                x86_64 1.5.2-6.el7           base                 92 k
 dejavu-fonts-common     noarch 2.33-6.el7            base                 64 k
 dejavu-sans-fonts       noarch 2.33-6.el7            base                1.4 M
 fontconfig              x86_64 2.13.0-4.3.el7        base                254 k
 fontpackages-filesystem noarch 1.44-8.el7            base                9.9 k
 gd-last                 x86_64 2.1.1-2.el7           ol7_developer_php74 140 k
 httpd                   x86_64 2.4.6-93.el7.centos   base                2.7 M
 httpd-tools             x86_64 2.4.6-93.el7.centos   base                 92 k
 jbigkit-libs            x86_64 2.0-11.el7            base                 46 k
 libX11                  x86_64 1.6.7-2.el7           base                607 k
 libX11-common           noarch 1.6.7-2.el7           base                164 k
 libXau                  x86_64 1.0.8-2.1.el7         base                 29 k
 libXpm                  x86_64 3.5.12-1.el7          base                 55 k
 libjpeg-turbo           x86_64 1.2.90-8.el7          base                135 k
 libtiff                 x86_64 4.0.3-32.el7          base                171 k
 libvpx                  x86_64 1.3.0-5.el7_0         base                498 k
 libxcb                  x86_64 1.13-1.el7            base                214 k
 libxslt                 x86_64 1.1.28-5.el7          base                242 k
 mailcap                 noarch 2.1.41-2.el7          base                 31 k
 php-cli                 x86_64 7.4.7-1.0.1.el7       ol7_developer_php74 5.1 M
 php-common              x86_64 7.4.7-1.0.1.el7       ol7_developer_php74 1.1 M
 php-pear                noarch 1:1.9.4-21.el7        base                357 k
 php-process             x86_64 7.4.7-1.0.1.el7       ol7_developer_php74  76 k
 php-xml                 x86_64 7.4.7-1.0.1.el7       ol7_developer_php74 185 k

Transaction Summary
================================================================================
Install  5 Packages (+25 Dependent packages)

Total download size: 17 M
Installed size: 68 M
Is this ok [y/d/N]: y
<略>
$

この操作によりWebサーバもインストールされている。

MariaDB設定編

CentOS7ではmariadb 5.5.65が用意されている。しかし、このバージョンはWordPress推奨ではないため、最新版のMariaDBをMariaDB Foundationから入手しインストールする。

「/etc/yum.repos.d/mariadb.repo」というファイルを作り、以下の内容を入力。(sudo vi /etc/yum.repos.d/mariadb.repo)

# MariaDB 10.5 CentOS repository list - created 2020-07-07 02:24 UTC
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.5/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

そして、mariadb-serverをインストールします。

$ sudo yum install MariaDB-server MariaDB-client
<略>
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package                    Arch      Version                  Repository  Size
================================================================================
Installing:
 MariaDB-client             x86_64    10.5.4-1.el7.centos      mariadb     13 M
 MariaDB-compat             x86_64    10.5.4-1.el7.centos      mariadb    2.2 M
     replacing  mariadb-libs.x86_64 1:5.5.65-1.el7
 MariaDB-server             x86_64    10.5.4-1.el7.centos      mariadb     26 M
Installing for dependencies:
 MariaDB-common             x86_64    10.5.4-1.el7.centos      mariadb     81 k
 boost-program-options      x86_64    1.53.0-28.el7            base       156 k
 galera-4                   x86_64    26.4.5-1.el7.centos      mariadb    9.5 M
 pcre2                      x86_64    10.23-2.el7              base       201 k
 perl-Compress-Raw-Bzip2    x86_64    2.061-3.el7              base        32 k
 perl-Compress-Raw-Zlib     x86_64    1:2.061-4.el7            base        57 k
 perl-DBI                   x86_64    1.627-4.el7              base       802 k
 perl-Data-Dumper           x86_64    2.145-3.el7              base        47 k
 perl-IO-Compress           noarch    2.061-2.el7              base       260 k
 perl-Net-Daemon            noarch    0.48-5.el7               base        51 k
 perl-PlRPC                 noarch    0.2020-14.el7            base        36 k
 socat                      x86_64    1.7.3.2-2.el7            base       290 k

Transaction Summary
================================================================================
Install  3 Packages (+12 Dependent packages)

Total download size: 52 M
Is this ok [y/d/N]: y
<略>
$

MariaDBサーバの自動起動を設定します。

$ systemctl list-unit-files|grep mariadb
mariadb.service                               disabled
mariadb@.service                              disabled
$ sudo systemctl enable mariadb.service
Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service.
$ systemctl list-unit-files|grep mariadb
mariadb.service                               enabled
mariadb@.service                              disabled
$

MariaDBを起動します。

$ systemctl status mariadb.service
● mariadb.service - MariaDB 10.5.4 database server
   Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled)
  Drop-In: /etc/systemd/system/mariadb.service.d
           mqmigrated-from-my.cnf-settings.conf
   Active: inactive (dead)
     Docs: man:mariadbd(8)
           https://mariadb.com/kb/en/library/systemd/
$ sudo systemctl start mariadb.service
$ systemctl status mariadb.service
● mariadb.service - MariaDB 10.5.4 database server
   Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled)
  Drop-In: /etc/systemd/system/mariadb.service.d
           mqmigrated-from-my.cnf-settings.conf
   Active: active (running) since Tue 2020-07-07 11:30:10 JST; 1s ago
     Docs: man:mariadbd(8)
           https://mariadb.com/kb/en/library/systemd/
  Process: 32580 ExecStartPost=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)
  Process: 32554 ExecStartPre=/bin/sh -c [ ! -e /usr/bin/galera_recovery ] && VAR= ||   VAR=`cd /usr/bin/..; /usr/bin/galera_recovery`; [ $? -eq 0 ]   && systemctl set-environment _WSREP_START_POSITION=$VAR || exit 1 (code=exited, status=0/SUCCESS)
  Process: 32552 ExecStartPre=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)
 Main PID: 32565 (mariadbd)
   Status: "Taking your SQL requests now..."
   CGroup: /system.slice/mariadb.service
           mq32565 /usr/sbin/mariadbd

Jul 07 11:30:10 phoenix-websa-jp mariadbd[32565]: 2020-07-07 11:30:10 0 [Note...
Jul 07 11:30:10 phoenix-websa-jp mariadbd[32565]: 2020-07-07 11:30:10 0 [Note...
Jul 07 11:30:10 phoenix-websa-jp mariadbd[32565]: 2020-07-07 11:30:10 0 [Note...
Jul 07 11:30:10 phoenix-websa-jp mariadbd[32565]: 2020-07-07 11:30:10 0 [Note...
Jul 07 11:30:10 phoenix-websa-jp mariadbd[32565]: 2020-07-07 11:30:10 0 [Note...
Jul 07 11:30:10 phoenix-websa-jp mariadbd[32565]: 2020-07-07 11:30:10 0 [Note...
Jul 07 11:30:10 phoenix-websa-jp mariadbd[32565]: 2020-07-07 11:30:10 0 [Note...
Jul 07 11:30:10 phoenix-websa-jp mariadbd[32565]: 2020-07-07 11:30:10 0 [Note...
Jul 07 11:30:10 phoenix-websa-jp mariadbd[32565]: Version: '10.5.4-MariaDB'  ...
Jul 07 11:30:10 phoenix-websa-jp systemd[1]: Started MariaDB 10.5.4 database....
Hint: Some lines were ellipsized, use -l to show in full.
$

最後にWordpress用データベースを作成します。

$ sudo mysql -u root
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 4
Server version: 10.5.4-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> create database DB名 character set utf8;
Query OK, 1 row affected (0.000 sec)

MariaDB [(none)]> grant all on DB名.* to wordpress@localhost identified by 'パスワード';
Query OK, 0 rows affected (0.002 sec)

MariaDB [(none)]> quit
Bye
$

Webサーバ SSL設定編

昨今のWebサーバはSSL化が必須です。

Let’s Encriptを利用したSSL化が使用しやすいですが、certbotだと仕組みが大がかりになってしまうので小回りが利くshellベースのdehydratedを使用します。

EPELレポジトリに含まれているため導入は簡単です。

$ sudo yum install dehydrated
<略>--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package             Arch            Version                Repository     Size
================================================================================
Installing:
 dehydrated          noarch          0.6.5-1.el7            epel           85 k

Transaction Summary
================================================================================
Install  1 Package

Total download size: 85 k
Installed size: 164 k
Is this ok [y/d/N]: y
<略>
$

dehydratedによるSSL証明書取得処理には /var/www/dehydrated が使用されるためディレクトリを作成します。

$ sudo mkdir  /var/www/dehydrated

http://~/.well-known/acme-challenge でアクセスした時に上記ディレクトリが開くようApacheの設定を /etc/httpd/conf.d/dehydrated.conf として作成します。(sudo vi /etc/httpd/conf.d/dehydrated.conf )

Alias /.well-known/acme-challenge /var/www/dehydrated
<Directory /var/www/dehydrated/>
</Directory>

Webサーバが自動起動するように設定します。

$ systemctl list-unit-files |grep http
httpd.service                                 disabled
$ sudo systemctl enable httpd.service
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
$ systemctl list-unit-files |grep http
httpd.service                                 enabled
$

続いてWebサーバを起動します。

$ systemctl status httpd.service
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
   Active: inactive (dead)
     Docs: man:httpd(8)
           man:apachectl(8)
$ sudo systemctl start httpd.service
$ systemctl status httpd.service
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
   Active: active (running) since Tue 2020-07-07 10:55:23 JST; 14s ago
     Docs: man:httpd(8)
           man:apachectl(8)
 Main PID: 30854 (httpd)
   Status: "Total requests: 0; Current requests/sec: 0; Current traffic:   0 B/sec"
   CGroup: /system.slice/httpd.service
           tq30854 /usr/sbin/httpd -DFOREGROUND
           tq30855 /usr/sbin/httpd -DFOREGROUND
           tq30856 /usr/sbin/httpd -DFOREGROUND
           tq30857 /usr/sbin/httpd -DFOREGROUND
           tq30858 /usr/sbin/httpd -DFOREGROUND
           mq30859 /usr/sbin/httpd -DFOREGROUND

Jul 07 10:55:22 phoenix-websa-jp systemd[1]: Starting The Apache HTTP Server...
Jul 07 10:55:23 phoenix-websa-jp systemd[1]: Started The Apache HTTP Server.
Hint: Some lines were ellipsized, use -l to show in full.
$

SSL証明書を発行するホスト名を /etc/dehydrated/domains.txt に記載する。(sudo vi /etc/dehydrated/domains.txt)

1行に複数のホスト名を記載するとaliasになります。

登録作業を開始します。

$ sudo dehydrated --register
# INFO: Using main config file /etc/dehydrated/config
# INFO: Using additional config file /etc/dehydrated/conf.d/local.sh

To use dehydrated with this certificate authority you have to agree to their terms of service which you can find here: https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf

To accept these terms of service run `/bin/dehydrated --register --accept-terms`.
$
$ sudo dehydrated --register --accept-terms
# INFO: Using main config file /etc/dehydrated/config
# INFO: Using additional config file /etc/dehydrated/conf.d/local.sh
+ Generating account key...
+ Registering account key with ACME server...
+ Fetching account ID...
+ Done!
$

初回のSSL証明書発行処理を実行します。

$ sudo dehydrated --cron
# INFO: Using main config file /etc/dehydrated/config
# INFO: Using additional config file /etc/dehydrated/conf.d/local.sh
 + Creating chain cache directory /etc/dehydrated/chains
Processing phoenix.websa.jp
 + Creating new directory /etc/dehydrated/certs/phoenix.websa.jp ...
 + Signing domains...
 + Generating private key...
 + Generating signing request...
 + Requesting new certificate order from CA...
 + Received 1 authorizations URLs from the CA
 + Handling authorization for phoenix.websa.jp
 + 1 pending challenge(s)
 + Deploying challenge tokens...
 + Responding to challenge for phoenix.websa.jp authorization...
 + Challenge is valid!
 + Cleaning challenge tokens...
 + Requesting certificate...
 + Checking certificate...
 + Done!
 + Creating fullchain.pem...
 + Done!
$

/etc/dehydrated/certs/ にdomais.txtの各行の一番最初に書いたホスト名のディレクトリが作られており、その中に証明書が配置されています。

$ sudo ls -l /etc/dehydrated/certs/
total 0
drwx------. 2 root root 239 Jul  7 11:04 phoenix.websa.jp
$ sudo ls -l /etc/dehydrated/certs/phoenix.websa.jp/
total 20
-rw-------. 1 root root 1655 Jul  7 11:04 cert-1594087457.csr
-rw-------. 1 root root 2256 Jul  7 11:04 cert-1594087457.pem
lrwxrwxrwx. 1 root root   19 Jul  7 11:04 cert.csr -> cert-1594087457.csr
lrwxrwxrwx. 1 root root   19 Jul  7 11:04 cert.pem -> cert-1594087457.pem
-rw-------. 1 root root 1648 Jul  7 11:04 chain-1594087457.pem
lrwxrwxrwx. 1 root root   20 Jul  7 11:04 chain.pem -> chain-1594087457.pem
-rw-------. 1 root root 3904 Jul  7 11:04 fullchain-1594087457.pem
lrwxrwxrwx. 1 root root   24 Jul  7 11:04 fullchain.pem -> fullchain-1594087457.pem
-rw-------. 1 root root 3243 Jul  7 11:04 privkey-1594087457.pem
lrwxrwxrwx. 1 root root   22 Jul  7 11:04 privkey.pem -> privkey-1594087457.pem
$

なお、Let’s EncryptのSSL証明書は有効期限90日ですが、 /etc/cron.d/dehydrated に更新処理が設定されています。

Apacheに対する設定変更

phpインストール時に導入されたのはhttpのみで、httpsアクセスに関連するモジュール(mod_ssl)はインストールされていません。

$ sudo yum install mod_ssl
<略>
$

mod_sslによりSSL設定ファイルが /etc/httpd/conf.d/ssl.conf に配置されます。

しかし今どきじゃないようなので、ApacheのSSL対応設定をMozilla SSL Configuration Generatorベースの設定をssl-mozilla.confとして記載します。

$ sudo vi /etc/httpd/conf.d/ssl-mozilla.conf 

記載する内容は下記の様になる。

# generated 2020-07-07, Mozilla Guideline v5.4, Apache 2.4.6, OpenSSL 1.0.2k, intermediate configuration, no OCSP
# https://ssl-config.mozilla.org/#server=apache&amp;version=2.4.6&amp;config=intermediate&amp;openssl=1.0.2k&amp;ocsp=false&amp;guideline=5.4

# this configuration requires mod_ssl, mod_rewrite, and mod_headers
<VirtualHost *:80>
    RewriteEngine On
    RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]
</VirtualHost>

<VirtualHost *:443>
    SSLEngine on
    SSLCertificateFile      /etc/dehydrated/certs/<ホスト名>/cert.pem
    SSLCertificateChainFile /etc/dehydrated/certs/<ホスト名>/chain.pem
    SSLCertificateKeyFile   /etc/dehydrated/certs/<ホスト名>/privkey.pem

    # HTTP Strict Transport Security (mod_headers is required) (63072000 seconds)
    Header always set Strict-Transport-Security "max-age=63072000"
</VirtualHost>

# intermediate configuration
SSLProtocol             all -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite          ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
SSLHonorCipherOrder     off

変更後、Webサービスを再起動する。

$ sudo systemctl restart httpd
$

WordPress導入

EPELレポジトリにWordPressパッケージがありますがバージョンが5.1.6と古く、また、WordPress管理画面からのアップデートとのバッティング問題がありますので、パッケージは使用しません。

/var/www/htmlにwordpressのtar.gzを展開します。

$ cd /var/www/html
$ sudo wget https://wordpress.org/latest.tar.gz
$ ls
latest.tar.gz
$ sudo tar xfz latest.tar.gz
$ ls
latest.tar.gz  wordpress
$ sudo rm latest.tar.gz
$ ls -l
total 4
drwxr-xr-x. 5 nobody nfsnobody 4096 Jun 11 06:48 wordpress
$

WordPressディレクトリの所有者をWebサービスのユーザである「apache」に変更します。

$ ps -ef|grep http
root     32093     1  0 11:17 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache   32094 32093  0 11:17 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache   32095 32093  0 11:17 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache   32096 32093  0 11:17 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache   32097 32093  0 11:17 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache   32098 32093  0 11:17 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache   32103 32093  0 11:18 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache   32113 32093  0 11:19 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
opc      32700  1911  0 11:38 pts/0    00:00:00 grep --color=auto http
$ sudo chown -R apache:apache wordpress
$ ls -l
total 4
drwxr-xr-x. 5 apache apache 4096 Jun 11 06:48 wordpress
$

/var/www/html/wordpress をDocumentRootとするように ssl-mozilla.conf に追加する。

# generated 2020-07-07, Mozilla Guideline v5.4, Apache 2.4.6, OpenSSL 1.0.2k, intermediate configuration, no OCSP
# https://ssl-config.mozilla.org/#server=apache&amp;version=2.4.6&amp;config=intermediate&amp;openssl=1.0.2k&amp;ocsp=false&amp;guideline=5.4

# this configuration requires mod_ssl, mod_rewrite, and mod_headers
<VirtualHost *:80>
    RewriteEngine On
    RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]
</VirtualHost>

<VirtualHost *:443>
    DocumentRoot /var/www/html/wordpress
    SSLEngine on
    SSLCertificateFile      /etc/dehydrated/certs/<ホスト名>/cert.pem
    SSLCertificateChainFile /etc/dehydrated/certs/<ホスト名>/chain.pem
    SSLCertificateKeyFile   /etc/dehydrated/certs/<ホスト名>/privkey.pem

    # HTTP Strict Transport Security (mod_headers is required) (63072000 seconds)
    Header always set Strict-Transport-Security "max-age=63072000"
</VirtualHost>

# intermediate configuration
SSLProtocol             all -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite          ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
SSLHonorCipherOrder     off

設定後、Webサーバを再起動する

$ systemctl restart httpd
$

https://~/ にアクセスしてみると・・・

phpからmariadbにアクセスするためのパッケージが抜けていました。

$ sudo yum install php-mysql
<略>
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package         Arch       Version               Repository               Size
================================================================================
Installing:
 php-mysqlnd     x86_64     7.4.7-1.0.1.el7       ol7_developer_php74     228 k
Installing for dependencies:
 php-pdo         x86_64     7.4.7-1.0.1.el7       ol7_developer_php74     121 k

Transaction Summary
================================================================================
Install  1 Package (+1 Dependent package)

Total download size: 349 k
Installed size: 1.2 M
Is this ok [y/d/N]: y
<略>
$

php関連のパッケージを変更した場合は、httpdを再起動します。

$ sudo systemctl restart httpd
$

無事にWordpress初期画面が確認出来ました。

途中、wp-config.php に書き込めないと出ますので、「sudo vi /var/www/html/wordpress/wp-config.php」を実行し、指定された内容を記載します。

$ sudo vi /var/www/html/wordpress/wp-config.php

以上で完了です。

Oracle Autonomous Linuxでwordpressサーバを建ててみた


Oracle CloudのTOKYOリージョンでFree tierのOracle Autonomouse Linux 7.8環境の作成が出来た。

できたんだけど、標準で提供されているレポジトリの範囲が狭く、通常のOracle Linux 7.8の標準レポジトリにも足りていない。

このため、wordpressサーバを建ててみるかと思っても、要求されるphpおよびmariadbのバージョンに足りていない。

Oracle Autonomous Linuxとしてのマニュアルがなく、ソフトウェア追加に関する制限事項等が分からないが、他に使い道も無いので、通常のOracle Linux 7.8で設定されているレポジトリとかを追加してみることにした。

注意:普通のOracle Linux 7.8やCentOS7にWordpressをインストールする場合は「CentOS 7 / Oracle Linux 7でWordPressサーバを建てる」を参照してください。

php 7.4追加編

いろいろある中、Oracle自身が出していてOracle Linux 7.8でも追加できるPHP Packages for Oracle Linuxかな、と追加してみる。

Oracle Linuxのレポジトリ設定の中からphp7.4部分を抜き出して /etc/yum.repos.d/oracle-php.repo というファイルを作成。

[ol7_developer_php74]
name=Oracle Linux $releasever PHP 7.4 Packages for Development and test ($basearch)
baseurl=https://yum$ociregion.oracle.com/repo/OracleLinux/OL7/developer/php74/$basearch/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
gpgcheck=1
enabled=1

そしてphpをインストール

# yum install php
<略>
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package         Arch       Version               Repository               Size
================================================================================
Installing:
 php             x86_64     7.4.7-1.0.1.el7       ol7_developer_php74     3.4 M
Installing for dependencies:
 apr             x86_64     1.4.8-5.el7           al7                     103 k
 apr-util        x86_64     1.5.2-6.0.1.el7       al7                      91 k
 httpd           x86_64     2.4.6-93.0.1.el7      al7                     1.2 M
 httpd-tools     x86_64     2.4.6-93.0.1.el7      al7                      92 k
 mailcap         noarch     2.1.41-2.el7          al7                      30 k
 php-cli         x86_64     7.4.7-1.0.1.el7       ol7_developer_php74     5.1 M
 php-common      x86_64     7.4.7-1.0.1.el7       ol7_developer_php74     1.1 M

Transaction Summary
================================================================================
Install  1 Package (+7 Dependent packages)

Total download size: 11 M
Installed size: 47 M
Is this ok [y/d/N]: y
<略>
Installed:
  php.x86_64 0:7.4.7-1.0.1.el7

Dependency Installed:
  apr.x86_64 0:1.4.8-5.el7              apr-util.x86_64 0:1.5.2-6.0.1.el7
  httpd.x86_64 0:2.4.6-93.0.1.el7       httpd-tools.x86_64 0:2.4.6-93.0.1.el7
  mailcap.noarch 0:2.1.41-2.el7         php-cli.x86_64 0:7.4.7-1.0.1.el7
  php-common.x86_64 0:7.4.7-1.0.1.el7

Complete!
#

httpdも一緒にインストールされました。

また、wp-cliで使うphp-jsonとサイトヘルスで表示されるエラー対応としてphp-bcmath を追加します。

# yum install php-json php-bcmath
<略>
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package        Arch       Version                Repository               Size
================================================================================
Installing:
 php-bcmath     x86_64     7.4.7-1.0.1.el7        ol7_developer_php74      56 k
 php-json       x86_64     7.4.7-1.0.1.el7        ol7_developer_php74      58 k

Transaction Summary
================================================================================
Install  2 Packages

Total download size: 114 k
Installed size: 160 k
Is this ok [y/d/N]: y
<略>
#

しかし、AMP pluginで使うphp-pear-Net-Curlとサイトヘルスのphp-pecl-imagick はepel系パッケージ、サイトヘルスのphp-gd は依存パッケージのlibvpx(Oracle Linuxでは標準パッケージに含まれる)がなくインストールできなかった。

MariaDB追加編

SQLサーバのmariadb-serverパッケージについては、MariaDB Foundationからmariadb 10.5を導入することにした。

「/etc/yum.repos.d/mariadb.repo」というファイルを作り、以下の内容を入力

# MariaDB 10.5 RedHat repository list - created 2020-06-26 04:54 UTC
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.5/rhel7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
#

そののち「yum install MariaDB-server MariaDB-client」を実行してmariadb-serverをインストール

# yum install MariaDB-server MariaDB-client
<中略>
---> Package perl-Compress-Raw-Zlib.x86_64 1:2.061-4.el7 will be installed
--> Finished Dependency Resolution
Error: Package: MariaDB-client-10.5.4-1.el7.centos.x86_64 (mariadb)
           Requires: libpcre2-8.so.0()(64bit)
Error: Package: galera-4-26.4.5-1.el7.centos.x86_64 (mariadb)
           Requires: socat
Error: Package: MariaDB-server-10.5.4-1.el7.centos.x86_64 (mariadb)
           Requires: libpcre2-8.so.0()(64bit)
 You could try using --skip-broken to work around the problem
 You could try running: rpm -Va --nofiles --nodigest
#

どうやら「pcre2」と「socat」がOracle Autonomous Linuxでは提供されていないパッケージであるようだ。(標準のOralce Linux 7.8ではol7_latestレポジトリに含まれている)

先ほど指定したmariadbレポジトリはRedHat Enterprise Linux 7用だったので、CentOS7用(baseurl=http://yum.mariadb.org/10.5/centos7-amd64 )に変更しても状況は変わらず。

では、とバージョンを10.4に下げてみると成功。成功時のmariadb.repoは以下

# MariaDB 10.4 RedHat repository list - created 2020-06-26 06:01 UTC
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.4/rhel7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
# yum install MariaDB-server MariaDB-client
<略>
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package                   Arch     Version                     Repository
                                                                           Size
================================================================================
Installing:
 MariaDB-client            x86_64   10.4.13-1.el7.centos        mariadb    12 M
 MariaDB-compat            x86_64   10.4.13-1.el7.centos        mariadb   2.2 M
     replacing  mariadb-libs.x86_64 1:5.5.65-1.el7
 MariaDB-server            x86_64   10.4.13-1.el7.centos        mariadb    26 M
Installing for dependencies:
 MariaDB-common            x86_64   10.4.13-1.el7.centos        mariadb    81 k
 boost-program-options     x86_64   1.53.0-28.el7               al7       156 k
 galera-4                  x86_64   26.4.4-1.rhel7.el7.centos   mariadb   9.5 M
 perl-Compress-Raw-Bzip2   x86_64   2.061-3.el7                 al7        32 k
 perl-Compress-Raw-Zlib    x86_64   1:2.061-4.el7               al7        57 k
 perl-DBI                  x86_64   1.627-4.el7                 al7       801 k
 perl-Data-Dumper          x86_64   2.145-3.el7                 al7        47 k
 perl-IO-Compress          noarch   2.061-2.el7                 al7       259 k
 perl-Net-Daemon           noarch   0.48-5.el7                  al7        50 k
 perl-PlRPC                noarch   0.2020-14.el7               al7        35 k

Transaction Summary
================================================================================
Install  3 Packages (+10 Dependent packages)

Total download size: 51 M
Is this ok [y/d/N]: y
<略>

Installed:
  MariaDB-client.x86_64 0:10.4.13-1.el7.centos
  MariaDB-compat.x86_64 0:10.4.13-1.el7.centos
  MariaDB-server.x86_64 0:10.4.13-1.el7.centos

Dependency Installed:
  MariaDB-common.x86_64 0:10.4.13-1.el7.centos
  boost-program-options.x86_64 0:1.53.0-28.el7
  galera-4.x86_64 0:26.4.4-1.rhel7.el7.centos
  perl-Compress-Raw-Bzip2.x86_64 0:2.061-3.el7
  perl-Compress-Raw-Zlib.x86_64 1:2.061-4.el7
  perl-DBI.x86_64 0:1.627-4.el7
  perl-Data-Dumper.x86_64 0:2.145-3.el7
  perl-IO-Compress.noarch 0:2.061-2.el7
  perl-Net-Daemon.noarch 0:0.48-5.el7
  perl-PlRPC.noarch 0:0.2020-14.el7

Replaced:
  mariadb-libs.x86_64 1:5.5.65-1.el7

Complete!
#

MariaDB設定編

まず、現在のMariaDBサーバの自動起動設定を確認。

# systemctl list-unit-files|grep mariadb
mariadb.service                               disabled
mariadb@.service                              disabled
#

自動起動しない設定になっているので、自動起動するように変更する

# systemctl enable mariadb.service
Created symlink from /etc/systemd/system/mysql.service to /usr/lib/systemd/system/mariadb.service.
Created symlink from /etc/systemd/system/mysqld.service to /usr/lib/systemd/system/mariadb.service.
Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service.
#

続いてMariaDBの起動状況を確認

# systemctl status mariadb
● mariadb.service - MariaDB 10.4.13 database server
   Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled)
  Drop-In: /etc/systemd/system/mariadb.service.d
           mqmigrated-from-my.cnf-settings.conf
   Active: inactive (dead)
     Docs: man:mysqld(8)
           https://mariadb.com/kb/en/library/systemd/
#

「Active: inactive (dead)」なので起動していないので「systemctl start mariadb」で起動する。

# systemctl start mariadb
# systemctl status mariadb -l
● mariadb.service - MariaDB 10.4.13 database server
   Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled)
  Drop-In: /etc/systemd/system/mariadb.service.d
           mqmigrated-from-my.cnf-settings.conf
   Active: active (running) since Fri 2020-06-26 15:08:58 JST; 37s ago
     Docs: man:mysqld(8)
           https://mariadb.com/kb/en/library/systemd/
  Process: 9464 ExecStartPost=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)
  Process: 9419 ExecStartPre=/bin/sh -c [ ! -e /usr/bin/galera_recovery ] &amp;&amp; VAR= ||   VAR=`cd /usr/bin/..; /usr/bin/galera_recovery`; [ $? -eq 0 ]   &amp;&amp; systemctl set-environment _WSREP_START_POSITION=$VAR || exit 1 (code=exited, status=0/SUCCESS)
  Process: 9417 ExecStartPre=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)
 Main PID: 9430 (mysqld)
   Status: "Taking your SQL requests now..."
   CGroup: /system.slice/mariadb.service
           mq9430 /usr/sbin/mysqld

Jun 26 15:08:57 oci.adosakana.local mysqld[9430]: 2020-06-26 15:08:57 0 [Note] InnoDB: 10.4.13 started; log sequence number 60972; transaction id 21
Jun 26 15:08:57 oci.adosakana.local mysqld[9430]: 2020-06-26 15:08:57 0 [Note] InnoDB: Loading buffer pool(s) from /var/lib/mysql/ib_buffer_pool
Jun 26 15:08:57 oci.adosakana.local mysqld[9430]: 2020-06-26 15:08:57 0 [Note] InnoDB: Buffer pool(s) load completed at 200626 15:08:57
Jun 26 15:08:57 oci.adosakana.local mysqld[9430]: 2020-06-26 15:08:57 0 [Note] Plugin 'FEEDBACK' is disabled.
Jun 26 15:08:57 oci.adosakana.local mysqld[9430]: 2020-06-26 15:08:57 0 [Note] Server socket created on IP: '::'.
Jun 26 15:08:58 oci.adosakana.local mysqld[9430]: 2020-06-26 15:08:58 0 [Note] Reading of all Master_info entries succeeded
Jun 26 15:08:58 oci.adosakana.local mysqld[9430]: 2020-06-26 15:08:58 0 [Note] Added new Master_info '' to hash table
Jun 26 15:08:58 oci.adosakana.local mysqld[9430]: 2020-06-26 15:08:58 0 [Note] /usr/sbin/mysqld: ready for connections.
Jun 26 15:08:58 oci.adosakana.local mysqld[9430]: Version: '10.4.13-MariaDB'  socket: '/var/lib/mysql/mysql.sock'  port: 3306  MariaDB Server
Jun 26 15:08:58 oci.adosakana.local systemd[1]: Started MariaDB 10.4.13 database server.
#

MariaDB上にWordpress用のデータベースを作成する。

# mysql -u root
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 8
Server version: 10.4.13-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> create database DB名 character set utf8;
Query OK, 1 row affected (0.000 sec)

MariaDB [(none)]> grant all on DB名.* to wordpress@localhost identified by 'w@rdpress';
Query OK, 0 rows affected (0.002 sec)

MariaDB [(none)]> quit
Bye
#

firewall設定

まずfirewallを開ける。

現状のポート開放状況を確認するため「firewall-cmd –list-all」を実行

# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens3
  sources:
  services: dhcpv6-client ssh
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
#

httpとhttpsを追加して、設定を再読込して反映

# firewall-cmd --permanent --zone=public --add-service=http
success
# firewall-cmd --permanent --zone=public --add-service=https
success
# firewall-cmd --reload
success
# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens3
  sources:
  services: dhcpv6-client http https ssh
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
#

Webサーバ設定

nginxへの切り替え

最初はApacheを使おうとしたのですが、Mozilla SSL Configuration Generators推奨設定を行うにはmod_rewriteやmod_headersが含まれていませんでした。

Apache関連の追加レポジトリを探すよりはWebサーバをnginxに切り替えてnginx公式レポジトリを使った方が良いのでは?ということで「nginx: Linux packages」を元に追加

/etc/yum.repos.d/nginx.repo に下記を記載

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
# yum install nginx
<略>
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package      Arch          Version                   Repository           Size
================================================================================
Installing:
 nginx        x86_64        1:1.18.0-1.el7.ngx        nginx-stable        772 k

Transaction Summary
================================================================================
Install  1 Package

Total download size: 772 k
Installed size: 2.7 M
Is this ok [y/d/N]: y
<略>
#

また、あとで確認したところphp-fpmも必要だったのでインストールします。これはサービスとしても起動します。

# yum install php-fpm
Loaded plugins: langpacks
Resolving Dependencies
--> Running transaction check
---> Package php-fpm.x86_64 0:7.4.7-1.0.1.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package      Arch        Version                Repository                Size
================================================================================
Installing:
 php-fpm      x86_64      7.4.7-1.0.1.el7        ol7_developer_php74      1.7 M

Transaction Summary
================================================================================
Install  1 Package

Total download size: 1.7 M
Installed size: 6.1 M
Is this ok [y/d/N]: y
<略>
# systemctl list-unit-files|grep php
php-fpm.service                               disabled
# systemctl enable php-fpm.service
Created symlink from /etc/systemd/system/multi-user.target.wants/php-fpm.service to /usr/lib/systemd/system/php-fpm.service.
# systemctl start php-fpm.service
#

現在のApacheとnginxの自動起動設定を確認するため「systemctl list-unit-files|grep -e http -e nginx」を実行

# systemctl list-unit-files|grep -e http -e nginx
httpd.service                                 disabled
nginx-debug.service                           disabled
nginx.service                                 disabled
#

どちらも起動状態にないことを確認。

nginxを自動起動にしてから起動

# ystemctl enable nginx.service
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.
# systemctl start nginx.service
# systemctl status nginx.service -l
● nginx.service - nginx - high performance web server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
   Active: active (running) since Fri 2020-06-26 15:58:01 JST; 5s ago
     Docs: http://nginx.org/en/docs/
  Process: 10409 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
 Main PID: 10410 (nginx)
   CGroup: /system.slice/nginx.service
           tq10410 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.con
           mq10411 nginx: worker process

Jun 26 15:58:01 oci.adosakana.local systemd[1]: Starting nginx - high performance web server...
Jun 26 15:58:01 oci.adosakana.local systemd[1]: Can't open PID file /var/run/nginx.pid (yet?) after start: No such file or directory
Jun 26 15:58:01 oci.adosakana.local systemd[1]: Started nginx - high performance web server.
#

ブラウザからアクセスできるか確認

Let’s encryptを利用したSSLアクセス有効化

Oracle Autonomous Linuxにはcertbotもdehydratedもありません。

certbotはpython環境を使い大がかりになってしまうので、dehydratedの方を使用します。

githubのdehydratedからダウンロードします。

# wget https://github.com/dehydrated-io/dehydrated/archive/master.tar.gz
# tar xfz master.tar.gz
# ls -l
total 88
drwxrwxr-x. 4 root root  4096 Apr 29 04:36 dehydrated-master
-rw-r--r--. 1 root root 82951 Jun 26 16:32 master.tar.gz 
# 

dehydrated と config を配置します。

# cp dehydrated-master/dehydrated /usr/local/sbin/
# ls -l /usr/local/sbin/dehydrated
-rwxr-xr-x. 1 root root 69787 Jun 26 16:35 /usr/local/sbin/dehydrated
# mkdir /usr/local/etc/dehydrated
# cp dehydrated-master/docs/examples/config /usr/local/etc/dehydrated
# ls -l /usr/local/etc/dehydrated
total 8
-rw-r--r--. 1 root root 4656 Jun 26 16:36 config
#

/usr/local/etc/dehydrated/domains.txt にSSL証明書を取得するドメイン名を列挙します。

dehydratedがSSL証明書取得の際に使用する作業用Web公開ディレクトリ /var/www/dehydrated に関する設定をnginxに行います。

まず、ディレクトリを作成

# mkdir /var/www/dehydrated
#

次にnginx側の設定 を /etc/nginx/conf.d/default.conf のlisten 80に関するlocaltionに下記を追加。

location ^~ /.well-known/acme-challenge {
        alias /var/www/dehydrated;
        break;
}

そして、nginx再起動

# systemctl restart nginx
#

準備が出来たのでdehydratedで登録を開始。

# dehydrated --register
# INFO: Using main config file /usr/local/etc/dehydrated/config

To use dehydrated with this certificate authority you have to agree to their terms of service which you can find here: https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf

To accept these terms of service run `/usr/local/sbin/dehydrated --register --accept-terms`.
#  /usr/local/sbin/dehydrated --register --accept-terms
# INFO: Using main config file /usr/local/etc/dehydrated/config
+ Generating account key...
+ Registering account key with ACME server...
+ Fetching account URL...
+ Done!
# 

前処理が完了したので、実際のSSL証明書発行処理を実施。

# /usr/local/sbin/dehydrated --cron
# INFO: Using main config file /usr/local/etc/dehydrated/config
Processing oci.adosakana.local
 + Creating new directory /usr/local/etc/dehydrated/certs/oci.adosakana.local ...
 + Signing domains...
 + Generating private key...
 + Generating signing request...
 + Requesting new certificate order from CA...
 + Received 1 authorizations URLs from the CA
 + Handling authorization for oci.adosakana.local
 + 1 pending challenge(s)
 + Deploying challenge tokens...
 + Responding to challenge for oci.adosakana.local authorization...
 + Challenge is valid!
 + Cleaning challenge tokens...
 + Requesting certificate...
 + Checking certificate...
 + Done!
 + Creating fullchain.pem...
 + Done!
#

SSL証明書は /usr/local/etc/dehydrated/certs/FQDN名ディレクトリ に作成されます。

nginx側の設定はMozilla SSL Configuration Generator を元に /etc/nginx/conf.d/default.conf を書き換えます。

# generated 2020-06-26, Mozilla Guideline v5.4, nginx 1.17.7, OpenSSL 1.0.1e, intermediate configuration, no OCSP
# https://ssl-config.mozilla.org/#server=nginx&amp;version=1.17.7&amp;config=intermediate&amp;openssl=1.0.1e&amp;ocsp=false&amp;guideline=5.4
server {
    listen 80 default_server;
    listen [::]:80 default_server;

    location ^~ /.well-known/acme-challenge {
        alias /var/www/dehydrated;
    }
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    ssl_certificate /usr/local/etc/dehydrated/certs/FQDN名ディレクトリ/fullchain.pem;
    ssl_certificate_key /usr/local/etc/dehydrated/certs/FQDN名ディレクトリ/privkey.pem;
    ssl_session_timeout 1d;
    ssl_session_cache shared:MozSSL:10m;  # about 40000 sessions

    # curl https://ssl-config.mozilla.org/ffdhe2048.txt > /path/to/dhparam
    ssl_dhparam /usr/local/etc/dehydrated/certs/dhparam;

    # intermediate configuration
    ssl_protocols TLSv1.2;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers off;

    # HSTS (ngx_http_headers_module is required) (63072000 seconds)
    add_header Strict-Transport-Security "max-age=63072000" always;
}

Mozilla的にはffdhe2048.txtの配置を推奨するようなので、下記でダウンロードして配置します。

# curl https://ssl-config.mozilla.org/ffdhe2048.txt > /usr/local/etc/dehydrated/certs/dhparam
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   423  100   423    0     0    680      0 --:--:-- --:--:-- --:--:--   681
#

そして、nginxを再起動します。

# systemctl restart nginx
#

ブラウザからhttpアクセスすると、httpsアクセスに変換された上で404 Not Found表示となることを確認します。

Let’s のSSL証明書は定期的に更新処理を実行する必要があります。

/etc/cron.d/dehydrated に下記の内容のファイルを作成します。(EPEL収録のdehydratedパッケージの内容を参考にした)

45 1 * * 4 root test -s /usr/local/etc/dehydrated/domains.txt &amp;&amp; /usr/local/sbin/dehydrated --cron

WordPress設定

/var/www/html/wordpress にtar.gzの中身を展開

# tar xfz latest.tar.gz
# ls -l
total 11956
-rw-r--r--. 1 root   root      12238031 Jun 11 06:49 latest.tar.gz
drwxr-xr-x. 5 nobody nfsnobody     4096 Jun 11 06:48 wordpress
# chown -R apache:apache wordpress/
# ls -l
total 11956
-rw-r--r--. 1 root   root   12238031 Jun 11 06:49 latest.tar.gz
drwxr-xr-x. 5 apache apache     4096 Jun 11 06:48 wordpress
#

WordPress用のnginx設定は「nginx WordPress recipe」 を参考に作成した。元はphp-cgiを使用していたが、php-cgiパッケージはないためphp-fpm使用に切り替えている。

# Upstream to abstract backend connection(s) for php
upstream php {
    server unix:/tmp/php-fpm.socket;
    server 127.0.0.1:9000;
}

# generated 2020-06-26, Mozilla Guideline v5.4, nginx 1.17.7, OpenSSL 1.0.1e, intermediate configuration, no OCSP
# https://ssl-config.mozilla.org/#server=nginx&amp;version=1.17.7&amp;config=intermediate&amp;openssl=1.0.1e&amp;ocsp=false&amp;guideline=5.4
server {
    listen 80 default_server;
    listen [::]:80 default_server;

    location ^~ /.well-known/acme-challenge {
        alias /var/www/dehydrated;
    }
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    ssl_certificate /usr/local/etc/dehydrated/certs/FQDN名ディレクトリ/fullchain.pem;
    ssl_certificate_key /usr/local/etc/dehydrated/certs/FQDN名ディレクトリ/privkey.pem;
    ssl_session_timeout 1d;
    ssl_session_cache shared:MozSSL:10m;  # about 40000 sessions

    # curl https://ssl-config.mozilla.org/ffdhe2048.txt > /path/to/dhparam
    ssl_dhparam /usr/local/etc/dehydrated/certs/dhparam;

    # intermediate configuration
    ssl_protocols TLSv1.2;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers off;

    # HSTS (ngx_http_headers_module is required) (63072000 seconds)
    add_header Strict-Transport-Security "max-age=63072000" always;

    root /var/www/html/wordpress;

    index index.php;
    location = /favicon.ico {
        log_not_found off;
        access_log off;
    }
    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }
    location / {
        try_files $uri $uri/ /index.php?$args;
    }
    location ~ \.php$ {
        #NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
        include fastcgi_params;
        fastcgi_intercept_errors on;
        fastcgi_pass php;
        #The following parameter can be also included in fastcgi_params file
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
    location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
        expires max;
        log_not_found off;
    }
}

phpにMySQLアクセス用パッケージを入れていなかった・・・

またphpの日本語処理に必要なやつもなかったので「yum install php-mysql php-mbstring」でインストールして、php-fpmを再起動

# yum install php-mysql php-mbstring
<略>
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package          Arch       Version              Repository               Size
================================================================================
Installing:
 php-mbstring     x86_64     7.4.7-1.0.1.el7      ol7_developer_php74     497 k
 php-mysqlnd      x86_64     7.4.7-1.0.1.el7      ol7_developer_php74     228 k
Installing for dependencies:
 php-pdo          x86_64     7.4.7-1.0.1.el7      ol7_developer_php74     121 k

Transaction Summary
================================================================================
Install  2 Packages (+1 Dependent package)

Total download size: 845 k
Installed size: 3.2 M
Is this ok [y/d/N]: y
<略>
# systemctl restart php-fpm.service
#

成功

wp-config.php については手動で/var/www/html/wordpress/wp-config.php に作成する必要があったが、それ以外は問題無く実行された。

また、Wordpress上のプラグインインストールや更新についても特に問題なく実行できた。


2020/06/30追記

WordPressのAMPプラグインを動かそうとしたら「dom」が有効にできない、と言われた。

これはphp-xmlに含まれるので「yum install php-xml」で追加したあと「systemctl restart php-fpm.service」を実行した。

ONTAP 9.5でsambaドメインに参加できない


samba 4.11.6で作ったActive DirectoryにONTAP 9.5を参加させようとするとエラーになる。

ONTAP API が失敗しました: Failed to create the Active Directory machine account "ファイルサーバ名". Reason: LDAP Error: Strong authentication is required Details: Error: Machine account creation procedure failed [ 136] Loaded the preliminary configuration. [ 215] Successfully connected to ip ADサーバIP, port 88 using TCP [ 284] Successfully connected to ip ADサーバIP, port 389 using TCP [ 308] Unable to connect to LDAP (Active Directory) service on ADサーバホスト名 (Error: Strong(er) authentication required) **[ 308] FAILURE: Unable to make a connection (LDAP (Active ** Directory):AD名), result: 7609 . (エラー:13001)

調べたところ、sambaのglobal設定で「ldap server require strong auth = no」を設定する、とのこと。

これを設定し、sambaを再起動したところ、参加できた。

Ubuntu 20.04でIPアドレスを設定する


なんか嘘の設定方法がはびこっているので正しい手法をメモ書き

まず、Ubuntu 20.04をIPアドレスをdhcp取得でインストールすると、「/etc/netplan/00-installer-config.yaml」に下記のような内容の設定ファイルを作成される。

# This is the network config written by 'subiquity'
network:
  ethernets:
    ens160:
      dhcp4: true
  version: 2

上記の「ens160」はNICのデバイス名なので使用するNICによって名称が変化する。

で、この /etc/netplan/00-installer-config.yaml とか /etc/netplan/50-cloud-init.yaml とか /etc/netplan/01-netcfg.yaml を変更する、という手順は「誤り」です。

正しい手法はUbuntuの公式ドキュメント「Network Configuration」の「Dynamic IP Address Assignment (DHCP Client)」と「Static IP Address Assignment」に記載されているように「/etc/netplan/99_config.yaml」というファイルを新規作成して、そこで設定します。

これは、netplanコマンドは/etc/netplan/にある数字で始まるファイルを00から順に読み込み99を一番最後に読み込むので、99_config.yamlで記載した内容で上書きされて設定される、という動作になっているためです。

Ubuntu公式サイト上では固定IPアドレス設定時に「dhcp4:false」を設定する、なんてことは書いてありません(2020/05/18時点)が、初期インストール時にdhcp取得を選択していると00-installer-config.yaml上では「dhcp4:true」が設定されているため、ens160に対してdhcpで取得したIPアドレスと固定IPアドレスの双方が割り当てられるという状況になってしまいます。

それを防ぐためには下記の様に「dhcp4:false」を設定した上で、固定IPアドレスの設定を入れる、ということが必要になります。

network:
    version: 2
    renderer: networkd
    ethernets:
        ens160:
            dhcp4: false
            addresses:
                - 172.17.44.240/16
            gateway4: 172.17.0.1
            nameservers:
                search: [adosakana.local]
                addresses: [172.17.44.49]

また、ホスト名については、「hostnamectl」コマンドを使用します。(追加で/etc/hostsのエントリ修正も必要です)

まず「hostnamectl」を実行して現在の値を確認します。

osakanataro@ubuntu:~$ hostnamectl
   Static hostname: ubuntu
         Icon name: computer-vm
           Chassis: vm
        Machine ID: adcd0e151d91412581407a94fc19a4c5
           Boot ID: 1ca98f3699d34707b58595e059708d0a
    Virtualization: vmware
  Operating System: Ubuntu 20.04 LTS
            Kernel: Linux 5.4.0-29-generic
      Architecture: x86-64
osakanataro@ubuntu:~$

ホスト名は「hostnamectl set-hostname 新しいホスト名」で設定します。

osakanataro@ubuntu:~$ sudo hostnamectl set-hostname ubuntu20
[sudo] password for osakanataro:
osakanataro@ubuntu:~$ hostnamectl
   Static hostname: ubuntu20
         Icon name: computer-vm
           Chassis: vm
        Machine ID: adcd0e151d91412581407a94fc19a4c5
           Boot ID: 1ca98f3699d34707b58595e059708d0a
    Virtualization: vmware
  Operating System: Ubuntu 20.04 LTS
            Kernel: Linux 5.4.0-29-generic
      Architecture: x86-64
osakanataro@ubuntu:~$

なお、hostnamectlだけだと/etc/hostsの127.0.1.1に記載されているホスト名が書き換わらないので、こちらは手動で変更します。

無償系アンチウイルスソフト 2020/04/14


Windows10だと標準のままでいっかぁ、という感じも強いですが、いまも生きてる無償系アンチウイルスソフトって何があるのかな、と探した結果です。

前回は2019/03/19付け調査でした。

AVAST!とAVG

2016年7月にAvastがAVGを買収(「無償ウイルス対策のAvastがAVGを買収へ。買収額は13億米ドル」)したのですが、2020年4月になってもプロダクトも会社も並行稼働しています。

Avast Free Antivirus」と「AVG Free

有名どころだから今回インストール実験はしていない。

COMODO

COMODOはプロダクトがよく分からない。

探すと「Comodo Free Antivirus 2020(free-cav)」「Comodo Antivirus for Windows 10 Free(cloud-antivirus)」「Comodo Cloud Antivirus(cloud-antivirus)」の3種類のページが出てくるが、「FREE ANTIVURS」のリンク先は「free-cav」と「cloud-antivurs」の2種類があるように見える。

COMODOのBest Free Antivirus Program (Updated List of 2020)というページでお薦めのフリーアンチウイルスを教えると言うページがあるのだが、冒頭のリンクはfree-cav、ページ半ばではcloud-antivirusと一貫性がなくほんとよく分からなかった。

実際にインストールして確認してみたところ、どれをインストールしても結局 Comodo Antivirusでした。→検証「Comodo AntiVirusをインストールしてみた
日本語UIなのはいいんだけど、パターンファイルが自動的にアップデートされなかったのが気にかかるところ。

Comodo Antivirus for Linux」が同じくFreeでもリリースされており、Debian/Ubuntu/Mint,RHEL/CentOS/Fedora,SuSEなどで使用できる。

ただ、2019年3月時点でサポートOSが「Ubuntu 12.04 / Red Hat Enterprise Linux Server 5.9, 6.3 / Fedora 17 / SUSE Linux Enterprise Server 11 / OpenSUSE Linux 12.1 / Debian 6.0 / CentOS 5.9, 6.2 / Mint 13 / CentOS 5.8, 6.2」と古めだったのだが、2020年4月になっても変わっておらず、お亡くなり気味な感じですね。

サポートメールシステムとして「Sendmail 8.14.4 / qmail 1.06 / Postfix 2.5.x or higher / Exim 4.x / Amavis 2.6.4」とあるが、メールサーバで使ってもよいのだろうか?

Avira

Avira Free Security」「Avira Free Antivirus」の2種類があるようにみえるが、インストールしてみるとどちらも「Avira Antivirus」だった。日本語UIあり→検証「Aviraをインストールしてみた

panda

クラウド型をうたう「panda antivirus

一時期日本の代理店があったようだけど2019年の段階でなくなっており、2020年になると日本語ページも消えてしまった。

インストールしてみたところ、日本語UIは用意されていなかった。→検証「Panda Free Antivirusをインストールしてみた

Rising Antivirus

日本ではウイルスキラーという名前で販売されたこともある商品。

ウイルスキラーは2013年1月に終了し、英語版のRising Antivirusも2013年9月に終了した。

中国版の「瑞星杀毒软件」は2020年も稼働中だが、無料版は無くなっている。

Immunet Protect

Immunet」は元々ClamAVを元に独自エンジンも搭載したものとして開発されたもの。ClamAVごと2011年にSourcefireという会社に買収。2014年にSourcefireがCiscoに買収されたため、現在はCisco傘下のプロダクトになっている。

gredアンチウイルスとして日本語版が公開されていたがこちらは2017年に提供は終了。

インストールしたところ日本語UIは無かった→検証「Immunetをインストールしてみた

adaware

adaware antivirus free

今回試していない。

Bitdefender

Bitdefender Antivirus Free Edition

Bitdefenderの日本語ページからはアクセスできない場所にあるようで、検索しないとたどり着けなかった。

インストールしてみたところ、ユーザ登録が必須だったので、それ以上進めていない→検証「Bitdefenterをインストールしてみた

eScan

Free eScan Anti-Virus Toolkit (MWAV)」常駐型ではない単なるウイルス検査のソフトウェア。

300MB弱のmwav.exeをダウンロードし、管理者権限で実行するとテンポラリに展開してから実行される。意外にも日本語でUIが表示された。


2020/06/14 追記

Kaspersky

2017年に登場した「Kaspersky Security Cloud – Free」、死んだと思ってたら、実はまだ生きていた模様。

Kasperskyの会員登録は必要となるようだ。

インストールした所、日本語UIは無かった→検証「Kaspersky Security Cloudをインストールしてみた