ConoHaのVPSの初期設定をChef Soloでやってみた
普段はさくらのVPSに普通に手でソフトウェアをインストールしてWebアプリを動かしていたんだけど、
さすがにそろそろサーバーの状態管理を自動化したくなったのと、単純に面白そうなのでChefによるサーバー管理に挑戦することにした。
それで、気軽に壊して遊ぶ用に新たにConoHaのVPSを借りて、Chef Soloで設定してみた。
目標
以下の作業を全てChefで行う
- 一般ユーザーの作成
- 鍵認証の設定
- sudo有効化
- sshとiptablesの設定
下準備
knife solo init
まずサーバー上ではなくローカルで作業する。
knife solo init
でchef soloのリポジトリを作る。
$ gem install knife-solo $ knife solo init conoha-bootstrap-cookbooks $ cd conoha-bootstrap-cookbooks
knife solo prepare
ConoHaは最初rootでsshできないようになっているが、それだとknife solo prepare
できない。
ConoHaの共通サーバにsshした後rootでログインし、rootの~/.ssh/authorized_keysをいじって、共通サーバを経由せずssh root@conoha
できるようにしておく。
その後、以下のコマンドでサーバーにChefをインストールする。
$ knife solo prepare root@conoha Bootstrapping Chef... ... Downloading Chef 11.16.0 for el... Installing Chef 11.16.0 installing with rpm... ... Thank you for installing Chef! Generating node config 'nodes/conoha.json'...
一般ユーザーの作成、鍵認証の設定とsudo有効化
cookbookの作成
$ knife cookbook create site_user -o site-cookbooks
site_userというcookbookを作成した。
site-cookbooks/site_user/recipes/default.rb にレシピを書いて設定していく。
cookbookのrun_listへの追加
run_listに追加しないとcookbookは実行されない。
// nodes/conoha.json { "run_list": [ "recipe[site_user]" ] }
templateの追加
site-cookbooks/site_user/templates/default
にerbをいれて設定を変更する。
$ scp conoha:/etc/sudoers ./site-cookbooks/site_user/templates/default/sudoers.erb
- sudoers.erb 修正
- wheelをsudo可能に
recipeの修正
# site-cookbooks/site_user/recipes/default.rb user_name = "k0kubun" home_dir = "/home/#{user_name}" ssh_key = "ssh-rsa AAAAB3Nza..." # ユーザーと ~/ の作成 user user_name do home home_dir password "kogaidan" action :create end # ~/.ssh 作成 ssh_dir = "#{home_dir}/.ssh" directory ssh_dir do owner user_name group user_name mode 0700 end # ~/.ssh/authorized_keys 作成 # user_name でssh可能になる file "#{ssh_dir}/authorized_keys" do owner user_name content ssh_key mode 0600 end # wheelにuser_nameをいれる group "wheel" do action :modify members [user_name] append true end # sudoersを手元のsudoers.erbで置き換える template "sudoers" do path "/etc/sudoers" source "sudoers.erb" mode 0440 end
適用
$ knife solo cook root@conoha
これでssh k0kubun@conoha
でのログインとsudoが可能になっているはず。
knife solo prepare k0kubun@conoha
しておいて、次からはcookする際もk0kubun@conohaを使う。
sshとiptablesの設定
templateの追加
$ scp conoha:/etc/ssh/sshd_config ./site-cookbooks/site_user/templates/default/sshd_config.erb $ scp conoha:/etc/sysconfig/iptables ./site-cookbooks/site_user/templates/default/iptables.erb
sshの設定
- sshd_config.erb 修正
- rootログイン無効化
- パスワードログイン無効化
- ssh用ポートを22番から変更
iptablesの設定
- iptables.erb 修正
- ssh用に開いている22番を別のポートに変更
- HTTP 80番のポートを開ける
- HTTPS 443番のポートを開ける
recipeの修正
以下を追加する。
# site-cookbooks/site_user/recipes/default.rb # ... # sshd_configを手元のsshd_config.erbで置き換える template "sshd_config" do path "/etc/ssh/sshd_config" source "sshd_config.erb" mode 0600 end # sshd_conig の反映のためにsshd再起動 service "sshd" do action :restart end # iptablesを手元のiptables.erbで置き換える template "iptables" do path "/etc/sysconfig/iptables" source "iptables.erb" mode 0600 end # iptables の反映のためにiptables再起動 service "iptables" do action :restart end
適用
$ knife solo cook k0kubun@conoha
これで最低限のセキュリティ対策はできたと思う。
まとめ
Chef soloを用いてサードパーティのcookbookを使わないでサーバーの初期設定を行った。
慣れてきたり不便を感じたらBerkshelfのcookbookを使っていきたい。