さくらのVPSで最初にやっておくこと

※ 基本的にMac(|Linux)のターミナルから作業する場合の手順を書いています. Windowsの場合はsshとscpをどうにかするか, Linuxに乗り換えてください.

契約から起動するまではこちら -> さくらのVPSを契約して起動するまで

設定ファイルの編集に使うviの使い方はこちら -> vi(vim)の最低限の使い方

目次

  • 最初の接続
    • MacからVPSにssh接続
    • rootのパスワード変更
  • とりあえずのセキュリティ対策
    • sshのポート変更
    • アプリケーションのアップデート
  • 作業用ユーザの作成
    • ユーザの作成とパスワードの設定
    • sudoできるように
  • 鍵認証でのssh接続
    • Macでrsa認証鍵を生成
    • 公開鍵をVPSに転送
    • 鍵を登録
    • sshdの設定変更
    • 鍵認証でのssh接続の確認
  • iptablesの設定
    • 設定ファイル編集
    • 自動起動を有効化
MacからVPSにssh接続

まずはMacからsshでVPSに接続する(rootのパスワードが必要. 契約時のメールに記載されている).

# Macから
ssh [email protected] # インターネットでは, 全世界の22番ポートをくまなく調べ, セキュリティホールのあるサーバが無いかチェックしているロボットがいます. もちろん, どうしてもあなたのサーバを落としたい!というロボットがいたら別ですが, 普通のロボットは無差別なIPアドレスへポート22固定で攻撃をしてきますから, 22番ポート以外に変更することは非常に効果があります.

変更前に設定ファイルのバックアップをとってから(.orgは”オリジナルの”程度の意味)

cp /etc/ssh/sshd_config /etc/ssh/sshd_config.org

ファイルを開いてポート番号を変更し,

vi /etc/ssh/sshd_config
#Port 22
->
Port 10022 # 適当な数字に(1024~65535の範囲で)

sshdを再起動して変更を有効化する.

service sshd restart # エラーが無ければOKと表示される
アプリケーションのアップデート

古いバージョンの脆弱性を突かれることを防ぐ.

yum -y update

作業用ユーザの作成と設定

ユーザーの作成とパスワードの設定

常にrootで作業を行うのは何かと危険なので作業用のユーザを作成する.

useradd nomnel # ユーザ名は適当に

で作業用ユーザを作成し, (以下, nomnelはここで作成した作業用ユーザ)

passwd nomnel

で作成したユーザのパスワードを設定する.

sudoできるように

sudoを使うことで必要なときのみroot権限で作業できる. まず, 作成したユーザをwheelグループに追加する.

usermod -G wheel nomnel

次に, wheelグループがsudoを使えるようにするため

visudo

で設定ファイルを開き, 下の行を探してコメントを外す. (操作方法はviと同じ)

## Allows people in group wheel to run all commands
# %wheel ALL=(ALL) ALL
->
## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL
日本語化
vi /etc/sysconfig/i18n

で設定ファイルを開き,

LANG="C"
->
LANG="ja_JP.UTF-8"

と変更する.

exit

で一度ログアウトした後に再ログインすると設定が有効になる. sshのポート番号を変更しているので,

ssh -p 10022 [email protected] # 10022は変更したポート番号

のようにポート番号を指定しなければいけないことに注意.


鍵認証でログイン

パスワード認証だとセキュリティ強度が低いので, 鍵認証でsshログインできるようにする.

Macで鍵のペア(秘密鍵, 公開鍵)を生成

鍵を生成する(ファイル名, パスフレーズはデフォルトでよい).

ssh-keygen -t rsa -v

確認すると, id_rsaとid_rsa.pubの2つのファイルが作成されている.

公開鍵をサーバーに転送

作成した公開鍵をscpでVPSに転送する.

scp -P 10022 ~/.ssh/id_rsa.pub [email protected]:~/
# パスワードを聞かれるので作業用ユーザのパスワードを入力

できたらVPSに作業用ユーザでログインする.

ssh -p 10022 [email protected]
鍵を登録する

転送しておいた鍵をauthorized_keysという名前にしてパーミッションを変更する.

# フォルダを作成
mkdir .ssh

# 鍵をauthorized_keysに
mv id_rsa.pub .ssh/authorized_keys

# パーミッションの変更
chmod 700 .ssh
chmod 600 .ssh/authorized_keys

※ 2個目以降の鍵は下のようにしてauthorized_keysに追記する.

cat id_rsa.pub >> .ssh/authorized_keys
鍵認証でログイン

一度exitでログアウトした後, 再度

ssh -p 10022 [email protected]

でログインするとパスワードを聞かれなくなっているはず.


SSHの設定

この状態ではまだ, パスワード認証でのログインやrootでのログインも出来てしまう. sshの設定を変更してそれらを禁止する.

sshdの設定
sudo vi /etc/ssh/sshd_config

で設定ファイルを開いて下のように変更する.

# パスワード認証でログインできないように
PasswordAuthentication yes
->
PasswordAuthentication no

# rootでログインできないように
#PermitRootLogin yes
->
PermitRootLogin no

sshdを再起動して変更を反映する.

sudo service sshd restart # エラーが無ければOKと表示される
接続の確認

ここまで出来たらMacで新しくターミナルを起ち上げ(万一のためにすでにssh接続しているターミナルは残したまま), ちゃんとログイン出来る/出来ないことを確かめておくとよい.

ssh -p 10022 [email protected] # ログイン出来る(パスワード聞かれない)
ssh -p 10022 [email protected] # ログイン出来ない

また, 毎回ポート番号やIPアドレスを入力するのは面倒なので, Macの.bash_profileに

alias sakura='ssh -p 10022 [email protected]'

を追加して,

source .bash_profile

で設定を反映しておくと, 次回からは

sakura

とするだけで, サーバーにssh接続できて便利.


Firewall(iptables)の設定

Firewall(iptables)は, 他のコンピュータネットワークとの通信を制御するもの. 必要な通信のみを許可することでセキュリティを高めることができる.

設定ファイルの編集と適用

初期状態では設定ファイルが存在しないので

$ sudo vi /etc/sysconfig/iptables

で新規にファイルを作成して編集する. 内容は以下. (設定の意味 -> iptablesでパケットフィルタリングするための設定)

参考:CentOSをサーバーとして活用するための基本的な設定 | さくらインターネット創業日記

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]

-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -p 50 -j ACCEPT
-A RH-Firewall-1-INPUT -p 51 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# SSH, HTTP
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 10022 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited

COMMIT

他に, ドットインストールではこのように記述されていた.

*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
:SERVICES - [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s --limit-burst 4 -j ACCEPT
-A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p tcp -m state --state NEW -j SERVICES
-A INPUT -p udp --sport 53 -j ACCEPT
-A INPUT -p udp --sport 123 --dport 123 -j ACCEPT
-A SERVICES -p tcp --dport 10022 -j ACCEPT
-A SERVICES -p tcp --dport 80 -j ACCEPT
-A SERVICES -p tcp --dport 443 -j ACCEPT
COMMIT

終わったらiptablesを起動して設定を適用する.

sudo service iptables start

# すでにiptablesが起動している場合は
sudo service iptables restart

# 現在の設定を確認
sudo iptables -L
自動起動の設定

また, OSの再起動時にiptablesが自動的に起動するようにしておく.

# 自動起動が有効かチェック
chkconfig --list iptables

# 上の結果で 3:on となっていなければ
sudo chkconfig iptables on

# もう一度チェック
chkconfig --list iptables

さくらのVPSにインストールされているCentOSでは, 不必要なサービスはほとんど起動されていないらしい(要出典). というわけで最初にしておくこととしてはここまでかな.