初期化状態で仮想環境を立ち上げましょう。

$ vagrant destroy -f
$ vagrant up

または、Vagrantにはsaharaというプラグインがあります。
仮想環境の状態を保存したり、戻したりできるものです。
こちらを使って初期状態にするのも良いでしょう。

saharaでVagrantの状態管理

今回の目標を確認

今回の目標を確認します。

  • rootパスワードの変更
  • SSH接続の設定変更
  • sudoの設定
  • 一般ユーザーの追加
  • システムのアップデート
  • iptablesの設定
  • WEBサーバーの設定
  • WEBページの設定
  • マルチドメインの設定
  • PHPの設定
  • MySQLの設定
  • Postfix/Dovecot/Postfix Adminの設定

sudoの設定

sudoは、rootにならなくても、root権限でコマンドが実行できるようになります。
頻繁にrootに切り替えるのは、セキュリティ的に良くありません。

  • sudoの設定

サードパーティCookbookをインストール

今回は、サードパーティCookbookを使用して、sudoを設定します。
苦労して入れたBerkshelf使ってインストールします。
すでに以下のファイルが存在しているはずなので、書き換えます。

~/vagrantdir/sakuravps/chef-repo/Berksfile

source "https://supermarket.getchef.com/"

cookbook 'sudo'

berksコマンドを実行すると、

~/.berkshelf/cookbooks

インストールされます。

$ berks install

sudoのCookbookを使用する

下記のサイトで、使い方を確認します。
基本的には、recipeを読み込み、sakuravps.jsonに記述すれば、準備は完了です。

sudo Cookbook – Chef Supermarket

~/vagrantdir/sakuravps/chef-repo/nodes/sakuravps.json

(略)
    "recipe[ssh]",
    "recipe[sudo]"
  ],
  "authorization": {
      "sudo": {
        "groups": ["wheel"],
        "passwordless": "true"
      }
  },
(略)

仮想環境にrecipeを反映します。

$ vagrant destroy -f
$ vagrant up
$ knife solo bootstrap sakuravps

sudoを確認

仮想環境にログインして、確認してみましょう。
前回はさらっと書いてしまいましたが、SSHのresipeを反映後は、以下のようにしないとログインできませんので、注意しましょう。

$ ssh sakuravps
    ↓
$ ssh -l morisan 192.168.33.10 -p 61234 -i ~/id_rsa_open.ppk

sudoを使うことができれば、完成ですが、変更されたファイルも見てみましょう。

[morisan@localhost ~]$ sudo vi /etc/sudoers

/etc/sudoers

(略)
%wheel ALL=(ALL) NOPASSWD:ALL

また、下記のデータが追加されたのが、分かるかと思います。

~/vagrantdir/sakuravps/chef-repo/cookbooks/sudo/
~/vagrantdir/sakuravps/chef-repo/cookbooks/Berksfile.lock

iptablesの設定

portから不正なアクセスを防ぐために、iptablesの設定をします。
これもsudoと同じようにサードパーティCookbookを使います。

  • iptablesの設定

SSHの設定を変えたあとは、portログイン方法が変わっているので、初期化状態からでないとChefでリリースするのが面倒になります。

recipeを反映させる際は、必ず初期状態に戻しましょう。

simple iptablesをインストール

以下のサイトを見ると、simple iptablesというサードパーティCookbookを使っていました。

さくらVPSの初期設定をChef Soloでやってみた〜サードパーティcookbookの使い方〜

シンプルで使いやすそうでしたので、私も習います。

simple_iptables Cookbook – Chef Supermarket

先ほどと同じように、Berksfileファイルを修正します。
sudoの下辺りに追記します。

~/vagrantdir/sakuravps/chef-repo/Berksfile

(略)
cookbook 'simple_iptables'

忘れないように実行します。

$ berks install

simple iptablesを使用する

myiptablesというCookbookを作って、そこに書いていきましょう。

knife cookbook create myiptables -o site-cookbooks

下記のサイトにExampleがあるので、そこを拝借します。
メールportも忘れずに追加します。
(25 SMTP / 110 POP3 / 143 IMAP / 587 SMTP)

また、SSHのポートはnodes/sakuravps.jsonから読み込むようにします。

simple_iptables Cookbook – Chef Supermarket

~/vagrantdir/sakuravps/chef-repo/site-cookbooks/myiptables/recipes/default.rb

simple_iptables_policy "INPUT" do
  policy "DROP"
end

simple_iptables_rule "system" do
  rule [
         "--in-interface lo",
         "-m conntrack --ctstate ESTABLISHED,RELATED",
         "--proto tcp --dport #{node["ssh"]["port"]}",
       ]
  jump "ACCEPT"
end

simple_iptables_rule "http" do
  rule [ "--proto tcp --dport 80",
         "--proto tcp --dport 443" ]
  jump "ACCEPT"
end

simple_iptables_rule "mail" do
  rule [
         "--proto tcp --dport 25",
         "--proto tcp --dport 110",
         "--proto tcp --dport 143",
         "--proto tcp --dport 587"
       ]
  jump "ACCEPT"
end

sakuravps.jsonにrecipeを書くのも忘れないようにしましょう。

~/vagrantdir/sakuravps/chef-repo/nodes/sakuravps.json

(略)
    "recipe[simple_iptables]",
    "recipe[myiptables]"
(略)

仮想環境にrecipeを反映します。

$ vagrant destroy -f
$ vagrant up
$ knife solo bootstrap sakuravps

iptablesを確認

仮想環境にログインして、確認してみましょう。

$ ssh -l morisan 192.168.33.10 -p 61234 -i ~/id_rsa_open.ppk
[morisan@localhost ~]$ sudo vi /etc/sysconfig/iptables

設定したport番号が記述されていれば、完了です。

/etc/sysconfig/iptables

-A system --jump ACCEPT --proto tcp --dport 61234
-A INPUT  --jump http
-A http --jump ACCEPT --proto tcp --dport 80
-A http --jump ACCEPT --proto tcp --dport 443
-A INPUT  --jump mail
-A mail --jump ACCEPT --proto tcp --dport 25
-A mail --jump ACCEPT --proto tcp --dport 110
-A mail --jump ACCEPT --proto tcp --dport 143
-A mail --jump ACCEPT --proto tcp --dport 587

続きは次回!