OpenBSDs HTTPDを使用してOpenBSD 6.6でWordPressを実行する

前書き

OpenBSDのセキュリティに対する好意を考えると、特にWordPressとPHPがスクリプトキディのターゲットを移動する傾向があるため、WordPress Webサイトを強化するだけで意味があります。OpenBSDのhttpdは主に静的ページを提供するように設計されているため、POST操作はfastcgiおよびslowcgiプロセス用に予約されています。これにより、悪意のあるアクターがWebサーバーのプロセスを破壊し、サーバーにアクセスすることが困難になります。POST操作はfastcgiプロセスにパイプされ、外部インタープリターを使用します。この記事では、WordPressサイトの設定だけでなく、いくつかの基本的なメンテナンス手法、およびサイトとそのデータベースのバックアップと復元の方法について説明します。example.comドメインとして表示される場所はどこでも、ドメインに置き換えてください。

初期構成

まだ行っていない場合は、/etc/doas.confファイルを作成する必要があります。doasコマンドはOpenBSDのsudoの簡単な置き換えです。便宜上、doasを使用するときにパスワードを再入力する必要がないように、nopassオプションを追加しました。これを望まない場合は、単にnopassを省略してください。

su -
echo "permit nopass keepenv :wheel" > /etc/doas.conf

OpenBSDがどのように展開用にパッケージ化されているかによって、パッケージマネージャーにリポジトリが構成されていない場合があります。OpenBSD公式リポジトリを設定するには、/etc/installurlファイルを作成する必要があります。

doas su
echo "https://cdn.openbsd.org/pub/OpenBSD" > /etc/installurl
exit

次に、画像や暗号化などを処理するためにWordPressが必要とするPHPといくつかの追加モジュールを追加する必要があります。プロンプトが表示されたら、PHPの最新パッケージのインストールを選択します。あなたがしなければならない一つのことは、モジュールのiniファイルをサンプルディレクトリからメインのディレクトリにコピーすることです。これは、追加のPHPモジュールを有効にするために実行する必要があります。

doas pkg_add -r mariadb-client mariadb-server php php-curl php-mysqli php-zip pecl73-mcrypt pecl73-imagick wget
doas cp /etc/php-7.3.sample/* /etc/php-7.3/.

Let's Encrypt証明書を取得する

今日の世界では、WebサイトはSSLを介して提供されるか、検索エンジンによってダウンランクされている必要があります。幸い、OpenBSDにはacme-clientという素晴らしいアプリケーションがあります。acme-clientは自動的に新しい秘密鍵を生成し、新しい完全に有効な証明書を要求します。acme-clientは、Webサーバーを配置することに依存しているため、簡単なデフォルトサーバー定義を作成する必要があります。

お気に入りのエディターを使用して、を作成します/etc/httpd.conf。他のサーバー定義は後でファイルに追加します。今のところ、acme-clientが正しく機能するためにはこれで十分です。

prefork 5
types { include "/usr/share/misc/mime.types" }

server "default" {
    listen on egress port 80
    root "/htdocs"
    directory index "index.html"

    location "/.well-known/acme-challenge/*" {
        request strip 2
        root "/acme"
    }
}

また、お気に入りのエディタを使用して、を作成します/etc/acme-client.conf

authority letsencrypt {
    api url "https://acme-v02.api.letsencrypt.org/directory"
    account key "/etc/acme/letsencrypt-privkey.pem"
}

authority letsencrypt-staging {
    api url "https://acme-staging-v02.api.letsencrypt.org/directory"
    account key "/etc/acme/letsencrypt-staging-privkey.pem"
}

domain example.com {
    alternative names { www.example.com }
    domain key "/etc/ssl/private/example.com.key"
    domain full chain certificate "/etc/ssl/example.com.crt"
    sign with letsencrypt
}

次に、httpdを有効にして起動する必要があります。これを実行したら、acme-clientを実行して、新しい新しい証明書が取得されるのを待ちます。これを実行した後、7日ごとに新しいジョブを自動的に要求するcronジョブを追加するので、有効期���切れを心配する必要はありません。

doas rcctl enable httpd
doas rcctl start httpd
doas acme-client -v example.com

次に、cronジョブを作成します。最後のエントリの下にこの行を追加します。この場合、acme-clientに毎週土曜日の午前1時に新しい証明書を要求するように指示しています。

doas crontab -e
0       1       *       *       6       acme-client -F example.com && rcctl reload httpd

WordPress用のHTTPDの構成

WordPress用にhttpdをセットアップする時が来ました。Webサイトの定義を直接に/etc/httpd.conf配置するので/etc/httpd.conf.example.comはなく、それをと呼ばれる別のファイルに配置し、メイン構成ファイルに含めます。一般に、2つを分離し、サイト全体の定義をメインの構成ファイルに保持し、ドメイン固有の設定を別の構成ファイルに保持することをお勧めします。

/etc/httpd.confファイルの最後に次の行を追加します。

include "/etc/httpd.conf.example.com"

次に、お気に入りのエディターを使用して、を作成します/etc/httpd.conf.example.com。便宜上、ドメインごとに個別のログファイルを作成します。これにより、サイトの潜在的な問題を追跡する際の作業が容易になります。

server "example.com" {
    listen on egress port 80
    alias "www.example.com"

    # Automatically redirect to SSL
    block return 302 "https://$SERVER_NAME$REQUEST_URI"

    log {
            access "access-example.com"
            error "error-example.com"
    }
}

server "example.com" {
    listen on egress tls port 443
    alias "www.example.com"
    root "/htdocs/wordpress"
    directory index "index.php"

    log {
            access "access-example.com"
            error "error-example.com"
    }
    tcp { nodelay, backlog 10 }

    tls {
            certificate "/etc/ssl/example.com.crt"
            key "/etc/ssl/private/example.com.key"
    }
    hsts {
            # max-age value is the number of seconds in 1 year
            max-age 31556952
            preload
            subdomains
    }

    location "/.well-known/acme-challenge/*" {
            root "/acme"
            request strip 2
    }
    location "/posts/*" {
            fastcgi {
                    param SCRIPT_FILENAME \
                            "/htdocs/wordpress/index.php"
                    socket "/run/php-fpm.sock"
            }
    }
    location "/page/*" {
            fastcgi {
                    param SCRIPT_FILENAME \
                            "/htdocs/wordpress/index.php"
                    socket "/run/php-fpm.sock"
            }
    }
    location "/feed/*" {
            fastcgi {
                    param SCRIPT_FILENAME \
                            "/htdocs/wordpress/index.php"
                    socket "/run/php-fpm.sock"
            }
    }
    location "/comments/feed/*" {
            fastcgi {
                    param SCRIPT_FILENAME \
                            "htdocs/wordpress/index.php"
                    socket "/run/php-fpm.sock"
            }
    }
     location "/wp-json/*" {
            fastcgi {
                    param SCRIPT_FILENAME \
                            "htdocs/wordpress/index.php"
                    socket "/run/php-fpm.sock"
            }
    }
    location "/wp-login.php*" {
            authenticate "WordPress" with "/htdocs/htpasswd"
            fastcgi socket "/run/php-fpm.sock"
    }
    location "*.php*" {
            fastcgi socket "/run/php-fpm.sock"
    }
}

セキュリティを強化するために、WordPress管理サイトにログインするときに、ユーザー名とパスワードの追加プロンプトを実装します。スクリプトキディはWordPressのログインを繰り返しブルートフォースで試したいので、Webサーバーレベルで追加のログインを作成します。通常、WordPressが401 Unauthorizedエラーをスローする前に、それらは約5つの推測を取得します。

doas su
cd /var/www/htdocs
doas htpasswd htpasswd <user>
doas chown www:www htpasswd
doas chmod 0640 htpasswd
doas rcctl reload httpd

PHPとPHP-FPMの準備と構成

WordPressのインストールでメールを送信できるように、phpを変更する必要があります。WordPressと一部のプラグインは、アップグレード、アラート、変更を通知するメールを送信する機能に依存しています。メールを送信できないと、WordPressの特定の機能が動作しなくなる可能性があります。httpdはchroot環境で実行されるため、phpにメールの送信方法を通知する必要があります。さらに、php-fpmに対していくつかのパフォーマンス週間を行う必要があります。

sendmail_path行を探して、/etc/php-7.3.ini次の変更を加えます。

; For Unix only.  You may supply arguments as well (default: "sendmail -t -i").
; sendmail_path =
sendmail_path = /bin/femail -t -i

で次の行を探し、次の/etc/php-fpm.confように変更します。

pm.start_servers = 5
pm.min_spare_servers = 1
pm.max_spare_servers = 6

次のステップは、php-fpmを有効にして起動することです。

doas rcctl enable php73_fpm
doas rcctl start php73_fpm

MariaDBの準備と構成

MariaDBは、MySQLのドロップイン置換フォークです。WordPressの初期設定とデータベース準備作業を行う必要があります。

MariaDBを効果的に使用する前に、mysqlデーモンがデフォルトより多くのリソースを使用できるようにする必要があります。これを行うには、/etc/login.confこのエントリを下部に追加して、に次の変更を加えます。

mysqld:\
    :openfiles-cur=1024:\
    :openfiles-max=2048:\
    :tc=daemon:

MariaDB設定ファイルにいくつか変更を加える必要があります/etc/my.cnf。MySQLクライアントとサーバーがTCPではなくUNIXドメインソケットを介して通信するようにすることで、サーバーのメモリ使用量を低く抑えることができます。以下に提案されているすべての変更を行う必要はありません。変更する2つの重要なものは、socket行と行をコメント化することbind-addressです。これにより、ソケットが/var/wwwchroot環境内に移動し、WordPressがデータベースに接続できるようになります。このbind-address行をコメント化することで、MariaDBがTCPポートで待機しないようにします。

[client-server]
socket=/var/www/var/run/mysql/mysql.sock
#port=3306

# This will be passed to all MariaDB clients
[client]
#password=my_password

# The MariaDB server
[mysqld]
# To listen to all IPv4 network addresses, use "bind-address = 0.0.0.0"
#bind-address=127.0.0.1
# Directory where you want to put your data
#data=/var/mysql
# This is the prefix name to be used for all log, error and replication files
#log-basename=mysqld
# Logging
#log-bin=/var/mysql/mariadb-bin
#max_binlog_size=100M
#binlog_format=row
#expire_logs_days = 7
#general-log
#slow_query_log
query_cache_type = 1
query_cache_limit = 1M
query_cache_size = 16M

次に、MariaDBインストールバイナリを実行し、MariaDBを有効にして起動する必要があります。この手順では、ルートパスワードを設定し、オプションでテストデータベースを削除します。安全なインストール段階ですべての提案に従うことをお勧めします。

doas mysql_install_db
doas rcctl enable mysqld
doas rcctl start mysqld
doas mysql_secure_installation

WordPressデータベースとデータベースユーザーを作成します。<wp_user>選択したデータベースのユーザー名と、選択<password>した複雑なパスワードに置き換えることを忘れないでください。

mysql -u root -p 
CREATE DATABASE wordpress;
GRANT ALL PRIVILEGES ON wordpress.* TO '<wp_user>'@'localhost' IDENTIFIED BY '<password>';
FLUSH PRIVILEGES;
EXIT

WordPressのインストールと構成

WordPressは、箱から出してすぐに動作するため、かなり長い間、公式のOpenBSDポートを備えていませんでした。WordPressインストールフォルダーをダウンロード、抽出、移動します。

cd /tmp
wget https://wordpress.org/latest.tar.gz
tar xvfz latest.tar.gz
doas mv wordpress /var/www/htdocs/.
doas chown -R www:www /var/www/htdocs/wordpress
doas chmod 0755 /var/www/htdocs/wordpress
cd /var/www/htdocs/wordpress/
find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;

コピー/etc/resolv.conf/etc/hostsて、という名前の作成するディレクトリにコピーする必要があります/var/www/etc。これは、WordPressが市場に成功するためです。WordPress管理サイトからプラグインとテーマをダウンロードするには、これが必要です。Jet Packプラグインが適切に機能することも重要です。

doas mkdir /var/www/etc
doas cp /etc/hosts /var/www/etc/.
doas cp /etc/resolv.conf /var/www/etc/.

ここから、Webサーバー定義で指定したURL経由でhttpsを使用してWordPress Webサイトにアクセスします。すべてが正常に機能している場合は、WordPressインストールウィザードが表示されます。データベースサーバーを指定するオプションが表示されたら、次を使用する必要がありますlocalhost:/var/run/mysql/mysql.sock

WordPressがインストールされたら、パーマリンクを設定して、SEOフレンドリーに見えるようにします。WordPress管理画面からにアクセスしSettings -> Permalinksます。カスタム構造をクリックして、と入力し/posts/%postname%ます。この変更を行った後、[変更を保存]ボタンをクリックします。これで見栄えの良いリンクができました。たとえば、パーマリンクは次のようになります。https://example.com/posts/example-blog-post

ここからは、基本的なウェブサイトの準備が整います。Jet PackやWP-Super Cacheなどのプラグインをインストールしていることを確認してください。WP-Super Cacheプラグインは、Webページをキャッシュし、一定のデータベース参照を排除することにより、Webサイトの高速化に役立ちます。JetPackは、優れた視聴統計を提供します。

WordPressウェブサイトとデータベースのバックアップ

言うまでもなく、Webサイトとデータベースのバックアップは非常に重要です。ありがたいことに、これは比較的簡単なことです。両方をホームディレクトリにバックアップすると、scp経由で別の場所にコピーできます。Vultrコントロールパネルからスナップショットを作成することもできます。両方を実行することをお勧めします。

cd /var/www/htdocs
tar cvfz wordpress.tgz wordpress/
cp wordpress.tgz /home/user
mysqldump -u root -p wordpress > wordpress.sql && gzip wordpress.sql

WordPressウェブサイトの復元

データベースが破損し、復元が必要な場合は、次の手順を実行します。

gunzip wordpress.sql.gz
mysql -u root -p wordpress
DROP USER '<user>'@'localhost';
DROP DATABASE wordpress;
CREATE DATABASE wordpress;
GRANT ALL PRIVILEGES ON wordpress.* TO '<wp_user>'@'localhost' IDENTIFIED BY '<password>';
FLUSH PRIVILEGES;
EXIT
mysql -u root -p wordpress < wordpress.sql

WordPressスクリプトファイルに変更を加えて問題が発生した場合は、管理コントロールパネルからいつでもWordPressを再インストールできます。Updatesセクションを探して、リンクをクリックしてください。というラベルの付いたボタンを探しますRe-install Now。これにより、少なくとも問題のある部分は修正されますが、構成のほとんどはそのまま維持されます。

データベースの状態は良好であるが、誤ってファイルを編集し、WordPress管理コンソールにアクセスできないほどに壊れてしまった場合は、次のようにします。

rm /var/www/htdocs/wordpress
cp /home/user/wordpress.tgz /tmp
tar xvfz wordpress.tgz
mv wordpress /var/www/htdocs/.
chown -R www:www /var/www/htdocs/wordpress
cd /var/www/htdocs/wordpress
find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;


Leave a Comment

CentOS 7にApacheをインストールする方法

CentOS 7にApacheをインストールする方法

CentOS 7サーバーにApache 2.4をインストールする方法を説明します。安定したウェブサーバーを構築するための前提条件と手順を解説します。

FreeBSD 11.1にBlacklistdをインストールする方法

FreeBSD 11.1にBlacklistdをインストールする方法

FreeBSD 11.1におけるBlacklistdのインストール方法について詳しく解説します。この方法を通じて、強力なセキュリティ対策を実装できます。

Windows Serverのサーバーマネージャーを使用した複数サーバーの管理

Windows Serverのサーバーマネージャーを使用した複数サーバーの管理

サーバーマネージャーを使用して、Windows Serverの管理が向上します。セキュリティリスクを軽減し、効率的な管理を実現します。

CentOS 7にSeafileサーバーをインストールする方法

CentOS 7にSeafileサーバーをインストールする方法

CentOS 7にSeafileサーバーをインストールする方法。Seafile(コミュニティバージョン)は、ownCloudに似た無料のオープンソースファイル同期および共有ソリューションです。

DebianでSnortを設定する方法

DebianでSnortを設定する方法

Snortは無料のネットワーク侵入検知システムです。最新の方法で、SnortをDebianにインストールし、設定する手順を紹介します。ネットワークのセキュリティを強化しましょう。

CentOS 7にGraylogサーバーをインストールする方法

CentOS 7にGraylogサーバーをインストールする方法

CentOS 7にGraylogサーバーをインストールし、ログ管理を行う方法を学びます。

WindowsでhMailServerを使用してメールサーバーを構築する

WindowsでhMailServerを使用してメールサーバーを構築する

WindowsサーバーでWebサイトを実行している場合、電子メールも受信できるようにするためにhMailServerを使用する方法を解説します。

Ubuntu 19.04にFiveMサーバーをインストールする方法

Ubuntu 19.04にFiveMサーバーをインストールする方法

FiveMサーバーをUbuntu 19.04にインストールするための詳細なガイド。必要条件からインストール、起動、トラブルシューティングまで、すべてのステップを含みます。

WsgiDAVを使用してDebian 10にWebDAVをデプロイする

WsgiDAVを使用してDebian 10にWebDAVをデプロイする

Debian 10にWebDAVをデプロイする方法を学び、WsgiDAVとSSL証明書で安全な接続を実現しましょう。

ヘルスケア2021における人工知能の影響

ヘルスケア2021における人工知能の影響

ヘルスケアにおけるAIは、過去数十年から大きな飛躍を遂げました。したがって、ヘルスケアにおけるAIの未来は、日々成長を続けています。