Locked

sakura_VPS_setup_000

さくらVPS 2G/HDD プラン - CentOS6 初期設定

2012.7頃の情報を基に作成しています。
リンク先の資料等、当サイトの記事と異なる場合があります。最新の内容を確認してください。

VPS 起動

契約した時点では、VPSは起動していない状態なので、VPSコントロールパネルから起動する必要があります。
契約処理後、メールでVPSコントロールパネルとrootアカウントの情報が送られてきますので、少なくともVPSコントロールパネルのパスワードは、VPSを起動する前に変更しておくべきでしょう。

契約時期によって、一番最初の起動に時間が掛かる可能性があります。
これは、サービスとしてyum-updateonbootが有効になっているからなのですが、これによって(リポジトリがダウンしていない限りは)最初の起動時にOS(カーネル及び初期インストール済みのパッケージ群)が最新の状態へと更新されます。
個人的には、こういう設定になっていることには好感が持てますね。
ちなみに(CentOS-Base)リポジトリは、さくらのプライベートリポジトリが用意/設定されています。

VPSが起動したら、コンソール(sshでも可)からrootでログインします。
rootアカウントをdisableするまでですが、気になるなら、rootアカウントのパスワードを変えておきましょう。

SELinux 無効化(確認)

さくらVPSでは標準で無効化されていましたので、設定を変更する必要はありません。
有効になっていると、以降の設定や接続確認等に影響を及ぼす可能性があるので、確認だけはしておきましょう。

$ grep -v ^# /etc/sysconfig/selinux
SELINUX=disabled
SELINUXTYPE=targeted

etckeeper 導入

http://joeyh.name/code/etckeeper/

設定を開始する前に、まずは etckeeper を導入します。
etckeeper は /etc 配下のファイルを VCS で自動管理するためのツールです。
他の管理方法を取る場合、或いは管理しない場合は導入不要です。

  • インストール

初期設定より epel(Extra Packages for Enterprise Linux) が利用できるようになっているので、追加設定することなく yum でインストール可能です。

# yum -y --enablerepo=epel install etckeeper

デフォルトでは Git を使用するようになっています。
MercurialやBazaar、Darcs といった VCS も利用可能なので、必要であれば慣れたものに変更するといいでしょう。

$ grep ^VCS /etc/etckeeper/etckeeper.conf
VCS="git"
  • 初期化

# etckeeper init
Initialized empty Git repository in /etc/.git/
  • 最初の状態をコミット

''間はコメントなので、必要に応じて適切な記述にしましょう。

# etckeeper commit 'init'

作業ユーザ作成/設定

ユーザ作成に関するポリシーが決まっているなら、ここで設定しておきます。

  • 関連するファイル/ディレクトリ

/etc/login.defs
/etc/default/useradd
/etc/skel/

以下の例示では、アカウント作成時 /var/spool/mail/ 下にスプール用の 0バイトファイルが作成されるのを抑止するための設定変更を施しています。

  • useradd コマンドのデフォルト値を確認

# useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
  • UID/GIDの最小値

useraddによるデフォルトのGIDは100(users)なのですが、login.defsによって最小値が500に制限されており、明示的に指定しない場合はUIDと同じGIDでgroupが追加されます。

$ grep ID_MIN /etc/login.defs
UID_MIN                   500
GID_MIN                   500
  • 修正前後の diff

--- a/default/useradd
+++ b/default/useradd
@@ -5,5 +5,5 @@
 INACTIVE=-1
 EXPIRE=
 SHELL=/bin/bash
 SKEL=/etc/skel
-CREATE_MAIL_SPOOL=yes
+CREATE_MAIL_SPOOL=no

  • root権限へのスイッチ手段/設定

    大きく二種類。世界樹風に言うと、あなたは、どちらか一つを選択してもいいし、両方設定しても、しなくてもいい。

a. PAMを利用する

  • wheelグループに属しているアカウント以外、suが使えなくなります。また、su使用時パスワード認証が不要になります。

--- a/pam.d/su
+++ b/pam.d/su
@@ -1,9 +1,9 @@
 #%PAM-1.0
 auth           sufficient      pam_rootok.so
 # Uncomment the following line to implicitly trust users in the "wheel" group.
-#auth          sufficient      pam_wheel.so trust use_uid
+auth           sufficient      pam_wheel.so trust use_uid
 # Uncomment the following line to require a user to be in the "wheel" group.
-#auth          required        pam_wheel.so use_uid
+auth           required        pam_wheel.so use_uid
 auth           include         system-auth
 account                sufficient      pam_succeed_if.so uid = 0 use_uid quiet
 account                include         system-auth

b. sudoを利用する

  • wheelグループに属しているアカウントがパスワード認証無しでrootにスイッチ出来るようになります。

--- a/sudoers
+++ b/sudoers
@@ -105,7 +105,7 @@ root        ALL=(ALL)       ALL
 # %wheel       ALL=(ALL)       ALL

 ## Same thing without a password
-# %wheel       ALL=(ALL)       NOPASSWD: ALL
+%wheel ALL=(ALL)       NOPASSWD: ALL

 ## Allows members of the users group to mount and unmount the
 ## cdrom as root
  • アカウント作成

例示として「yourname」というアカウントを作成しています。
rootにスイッチ出来るよう、wheelグループに属するよう設定します。

# useradd -G wheel yourname

上の例では、新たに「yourname」というgroupが追加され、デフォルトのグループに設定されます。
アカウント毎に追加させたくない場合は、予めgroupを作成しておいたもの(或いはusers等の既設group)を「-g」オプションで指定します。

  • パスワード設定

# passwd yourname
  • rootアカウント/パスワードロック

ここまでの設定が正しく行われていれば、rootアカウントのパスワードをロックしても作業アカウントからはrootになれます。
シングルユーザモード等で必要にならないのであれば、パスワードロックしてしまうという運用も考慮しましょう。

# passwd -l root
ユーザー root 用のパスワードをロック。
passwd: 成功

万が一に備え、作業を実施するターミナルをroot権限のままにしておき、新たに作業アカウントでログインしてrootにスイッチ出来る事を確認しましょう。

sshd設定

http://wiki.centos.org/HowTos/Network/SecuringSSH

基本方針としては、使用しない機能はオフにしておきます。

ポートは変えなければならない、というよりは、変えるだけで避けられるリスクが多いので、変えた方が良いでしょう。
アクセスリストやファイアウォール等(サーバ自身と接続元の両方)に影響するので、変える場合はその辺りも考慮する必要があります。
また、以下の設定は例示として「2345」としていますが、これはあくまで設定例なので、使用を避け(他の任意の値にし)ましょう。

Port 2345
PermitRootLogin no
GSSAPIAuthentication no
UsePAM no
X11Forwarding no
UseDNS no

# service sshd restart

iptables設定(暫定)

http://wiki.centos.org/HowTos/Network/IPTables

コンソールで作業している場合は必須ではありませんが、sshでログインする場合は、ひとまずsshのみ許可するルールを設定しておきます。
sshdのポートを変更していない場合は、(確か)初期設定のままでも問題無かったように思います。
必要に応じてログを取得する等しても良いでしょう。(本番リスト作成のヒントになります。)

iptablesへの設定はシェルスクリプト化して管理しています。

# mkdir /etc/ssh/script
# cd /etc/ssh/script
# touch iptables.init
# chmod 0600 iptables.init
# cat >iptables.init <<EOD
iptables -P INPUT ACCEPT
iptables -F
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 2345 -j ACCEPT
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
EOD

# sh iptables.init

先のssh設定と共に、変更後にログイン可能なことを確認し、設定を保存します。

# service iptables save

IPv6無効化

iptablesでログを取得すると直ぐに気付くのですが、さくらVPSのネットワーク(上位L2スイッチ)においては、ブロードキャスト/マルチキャストストームの制御が行われていないよう見受けられます。
このような環境では、RA Guardが設定されていることも期待出来無さそうなので、少なくともIPv6自動構成は行わないようにしておく必要があります。
さくらVPSでは(2012.8現在)IPv6ネイティブ接続は利用出来無いので、nazx.jpでは無効化しています。

IPv6 自動構成の問題点/RA Guardについては、以下の「8. ステートレスアドレス自動設定のセキュリティ問題」が参考になります。
http://www.ipa.go.jp/security/fy21/reports/tech1-tg/b_04.html

--- /dev/null
+++ b/modprobe.d/disable-ipv6.conf
@@ -0,0 +1,2 @@
+options ipv6 disable=1
+install ipv6 /bin/true

# chkconfig ip6tables off

設定可能な項目やデフォルト値等は、以下のファイルで確認出来ます。

/usr/share/doc/initscripts-9.03.31/sysconfig.txt

ここでは、IPv6無効化のついでにIPv4リンクローカル用ネットワークを無効にしています。

# cd /etc/sysconfig/
# cat >network <<EOD
NETWORKING=yes
HOSTNAME=nazx.jp
NETWORKING_IPV6=no
IPV6INIT=no
IPV6_AUTOCONF=no
NOZEROCONF=yes
EOD

ここでネットワークの再起動をしても良いですが、最後に起動サービスの確認を行い、サーバ自身を再起動しています。

起動サービス確認

さくらVPSでは、かなり良く精査/標準設定されているよう見受けられます。ほぼ無駄がありません。
殆どの場合、初期状態のままで問題無いでしょう。

# chkconfig --list | grep 3:on | sort

サービス

nazx.jp
on/off

簡単な説明

acpid

on

電源管理/イベント用のサービス。VPSの場合はコンソールからの電源off/on等に対応(シャットダウンさせる等)させるために必要です。

atd

off

バッチジョブのスケジューラ。指定時間後にコマンドを実行させる等の管理/制御が可能。cronで足りるようなら不要なサービスです。

crond

on

|予定されたコマンドを実行するデーモン。個人的に使用しなくても、ログ管理等システムで利用されているので安易な停止はしないこと。

iptables

on

IPv4パケットフィルタ。ルータとしての必要な機能も持ちます。最低限のセキュリティ対策として設定しておきましょう。

ip6tables

off

IPv6パケットフィルタ。使用するならばiptablesと同様に扱いましょう。IPv6ネットワークを無効化した場合は不要です。

irqbalance

on

複数CPUへの割り込みを制御するサービス。複数CPU環境下では、一般的には使用すべきサービスです。

network

on

ネットワークに関する設定/制御を行います。ネットワークを使用する場合は必要です。

ntpd

on

時刻合わせサービス。(設定次第ですが)比較的小さな時刻の誤差を、サービスに影響が出ないよう調整して合わせます。一般的には使用すべきサービスです。

ntpdate

on

起動時に、大きな時刻の差をも一気に合わせるためntpdateを実行します。サーバ上で使用するサービスの内容とntpdの設定でon/offを判断しましょう。

postfix

on

メール配送サービス。さくらVPSの場合、初期設定では外部からの配送を中継したりせず、比較的安全な設定になっています。on/offは必要に応じて。

rsyslog

on

システム/カーネルログ出力サービス。一般的には使用すべきサービスです。

sshd

on

リモートからのシェル環境へのログインサービス。設定次第ではポート転送等もサービス可能です。on/offは必要に応じて。

sysstat

on

sarコマンドで出力可能な、サーバ資源に関するデータの収集を行うための設定を行います。on/offは必要に応じて。

yum-updateonboot

off

起動時にyum updateを行います。CentOS 6ではyum-cronも復活したので、そちらへの置き換え等を検討すると良いでしょう。

以上で、取り急ぎ行っておくべき初期設定の完了です。サーバを再起動して正常性を確認します。