VPS

Linuxサーバーを立ち上げた後の一般的な設定

最終更新日: 2024/05/03

サーバーへのログイン

コントロールパネルで作成されたサーバーのIPアドレスを確認。
そのIPアドレスをコピー&貼り付けできるようにしておく。

サーバーへの接続はssh(secure shell)というコマンドを通じて行う。

ssh接続キーの作成

sshが使えるターミナルを立ち上げます。

Macの場合
Finder > アプリケーション > ユーティリティ > ターミナル
でターミナル起動

Windowsの場合には10からLinux環境の立ち上げが容易になったのでそれをググってインストールして下さい。

ssh-keygen

と打って、何か聞かれても只管リターン連打。

そうすると
cat ~/.ssh/id_rsa.pub
で表示される中身が、sshキーの中身として、VPSのインスタンスを作成する時に、保存しておくべき接続キー情報になる
(sshキー接続できるような状態から始まるVPSの場合 / 「インスタンスを作る前に登録」しておかないといけない)


sshで接続

sshがターミナルから利用可能な場合は

sshキーの登録をしてある場合は、

ssh -l root $IPアドレス

または

ssh -l root $IPアドレス -i $キーファイルの場所(...pemまたはid_rsa.pub等)

とターミナルから打つ事でログイン。

なお
・sshキー事前登録型のVPSでない場合には、そこからパスワードの入力をして接続する事になる(さくらVPS等)
・WebArenaはユーザーがrootではなくUbuntuならubuntu、CentOSの場合は従来のWebArenaならrootだがIndigoはcentos、という違いがあるので注意

SSHログインについては
https://www.conoha.jp/guide/guide.php?g=6などを参照。

因みに

Permissions 0644 for '/Users/hajimekurita/keys/md/20190224164923.pem' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "/Users/hajimekurita/keys/md/20190224164923.pem": bad permissions
root@118.27.3.113: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

みたいなエラーが返ってきたら

chmod 600 ~/keys/md/20190224164923.pem 

と打って、自分だけが読めるファイルの権限にsshキーのファイル権限を変更する。


サーバーにログインした時表示されるホスト名を適切なものに修正

そのサーバーの用途に応じた名前を付ける。
この時、
vpshikaku.com
の様に、外部からアクセスするURLと同じ名前にしない事。
そうすると、httpsアクセスした時に、証明書エラーの原因になりかねないので。

HOSTNAME=ホスト名;
hostnamectl set-hostname $HOSTNAME;

一回ログアウトして、またログインして、ホストネームが変わっている事を確認する。


Swap領域の設定

Swap領域が無ければ(自分の見た環境ではなかった)、Swap領域を作りましょう。

top

と打った時に、

KiB Swap:        0 total,        0 free,        0 used...

となっていれば、SWAP領域が無いという事になります。
SWAP領域がないと、メモリーを使い切るとプログラムが落ちます。

2019/01時点ではDigital Ocean、Amazon Lightsail等がデフォルト状態だとSWAP領域が用意されていません。

サーバーが落ちる多い原因はメモリ不足からのスワップ不足なので、十分な量をとっておくとより安定します。

なので、仮にswapfileがあったとしても、その量が少なければ、別途より多い容量のswapファイルを作って、そちらにマウントし直す、ということも考えられるでしょう。

swapファイルの作り方は以下の通り。

例えばrootアカウントで

dd if=/dev/zero of=/swapfile bs=1M count=4096
chmod 600 /swapfile;
mkswap /swapfile;
swapon /swapfile;

とすると、4GB分、スワップ領域を作ることができます。

top

コマンドを打って確認して下さい。

ただ、これだけだと、サーバーを再起動した時にSWAP領域がマウントされないので

echo "/swapfile swap swap defaults 0 0" >> /etc/fstab;

と打って、スワップ領域が再起動時に自動的にマウントされるようにします。

それから

mount -a;

でswapをマウント。
なお、先にすでにswapfileをマウントしている場合には、サーバーの再起動が必要です。
再起動した後、以前使っていたswapfileは使わなくなるので、削除しておきます。

top

と打って、swap領域が稼働している事を確認します。


ソフトウェアのアップデート

AlmaLinux / CentOS8以降 / Redhat Linux8以降 / RockyLinuxの場合

dnf update;

CentOS7以下系の場合

yum update;	 

Ubuntu系の場合

apt-get update;	 

もしもこのアップデートリストにkernelがあったら、OSのリブートが反映には必要なので

shutdown -r now;

で再起動して反映。


サーバーの時間がずれないように調整する

CentOS 8からはntpではなくchronyを使います

dnf -y install chrony;
systemctl enable chronyd.service;
systemctl start chronyd.service;

時間を日本時間に合わせる

timedatectl set-timezone Asia/Tokyo;
date;

作業ユーザーの用意

rootのユーザーを使うのは、セキュリティ上の問題があるので、root権限を持てるユーザーを作る。

ユーザー名を仮に example とした場合

USER=example;
useradd $USER;
passwd $USER;
usermod -aG wheel $USER

で、wheelのグループにユーザーを追加

記述例

wheel:x:10:$USERID1,$USERID2

パスワード無しでsudoコマンド(root権限)の実行を可能にするには

visudo

して

# %wheel        ALL=(ALL)       NOPASSWD: ALL

の行の#を削ってコメントアウト。

あと、このユーザーにssh loginできるように、まずそのユーザーにsudoでなり

sudo - $USER

それからsshでリモートログインできるようにauthorized_keysを編集する

mkdir ~/.ssh/
chmod 700 ~/.ssh/;
touch ~/.ssh/authorized_keys;
chmod 600 ~/.ssh/authorized_keys;

それから

vi ~/.ssh/authorized_keys;

で、接続するPC・サーバののid_rsa.pubの中身をコピーする。

要注意作業
この後、別のターミナルを立ち上げて、新たに追加したユーザーでサーバーにsshログインして、sudo su – でrootユーザーになれる事を確認する。
その確認をせずに、以下のrootでの外部からのsshログインを遮断してしまうと、入れなくなる悲劇が発生するので注意。

それが出来たら、セキュリティ対策として、rootではsshログインは出来ないようにする。

vi /etc/ssh/sshd_config

して

PermitRootLogin no

の行を#無しで作る

configの内容のテスト

/usr/sbin/sshd -t

をして、問題なければSSHサーバーを再起動

service sshd restart

Firewallによるセキュリティ制御

状態の確認

firewall-cmd --list-all --permanent;

そうすると、例えば

public
  target: default
  icmp-block-inversion: no
  interfaces:
  sources:
  services: cockpit dhcpv6-client ssh
  ports:
  protocols:
  forward: yes
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

と表示される。

上記の内
cockpit
は要らないので、

firewall-cmd --remove-service=cockpit --zone=public --permanent;
firewall-cmd --reload;
firewall-cmd --list-all --permanent;

cockpitが消えた事を上記の結果で確認できる。

public
  target: default
  icmp-block-inversion: no
  interfaces:
  sources:
  services: dhcpv6-client ssh
  ports:
  protocols:
  forward: yes
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

Webサーバーの場合、HTTPポートとHTTPSのポートを全てに公開

firewall-cmd --zone=public --add-service=http --permanent;
firewall-cmd --zone=public --add-service=https --permanent;

特定のIPからのアクセスを全て拒絶

firewall-cmd --zone=drop --permanent --add-source=154.54.249.205;
firewall-cmd --zone=drop --permanent --add-source=153.120.128.197/24
firewall-cmd --zone=drop --permanent --add-source=157.90.0.0/16;

特定のIPからのアクセスに絞れるのなら、一旦全てのSSHアクセスを禁止して、特定のIPアドレスからのアクセスのみ許可する
下の許可してるIPアドレスは例なので、自分のIPアドレスを指定して下さい。

# 全てのsshアクセスを禁止
firewall-cmd --remove-service=ssh --zone=public --permanent;

# 特定のIPアドレスからのsshアクセスのみ禁止
firewall-cmd --zone=public --remove-service=ssh --add-rich-rule='rule family="ipv4" source address="54.89.84.247" --permanent;

# 例: 特定のIPアドレス(94.237.68.74)からのsshアクセスのみ許可
firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="94.237.68.74" service name="ssh" accept';

# 全てのポートを許可するのなら
# 自分用のIP例
# lsearch1
firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="172.105.193.5" accept';

# lcrawler1;
firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="172.105.237.55" accept';

# new-anayzer1
firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="108.61.180.88" accept';
firewall-cmd --list-all --permanent;

と打って確認して問題なければ

firewall-cmd --reload

と打って反映

最後にまた

firewall-cmd --list-all --permanent;

firewall-cmd --list-all-zones;

と打って問題がない事を確認


(オプション) 別サーバーを踏み台としてsshログイン

sshはsshの鍵が一致しないとログインされる事はないとはいえ、出来ればssh接続を試みれるIPアドレスを制限したい。

その場合、自分が管理するサーバー群では、上記firewall-cmdで許可しあったりするが、不特定のリモート環境で仕事をする場合、自分のIPアドレスが定まらないので、一台(念の為には2台)は、外部からのssh接続のIPについては、どこからでもログイン出来る環境を用意しておきたい。

その場合、いちいち、入り口サーバーにsshログインしてから、その先のサーバーにsshログインするのは面倒。
そこを
~/.ssh/config

Host new-analyzer
	HostName	踏み台サーバー名
	User	ログインユーザー名

Host stg
        HostName 最終ログインサーバー名
        User    ログインユーザー名
        ProxyCommand ssh -W %h:%p 踏み台サーバー名

と書く事で、

ssh -l ログインユーザー名 最終ログインサーバー名

に一発のコマンドでログインが可能になる。

なお、踏み台サーバーの/etc/hostsにも最終ログインサーバー名とIPの定義を書いておく必要がある。

踏み台サーバーが落ちてしまった場合や、誤ってfirewall設定をしてしまった場合の事が気になるかもしれないが、業者の方がWebコンソールによるログインを提供していれば、実質その場でサーバーにログインしているのと同じ状況になるので、リカバリーはできる。


ターミナルによるコマンド操作で最低限知っておくべきコマンド

いるディレクトリの変更

cd $ディレクトリ名

そのディレクトリのファイルの表示

ls;

そのディレクトリ以下にあるファイルを表示

find

そのファイルの中身を表示

cat $ファイル名

ターミナルからの脱出

exit

ソフトのインストール (CentOS8系)

dnf install $ソフト名

ソフトのインストール (CentOS7以下系)

yum install $ソフト名

ソフトのインストール (Ubuntu系)

apt-get install $ソフト名