― Web Technology and Life ―

chefでufwを設定してubuntuのセキュリティを強化する方法

2013-05-08
最近、サーバー状態管理ツールのchefがブームですがね、やっぱりufwのようなファイヤーウォールの設定こそ、chefみたいなので管理したいですよね。それで、その設定方法について調べてやってみたので、ちょっとさらしておきます。「ここが変だよ!!」「こんなのあるよ!!」ってツッコミお待ちしております。

そもそもufwとは

Linuxのファイヤーウォールのiptablesのubuntuのコマンドラインツールがufwという話みたいです。詳しくはよくわからんです、SentOSの方はお帰りくださいって感じですかね?実際のところ、ファイヤーウォールとは何かいまいちピンと来ていないですが、まぁ、だいたい以下のことを実現するということでしょうか。

  • 指定した外部端末の通信を制限/許可する
  • 指定したアプリケーション/ポートの通信をを制限/許可する

ウェブサイト公開している人たちとしては、いろいろな脆弱性をつかれやすいので、ssh,ftpのIP制限とか気にしておきたいですし、そういうの一括で制御したいというニーズにこたえてくれるのがファイヤーウォールでありufwですね。よくわからんライブラリ入れるくらいなら、お手軽に最初から入っているufwを使うのがカジュアルな感じですかね。あ、あと、ufw(Ubuntu FireWall)なんでしょうか??

ufwの基本的な使い方

そもそも、chefでやる前にコマンドラインからの使い方を、復習/確認します。

基本的なコマンド

sudo ufw enable  #ファイヤーウォールを使うことにします
sudo ufw disable #ファイヤーウォールを使わないことにします
sudo ufw status  #disable/enable状態かどうか確認し、enableなら設定詳細を表示?

#apacheのdeny,allow deny from all的な感じがいいと思いますので、その流れで

sudo ufw default deny #基本すべてのアクセスは拒否

sudo ufw allow http      # httpサービスのアクセスは許可
sudo ufw allow 443/https #httpsの443ポートのアクセスを許可

sudo ufw allow from 212.117.11.43 to any port snmp #232.117.11.43からのsnmpへのアクセスは許可
sudo ufw allow from 212.117.11.43 to any port 2324 #232.117.11.43からの適当にかえたsshのport2324へのアクセスはこんな感じで許可

#もう特定のIPからのアクセスはすべて許可はこんな感じ
sudo ufw allow from 232.117.11.43 

212.117.11.43というのは、適当に書いたオレオレIPなので、各人の環境に即して解釈してください。

portを「http」のようなサービス名で開放する場合には注意が必要

ここでいう、「ufw allow http」の「http」というサービス名は、/etc/servicesに書いてある以下のようなサービス名とportを参照しているので、必要に応じてそちらも変更する必要があります。たとえば、上述の通りsshのportを22から2324にかえているときなどは、「sudo ufw allow from 212.117.11.43 to any port ssh」とかやっても、デフォルトの/etc/servicesでは、22しか許可されません。先の通り、/etc/servicesを変更するか、portの数字指定で開放する必要があります。個人的には、複数portを使用するサービスの場合は、/etc/servicesを変更して、一つのportしか使わないサービスだったらport指定で設定する感じですかねー。

設定の削除

設定の削除は、deleteっていうのをufwのあとにつけて設定文をいれればできます。


sudo ufw allow from 212.117.11.43 to any port snmp

# って設定したら

sudo ufw delete allow from 212.117.11.43 to any port snmp

ただ、長いしなんか後ろの方なんとなく忘れますよね?ということで、以下の方法がオススメです


sudo ufw status numbered
# 以下のようにべろっと設定が出てくる(xxx.xxx.xxx.xxxのところがIP)

     To                         Action      From
     --                         ------      ----
[ 1] 80                         ALLOW IN    Anywhere
[ 2] 443                        ALLOW IN    Anywhere
[ 3] 1234                       ALLOW IN    xxx.xxx.xxx.xxx
[ 4] 161                        ALLOW IN    xxx.xxx.xxx.xxx
[ 5] 162                        ALLOW IN    xxx.xxx.xxx.xxx
[ 7] 3306                       ALLOW IN    xxx.xxx.xxx.xxx
[ 8] 20                         ALLOW IN    xxx.xxx.xxx.xxx
[ 9] 21                         ALLOW IN    xxx.xxx.xxx.xxx
[10] 443                        ALLOW IN    Anywhere (v6)
[11] 80                         ALLOW IN    Anywhere (v6)
[12] 20                         ALLOW IN    Anywhere (v6)

#[]でくくられている7番目を削除
sudo ufw delete 7 

#もう一度たたくと、7番が詰められていることに注意
sudo ufw status numbered

     To                         Action      From
     --                         ------      ----
[ 1] 80                         ALLOW IN    Anywhere
[ 2] 443                        ALLOW IN    Anywhere
[ 3] 1234                       ALLOW IN    xxx.xxx.xxx.xxx
[ 4] 161                        ALLOW IN    xxx.xxx.xxx.xxx
[ 5] 162                        ALLOW IN    xxx.xxx.xxx.xxx
[ 7] 20                         ALLOW IN    xxx.xxx.xxx.xxx
[ 8] 21                         ALLOW IN    xxx.xxx.xxx.xxx
[ 9] 443                        ALLOW IN    Anywhere (v6)
[10] 80                         ALLOW IN    Anywhere (v6)
[11] 20                         ALLOW IN    Anywhere (v6)

注意点としては、左の数字は上から順に振られているだけなので、上の表でいう7番削除するといかように、8番だったやつが7番になるので、一気に削除するときに間違えやすい OR めんどいということですね

一般の設定の流れ

それで、とりあえず、普通はコマンドラインで以下のように設定するものだと思います。

  1. sudo ufw status (立ち上がっているかどうか、立ち上がっている場合は現在の設定状況を確認)
  2. もろもろ設定
  3. sudo ufw enable(ファイヤーウォールを立ち上げ)
  4. sudo ufw status (設定した内容が反映されているか確認)

chefでufwを設定する

そもそも、chefって何よって話ですが、私も最近使い始めたのでよく知りませんが、とりあえず、「サーバーの設定状態をコードで管理できる素晴らしいツール」ですww そのうち、「なんとなくはじめてのchefしました」的な記事も書きますが、とりあえず、使い方とかは『入門Chef Solo - Infrastructure as Code』を見るのがベストです。

firewall,firewall_rulesのresourceをopscodeから落とす

サードパーティのオープソースのresourceであるfirewall,firewall_rulesを落としてくる必要があります。cpanからcpanモジュールを落としてくるという感じですね。

  • opscodeコミュニティに登録して秘密鍵を入手
  • 自分の~.chef以下に諸設定を行う(以下参照)
  • knife cookbook site install firewall (gitのadd,commitも行うのでそれまでの変更はコミットしておく)

最後のコマンドで./cookbooks以下にfirewallディレクトリが出来上がっております。(サードパーティのcookbookは、./site-cookbooksではなく./cookbooksにいれるのが慣例ということですね)

.chef以下の諸設定

vi hirobanex.pem #登録したid+.pemで秘密鍵をと登録
vi knife.rb      

#以下の設定
client_key               '/home/hirobanex/.chef/hirobanex.pem'
cookbook_path            ['./cookbooks']

firewall,firewall_rulesのresourceを使ってufwの設定を行う

firewallリソースの使い方をみながら、設定を行います。

一点個人的になぞなのが、以下でやっているサードパーティの落としてきたcookbook内のrecipeにゴリゴリ書き込んでいいのかどうかということなんですが、どうでしょうか?ぶっちゃけよくわかっていないのでご存知の方がいたら教えてくださいー!

とりあえず、よくわからないのですが「取り急ぎ動けばいいや」発想で、「vi cookbooks/firewall/recipes/default.rb」ということで、以下のように書き込みます。

用途は、ウェブサーバーでリソース監視用にsnmpを使うという感じです。ssh,snmpは212.117.11.43というオレオレIPからしかアクセス許可しないという感じです。

firewall "ufw" do
  action :enable
end

firewall_rule "http" do
  port 80
  action :allow
  notifies :enable, "firewall[ufw]"
end
firewall_rule "https" do
  port 443
  action :allow
  notifies :enable, "firewall[ufw]"
end

firewall_rule "ssh" do
  port 2324
  action :allow
  source "212.117.11.43"
  notifies :enable, "firewall[ufw]"
end

firewall_rule "snmp-1" do
  port 161
  action :allow
  source "212.117.11.43"
  notifies :enable, "firewall[ufw]"
end
firewall_rule "snmp-2" do
  port 162
  action :allow
  source "212.117.11.43"
  notifies :enable, "firewall[ufw]"
end

以上の設定が、以下と同じ設定になります。

sudo ufw allow 80 
sudo ufw allow 443
sudo ufw allow from 212.117.11.43 to any port snmp
sudo ufw allow from 212.117.11.43 to any port 2324
sudo ufw enable  #ファイヤーウォールを使うことにします

いかがでしょうか?設定自体は簡単ですね!やってみた結果、べきどうせいも保たれているし、問題なそうなので、これでいいんじゃないかなって思います。ぜひやってみてください。

終わりに

まぁ、ファイヤーウォールの設定ツールもいろいろあるようですから、ufw以外で設定されていたら勘弁してくださいって感じですが、そういうのもchefにまとまっていれば調べる範囲が少なくて済むんで助かりますね。chefはちょっとずつはじめられるところがいいんじゃないかなーと思っています。

とりあえず、chefの勉強会とか最近よくあるみたいなんで探していきたい今日この頃です。。。サードパーティのresourceの使い方とか依存の解決方法とかよくわからんですので、さりげなく初心者仲間を作りたいところですわー。

chef Linux update_at : 2014-08-12T23:45:17
hirobanex.netの更新情報の取得
 RSSリーダーで購読する   
blog comments powered by Disqus