Your SlideShare is downloading. ×
Opensolaris ipfilter 20090710
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Opensolaris ipfilter 20090710

1,810
views

Published on


0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,810
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
11
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. OpenSolaris IP Filter さりげなく パケットフィルタリング を実現する方法 OpenSolaris Evangelist Kazuyuki Sato
  • 2. Agenda Firewall について Solaris Firewalls Global Default Policy Network Services Policy ログについて まとめ NAT 参考情報
  • 3. FireWall について
  • 4. Firewall の基本的な役割 ようこそ、混沌渦巻く The Internet へ ホストはルータを介して別なネットワークにパケット を転送することで通信を行います Firewall はネットワーク間のパケットを一定の ルールに基づいて制御する装置 アクセス制限を適切にコントロールすることで セキュリティを高める より安全にネットワーク接続を行うことを目的と している
  • 5. OpenSolaris IP Filter pg 5 Firewall の種類 Network-Level(Packet) Firewalls パケットに含まれる情報を基に、 rule を作成し、そ の rule を基に通過 / 拒否をパケットに適用し、通 信を制御する Application-Level Firewall proxy や Application gateway を利用した通信 application-level での protocol (smtp, http, ftp...) 制御となるため、 protocol 毎に application gateway を用意する必要がある
  • 6. OpenSolaris IP Filter pg 6 Firewall の種類 さらに、 Network-Level(Packet) Firewalls に は二つの種類がある Statefull Network-Level Firewalls セッションを監視しながらインテリジェントにコネクション を管理する方式を持つ Stateless Network-Level Firewalls セッションを監視せず、基本的な情報のみでコネクショ ンを管理 (protocol, source/destination address or port, message type) Statefull Network-Level Firewall は、この機能を持っ ている
  • 7. OpenSolaris IP Filter pg 7 Firewall の種類 Stateless Network-Level Firewalls の方式で は、パケットの基本的な情報のみで管理するた め、応答を含めた通過するパケットすべてのコ ネクションを静的に管理しなければならない しかし、上記の条件だけでは、決めうちの処理 になってしまうため、これに加え Statefull Packet Inspection 機能を持つ Statefull Network-Level Firewalls が一般的に必要とさ れ広く利用されている
  • 8. OpenSolaris IP Filter pg 8 Firewall の種類 (Statefull Network-level Firewalls) ネットワークインターフェースを流れるパケット を、「 rule 」に従いフィルタリングする「パケット フィルタリング」機能を持つ パケットのデータを判断し、動的にポートを開 閉する仕組みを持つ (Stateful Packet Inspection) セッション情報を保持し、不正なセッションは即座 に叩き落とす コネクションをセッションとして認識、管理している ため、戻りパケットの rule を定義する必要がない
  • 9. OpenSolaris IP Filter pg 9 Solaris Firewalls
  • 10. OpenSolaris IP Filter pg 10 Solaris における Firewall 機能 Solaris 9 までは、 SunScreen と呼ばれる強 力な Firewall 製品が提供されていた firewall の存在を検知できないようにする Stealth mode を持つ Statefull Firewall Solaris 10 での大がかりな TCP/IP stack 変更 (Fire Engine) に追随できず、あえなく EOL Solaris 10 では IP Filter が統合 IP Filter 1.0 は 1993 年に OSS としてリリース Solaris において、無償で Firewall を構築するとな ると、これ一択というくらい使われている
  • 11. OpenSolaris IP Filter pg 11 Solaris における Firewall 機能 Solaris 10 から OpenSolaris に継承された IP Filter Statefull Firewall 機能を実装し、 kernel module として提供 Solaris 10 や OpenSolaris に搭載されるものは、 Solaris に特化したエンハンスが追加 Ipv6 対応 , Packet Filter Hooks による zone 対応など OSS 版に入れ替えることも可能 OSS 版は、 SNMP trap を送出できる予定 作者 Darren Reed 氏は、 Sun のエンジニア OSS 版 http://coombs.anu.edu.au/~avalon/
  • 12. OpenSolaris IP Filter pg 12 IP Filter の課題 そんな素晴らしい IP Filter ですが・・・ IP Filter の設定はシンプルだが、ネットワーク セキュリティやパケットフィルタリングを理解す る必要がある もっと、簡単に使う ( 設定する ) ことができない ものか・・・
  • 13. OpenSolaris IP Filter pg 13 そこで、 Solaris host-based firewall Nevada b109 にて追加された新機能 PSARC 2008/580 Solaris host-based firewall http://arc.opensolaris.org/caselog/PSARC/2008/580 rule を、より簡単に設定する方法を提供 SMF のサービスに IP Filter の設定を統合 SMF サービス毎に block/pass の設定を持たせる サービス毎に利用するポート番号を基に rule を自 動生成 OpenSolaris 2009.06 (b111 ベース ) で利用 可能に
  • 14. OpenSolaris IP Filter pg 14 そして、設定をよりシームレスに IP Filter を設定するためのプロパティが追加 svc://network/ipfilter:default 各種サービスを提供する svc://FMRI svccfg コマンドで firewall を制御可能に 基本となるポリシーは svc://network/ipfilter:default で定義 個別のポリシーは、各種サービスの FMRI で定義 ポート番号などを知らなくともサービス名で制御可能
  • 15. OpenSolaris IP Filter pg 15 svc://network/ipfilter:default firewall_config_default/policy svccfg Tips: プロパティの値を空 (empty) にしたい場合は、 # svccfg -s FMRI delpropvalue hoge/hoge 現在の値 を実行してみよう
  • 16. OpenSolaris IP Filter pg 16 policy について ポリシーは、二段階で制御される Global Default Policy では基本となる policy を設定 Network Services Policy では、サービスの policy を設定し、そ のポートに関する Global Default Policy を上書きする この事を踏まえて rule は作成される Global Default Policy Network Services Policy svc://network/ipfilter:default で決定される policy 各サービスの svc://FMRI で 決定される policy 強い ( 上書き ) 基本となる policy
  • 17. OpenSolaris IP Filter pg 17 本日、覚えて帰ってくださいね! firewall_config_default/policy firewall_config_default/apply_to firewall_config_default/open_pots firewall_config_default/exceptions これらの設定は、 Global Default Policy と呼ばれます。 Global Default Policy
  • 18. OpenSolaris IP Filter pg 18 svc://network/ipfilter:default 「 firewall_config_default 」 プロパティ NEW! まず、大まかなポリシーを決定します 来るものは叩き落とすか・・・受け入れるか・・・ 最初に下記の要素が重要です policy パケットフィルタリングのポリシーを設定 “allow” or “deny” or “none" apply_to 条件を適用させる要素を設定 host, subnet, ippol, interface policy の設定により適用条件が変わる
  • 19. OpenSolaris IP Filter pg 19 firewall_config_default/policy firewall_config_default/policy に設定可能な policy “none" policy mode (firewall off) アクセス制御は行わない。 全てのパケットの通過を許可 “deny" policy mode (firewall on) incoming packet をすべて受け入れる ただし、 apply_to に設定されたものは、 block 対象になる “allow" policy mode (firewall on) incoming packet はすべて拒否する ただし apply_to に設定されたものは、 pass 対象になる
  • 20. OpenSolaris IP Filter pg 20 firewall_config_default/policy = allow 有効にする すべての incoming packet を遮断するが、指定された source address( 後 述 ) からのアクセスを許可する状態となる # svccfg -s network/ipfilter:default setprop firewall_config_default/policy = allow # svcam refresh ipfilter OpenSolaris host block incoming outgoing pass http ssh ftp off にするには、 none を指定
  • 21. OpenSolaris IP Filter pg 21 allow で生成される rule 生成される default rule すべての incoming packet を遮断するが、指定された source address から のアクセスを許可する状態するため、下記 rule が自動生成される OpenSolaris host block in out pass http ssh ftp # Non-service programs rules # Global Default rules pass out log quick all keep state block in log all log 採取 など、 全ての packet (all)
  • 22. OpenSolaris IP Filter pg 22 ちょっと rule を覗いてみましょう rule は、次の情報で構成される action packet の pass( 許可 ) または block( 拒否 ) を定義 direction packet の方向を定義 packet packet を判定するための filtering rule の定義 pass block out in log quick keep state log all action direction packet default rule を例に
  • 23. OpenSolaris IP Filter pg 23 rule の動作 rule の動作 1. 通信を rule と比較 (direction と packet) 2. マッチした場合、 rule に指定された action を記憶 3. マッチする前までに記憶していた action はすべて破棄 4.rule の終わりに到達するか、マッチした rule に "quick" keyword が含まれる場合は、この action を実行し、以後 のマッチング処理は行われずに終了 5. rule にマッチしなければ packet を通過させ終了 この繰り返しにより、パケットフィルタリングを実現している pass block action direction packet out in log quick keep state log all 実行 順序
  • 24. OpenSolaris IP Filter pg 24 rule が間違っていると・・・ svc://network/ipfilter:default が maintenance mode になるので注意 サービス側の設定を間違うと、サービスと ipfilter が maintenance mode になります。 refresh 後は、 svcs -xv で確認
  • 25. OpenSolaris IP Filter pg 25 rule は /usr/tmp/ipf ディレクトリに生成 rule は動的に作成される /usr/tmp/ipf ディレクトリに生成 ipf.conf ipf_ovr.conf svc_* ( サービス毎の定義ファイル ) このディレクトリは消してはいけません。 ipfilter の disable/enable で再生成されます refresh や enable にて再生成 直接、これらのファイルを修正しても反映されない 修正が入り onnv b120 以降は /var/run/ipf に変更になりま す!
  • 26. OpenSolaris IP Filter pg 26 svc://network/ipfilter:default firewall_config_default/apply_to
  • 27. OpenSolaris IP Filter pg 27 firewall_config_default/apply_to firewall_config_default/apply_to に設定可能 な構成要素 host (host[6]:IPaddress) ホストの IP アドレスを直接指定 ex. host:192.168.0.1 subnet (network[6]:IP/netmask) network address を指定 ex. network:192.168.0.0/24 ippool (pool[6]:pool number) ippool を利用した指定 ex. pool:77 interface (if:interface_name) network interface を指定 ex. if:e1000g0 ※6 をつけると IPv6 の情報となります
  • 28. OpenSolaris IP Filter pg 28 firewall_config_default/apply_to firewall_config_default/apply_to に設定された要素 は、 firewall_config_default/policy の設定で、条件 が変わる事に注意 ( 大事なことなので、何度も書きま す !) “deny" policy mode incoming packet をすべて受け入れる ただし、 apply_to に設定されたものは、 block 対 象になる “allow" policy mode incoming packet はすべて拒否する ただし apply_to に設定されたものは、 pass 対象 になる
  • 29. OpenSolaris IP Filter pg 29 firewall_config_default/apply_to firewall_config_default/policy = allow 設定時、特 定の network からの packet は通過させる # svccfg -s network/ipfilter:default setprop firewall_config_default/policy = allow # svccfg -s network/ipfilter:default setprop firewall_config_default/apply_to = network:192.168.99.0/24 # svcadm refresh ipfilter 192.168.99.0/24 の network からのアクセスは無 条件で通過 下記の rule が生成される pass out log quick all keep state pass in log quick from 192.168.99.0/24 to any block in log all
  • 30. OpenSolaris IP Filter pg 30 firewall_config_default/apply_to firewall_config_default/policy =deny 設定時、特 定の network からの packet は拒否する # svccfg -s network/ipfilter:default setprop firewall_config_default/policy = deny # svccfg -s network/ipfilter:default setprop firewall_config_default/apply_to = network:192.168.99.0/24 # svcadm refresh ipfilter 192.168.99.0/24 の network からのアクセスは無 条件で拒否 下記の rule が生成される pass out log quick all keep state block in log quick from 192.168.99.0/24 to any ※ deny は incoming packet を全て受け入れるため、 block in log all の rule は生成されない
  • 31. OpenSolaris IP Filter pg 31 svc://network/ipfilter:default firewall_config_default/open_ports svccfg Tips: プロパティに値を複数登録したい場合は、 # svccfg -s FMRI addpropvalue hoge/hoge 追加する値 を実行してみよう
  • 32. OpenSolaris IP Filter pg 32 firewall_config_default/open_ports rule に依存せず、任意の port をオープン firewall_config_default/open_ports にオープンす るポートを指定 ( 複数指定可能 ) DHCP(tcp/68) と ssh(tcp/22) をオープンに # svccfg -s ipfilter:default addpropvalue firewall_config_default/open_ports tcp:22 # svccfg -s ipfilter:default addpropvalue firewall_config_default/open_ports udp:68 # svccfg -s ipfilter:default listprop firewall_config_default/open_ports firewall_config_default/open_ports astring "" "tcp:22" "udp:68" "udp:546" # svcadm refresh ipfilter pass in log quick proto tcp from any to any port = 22 pass in log quick proto udp from any to any port = 68 pass out log quick all keep state block in log all 生成される rule
  • 33. OpenSolaris IP Filter pg 33 svc://network/ipfilter:default firewall_config_default/exceptions
  • 34. OpenSolaris IP Filter pg 34 firewall_config_default/exceptions policy に依存する例外を指定可能 firewall_config_default/exceptions に例外とする要素を指定 値は apply_to と同様の値となる ( 複数指定可能 ) policy = deny 時、 192.168.7.0/24 の network address を持つ network と 192.168.99.100 を持つホストからのパケットを通過 # svccfg -s ipfilter:default setprop firewall_config_default/policy = deny # svccfg -s ipfilter:default addpropvalue firewall_config_default/exceptions "network:192.168.7.0/24" # svccfg -s ipfilter:default addpropvalue firewall_config_default/exceptions = "host:192.168.99.100" # svcadm refresh ipfilter pass in log quick from 192.168.99.100 to any pass in log quick from 192.168.7.0/24 to any pass out log quick all keep state 生成される rule policy = allow 時は、 exceptions に 登録されたものは block になります。 使いどころがないのかなぁと。。。
  • 35. OpenSolaris IP Filter pg 35 Global Default Policy まとめ firewall_default_config/policy にて allow また は deny の policy を選択 allow/deny の挙動を把握しつつ apply_to にて 調整 policy に依存したくない port は、 open_ports に登録する このように基本となる policy を設定する
  • 36. OpenSolaris IP Filter pg 36 Network Service Policy
  • 37. OpenSolaris IP Filter pg 37 大事なことなので 2 回目 Global Default Policy Network Services Policy svc://network/ipfilter:default で 決定される基本となる policy 各サービスの svc://FMRI で 決定される policy 強い ( 上書き ) ポリシーは、二段階で制御される Global Default Policy では基本となる policy を設定 Network Services Policy では、サービスの policy を設定し、そ のポートに関する Global Default Policy を上書きする この事を踏まえて rule は作成される
  • 38. OpenSolaris IP Filter pg 38 Network Services Policy SMF の各サービス (svc://FMRI) に firewall_config/policy プロパティが追加 基本は、 ipfilter:default の設定を引き継ぐ、 「 use_global 」が設定される 優先順位が、 global default Policy より高いた め、サービス側で個別に policy を設定した場 合は、サービス側の rule が最初に評価される ※FMRI = fault management resource identifier
  • 39. OpenSolaris IP Filter pg 39 Network Services Policy network/comsat:default network/finger:default network/ftp:defaultxml network/routing/rdisc:default network/routing/route:default network/talk:default network/login:eklogin network/login:klogin network/login:rlogin network/rexec:default network/shell:default network/shell:kshell network/telnet:default network/nfs/rquota:default network/nfs/server:default network/ipfilter:default network/smtp:sendmail network/ntp:default network/dns/multicast:default network/dhcp-server:default network/ssl/proxy network/smb/server:default network/ssh:default network/echo:dgram network/echo:stream network/discard:dgram network/discard:stream network/time:dgram network/time:stream network/daytime:dgram network/daytime:stream network/rpc/bind:default network/rpc/mdcomm:default network/rpc/meta:default network/rpc/metamed:default network/rpc/metamh:default network/rpc/rex:default network/rpc/nisplus:default network/rpc/bootparams:default network/rpc/rstat:default network/rpc/rusers:default network/rpc/spray:default network/rpc/wall:default application/print/server:default application/print/rfc1179:default application/print/ipp-listener:default system/idmap:default system/system-log:default application/management/seaport:default application/management/sma:default application/management/snmpdx application/management/wbem:default application/management/webmin:default network/dns/server:default network/http:squid network/http:lighttpd14 network/ssl/stunnel:default system/webconsole:console x11/xvnc-inetd:default x11/x11-server network/nis/client:default network/smb/client:default network/nfs/cbd:default network/nfs/nlockmgr:default network/nfs/status:default Ready!
  • 40. OpenSolaris IP Filter pg 40 本日、覚えて帰ってくださいね! firewall_config/policy firewall_config/apply_to これらの設定は、 Network Services Policy と呼ばれます。 Network Services Policy
  • 41. OpenSolaris IP Filter pg 41 各サービスの svc://FMRI 「 firewall_config 」 プロパティ NEW! svc://network/ipfilter:default で設定した global default Policy と同一の設定内容 policy パケットフィルタリングのポリシーを設定 “allow” or “deny” or “none" apply_to 条件を適用させる要素を設定 host, subnet, ippol, interface policy の設定により適用条件が変わる 唯一異なる点は、 global default Policy より優先順位が高いという 点
  • 42. OpenSolaris IP Filter pg 42 firewall_config/policy firewall_config_default/policy = allow 設定時、特定の network からの ssh packet は通過させる # svccfg -s network/ipfilter:default setprop firewall_config_default/policy = allow # svccfg -s ssh setprop firewall_config/policy = allow # svccfg -s ssh setprop firewall_config/apply_to = network:192.168.99.0/24 # svcadm refresh ssh # svcadm refresh ipfilter 192.168.99.0/24 の network からのアクセスは ssh のみ通過 下記の rule が生成される [/usr/tmp/svc_network_ssh_default.ipf] pass in log quick proto tcp from 192.168.99.0/24 to any port = 22 flags S keep state keep frags block in log quick proto tcp from any to any port = 22 flags S keep state keep frags [/usr/tmp/ipf.conf] pass out log quick all keep state block in log all
  • 43. OpenSolaris IP Filter pg 43 Network Services Policy のまとめ Nework Services Policy は、 Global Default Policy 全部を上書きするものではない Global Default Policy にて設定される policy を踏まえつつ 特定のポート ( サービスが利用するポート ) に ついてのみ上書きにより policy を変更する でも、 やっぱり、 rule は自分で設定したい・・・
  • 44. OpenSolaris IP Filter pg 44 "Custom" policy firewall_config_default/custom firewall_config_default/custom_policy_file それならば・・・
  • 45. OpenSolaris IP Filter pg 45 もっとカスタマイズしたい! # svccfg -s ipfilter:default setprop firewall_config_default/policy = astring: "custom" # svccfg -s ipfilter:default setprop firewall_config_default/custom_policy_file = astring: "/etc/ipf/ipf.conf" # svcadm refresh ipfilter rule は自分でキメル! 従来どおり /etc/ipf/ipf.conf にコツコツと rule を積み重ねてゆく 設定方法 設定方法 今日の話はなかったことに。。。 policy に custom を設定 custom_policy_file に設定したファイル名に rule を記述することが可能に /usr/tmp/ipf/ipf.conf は、 custom_policy_file に設定したファイル名へのリ ンクになるため、 SMF プロパティでの設定は機能しなくなります 難易度 UP!
  • 46. OpenSolaris IP Filter pg 46 ログについて ipfstat, ipmon, logging
  • 47. OpenSolaris IP Filter pg 47 ipfstat で統計情報を表示 引数なしで統計情報を出力 # ipfstat bad packets: in 0 out 0 IPv6 packets: in 0 out 0 input packets: blocked 6213 passed 480 nomatch 2 counted 0 short 0 output packets: blocked 0 passed 431 nomatch 4 counted 0 short 0 input packets logged: blocked 6202 passed 478 output packets logged: blocked 0 passed 427 packets logged: input 0 output 0 log failures: input 0 output 0 fragment state(in): kept 0 lost 0 not fragmented 0 fragment state(out): kept 0 lost 0 not fragmented 0 packet state(in): kept 12 lost 0 packet state(out): kept 8 lost 4 ICMP replies:0 TCP RSTs sent: 0 Invalid source(in): 0 Result cache hits(in): 0 (out): 0 IN Pullups succeeded: 61 failed: 0 OUT Pullups succeeded: 10 failed: 0 Fastroute successes: 0 failures: 0 TCP cksum fails(in): 0 (out): 0 IPF Ticks: 63771 Packet log flags set: (0) none
  • 48. OpenSolaris IP Filter pg 48 ipfstat を top, prstat 風に ipfstat -t でテーブル情報を表示 macbook - IP Filter: v4.1.9 - state top 12:31:23 Src: 0.0.0.0, Dest: 0.0.0.0, Proto: any, Sorted by: # bytes Source IP Destination IP ST PR #pkts #bytes ttl 129.158.22.60,51967 66.249.89.104,80 4/4 tcp 379 159194 109:03:41 129.158.23.204,51875 128.237.157.136,6667 4/4 tcp 1782 95336 119:59:54 129.158.23.204,64847 66.249.89.104,80 4/4 tcp 205 77480 119:59:09 129.158.23.204,45222 192.18.19.180,993 4/4 tcp 1434 73694 119:58:39 129.158.22.60,35174 66.249.89.99,80 4/4 tcp 245 66065 109:03:41 129.158.22.60,33009 209.85.201.111,993 4/4 tcp 1106 64383 109:04:12 129.158.23.204,38735 66.249.89.104,80 4/4 tcp 183 56408 119:59:09 129.158.23.204,38719 209.85.147.109,993 4/4 tcp 894 46424 119:58:40 129.158.22.60,62938 192.18.19.180,993 4/4 tcp 634 38145 109:04:12 129.158.22.60,59366 209.85.201.111,993 4/4 tcp 373 34628 109:02:39 129.158.22.60,52826 209.85.201.111,993 4/4 tcp 523 34577 109:04:12 129.158.23.204,36820 66.249.89.147,80 4/4 tcp 75 34152 119:56:13 129.158.23.204,36290 209.85.147.109,993 4/4 tcp 390 25064 119:57:44
  • 49. OpenSolaris IP Filter pg 49 filtering rule の確認 現在の filtering rule を確認 ( ipfstat -i ) # ipfstat -i pass in log quick proto tcp from 192.168.99.254/32 to any port = ftp flags S/FSRPAU keep state keep frags block in log quick proto tcp from any to any port = ftp flags S/FSRPAU keep state keep frags pass in log quick proto tcp from 192.168.99.254/32 to any port = ftp-data flags S/FSRPAU keep state keep frags block in log quick proto tcp from any to any port = ftp-data flags S/FSRPAU keep state keep frags pass in log quick proto icmp from any to any icmp-type routersol pass in log quick proto icmp from any to any icmp-type routerad pass in log quick proto tcp from any to any port = ssh pass in log quick proto udp from any to any port = bootpc pass in log quick proto udp from any to any port = dhcpv6-client block in log all 現在の incoming filtering rule を確認 ( ipfstat -ni) # ipfstat -ni @1 pass in log quick proto tcp from 192.168.99.254/32 to any port = ftp flags S/FSRPAU keep state keep frags @2 block in log quick proto tcp from any to any port = ftp flags S/FSRPAU keep state keep frags @3 pass in log quick proto tcp from 192.168.99.254/32 to any port = ftp-data flags S/FSRPAU keep state keep frags @4 block in log quick proto tcp from any to any port = ftp-data flags S/FSRPAU keep state keep frags @5 pass in log quick proto icmp from any to any icmp-type routersol @6 pass in log quick proto icmp from any to any icmp-type routerad @7 pass in log quick proto tcp from any to any port = ssh @8 pass in log quick proto udp from any to any port = bootpc @9 pass in log quick proto udp from any to any port = dhcpv6-client @10 block in log all # ipfstat -no @1 pass out log quick all keep state 現在の outgoing filtering rule を確認 ( ipfstat -no)
  • 50. OpenSolaris IP Filter pg 50 ipmon でログ内容を表示 ログ表示(リアルタイム @ の後ろにある 「 p 」 or 「 b 」で action を判断 p = pass b = block # ipmon 06/07/2009 17:54:28.584603 zonevnic100 @0:5 b 192.168.99.254,41792 -> 192.168.99.100,21 PR tcp len 20 52 -S IN NAT 06/07/2009 17:54:38.734900 zonevnic100 @0:5 b 192.168.99.254,41792 -> 192.168.99.100,21 PR tcp len 20 52 -S IN NAT 06/07/2009 17:56:48.699310 zonevnic100 @0:5 b 192.168.99.254 -> 192.168.99.100 PR icmp len 20 84 icmp echo/0 IN 06/07/2009 17:56:49.694910 zonevnic100 @0:5 b 192.168.99.254 -> 192.168.99.100 PR icmp len 20 84 icmp echo/0 IN 06/07/2009 17:56:50.694942 zonevnic100 @0:5 b 192.168.99.254 -> 192.168.99.100 PR icmp len 20 84 icmp echo/0 IN 06/07/2009 17:56:51.694922 zonevnic100 @0:5 b 192.168.99.254 -> 192.168.99.100 PR icmp len 20 84 icmp echo/0 IN 06/07/2009 17:57:34.554894 zonevnic100 @0:1 p 192.168.99.254,35076 -> 192.168.99.100,22 PR tcp len 20 40 -A K-S K-F IN 06/07/2009 17:57:37.561499 zonevnic100 @0:1 p 192.168.99.254,35076 -> 192.168.99.100,22 PR tcp len 20 120 -AP K-S K-F IN 06/07/2009 17:57:37.584836 zonevnic100 @0:1 p 192.168.99.100,22 -> 192.168.99.254,35076 PR tcp len 20 136 -AP K-S K-F OUT 06/07/2009 17:57:37.584972 zonevnic100 @0:1 p 192.168.99.254,35076 -> 192.168.99.100,22 PR tcp len 20 136 -AP K-S K-F IN 06/07/2009 17:57:37.586107 zonevnic100 @0:1 p 192.168.99.100,22 -> 192.168.99.254,35076 PR tcp len 20 104 -AP K-S K-F OUT 06/07/2009 17:57:37.654883 zonevnic100 @0:1 p 192.168.99.254,35076 -> 192.168.99.100,22 PR tcp len 20 40 -A K-S K-F IN
  • 51. OpenSolaris IP Filter pg 51 ファイルにログを採取 syslog を利用してファイル出力可能 local0.debug - debug 用 full dump local0.warning - block を記録 local0.info - pass,block を記録 /etc/syslog.conf に下記を設定 空の logfile を /var/log/ に touch コマンドで作成 local0.error /var/log/ipf_error.log local0.warning /var/log/ipf_warn.log local0.notice /var/log/ipf_notice.log local0.info /var/log/ipf_info.log ※facility と file 名の間は、スペースではなくタブで # svcadm refresh system-log ipmon で出力される log と同じものが記録
  • 52. OpenSolaris IP Filter pg 52 まとめ global default Policy にて policy を決定 基本的には、 policy を allow に設定し、 incoming packet は全て block そして、必要なサービスについては Network Services Policy にて個別に policy を定義 Casual Use を目指した実装のため、細かな rule を作成したい場合は、 Custom Policy に て設定する必要がある
  • 53. OpenSolaris IP Filter pg 53 まとめ この機能が実装されたことにより、各 SMF の manifest に firewall_config property group が追加 また、特殊な処理が必要なサービスでは、 SMF method に create_ipf_rules() function が追加 ipfilter:default firewall_config_default/policy に allow が設定 されるとこの function を持つ method から rule が /usr/tmp/ipf/ 配下に作成され有効となる。 そのため、 manifest を自作している場合は、 property group の追加や method での対応が 必要になる場合がある
  • 54. OpenSolaris IP Filter pg 54 NAT (Network Address Translation)
  • 55. OpenSolaris IP Filter pg 55 NAT(Network Address Translation) 外部に送出するパケットの発信元 IP アドレス と宛先 IP アドレスを書き換えることで、プライ ベートアドレスのホストにおいても通信を可能と する技術 Ipv4 アドレスの枯渇問題に貢献している IP Filter の NAT 機能は、パケットフィルタリン グ機能と切り離されているため、個別に設定す る必要がある
  • 56. OpenSolaris IP Filter pg 56 /etc/ipf/ipnat.conf /etc/ipnat.conf に、 mapping rule を記述し、下記の要素で構成される map interface-name 変換ルール たとえば、 192.168.99.0/24 の network adress を持つホストからの通信を 変換対象とする。その際、利用される ineterface は nge0 とする map nge0 192.168.99.0/24 -> 0/32 proxy port ftp ftp/tcp map nge0 192.168.99.0/24 -> 0/32 portmap tcp/udp auto map nge0 192.168.99.0/24 -> 0/32 0/32 は、魔法の言葉 nge0 に割り当てられている IP adress を利用して通信をおこなう設定 となるため変換用の IP address を指定する必要がない
  • 57. OpenSolaris IP Filter pg 57 ipnat -l で変換テーブルを表示 $ ipnat -l List of active MAP/Redirect filters: rdr * 0.0.0.0/0 port 21 -> 0.0.0.0/32 port 21 tcp proxy ftp map nge0 192.168.99.0/24 -> 0.0.0.0/32 proxy port ftp ftp/tcp map nge0 192.168.99.0/24 -> 0.0.0.0/32 portmap tcp/udp auto map nge0 192.168.99.0/24 -> 0.0.0.0/32 List of active sessions: MAP 192.168.99.100 57578 <- -> 129.158.22.60 26346 [218.44.192.178 22]
  • 58. OpenSolaris IP Filter pg 58 Firewall の次は、 IDS/IPS を Firewall は万能ではありません rule に従い通過したパケットの中に悪意のある パケットが潜んでいる可能性も。。。 自動改札機のようなもの 侵入検知システムと組み合わせることで、より 堅牢なシステムを構築可能 IDS(Intrusion Detection System) IPS(intrusion prevention/protection system) Snort: http://www.snort.org/
  • 59. OpenSolaris IP Filter pg 59 参考資料 PSARC 2008/580 Solaris host-based firewall http://arc.opensolaris.org/caselog/PSARC/2008/580 System Administration Guide: IP Services http://docs.sun.com/app/docs/doc/819-3000?l=ja > Chapter 24 Solaris IP Filter (Overview) http://docs.sun.com/app/docs/doc/819-0380?l=ja > 第 25 章 Solaris IP フィルタ ( 概要 ) IPFilter Homepage http://coombs.anu.edu.au/~avalon/ Site Administration Course – フィルタリング http://www.wakhok.ac.jp/~kanayama/summer/02/site/node96.html
  • 60. OpenSolaris IP Filter pg 60 参考 : IP Filter を構成するファイル コマンド (/usr/sbin) ipf ipfs ipfstat ipmon ipnat ippool /etc/ipf ipnat.conf, ippool.conf, ipf.con ( カスタム定義ファイル ) SAMPLE ファイル /usr/share/ipfilter/example 補助コマンド /usr/lib/servinfo kernel module /usr/kernel/drv/ipf /usr/kernel/drv/amd64/ipf /usr/kernel/drv/sparcv9/ipf Package SUNWipfr SUNWipfu SUNWipfh online manual svc.ipfd
  • 61. OpenSolaris IP Filter pg 61 参考情報 DHCP クライアントとして構成されている場合 は、自動的に port 68, 546 を通過させる rule が作成される pass in log quick from any to any port = 68 # bootpc pass in log quick from any to any port = 546 # dhcpv6-client /sbin/netstrategy コマンドで判別しているが wifi などは対象外となるため、 Default Global Policy の open_ports で対応しておくのもあり pass in log quick from any to any port = 68 # bootpc pass in log quick from any to any port = 546 # dhcpv6-client # /sbin/netstrategy zfs nge0 dhcp #dhcp を key に DHCP クライアントと認識 pass in log quick from any to any port = 68 # bootpc pass in log quick from any to any port = 546 # dhcpv6-client
  • 62. OpenSolaris Evangelist Kazuyuki Sato ありがとうございました。 OpenSolaris IP Filter さりげなく パケットフィルタリング を実現する方法
  • 63. おまけ
  • 64. OpenSolaris IP Filter pg 64 router を作成してみる or non-global zone VirtualBox The INTERNET ※ イメージです nge0 vboxnic254 vboxstub0 vboxnic0 vboxnic0 router
  • 65. OpenSolaris IP Filter pg 65 仮想 network を作成 crossbow で仮想 network 環境を構築 etherstub( 仮想 Switch) を作成 $ dladm create-etherstub vboxstub0 zone または VBox に割り当てる vnic を作成 dladm create-vnic -l vboxstub0 -m 2:8:20:xx:xx:f5 vboxnic0 MAC addr は固定にしておくと何かと吉 global 側に割り当てる vnic を作成 dladm create-vnic -l vboxstub0 vnicnic254
  • 66. OpenSolaris IP Filter pg 66 各 interface の設定 各 network interface の割り当て IP address vboxnic254 192.168.99.254/24 # ifconfig vboxnic254 192.168.99.254 netmask 255.255.255.0 broadcast + up vboxnic0 192.168.99.1/24 znon-global zone または VBox に割り当てられる IP non-global zone または VBox 側で設定 nge0 は、適当 Internet と通信するため、すでの IP address が割り当てられている前提とする router の設定 # routeadm -e ipv4-forwarding # routeadm -e ipv4-routing # routeadm -u $ routeadm 構成 現在の 現在の オプション 構成 システム状態 --------------------------------------------------------------- IPv4 ルーティング enabled enabled IPv6 ルーティング disabled disabled IPv4 転送 enabled enabled IPv6 転送 disabled disabled
  • 67. OpenSolaris IP Filter pg 67 router を作成してみる or non-global zone VirtualBox The INTERNET 出来上がったもの ※イメージです nge0 vboxnic254 vboxstub0 vboxnic0 vboxnic0 router
  • 68. OpenSolaris IP Filter pg 68 NAT の設定 /etc/ipf/ipnat.conf の設定 map nge0 192.168.99.0/24 -> 0/32 proxy port ftp ftp/tcp map nge0 192.168.99.0/24 -> 0/32 portmap tcp/udp auto map nge0 192.168.99.0/24 -> 0/32 ※nge0 は利用する nic 名に変更 NAT の有効化 # svcadm enable ipfilter # ipnat -l List of active MAP/Redirect filters: rdr * 0.0.0.0/0 port 21 -> 0.0.0.0/32 port 21 tcp proxy ftp map nge0 192.168.99.0/24 -> 0.0.0.0/32 proxy port ftp ftp/tcp map nge0 192.168.99.0/24 -> 0.0.0.0/32 portmap tcp/udp auto map nge0 192.168.99.0/24 -> 0.0.0.0/32
  • 69. OpenSolaris IP Filter pg 69 non-global zone の作成 non-global zone の作成 # zonecfg -z testzone testzone: そのような構成済みゾーンはありません 'create' を使用して、新しいゾーンの構成を開始してください。 zonecfg:testzone> create zonecfg:testzone> set zonepath=/rpool/testzone zonecfg:testzone> set ip-type=exclusive zonecfg:testzone> set autoboot=true zonecfg:testzone> add net zonecfg:testzone:net> set physical=zonevnic110 zonecfg:testzone:net> end zonecfg:testzone> verify zonecfg:testzone> commit zonecfg:testzone> # zoneadm -z testzone install # zoneadm -z testzone boot # zlogin -C testzone testzone に割り当てる IP は 192.168.99.100 gateway は、 192.168.99.254 DNS を利用できるよう /etc/resolv.conf および /etc/nsswitch.conf の設定も忘れずに
  • 70. OpenSolaris IP Filter pg 70 router を作成してみる or non-global zone VirtualBox The INTERNET 出来上がったもの ※イメージです nge0 vboxnic254 vboxstub0 vboxnic0 vboxnic0 router 192.168.99.254 192.168.99.1/24 192.168.99.1/24 NAT
  • 71. OpenSolaris IP Filter pg 71 完成 non-global zone から適当にアクセスしてみて ください vboxnic254 は、再起動で消えてしまうので必 要ならば /etc/hostname.vboxnic254 の設定 をしてください testzone で ipfilter の練習をしてみるのが安全 はしょっりすぎて、情報が抜けている可能性も ありますがご容赦を。。。