※記事内に商品プロモーションを含む場合があります
このブログが動作さているさくらのVPSの
サーバOSをCentOS7からCentOS8に入れ替えました。
アップグレードの理由
CentOS7はサポート期限がまだ、4年ほどあるので
急いで入れ替える必要はありません。
最近は、SEOでサイト表示速度が重視され、より高速になると言われる、
http2を使うためアップグレードしようとしました。
CentOS7のyumでインストール可能なApacheが古く
http2非対応、CentOS8ならdnfでhttp2対応版がインストール可能です。
ソースからビルドすれば最新版をインストールできます。
しかし次入れ替える時は数年後ですっかり忘れているので、
yum(dnf)でインストールした方が管理しやすいです。
ちなみに、ソフトのインストールで使うyumは
CentOS8よりdnfになりました。
アップグレードに失敗
アップグレードなどを行う場合は、必ずバックアップを
取ってから行ってください。
CentOSの場合、基本的にはクリーンインストールする必要があります。
しかし、ネットにはSSHからのコマンドで、アップグレード出来た
という記事もあり試してみました。
で、見事に失敗。
サイトはブラウザ上で接続拒否、Firewalldは起動すらしなくなりました。
サーバOS入れ替えの手順
![CentOSの入れ替えを1日でやった時の手順をまとめてみた](https://b.eax.jp/wp-content/upLoads/2020/07/computer_data_center.png)
まず、サイト上で必要なデータ、画像、データベースのダンプファイル
その他必要なファイルはtarでまとめて、バックアップします。
また、メールサーバやWebサーバの設定ファイルも必要なら
バックアップしておきます。
大きく変わって無ければ、コピペで設定が終わります。
バックアップしないと、フォーマットからやり直すので
データは消えます。
OS再インストール
さくらのVPS管理画面よりOS再インストールを行います
再インストールを行う前に、必要なデータがバックアップ済か確認します。
再インストールを行いますが、しばらくはコピペも使えず
使いずらいコンソール上から作業します。
SSH設定・ポート変更
SSHのポートを22番から変更します。
さくらのVPSだとパケットフィルター機能があるので新規契約の場合
注意が必要です。
SSHのポート番号を22番から30000~65000番の好きな番号に変更します。
/etc/ssh/sshd_configでportを編集し、firewalldでポートを通します。
ポート番号を変える理由
さくらのVPSは、悪い人に狙われていることもあり
パケットフィルター機能が設定されているのでしょう。
悪い人たちは、多くのサーバの中から22番ポートをスキャンして
使えそうなセキュリティの緩いサーバを探しています。
22番から、他の番号に変更する事で、悪い人たちに見つかる可能性
を下げる事ができます。
ただし、時間を掛けて1から65535までスキャンすれば見つけることは可能なので
他の対策もしっかりしておく事が大事。
- rootログイン禁止
- 公開鍵認証
この2つを設定しておけば、セキュリティ的にも強化されます。
SSHでログインし、バックアップファイル転送
コンソールを閉じ、TeraTermでアクセスします。
TeraTermだとSSH SCPがあるので、ファイル転送に便利です。
ファイル転送し、適当な場所に展開します。
postfixインストール・設定・起動
私の環境では、メールをすべてgmailに転送しているので
メールサーバを再構築しないと、メールによる認証などが出来ません。
インストールはdnfで行い、設定はほぼコピペで終わりました。
設定完了後に不正リレーチェック
不正リレーは、自分の管轄外のメールを中継してしまうことで
迷惑メールなどの悪事の片棒を担がされてしまいます。
相手や被害によっては、損害賠償請求を起こされることもあるので
必ず確認します。
方法は、SMTPプロトコルを手動送信します。
一般的なプロバイダだとOP25Bが効いて25番ポートが使えません。
サーバのSSHから、telnetを使って、25番ポートにアクセスします。
telnet localhost 25
接続出来たら、以下のコマンドを入力します。
HELO test.hogehoge.com
MAIL FROM: <送信元>
RCPT TO: <送り先>
DATA
<送信内容 日本語不可>
<改行 CR&LF>
.
<改行 CR&LF>
QUIT
以上で終了です。
補足しますが<改行 CR&LF>と<改行 CR&LF>の間にはドットが入ってます。
試すアドレスは3つ
- 存在する自ドメインのメールアドレス
- 自ドメインだけど存在しないメールアドレス
- 存在するけど自ドメインとは関係の無いメールアドレス
関係の無いアドレスで、もし、通ってしまっても
DATAで本文を送る前にQUITで終了すればメールは送信されません。
RCPT TOを送った時に関係ないメールアドレスで
Relay access denied
と出て弾かれれば正常。
自分のドメイン内だけど存在しないアドレスで
Recipient address rejected: User unknown in local recipient table
と出て弾かれれば正常です。
もし弾かれない場合は、不正リレー状態となっているので
即刻サーバの設定変更します。
出来ない場合は、postfixを落とすか、ポートを塞ぎます。
let’s encrypt インストール、設定
apacheの起動時にSSL証明書が無いとエラーとなって起動できないので
先にlet’s encryptを設定します。
認証方法など、いろいろあるので詳しい方法は割愛します。
ワイルド証明書は1つの証明書を複数のサブドメインで使えて便利ですが
ネームサーバで_acme-challengeのTXTレコードを更新時も
書き換える必要があります。
ネームサーバによっては、出来るかもしれませんが
私の環境で自動化が難しいです。
apacheインストール・設定
SSL証明書が入手出来たらApachをインストールします。
インストールはdnfで行います。
設定は元々のファイルをコピーし、ある程度完了しました。
起動しない場合は、sudo systemctl status httpd
などで状況を確認出来ます。
起動後、このブログを表示したら、
前サーバのキャシュが残っていたらしく普通に表示されました。
ログインしようとすると、Service Unavailableと表示されます。
これは元々phpがphp-fpmへのプロキシ設定となっているためです。
php(php-fpm)インストール
phpもdnfでインストールします。
php-fpmも忘れずにインストールします。
php-fpmはApacheとは別サービスで動作するので
sudo systemctl start php-fpm
sudo systemctl enablephp-fpm
で起動し、システム起動時に起動する様にします。
これでログインしようとすると、データベース接続確立エラー
と表示されます。
phpが動作したので、OKですがWordpressを動かすには
もう1ステップです。
mariaDBインストール、dbレストア
mariaDBをdnfでインストールし
権限有のユーザー作って、データベース作って
この設定を、wp-config.phpに反映させます。
以下のコマンドでファイルからデータベースに
レストアします。
mysql -u ユーザー名 -p パスワード DB名 < ファイル
これでmariaDBを起動後、WordPressにもアクセス出来ます
/home消し、root拡張
設定が一段落したので確認するとルートが50GB。
/homeに150GB近く取られていたのでルートに全振りします。
/homeの中にあるファイルを適当な場所にバックアップします。
アンマウントが出来なかったので/etc/fstabから/homeを消し再起動します。
すると、/homeが消えているのでルート上にhomeディレクトリを作り
バックアップしていたファイルを元に戻します。
そのままだと、150GB近い容量が無駄になるので
ルートを拡張します。
拡張には、 xfs_growfsコマンドを使います。
Selinuxは無効化
本当は有効化し、システムの不正アクセスなどを防ぐ
目的で使う予定でた。
しかし、CPU使用率が地味に高く、setroubleshootdが高負荷なため、
しかたなくselinuxを無効化しました。
![selinuxを無効化前後のロードアベレージ](https://b.eax.jp/wp-content/upLoads/2020/07/fuka.png)
selinuxが有効だと、時々跳ね上がる事がありますが
無効化後は安定しています。
海外のサイトを見ても解決策は無さそうなので
しばらくは無効の状態で使います。
あとがき
CentOS8 実践ガイド [システム管理編] impress top gearシリーズ
この後に、strongswan xl2tpdでVPNサーバを構築し
FTPサーバもインストールしました。
FTPは私以外が使う事が無いため、ポート開放せずに
VPN経由でアクセス出来る様にしました。
Webminも設定確認・変更に便利ですが
rootでログインする必要があり、セキュリティを強くする必要があります。
Webminの2段階認証を設定すれば、パスワード以外に
数字6文字の入力が必要です。
数字は設定したスマホのアプリで確認出来ますし
30秒ごとに変わるので総当り攻撃が出来ません。
ただ、perlモジュールAuthen::OATHのインストールに難儀しましたが
Webminからインストールできました。
追記(2023年8月)
9年は使えると思っていたCentOS8、紆余曲折あり約3年しか
使えませんでした。
【関連】VPSのサーバOSをCentOS8からUbuntuに移行
現在はUbuntuを使っています。