CentOSの入れ替えを1日でやった時の手順をまとめてみた

このブログが動作さているさくらの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日でやった時の手順をまとめてみた

まず、サイト上で必要なデータ、画像、データベースのダンプファイル
その他必要なファイルは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を無効化前後のロードアベレージ

selinuxが有効だと、時々跳ね上がる事がありますが
無効化後は安定しています。

海外のサイトを見ても解決策は無さそうなので
しばらくは無効の状態で使います。

あとがき

CentOS8 実践ガイド [システム管理編] impress top gearシリーズ

CentOS8 実践ガイド [システム管理編] impress top gearシリーズ

古賀政純
3,564円(07/26 17:38時点)
発売日: 2020/03/13
Amazonの情報を掲載しています

この後に、strongswan xl2tpdでVPNサーバを構築し
FTPサーバもインストールしました。

FTPは私以外が使う事が無いため、ポート開放せずに
VPN経由でアクセス出来る様にしました。

Webminも設定確認・変更に便利ですが
rootでログインする必要があり、セキュリティを強くする必要があります。

Webminの2段階認証を設定すれば、パスワード以外に
数字6文字の入力が必要です。

数字は設定したスマホのアプリで確認出来ますし
30秒ごとに変わるので総当り攻撃が出来ません。

ただ、perlモジュールAuthen::OATHのインストールに難儀しましたが
Webminからインストールできました。