- 更新日: 2014年10月9日
- Vagrant & Chef
Chef で iptables の設定
Chef で iptables を設定する自作 resipe の例です。template リソースを用いて、iptables 用のテンプレートを元に /etc/sysconfig/iptables(iptables の設定ファイル)を作成します。
以下ページの作業を Chef を使って行う内容です。
iptables (ファイアーウォール)の設定 〜 CentOS6 | EasyRamble
このエントリーは、CentOS サーバー設定用 Chef Cookbook/Recipe の目次 の一部です。
iptables 設定用の recipe
/etc/sysconfig/iptables のバックアップを取った後、template リソースで設定を行います。
site-cookbooks/base_cookbook/recipes/iptables.rb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
# need to restart manually when modifying /etc/sysconfig/iptables iptables_file = "/etc/sysconfig/iptables" bash 'move_iptables_original' do code <<-EOC mv #{iptables_file} #{iptables_file}.org EOC creates "#{iptables_file}.org" end service "iptables" do supports :status => true, :restart => true action [:enable, :start] end template iptables_file do owner "root" group "root" mode "0600" end |
注意点としては、私の場合 iptables や sshd を構成する自作 Chef レシピでは、template/cookbook_file 等のリソースに notifies :restart を書かない方針にしています。理由は以下ページに書いていますが、簡単に言うと設定をミスっていた時に、取り返しがつかない恐れがあるからです。
iptables や sshd の Chef recipe で notifies :restart を書くべきかどうか | EasyRamble
したがって頭のコメントに書いていますが、iptables 用の template ファイルを修正してプロビジョニングした後は、手動で iptables の再起動・動作確認を行う必要があります。
iptables 設定用の template ファイル
続いて、recipe の template リソースで利用する、iptables 設定用のテンプレートファイルです。
site-cookbooks/base_cookbook/templates/default/iptables.erb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
*filter :INPUT DROP [0:0] :FORWARD DROP [0:0] :OUTPUT ACCEPT [0:0] # 自サーバが送信したコネクション開設要求に関連するパケット受信と、接続完了後のパケット受信を許可 -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT # pingやtcp, udpの通信結果に使われるプロトコルicmpのパケット受信を許可 -A INPUT -p icmp -j ACCEPT # ループバックを許可 -A INPUT -i lo -j ACCEPT # 新規セッションなのにSYNフラグの立っていないパケットは拒否 -A INPUT -p tcp -m state --state NEW -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -j DROP # SSH -A INPUT -p tcp -m state --state NEW -m tcp --dport <%= node.set['iptables']['ssh']['port'] %> -j ACCEPT # HTTP -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT COMMIT |
一応最低限必要な設定のみ。ssh については、変更したポート番号を変数で取得しています。必要なポート開放などは、適当に追加をお願いします。
プロビジョニング実行後、iptables の動作確認
上記作業が終わったら、プロビジョニングを実行します。
1 2 3 |
$ bundle exec knife solo cook example.com |
続いてサーバーにログイン後に、手動で iptables を再起動して動作確認を行います。
1 2 3 4 |
$ ssh example.com $ sudo service iptables restart |
上記の ssh 接続はそのままにしておきます。iptables の設定で ssh ポート番号の間違いがあった場合などに、iptables 再起動後に ssh ログインができなくなる可能性があるためです。
別のターミナルから、ssh で別にログインしてみます。
1 2 3 |
$ ssh example.com |
これで ssh 接続ができれば、プロビジョニングで正しく設定できているので元の接続を閉じてもOK。以上です。
- Vagrant & Chef の関連記事
- Vagrantで使うVirtualBoxのVM(仮想マシン)を外付けHDDに移動
- Chefで/etc/sysctl.confのkernel.panicを設定
- Chefでtelnetをインストール
- Chefでyumリポジトリを追加する設定
- ChefでSSH接続用の公開鍵をサーバーに設置
- nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
- Chef Recipe でユーザー・グループを作成
- Chef Recipe で CentOS のネットワーク・ホストを設定
- NetworkManager 他不要なパッケージを削除する Chef Recipe
- CentOS サーバー設定用 Chef Cookbook/Recipe の目次
Leave Your Message!