さくらのVPSを借りてUbuntuをインストールしたよ + 初期設定をするスクリプトを書いた

何かを試そうとしたら今まではVMwarePlayerにUbuntuServerをインストールして、ってことをやってたのですが面倒になってきたので、さくらのVPSを借りました。(借りた数日後に上位プラン発表なんて…… まあ、サービス作るわけじゃないからいいけど)
何をするにも速くていい感じ。カスタムOSのインストールも楽だし、もっと早く借りればよかったかも。


何かを試すときは必ずインストール直後の状態にするのですが、そのあと共通の設定もいろいろするわけで、コマンドを手で打つのも面倒ですし、スクリプトを書いたのでした。スナップショットが撮れたりしたらいいんだけどなー……
https://bitbucket.org/sasaplus1/scripts/ - Sakura-VPS-Ubuntu-Init.sh
以下はこのスクリプトのメモです。

# ssh key pairs settings
COMMENT=
PASSPHRASE=
KEY_FILENAME=sakura_vps_id_rsa

# ssh port number
SSH_PORT=10022

上の方は生成する(公開/秘密)鍵の設定。(サーバで鍵を生成するってどうなんだろう……)
KEY_FILENAMEを空にすると鍵を生成しません。
下の方はsshのポート番号。SSH_PORTを空にするとsshdの設定とiptablesの設定をしません。

if [ "$KEY_FILENAME" ]; then
  ssh-keygen -t rsa -C "$COMMENT" -N "$PASSPHRASE" -f $KEY_FILENAME
  SSH_DIR=$HOME/.ssh
  if [ ! -d $SSH_DIR ]; then
    mkdir $SSH_DIR
  fi
  cat $KEY_FILENAME.pub >> $SSH_DIR/authorized_keys2
fi

鍵を生成している部分。$HOME/.sshディレクトリを作って、authorized_keys2に生成した公開鍵を登録します。

if [ "$SSH_PORT" ]; then
  SSHD_CONFIG=/etc/ssh/sshd_config
  sudo sed -i.bak "s/^\(Port\).*/\1 $SSH_PORT/" $SSHD_CONFIG
  sudo sed -i 's/^\(PermitRootLogin\).*/\1 no/' $SSHD_CONFIG
  sudo sed -i 's/^#\(PasswordAuthentication\).*/\1 no/' $SSHD_CONFIG

  sudo ufw default reject incoming
  sudo ufw default allow outgoing
  sudo ufw limit $SSH_PORT/tcp
  sudo ufw allow http/tcp
  sudo ufw allow https/tcp
  sudo ufw enable
fi

sshdの設定とiptables(ufw)の設定をしている部分。
sshdの設定は

  • ポート番号変更
  • rootでのログインを禁止
  • パスワード認証を禁止

です。
iptables(ufw)の設定は以下の通り。

  • 外から来るものはデフォルトでConnection Refusedを返す
  • 中から出ていくものは許可する(トロイの木馬にかかったら危ないかも)
  • sshは回数制限付きで解放(scpするとき困ることがあるかも?)
  • http解放
  • https解放

最後に有効化しています。sshで接続してる場合は

Command may disrupt existing ssh connections. Proceed with operation (y|n)?

とか聞かれるけどyにしても切れなかったし、大丈夫なのかな。多分。
sshは国内からのみアクセスできるようにした方がいいんだろうけど、どうやるんだろう?)
参考:
さくらのVPSでファイアーウォールが何も設定されていないのに驚愕したが ufw で解決 - babie, you're my home
ハレとケガレのweblog pid0.org支店: さくらのVPS Ubuntu 10.04 ファイヤーウォールの設定

sudo apt-get update
sudo apt-get upgrade -y

sudo apt-get install -y build-essential
sudo apt-get install -y git-core
sudo apt-get install -y mercurial
sudo apt-get install -y ntp
sudo apt-get install -y sysv-rc-conf

パッケージのアップグレードをしたりとかその他いろいろ入れたりとか。

if [ `which sysv-rc-conf` ]; then
  sudo sysv-rc-conf dns-clean off
  sudo sysv-rc-conf pppd-dns off
  sudo sysv-rc-conf rsync off
fi

必要の無さそうなサービスを止めます。上から順に、

  • PPP接続前にDNSキャッシュをクリアするデーモン?
  • PPPデーモン?
  • rsyncのデーモン

です。正直、rsync以外は何なのかわかりません……

NTP_CONF=/etc/ntp.conf
sudo sed -i.bak 's/^\(server.*\)/#\1/' $NTP_CONF
sudo sed -i '
$a \
server ntp.ring.gr.jp\
server ntp1.jst.mfeed.ad.jp\
server ntp2.jst.mfeed.ad.jp\
server ntp3.jst.mfeed.ad.jp\
server ntp.nict.jp
' $NTP_CONF

ntpサーバをいくつか設定します。
参考:NTP/推奨公開サーバ - wiki@nothing

sudo sed -i.bak '
1a \
nameserver 8.8.8.8\
nameserver 8.8.4.4
' /etc/resolv.conf

Google Public DNSを追加します。aptとかHTTP GETが速くなるらしいです。
特に遅いと思ったことはないので、もしかしたらDebianだけなのかも。
参考:さくらの VPS で名前解決が遅い - #生存戦略 、それは - subtech

sudo sed -i.bak 's#^\(ACTIVE_CONSOLES\).*#\1="/dev/tty[1-2]"#' /etc/default/console-setup
for i in `seq 3 6`; do
  sudo sed -i.bak 's/^/#/' /etc/init/tty${i}.conf
done

ttyを6つから2つに減らします。メモリが削減されるとか。
参考:http://smilelogic.jp/makoto/?p=3060


あとは秘密鍵をscpでコピーしてサーバ上の秘密鍵を消したあと、再起動するだけです。