~ To be, or not to be, or to ask someone to be. ~ null-i.net |
Linux/CentOS Stream8でサーバ構築/OSのインストール@さくらのVPS | |
OSのインストール@さくらのVPS(2022-03-11) まず最初にバックアップ†バックアップ用のshellスクリプトを作りましょう。 #!/bin/sh -x #firewall-cmd --list-all > /tmp/now_fire # ※firewalldを起動後に crontab -l > /tmp/now_crontab BACK_UP_FILES=" #/tmp/now_fire /tmp/now_crontab `pwd`/$0 " tar zcvf backup_`date +%Y%m%d`.tgz $BACK_UP_FILES 2>&1 > /dev/nul #rm -f /tmp/now_fire rm -f /tmp/now_crontab この後の作業でバックアップを取りたいファイルやディレクトリが現れるたびに BACK_UP_FILES に行追加していきます。 さくらのVPSで再インストール†コンソールから再インストールします。
(ただVPSのサービスにログインして、OS再インストールを選ぶだけです) まだCentOS Stream9 ではなく 8にした理由(2022/03現在)†今回はStream8 を入れます。 CentOS Stream8 をインストール@さくらのVPS†以下、さくらのVPSのコンソールログイン後に、サーバを指定して
さくらのVPSが提供しているスタートアップスクリプトは利用しませんでした、が、これの内容をざっと見てみると最初に何を設定する必要があるのかが分かるので参考になります。 sshでログインして、ポート設定変更†再インストール後にsshログインします。 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 再インストールによって接続先のfingerprintが変わったことで、接続拒否されます。
TeraTermとかでログインする場合も警告ウィンドウが表示されるはずです。 $ ssh-keygen -R 接続先 (ポートも指定する場合は ssh-keygen -R '[接続先]:ポート番号')
※ちなみにrootのプロンプトといえば "#" ですが、ここでは "$" で表記します。 su - してからrootで実行するか sudo で実行するか読み替えてください。 $ vi /etc/default/useradd (以下を yesから noに設定) CREATE_MAIL_SPOOL=no ここでCREATE_MAIL_SPOOLをnoにしておかないと useraddする度にメール用のディレクトリも一緒に作成されてしまいます。 $ useradd ユーザ名 $ passwd ユーザ名 ここで新規ユーザを加えておかないと、この次の手順でrootログイン不許可にできません。 $ netstat -ta -bash: netstat: command not found (netstatが無かったので、ここでインストールしました) $ dnf install net-tools bind-utils netstatでTCPポート(-t)のぜんぶ(-a)を見て開いているポートがsshのみであることを確認しておきたかったのですが、そもそも netstatコマンドがありませんでした。なので net-toolsを入れました。 $ cp -pi /usr/lib/firewalld/services/ssh.xml /usr/lib/firewalld/services/my_ssh.xml $ vi /usr/lib/firewalld/services/my_ssh.xml (port=22を、変更予定のポート番号にする) $ systemctl start firewalld # firewallを起動 $ firewall-cmd --list-all # 状態を確認 (デフォルトで services: ssh が許可されているはず) $ firewall-cmd --add-service=my_ssh --zone=public --permanent # いま作ったmy_sshを有効化 $ firewall-cmd --reload # 設定を再読み込み $ firewall-cmd --list-all # 反映されていることを確認 (これでservices: my_ssh が増えているはず) これで最初にさくらのVPSのパケットフィルタに設定した内容と同じように2つのTCPポート(変更前後のsshポート)が許可された状態になりました。 $ vi /etc/ssh/sshd_config (以下の項目を変更する) Port 任意の番号 # 22 以外に変える PermitRootLogin no # rootログインは禁止、他ユーザからsuさせる。 Match User 任意のユーザ # 証明書ログイン用ユーザ PubkeyAuthentication yes # クライアント証明書でログインする PasswordAuthentication no # パスワード認証は受け付けない ここが結構重要です。理由は lastb(=ログイン失敗履歴を見るコマンド)を打てば分かります。 $ mkdir ~任意のユーザ/.ssh $ chmod 700 ~ユーザ/.ssh $ vi ~ユーザ/.ssh/authorized_keys # 公開鍵を書き込む $ chmod 600 ~ユーザ/.ssh/authorized_keys # 本人だけが読めるように変更 $ chown -R ユーザ:ユーザ ~ユーザ/.ssh # 本人だけが読めるように変更 一通り変更したらsshd を再起動して、別のユーザからログインできるか確認しましょう。 $ systemctl reload sshd (まだログアウトはしないこと! 他の端末からログインできることを先に確認) (別の端末から、変更後のポートでログインできることを確認 sshコマンドの場合は以下のように -p を使う。scp なら -P ) $ ssh -p 変更後ポート ユーザ@ホスト
$ firewall-cmd --remove-service=ssh --zone=public --permanent (他にも要らないポートが開いていたら remove-service しておきましょう) $ firewall-cmd --reload # 設定を再読み込み $ systemctl enable firewalld # 以降はOSのファイアウォールを使う ポートが整理出来たら、さくらのVPS側のパケットフィルタを使用中の場合は忘れずにOFFにします。 ホスト名変更†ホスト名を変更します。 $ hostnamectl set-hostname ホスト名 パッケージを最新化†$ dnf upgrade (すべて更新するので時間がかかります) 最新にして脆弱性を少しでも減らしておきましょう。 localeの変更†デフォルトのままでも良いんですが、vi とかで日本語を使うなら変更が必要です。 $ localectl # 現在の locale を表示する $ dnf install langpacks-ja # 日本語パッケージを追加 $ localectl set-locale LANG=ja_JP.utf8
EPELとRemiを入れる†そもそもEPELとRemiとは何か、については割愛します(検索 CentOS EPEL Remi)。 $ dnf install epel-release $ vi /etc/yum.repos.d/epel.repo (ひとまず enabled=0 に変更する。 使う時は「dnf --enablerepo=epel ~」のように使うオプション付きで) $ dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm $ vi /etc/yum.repos.d/remi-safe.repo (ひとまず enabled=0 に変更する。 使う時は「dnf --enablerepo=remi-safe ~」のように使うオプション付きで) epelは opendkim や fail2ban を入れるために必要になります。 サーバ証明書のインストールまたは復元†近年はもうWebの検索サイトとかプロバイダー各社とかもSSL/TLS接続が前提なんですよね。 $ dnf --enablerepo=epel install certbot すでに Let's Encryptをインストール済みの方はデフォルトだと /etc/letsencrypt/ に入るので、「tar zcvf letsenctypt_files.tgz /etc/letsencrypt」のように丸ごとバックアップを取ったり、tar zxvfで復元したりしましょう。
という流れ作業です。(または対話式では無く自動更新にすることもできます) $ certbot certonly --manual -d あなたのドメイン名.net -d *.あなたのドメイン名.net --preferred-challenges dns --server https://acme-v02.api.letsencrypt.org/directory ("*." 部分で www.null-i.net と null-i.net のように、サブドメイン全体を含む証明書を取得する) これで基本的な設定が終わりました。 と続きます。 |
|