格安のさくらのVPSを借りたならやっておかなくてはいけない10の設定 - ドラあり!

「さくらのVPS」を借りたら、最低限やっておかなくていけない初期設定を10個ほど整理しました。


VPSはバーチャル・プライベート・サーバ (Virtual private server)の略で、仮想サーバをレンタルできるサービスです。


さくらインターネットが提供する「さくらのVPS」は、アカウント設定後は、CentOS5.5がインストールされていて、すぐ使い始めることが可能です。


自分はrackspaceなどのクラウドサーバを別で管理しているのですが、インスタンスの作り方がさくらの場合、インスタンスの独立性が高く、インスタンスの雛形をつくったりして、コピーするようなことができないようです。


ですので、サーバ導入時に、必要な設定を行わなければなりません。





初期設定をそのまま使うには、セキュリティ上のリスクが残っている部分がありますので、私が使っている場合にいつも行っている設定を10ほど抜き出して、整理してみました。


より安全にVPSを使っていただく、みなさまの一助になれば幸いです。



他の方の設定もかなり参考になりますので、ここに一部分列挙させていただきます。

CentOSをサーバーとして活用するための基本的な設定
【さくらのVPS】初期設定をしてみた
さくらのVPSを使ってみた


あえて異なるのはsshd周りを、ドラあり!では、外部からの総当たり攻撃に耐えるため、iptables及びtcp wrapperで念のため二重に防御しています。

このあたりは他の人の設定ではあまりなかったので、特徴の一つかも知れません。



目次は次の通りです。

  • 1.VPS起動
  • 2.ユーザ作成
  • 3.ソフトウェアのアップデート
  • 4.sshdの設定
  • 5.rootになれるユーザ権限を設定する。
  • 6.rootパスワードの変更
  • 7.tcp wrapperの設定でftptelnetを原則禁止。
  • 8.iptablesの設定
  • 9.不要なサービスを停止しましょう。
  • 10.再起動
  • おわりに
  • おまけ1:SSHのセキュリティ設定の強化
  • おまけ2:selinuxの無効(初期で設定済みの場合あり)
  • おまけ3:メモリの使用状況(設定後、再起動で計測)
  • おまけ4:バッチファイル


まえがきが長くなりましたが、設定していきましょう。



図解でわかる Linuxサーバ構築・設定のすべて

図解でわかる Linuxサーバ構築・設定のすべて





1.VPS起動

会員メニューの「契約情報」「契約サービスの確認」からサービスコードを選択して、「サーバ設定」ボタンを押してください。


そのあとVPSのコントロールパネルから、「仮想サーバ操作」の項目を起動させてください。


2.ユーザ作成

さくらのVPSのサービスを(仮)申込後、メールで「[さくらのVPS] 仮登録完了のお知らせ」というタイトルで
パスワード設定等が届いたはずです。

その仮登録メールにあるパスワードで、SSHを使ってログインします。


ログイン後、まずユーザを追加します。

# useradd myuser
# passwd myuser
 Changing password for user myuser.
 New UNIX password:
 Retype new UNIX password:
 passwd: all authentication tokens updated successfully.

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

yumを使うのですが、アップデートを手動で行うと、常駐しているyum-updatesdと衝突する場合があるので、
yum-updatesdはアンインストールして、手動で一度アップデートします。


(1)yum-updatesdのアンインストール & yum-cronのインストール

yum-updatesdは1時間ごとにアップデートをチェックしにいく常駐型のため、
メモリのコストパフォーマンスが悪いです。

よって非常駐型のyum-cronをかわりにインストールします。

# yum -y remove yum-updatesd
# yum -y install yum-cron
# /etc/rc.d/init.d/yum-cron start
# chkconfig yum-cron on
(2)各サービスの設定にはいる前に、ソフトウェアを最新版にしておきます。
# yum -y update

4.sshdの設定

sshのログイン周りのセキュリティを整備します。

(1)rootログイン禁止、通常パスワードログイン禁止、公開鍵使用を設定する。


パスワードなしも設定できるが推奨しません。(禁止する設定は後述)
クライアントを乗っ取られたら、パスワードなしで、サーバにログインされちゃうから。

# vi /etc/ssh/sshd_config

PermitRootLogin no  #rootログインは禁止

PasswordAuthentication no  #通常のパスワード認証は禁止

UsePAM no  #公開鍵のみ使用する。

sshデーモンを再起動する。

# /etc/rc.d/init.d/sshd restart
Stopping sshd:                                             [  OK  ]
Starting sshd:                                             [  OK  ]
(2)クライアント設定

クライアントで公開鍵を作成します。

LinuxWindowsによって作成方法が変わります。

(2−1)クライアント設定:linuxを作業PCとする場合の公開鍵作成

Linuxでsshの鍵を作成するには

# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (~/.ssh/id_rsa):
Created directory '/home/myuser/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/myuser/.ssh/id_rsa.
Your public key has been saved in /home/myuser/.ssh/id_rsa.pub.
The key fingerprint is:
38:xx:25:x9:xx:xx:a4:xx:e5:1d:xx:xx:35:b2:xx:xx 
(2−2)クライアント設定:WindowsXPを作業PCとする場合の公開鍵作成

鍵交換方式のsshでアクセスするには

DebianGNULinux3.1SargeでSSH!


あたりが詳しいです。



(3)authorized_keys の作成

公開鍵を設定します。

作業PCで作成した公開鍵を、VPSサーバの以下のファイルに書いてください。

# vi ~/.ssh/authorized_keys  

その後、以下のように設定を変更してください。

# chmod 600 ~/.ssh/authorized_keys


注意:「Received disconnect from xxx.xxx.xxx.xxx: 14: No supported authentication methods available」のエラーが出る場合、~/.ssh/のパーミッションが700、[ ~/.ssh/authorized_keys]が600になっているか確認してください。


または作業PCのsshクライアントに秘密鍵の設定が完了しているか確認してください。



5.rootになれるユーザ権限を設定する。

rootになれる設定を変更します。

sudoersの設定変更(sudoコマンドの設定は省略可能です。必要でない方は、この項は飛ばしてください。)

sudoコマンドを使えるグループをwheelに設定します。
(コメントを外すだけ)

rootでvisudoコマンドを使って編集します。(直接ファイルを編集するより、文法チェック等あるので、visudoが便利です)

# visudo

%wheel        ALL=(ALL)       ALL
pam.dの設定変更

suコマンドでrootになれるアカウントグループをwheelに設定します。

# vi /etc/pam.d/su

auth            required        pam_wheel.so use_uid
アカウントのwheelグループ登録

wheelグループにrootになれるユーザアカウントを登録する。

# usermod -G wheel myuser


これでmyuserがrootのwheelグループに登録されました。



6.rootパスワードの変更

メールの平文でおくってきているrootパスワードを変更しておきましょう。


rootユーザで以下のコマンドを実施してください。

# passwd
Changing password for user root.
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
7.tcp wrapperの設定でFTPtelnetを原則禁止。

iptablesだけでもいいんだけど、やっぱhosts.denyで明示的に閉じておくほうが個人的におすすめです。


平文で通信するtelnetFTPは、内容が暗号化されていないので、少し心配です。


たとえtelnetがなくてもsshがあるし、FTPがなくてもsftpやwinscpがあるので安心です。



FTPtelnetがなくても大丈夫か?」と聞かれそうですが「大丈夫だ、問題ない」です。





/etc/hosts.allow と /etc/hosts.deny の設定を変更します。
ルールは原則として、ftptelnetを禁止。

拒否ファイル
# vi /etc/hosts.deny

ALL:ALL
許可ファイル

次はsshだけ、指定のIPアドレスドメイン(xxx.xxx.xxx.xxx)からのみ許可します。

これで外部からのsshの総攻撃を拒否する。(iptablesよりtcp wrapperでやったほうがドメイン指定できて、汎用的かつ簡単)

# vi /etc/hosts.allow

ALL:127.0.0.1
sshd:xxx.xxx.xxx.xxx


自分自身から、inet関係を使えるようにする設定。

クライアントのIPアドレス(またはドメイン)を明示化して、sshのみ使えるようにする。



hosts.denyとhosts.allowの設定はセットで考えましょう。ここは好みが分かれますが(iptablesだけで一元的に設定するのもあり)




8.iptablesの設定

さくらのVPSCentOSは、受送信のパケットを、iptablesでかなりの部分、制御できます。



iptablesがパケットの性質によって、サービスへの受け渡し許可、不許可を判断していきます。


ちなみにcentOSは、iptablesのルールが/etc/sysconfig/iptablesにあります。

しかし、さくらのVPSはカスタマイズされていて、初期にこのファイルがありません。

ですので、設定ファイルを自分で作成していきましょう。




注意:このあとの作業はiptablesを変更するので、リモートログインが届かなくなる場合もあります。
コマンドラインでもいいのですが、失敗すると、復旧等を管理パネルのコンソールから行わないといけません。


ここでは、先述したファイルを作って、そこに設定を書き込みます。



コマンドで調整しながらやりたいと言う人は、
さくらのVPS ファイアーウォールを設定してみる
をご参考ください。


設定ファイル iptables
#vi /etc/sysconfig/iptables


*filter
:INPUT   DROP [0:0]
:FORWARD DROP [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 udp --dport 5353 -d 224.0.0.251 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# SSH, HTTP,( FTP1, FTP2, MySQL )
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -s xxx.xxx.xxx.xxx -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

SSHの設定(22番ポート)は自分の作業環境のIPを入力してください。


iptablesのかわりにxinetdもあるけど、他のディストリビューションとかを見た限り、
iptablesのほうが汎用性が高いように思われます。

設定を書き込んだら、iptablesを再起動します。

# /etc/rc.d/init.d/iptables restart

Flushing firewall rules:                                   [  OK  ]
Setting chains to policy ACCEPT: filter                    [  OK  ]
Unloading iptables modules:                                [  OK  ]
Applying iptables firewall rules:                          [  OK  ]

9.不要なサービスを停止しましょう。

すぐ使わないサービスなどを停止させましょう。


sendmailの停止

ここではsendmailをまず止めて、他のサービスについても起動時に合わせて、サービス開始しないように
設定します。

# service sendmail stop
サービス開始のOFF

サービス開始を、OS起動時に自動でしないように設定していきます。


参考:CentOSをサーバーとして活用するための基本的な設定


上の設定を最新版のものに若干変更しています。(isdnデーモンは初期にないので削除)


chkconfig acpid off
chkconfig auditd off
chkconfig autofs off
chkconfig avahi-daemon off
chkconfig bluetooth off
chkconfig cups off
chkconfig firstboot off
chkconfig gpm off
chkconfig haldaemon off
chkconfig hidd off
chkconfig kudzu off
chkconfig lvm2-monitor off
chkconfig mcstrans off
chkconfig mdmonitor off
chkconfig messagebus off
chkconfig netfs off
chkconfig nfslock off
chkconfig pcscd off
chkconfig portmap off
chkconfig rawdevices off
chkconfig restorecond off
chkconfig rpcgssd off
chkconfig rpcidmapd off
chkconfig sendmail off
chkconfig smartd off
chkconfig xfs off

10.再起動

ここまで設定したら、一度、再起動してみましょう。

# reboot

以上で完了です。おつかれさまでした。


おわりに

いかがだったでしょうか?さくらのVPSは開始後すぐに使うことができますが、
そのままではセキュリティの設定などで、不足している部分もあります。


基本的な箇所を10箇所ほど整理しました。

チェックをして整理していますが、もっとこうしたほうがいい。これは追加したほうがいいという
ご指摘あれば、コメント等いただければありがたいです。


みなさんのVPSライフを充実できたら嬉しいです。




DVD付 CentOS徹底入門 第2版

DVD付 CentOS徹底入門 第2版



おまけ1:SSHのセキュリティ設定の強化


通常の設定以外にも、好みでいくつか設定を追加しておきます。

SSHのログインポートを22番から変更する。
# vi /etc/ssh/sshd_config

Port xxx


とする。待ち受けポートがxxxになる。

アクセスするSSHクライアントの設定を変更する。


ログイン猶予時間を20秒に制限する。
# vi /etc/ssh/sshd_config

LoginGraceTime 20
認証施行回数を2回に制限する。
# vi /etc/ssh/sshd_config

MaxAuthTries 2
パスワードなしのログインを禁止
# vi /etc/ssh/sshd_config

PermitEmptyPasswords no
SSH再起動

設定後はSSHを再起動してください。

# /etc/rc.d/init.d/sshd restart
Stopping sshd:                                             [  OK  ]
Starting sshd:                                             [  OK  ]

おまけ2:selinuxの無効(初期で設定済みの場合あり)

デフォルトでなっているようです(2010年12月23日現在)。

設定の必要は、現在なさそうです。

# vi /etc/sysconfig/selinux

SELINUX=disabled

おまけ3:メモリの使用状況(設定後、再起動で計測)

再起動後のメモリの使用状況を測ってみました。

設定変更前と変更後で計測しています。


変更前(メモリ使用量が339MB)

# free
             total       used       free     shared    buffers     cached
Mem:        510532     339128     171404          0      29388     247784
-/+ buffers/cache:      61956     448576
Swap:      2048276         84    2048192


変更後(メモリ使用量が155MB)

# free
             total       used       free     shared    buffers     cached
Mem:        510532     155072     355460          0      11044     116892
-/+ buffers/cache:      27136     483396
Swap:      2048276          0    2048276

おまけ4:バッチファイル

これまでの設定(1から10)は、毎回行うと大変なので、バッチファイルにすることも可能です。

自分だけのVPS設定があれば、バッチファイルにしておくと、過負荷などで、サーバが
ピンチになったときに代替サーバを数分で構築できます。



本ブログで説明した設定は、(ブックマーク数など見て)需要があるようでしたら、GPLライセンスとかにして配布しようかな。



UNIXシェルスクリプト逆引き大全333の極意

UNIXシェルスクリプト逆引き大全333の極意