ConoHaでVPSを立ち上げた時に設定した5つのこと

2014-06-07 サーバー管理

しばらくは清楚かわいいConoHaちゃんに媚びていく感じの記事でいきたいと思います。
タイトルにConoHaって入れとけばこのはちゃんが釣れるからな… ちょろいもんやで…

というわけでタイトル通り、ConoHaでVPS(WordPress TemplateなのでCentOS)を立ち上げたときに自分が即設定した内容をまとめます。
といっても他のVPSでも大体同じような話ですし、慣れてる人には当たり前のことが多いかもしれません。
一応何度も同じ手順を踏むのは面倒だと思うので、chef soloでの自動化についても触れていきます。

1. 管理用のユーザーを作る

デフォルトだとrootユーザーしかいないので、まずは管理作業時に使うためのユーザーを作成します。
suするためにwheelグループに所属させ、またsshログインのために公開鍵も設置しましょう。
chefだとuserリソースとgroupリソース、ファイル設置にdirectoryリソースとfileリソースを使っています。

recipeにユーザー名を埋め込むのはさすがに忍びないので、node設定に入れています。本当はdata_bag使ったほうが良いんでしょうが、ちょっと横着してますね。
data_bagの使い方に付いては参考にさせていただいたアルパカchef日記3日目さんにまとまっているので、そちらを参照すると良いかと思います。

2. wheelグループはnopasswordでsudoできるようにする

1.で作ったユーザーでchef soloを動かす際、パスワードを聞かれると面倒です。
このためwheelグループではnopasswordでsudoできるようにしておきます。

sudoerについては直接弄ると怖いので、opscodeのsudoクックブックを利用しました。
このcookbookを使う場合、自分で書くのはnodeファイルだけでオッケーです。

なお、本来であればwheelユーザーだけがsudoできるように/etc/pam.d/suや/etc/login.defs辺りも設定していくべきですが、今回は個人使用のVPSでwheelユーザー以外存在しないため省略しています。
resourceに変更済みファイルを置いてfileリソースで配置するだけなので、やっておいたほうが無難ではあります。

3. rootユーザーのsshログインを禁止する

sshで直接rootに入れる状態は攻撃されやすいため、rootユーザーについてはsshログインを禁止します。
やることは/etc/ssh/sshd_configを弄るだけです。
なお、この作業をちゃんとユーザーが作れてない、あるいはsudoが正しく出来ない状態でやってしまうと、sshログインできなくなって詰むため、1.で作ったユーザーで作業していきます。
(まぁConoHaちゃんなら最悪Webのコンソールパネルからなんとか出来るんですが)

今回はテンプレートを使っていますが、/etc/ssh/sshd_configをscpで持ってきた後、

PermitRootLogin no

を追記して、拡張子を.erbにしただけです。
今気づきましたがこれ変化する場所ないので、templateじゃなくてresourceでよかったですね…

4. iptablesを有効化する

デフォルトだとiptablesが無効になっておりポートが全開放になっているため、とりあえず必要であろうhttpポートとsshポートを残して他を全て閉じます。

テンプレートの方はこんな感じ。
「立ち上げ直後のiptablesを設定する」を参考にさせていただきました。

自分はiptables6も全く同じ設定で入れてありますが、そもそも使わない気がするのでipv6自体を無効化してしまったほうがいいかもしれないですね。

5. yumのパッケージをupdateする

初期状態で入っているパッケージは幾つか古くなっているので、最新のものにupgradeしておきます。
これについてはcookの度に毎回流れると時間がかかることと不安定なバージョンに勝手に上がってしまう危険性がありそうなので、自分はchefのレシピに入れずに手動で流しています。

$ yum upgrade -y

を流すだけです。

以上が、自分がVPS立ち上げて即実行した設定です。
他にもwheel以外でsudo出来ないようにする、sshのポート番号を変える、ログ監視やメール転送設定を入れる、などやっておいたほうがよいことは色々ありますが、上記くらいが最低限のラインじゃないかと思います。

なおchef soloでセットアップするに当たって、1と2をconoha_root.json、3と4をconoha.jsonといったように別nodeにした上で、.ssh/configにログイン設定を書いてあげると、

knife solo prepare conoha_root
knife solo cook conoha_root
knife solo cook conoha

の3行であっという間に設定が完了します。
この時、conoha_rootの方はコントロールパネルからダウンロードした秘密鍵を使わないといけないのに若干注意が必要です。

今回は自分が入門Chef Soloを勉強したてということでchefを使いましたが、プロビジョニングツールには他にもPuppet、Ansible、Saltなど色々選択肢があるので、使いやすいものを探してみると良いかもしれません。

以上、何かの参考になれば幸いです。