SlideShare a Scribd company logo
OpenSolaris
IP Filter
さりげなく
パケットフィルタリング
を実現する方法
OpenSolaris Evangelist
Kazuyuki Sato
Agenda
Firewall について
Solaris Firewalls
Global Default Policy
Network Services Policy
ログについて
まとめ
NAT
参考情報
FireWall について
Firewall の基本的な役割
ようこそ、混沌渦巻く The Internet へ
ホストはルータを介して別なネットワークにパケット
を転送することで通信を行います
Firewall はネットワーク間のパケットを一定の
ルールに基づいて制御する装置
アクセス制限を適切にコントロールすることで
セキュリティを高める
より安全にネットワーク接続を行うことを目的と
している
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 を用意する必要がある
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 は、この機能を持っ
ている
OpenSolaris IP Filter pg 7
Firewall の種類
Stateless Network-Level Firewalls の方式で
は、パケットの基本的な情報のみで管理するた
め、応答を含めた通過するパケットすべてのコ
ネクションを静的に管理しなければならない
しかし、上記の条件だけでは、決めうちの処理
になってしまうため、これに加え Statefull
Packet Inspection 機能を持つ Statefull
Network-Level Firewalls が一般的に必要とさ
れ広く利用されている
OpenSolaris IP Filter pg 8
Firewall の種類 (Statefull Network-level Firewalls)
ネットワークインターフェースを流れるパケット
を、「 rule 」に従いフィルタリングする「パケット
フィルタリング」機能を持つ
パケットのデータを判断し、動的にポートを開
閉する仕組みを持つ (Stateful Packet Inspection)
セッション情報を保持し、不正なセッションは即座
に叩き落とす
コネクションをセッションとして認識、管理している
ため、戻りパケットの rule を定義する必要がない
OpenSolaris IP Filter pg 9
Solaris Firewalls
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 を構築するとな
ると、これ一択というくらい使われている
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/
OpenSolaris IP Filter pg 12
IP Filter の課題
そんな素晴らしい IP Filter ですが・・・
IP Filter の設定はシンプルだが、ネットワーク
セキュリティやパケットフィルタリングを理解す
る必要がある
もっと、簡単に使う ( 設定する ) ことができない
ものか・・・
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 ベース ) で利用
可能に
OpenSolaris IP Filter pg 14
そして、設定をよりシームレスに
IP Filter を設定するためのプロパティが追加
svc://network/ipfilter:default
各種サービスを提供する svc://FMRI
svccfg コマンドで firewall を制御可能に
基本となるポリシーは
svc://network/ipfilter:default で定義
個別のポリシーは、各種サービスの FMRI で定義
ポート番号などを知らなくともサービス名で制御可能
OpenSolaris IP Filter pg 15
svc://network/ipfilter:default
firewall_config_default/policy
svccfg Tips:
プロパティの値を空 (empty) にしたい場合は、
# svccfg -s FMRI delpropvalue hoge/hoge 現在の値
を実行してみよう
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
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
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 の設定により適用条件が変わる
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 対象になる
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 を指定
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)
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 を例に
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
実行
順序
OpenSolaris IP Filter pg 24
rule が間違っていると・・・
svc://network/ipfilter:default が maintenance
mode になるので注意
サービス側の設定を間違うと、サービスと
ipfilter が maintenance mode になります。
refresh 後は、 svcs -xv で確認
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 に変更になりま
す!
OpenSolaris IP Filter pg 26
svc://network/ipfilter:default
firewall_config_default/apply_to
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 の情報となります
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 対象
になる
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
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 は生成されない
OpenSolaris IP Filter pg 31
svc://network/ipfilter:default
firewall_config_default/open_ports
svccfg Tips:
プロパティに値を複数登録したい場合は、
# svccfg -s FMRI addpropvalue hoge/hoge 追加する値
を実行してみよう
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
OpenSolaris IP Filter pg 33
svc://network/ipfilter:default
firewall_config_default/exceptions
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 になります。
使いどころがないのかなぁと。。。
OpenSolaris IP Filter pg 35
Global Default Policy まとめ
firewall_default_config/policy にて allow また
は deny の policy を選択
allow/deny の挙動を把握しつつ apply_to にて
調整
policy に依存したくない port は、 open_ports
に登録する
このように基本となる policy を設定する
OpenSolaris IP Filter pg 36
Network Service Policy
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 は作成される
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
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!
OpenSolaris IP Filter pg 40
本日、覚えて帰ってくださいね!
firewall_config/policy
firewall_config/apply_to
これらの設定は、
Network Services Policy
と呼ばれます。
Network Services Policy
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 より優先順位が高いという
点
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
OpenSolaris IP Filter pg 43
Network Services Policy のまとめ
Nework Services Policy は、 Global Default
Policy 全部を上書きするものではない
Global Default Policy にて設定される policy
を踏まえつつ
特定のポート ( サービスが利用するポート ) に
ついてのみ上書きにより policy を変更する
でも、
やっぱり、 rule は自分で設定したい・・・
OpenSolaris IP Filter pg 44
"Custom" policy
firewall_config_default/custom
firewall_config_default/custom_policy_file
それならば・・・
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!
OpenSolaris IP Filter pg 46
ログについて
ipfstat, ipmon, logging
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
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
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)
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
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 と同じものが記録
OpenSolaris IP Filter pg 52
まとめ
global default Policy にて policy を決定
基本的には、 policy を allow に設定し、 incoming
packet は全て block
そして、必要なサービスについては Network
Services Policy にて個別に policy を定義
Casual Use を目指した実装のため、細かな
rule を作成したい場合は、 Custom Policy に
て設定する必要がある
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 での対応が
必要になる場合がある
OpenSolaris IP Filter pg 54
NAT
(Network Address Translation)
OpenSolaris IP Filter pg 55
NAT(Network Address Translation)
外部に送出するパケットの発信元 IP アドレス
と宛先 IP アドレスを書き換えることで、プライ
ベートアドレスのホストにおいても通信を可能と
する技術
Ipv4 アドレスの枯渇問題に貢献している
IP Filter の NAT 機能は、パケットフィルタリン
グ機能と切り離されているため、個別に設定す
る必要がある
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 を指定する必要がない
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]
OpenSolaris IP Filter pg 58
Firewall の次は、 IDS/IPS を
Firewall は万能ではありません
rule に従い通過したパケットの中に悪意のある
パケットが潜んでいる可能性も。。。
自動改札機のようなもの
侵入検知システムと組み合わせることで、より
堅牢なシステムを構築可能
IDS(Intrusion Detection System)
IPS(intrusion prevention/protection system)
Snort: http://www.snort.org/
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
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
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
OpenSolaris Evangelist
Kazuyuki Sato
ありがとうございました。
OpenSolaris
IP Filter
さりげなく
パケットフィルタリング
を実現する方法
おまけ
OpenSolaris IP Filter pg 64
router を作成してみる
or
non-global zone
VirtualBox
The INTERNET
※ イメージです
nge0
vboxnic254
vboxstub0
vboxnic0
vboxnic0
router
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
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
OpenSolaris IP Filter pg 67
router を作成してみる
or
non-global zone
VirtualBox
The INTERNET
出来上がったもの
※イメージです
nge0
vboxnic254
vboxstub0
vboxnic0
vboxnic0
router
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
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 の設定も忘れずに
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
OpenSolaris IP Filter pg 71
完成
non-global zone から適当にアクセスしてみて
ください
vboxnic254 は、再起動で消えてしまうので必
要ならば /etc/hostname.vboxnic254 の設定
をしてください
testzone で ipfilter の練習をしてみるのが安全
はしょっりすぎて、情報が抜けている可能性も
ありますがご容赦を。。。

More Related Content

What's hot

“見てわかる” ファイバーチャネルSAN基礎講座(第5弾)~さあ、いよいよ、運用です!~
“見てわかる” ファイバーチャネルSAN基礎講座(第5弾)~さあ、いよいよ、運用です!~“見てわかる” ファイバーチャネルSAN基礎講座(第5弾)~さあ、いよいよ、運用です!~
“見てわかる” ファイバーチャネルSAN基礎講座(第5弾)~さあ、いよいよ、運用です!~
Brocade
 

What's hot (7)

Lagopusで試すL3ルーティング + α (Lagopusの設定方法いろいろ)
Lagopusで試すL3ルーティング + α (Lagopusの設定方法いろいろ)Lagopusで試すL3ルーティング + α (Lagopusの設定方法いろいろ)
Lagopusで試すL3ルーティング + α (Lagopusの設定方法いろいろ)
 
ネットワーク機器のAPIあれこれ入門 (NetOpsCoding#2)
ネットワーク機器のAPIあれこれ入門(NetOpsCoding#2)ネットワーク機器のAPIあれこれ入門(NetOpsCoding#2)
ネットワーク機器のAPIあれこれ入門 (NetOpsCoding#2)
 
【Interop Tokyo 2016】 ShowNet - SSS-17 : ShowNet 2016 を支える シスコの最新テクノロジー
【Interop Tokyo 2016】 ShowNet - SSS-17 :  ShowNet 2016 を支えるシスコの最新テクノロジー【Interop Tokyo 2016】 ShowNet - SSS-17 :  ShowNet 2016 を支えるシスコの最新テクノロジー
【Interop Tokyo 2016】 ShowNet - SSS-17 : ShowNet 2016 を支える シスコの最新テクノロジー
 
Ryu+Lagopusで OpenFlowの動きを見てみよう
Ryu+Lagopusで OpenFlowの動きを見てみようRyu+Lagopusで OpenFlowの動きを見てみよう
Ryu+Lagopusで OpenFlowの動きを見てみよう
 
“見てわかる” ファイバーチャネルSAN基礎講座(第5弾)~さあ、いよいよ、運用です!~
“見てわかる” ファイバーチャネルSAN基礎講座(第5弾)~さあ、いよいよ、運用です!~“見てわかる” ファイバーチャネルSAN基礎講座(第5弾)~さあ、いよいよ、運用です!~
“見てわかる” ファイバーチャネルSAN基礎講座(第5弾)~さあ、いよいよ、運用です!~
 
クラウド環境の監視がより便利になった Pandora FMS ~手間をかけない監視設定を実現する仕組み~
クラウド環境の監視がより便利になった Pandora FMS ~手間をかけない監視設定を実現する仕組み~クラウド環境の監視がより便利になった Pandora FMS ~手間をかけない監視設定を実現する仕組み~
クラウド環境の監視がより便利になった Pandora FMS ~手間をかけない監視設定を実現する仕組み~
 
ブロケード FC ファブリックスイッチ オペレーション講座(後編)
ブロケード FC  ファブリックスイッチ オペレーション講座(後編)ブロケード FC  ファブリックスイッチ オペレーション講座(後編)
ブロケード FC ファブリックスイッチ オペレーション講座(後編)
 

Similar to Opensolaris ipfilter 20090710

Trema の紹介とネットワーク仮想化への応用
Trema の紹介とネットワーク仮想化への応用Trema の紹介とネットワーク仮想化への応用
Trema の紹介とネットワーク仮想化への応用
kazuyas
 
Mr201304 open flow_security_jpn
Mr201304 open flow_security_jpnMr201304 open flow_security_jpn
Mr201304 open flow_security_jpn
FFRI, Inc.
 
Nsegソフトウェアルータvyatta
NsegソフトウェアルータvyattaNsegソフトウェアルータvyatta
Nsegソフトウェアルータvyatta
jem 3
 
Dbts2013 特濃jpoug log_file_sync
Dbts2013 特濃jpoug log_file_syncDbts2013 特濃jpoug log_file_sync
Dbts2013 特濃jpoug log_file_sync
Koji Shinkubo
 
Osc10do linux nextstep
Osc10do linux nextstepOsc10do linux nextstep
Osc10do linux nextstep
smokey monkey
 
Windows 10 IoT Coreの脅威分析と実施すべきセキュリティ対策 by 和栗直英 - CODE BLUE 2015
Windows 10 IoT Coreの脅威分析と実施すべきセキュリティ対策 by 和栗直英 - CODE BLUE 2015Windows 10 IoT Coreの脅威分析と実施すべきセキュリティ対策 by 和栗直英 - CODE BLUE 2015
Windows 10 IoT Coreの脅威分析と実施すべきセキュリティ対策 by 和栗直英 - CODE BLUE 2015
CODE BLUE
 

Similar to Opensolaris ipfilter 20090710 (20)

Lagopus Router v19.07.1
Lagopus Router v19.07.1Lagopus Router v19.07.1
Lagopus Router v19.07.1
 
日本マイクロソフト Forefront tmg_セミナ受講メモ_2011-09-01
日本マイクロソフト Forefront tmg_セミナ受講メモ_2011-09-01日本マイクロソフト Forefront tmg_セミナ受講メモ_2011-09-01
日本マイクロソフト Forefront tmg_セミナ受講メモ_2011-09-01
 
Trema の紹介とネットワーク仮想化への応用
Trema の紹介とネットワーク仮想化への応用Trema の紹介とネットワーク仮想化への応用
Trema の紹介とネットワーク仮想化への応用
 
Mr201304 open flow_security_jpn
Mr201304 open flow_security_jpnMr201304 open flow_security_jpn
Mr201304 open flow_security_jpn
 
Solarflare SolarCapture - 10Gbイーサネットパケットキャプチャソフトウェア リリース
Solarflare SolarCapture - 10Gbイーサネットパケットキャプチャソフトウェア リリースSolarflare SolarCapture - 10Gbイーサネットパケットキャプチャソフトウェア リリース
Solarflare SolarCapture - 10Gbイーサネットパケットキャプチャソフトウェア リリース
 
Nsegソフトウェアルータvyatta
NsegソフトウェアルータvyattaNsegソフトウェアルータvyatta
Nsegソフトウェアルータvyatta
 
20150715 xflow kikuta_final
20150715 xflow kikuta_final20150715 xflow kikuta_final
20150715 xflow kikuta_final
 
Janog33.5
Janog33.5Janog33.5
Janog33.5
 
[G-Tech2014講演資料] シスコのSDN最新動向とITインフラエンジニアに求められるスキル - シスコシステムズ合同会社
[G-Tech2014講演資料] シスコのSDN最新動向とITインフラエンジニアに求められるスキル - シスコシステムズ合同会社[G-Tech2014講演資料] シスコのSDN最新動向とITインフラエンジニアに求められるスキル - シスコシステムズ合同会社
[G-Tech2014講演資料] シスコのSDN最新動向とITインフラエンジニアに求められるスキル - シスコシステムズ合同会社
 
#logstudy 01 rsyslog入門
#logstudy 01 rsyslog入門#logstudy 01 rsyslog入門
#logstudy 01 rsyslog入門
 
201012 ips
201012 ips201012 ips
201012 ips
 
How to run P4 BMv2
How to run P4 BMv2How to run P4 BMv2
How to run P4 BMv2
 
Dbts2013 特濃jpoug log_file_sync
Dbts2013 特濃jpoug log_file_syncDbts2013 特濃jpoug log_file_sync
Dbts2013 特濃jpoug log_file_sync
 
Osc10do linux nextstep
Osc10do linux nextstepOsc10do linux nextstep
Osc10do linux nextstep
 
OpenFlow
OpenFlowOpenFlow
OpenFlow
 
AWS SDK for Python and CLOUDIAN HyperStore
AWS SDK for Python and CLOUDIAN HyperStoreAWS SDK for Python and CLOUDIAN HyperStore
AWS SDK for Python and CLOUDIAN HyperStore
 
ブロケード FC ファブリックスイッチオペレーション講座(前編)
ブロケード FC ファブリックスイッチオペレーション講座(前編)ブロケード FC ファブリックスイッチオペレーション講座(前編)
ブロケード FC ファブリックスイッチオペレーション講座(前編)
 
Windows 10 IoT Coreの脅威分析と実施すべきセキュリティ対策 by 和栗直英 - CODE BLUE 2015
Windows 10 IoT Coreの脅威分析と実施すべきセキュリティ対策 by 和栗直英 - CODE BLUE 2015Windows 10 IoT Coreの脅威分析と実施すべきセキュリティ対策 by 和栗直英 - CODE BLUE 2015
Windows 10 IoT Coreの脅威分析と実施すべきセキュリティ対策 by 和栗直英 - CODE BLUE 2015
 
CND(Certified Network Defender:認定ネットワークディフェンダー)のご紹介
CND(Certified Network Defender:認定ネットワークディフェンダー)のご紹介CND(Certified Network Defender:認定ネットワークディフェンダー)のご紹介
CND(Certified Network Defender:認定ネットワークディフェンダー)のご紹介
 
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6
 

More from Kazuyuki Sato

~Solaris 11 をマルチ・プロトコル SCSI ターゲットに~ 「もう一つのストレージ仮想化機能 “COMSTAR”概要」
~Solaris 11 をマルチ・プロトコル SCSI ターゲットに~ 「もう一つのストレージ仮想化機能 “COMSTAR”概要」~Solaris 11 をマルチ・プロトコル SCSI ターゲットに~ 「もう一つのストレージ仮想化機能 “COMSTAR”概要」
~Solaris 11 をマルチ・プロトコル SCSI ターゲットに~ 「もう一つのストレージ仮想化機能 “COMSTAR”概要」
Kazuyuki Sato
 
Oracle Solaris 11デベロッパーが押さえておきたい機能
Oracle Solaris 11デベロッパーが押さえておきたい機能Oracle Solaris 11デベロッパーが押さえておきたい機能
Oracle Solaris 11デベロッパーが押さえておきたい機能
Kazuyuki Sato
 
Solaris 10 から Solaris 11 への移行準備とポイント
Solaris 10 から Solaris 11 への移行準備とポイントSolaris 10 から Solaris 11 への移行準備とポイント
Solaris 10 から Solaris 11 への移行準備とポイント
Kazuyuki Sato
 
Oracle Solaris 11 における システム、ネットワーク、ストレージの仮想化機能
Oracle Solaris 11 における システム、ネットワーク、ストレージの仮想化機能Oracle Solaris 11 における システム、ネットワーク、ストレージの仮想化機能
Oracle Solaris 11 における システム、ネットワーク、ストレージの仮想化機能
Kazuyuki Sato
 
Wine on Solaris 11 Express
Wine on Solaris 11 ExpressWine on Solaris 11 Express
Wine on Solaris 11 Express
Kazuyuki Sato
 
Oracle solaris 10 u9 iSCSI Boot
Oracle solaris 10 u9 iSCSI BootOracle solaris 10 u9 iSCSI Boot
Oracle solaris 10 u9 iSCSI Boot
Kazuyuki Sato
 
「前回の COMSTAR ネタに刺激されてしまったので、オレも COMSTAR を使ってみた。」(仮)
「前回の COMSTAR ネタに刺激されてしまったので、オレも COMSTAR を使ってみた。」(仮)「前回の COMSTAR ネタに刺激されてしまったので、オレも COMSTAR を使ってみた。」(仮)
「前回の COMSTAR ネタに刺激されてしまったので、オレも COMSTAR を使ってみた。」(仮)
Kazuyuki Sato
 

More from Kazuyuki Sato (10)

第6回コンテナ型仮想化の情報交換@東京「今日から触れる Solaris Zones 入門」
第6回コンテナ型仮想化の情報交換@東京「今日から触れる Solaris Zones 入門」 第6回コンテナ型仮想化の情報交換@東京「今日から触れる Solaris Zones 入門」
第6回コンテナ型仮想化の情報交換@東京「今日から触れる Solaris Zones 入門」
 
Oracle Solaris 11.2 新機能概要
Oracle Solaris 11.2 新機能概要Oracle Solaris 11.2 新機能概要
Oracle Solaris 11.2 新機能概要
 
第4回コンテナ型仮想化勉強会@東京 Oracle Solaris のコンテナ技術「Solaris Zones」
第4回コンテナ型仮想化勉強会@東京 Oracle Solaris のコンテナ技術「Solaris Zones」第4回コンテナ型仮想化勉強会@東京 Oracle Solaris のコンテナ技術「Solaris Zones」
第4回コンテナ型仮想化勉強会@東京 Oracle Solaris のコンテナ技術「Solaris Zones」
 
~Solaris 11 をマルチ・プロトコル SCSI ターゲットに~ 「もう一つのストレージ仮想化機能 “COMSTAR”概要」
~Solaris 11 をマルチ・プロトコル SCSI ターゲットに~ 「もう一つのストレージ仮想化機能 “COMSTAR”概要」~Solaris 11 をマルチ・プロトコル SCSI ターゲットに~ 「もう一つのストレージ仮想化機能 “COMSTAR”概要」
~Solaris 11 をマルチ・プロトコル SCSI ターゲットに~ 「もう一つのストレージ仮想化機能 “COMSTAR”概要」
 
Oracle Solaris 11デベロッパーが押さえておきたい機能
Oracle Solaris 11デベロッパーが押さえておきたい機能Oracle Solaris 11デベロッパーが押さえておきたい機能
Oracle Solaris 11デベロッパーが押さえておきたい機能
 
Solaris 10 から Solaris 11 への移行準備とポイント
Solaris 10 から Solaris 11 への移行準備とポイントSolaris 10 から Solaris 11 への移行準備とポイント
Solaris 10 から Solaris 11 への移行準備とポイント
 
Oracle Solaris 11 における システム、ネットワーク、ストレージの仮想化機能
Oracle Solaris 11 における システム、ネットワーク、ストレージの仮想化機能Oracle Solaris 11 における システム、ネットワーク、ストレージの仮想化機能
Oracle Solaris 11 における システム、ネットワーク、ストレージの仮想化機能
 
Wine on Solaris 11 Express
Wine on Solaris 11 ExpressWine on Solaris 11 Express
Wine on Solaris 11 Express
 
Oracle solaris 10 u9 iSCSI Boot
Oracle solaris 10 u9 iSCSI BootOracle solaris 10 u9 iSCSI Boot
Oracle solaris 10 u9 iSCSI Boot
 
「前回の COMSTAR ネタに刺激されてしまったので、オレも COMSTAR を使ってみた。」(仮)
「前回の COMSTAR ネタに刺激されてしまったので、オレも COMSTAR を使ってみた。」(仮)「前回の COMSTAR ネタに刺激されてしまったので、オレも COMSTAR を使ってみた。」(仮)
「前回の COMSTAR ネタに刺激されてしまったので、オレも COMSTAR を使ってみた。」(仮)
 

Opensolaris ipfilter 20090710

  • 2. Agenda Firewall について Solaris Firewalls Global Default Policy Network Services Policy ログについて まとめ NAT 参考情報
  • 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 さりげなく パケットフィルタリング を実現する方法
  • 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 の練習をしてみるのが安全 はしょっりすぎて、情報が抜けている可能性も ありますがご容赦を。。。