Opensolaris ipfilter 20090710
-
Upload
kazuyuki-sato -
Category
Entertainment & Humor
-
view
1.884 -
download
2
Transcript of Opensolaris ipfilter 20090710
OpenSolarisIP Filterさりげなくパケットフィルタリングを実現する方法
OpenSolaris Evangelist
Kazuyuki Sato
Agenda
FirewallについてSolaris Firewalls
Global Default PolicyNetwork Services Policyログについて
まとめ
NAT参考情報
FireWall について
Firewallの基本的な役割
ようこそ、混沌渦巻く The Internet へホストはルータを介して別なネットワークにパケットを転送することで通信を行います
Firewallはネットワーク間のパケットを一定のルールに基づいて制御する装置
アクセス制限を適切にコントロールすることでセキュリティを高める
より安全にネットワーク接続を行うことを目的としている
OpenSolaris IP Filter pg 5
Firewallの種類
Network-Level(Packet) Firewallsパケットに含まれる情報を基に、 ruleを作成し、その ruleを基に通過 /拒否をパケットに適用し、通信を制御する
Application-Level Firewallproxyや 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 FirewallSolaris 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 firewallhttp://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:defaultfirewall_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/policyfirewall_config_default/apply_tofirewall_config_default/open_potsfirewall_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
OpenSolarishost
blockincoming
outgoing
passhttp
ssh
ftp
offにするには、 noneを指定
OpenSolaris IP Filter pg 21
allowで生成される rule
生成される default rule すべての incoming packet を遮断するが、指定された source addressから
のアクセスを許可する状態するため、下記 ruleが自動生成される
OpenSolarishost
blockin
outpass
http
sshftp
# Non-service programs rules# Global Default rulespass out log quick all keep stateblock in log all
log採取
など、全てのpacket
(all)
OpenSolaris IP Filter pg 22
ちょっと ruleを覗いてみましょう
ruleは、次の情報で構成されるaction
packetの pass(許可 )または block(拒否 )を定義
directionpacketの方向を定義
packetpacketを判定するための filtering ruleの定義
passblock
outin
log quick keep statelog 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を通過させ終了
この繰り返しにより、パケットフィルタリングを実現している
passblock
action direction packetoutin
log quick keep statelog 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.confipf_ovr.conf svc_* (サービス毎の定義ファイル )
このディレクトリは消してはいけません。ipfilterの disable/enableで再生成されます
refreshや enableにて再生成直接、これらのファイルを修正しても反映されない
修正が入り onnv b120 以降は /var/run/ipfに変更になります!
OpenSolaris IP Filter pg 26
svc://network/ipfilter:defaultfirewall_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 statepass in log quick from 192.168.99.0/24 to anyblock 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 stateblock 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:defaultfirewall_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_portsfirewall_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 = 22pass in log quick proto udp from any to any port = 68pass out log quick all keep stateblock in log all
生成される rule
OpenSolaris IP Filter pg 33
svc://network/ipfilter:defaultfirewall_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 anypass in log quick from 192.168.7.0/24 to anypass out log quick all keep state
生成される rulepolicy = 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 PolicySMFの各サービス (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 Policynetwork/comsat:defaultnetwork/finger:defaultnetwork/ftp:defaultxmlnetwork/routing/rdisc:defaultnetwork/routing/route:defaultnetwork/talk:defaultnetwork/login:ekloginnetwork/login:kloginnetwork/login:rlogin network/rexec:defaultnetwork/shell:defaultnetwork/shell:kshellnetwork/telnet:defaultnetwork/nfs/rquota:defaultnetwork/nfs/server:defaultnetwork/ipfilter:defaultnetwork/smtp:sendmailnetwork/ntp:defaultnetwork/dns/multicast:defaultnetwork/dhcp-server:defaultnetwork/ssl/proxynetwork/smb/server:defaultnetwork/ssh:default
network/echo:dgramnetwork/echo:streamnetwork/discard:dgramnetwork/discard:streamnetwork/time:dgramnetwork/time:streamnetwork/daytime:dgramnetwork/daytime:streamnetwork/rpc/bind:defaultnetwork/rpc/mdcomm:defaultnetwork/rpc/meta:defaultnetwork/rpc/metamed:defaultnetwork/rpc/metamh:defaultnetwork/rpc/rex:defaultnetwork/rpc/nisplus:defaultnetwork/rpc/bootparams:defaultnetwork/rpc/rstat:defaultnetwork/rpc/rusers:defaultnetwork/rpc/spray:defaultnetwork/rpc/wall:defaultapplication/print/server:defaultapplication/print/rfc1179:defaultapplication/print/ipp-listener:defaultsystem/idmap:defaultsystem/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:defaultnetwork/smb/client:defaultnetwork/nfs/cbd:defaultnetwork/nfs/nlockmgr:defaultnetwork/nfs/status:default
Ready!
OpenSolaris IP Filter pg 40
本日、覚えて帰ってくださいね!firewall_config/policyfirewall_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 fragsblock 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 stateblock 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" policyfirewall_config_default/customfirewall_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で統計情報を表示
引数なしで統計情報を出力# ipfstatbad packets: in 0 out 0 IPv6 packets: in 0 out 0 input packets: blocked 6213 passed 480 nomatch 2 counted 0 short 0output packets: blocked 0 passed 431 nomatch 4 counted 0 short 0 input packets logged: blocked 6202 passed 478output packets logged: blocked 0 passed 427 packets logged: input 0 output 0 log failures: input 0 output 0fragment state(in): kept 0 lost 0 not fragmented 0fragment state(out): kept 0 lost 0 not fragmented 0packet state(in): kept 12 lost 0packet state(out): kept 8 lost 4ICMP replies: 0 TCP RSTs sent: 0Invalid source(in): 0Result cache hits(in): 0 (out): 0IN Pullups succeeded: 61 failed: 0OUT Pullups succeeded: 10 failed: 0Fastroute successes: 0 failures: 0TCP cksum fails(in): 0 (out): 0IPF Ticks: 63771Packet 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 ttl129.158.22.60,51967 66.249.89.104,80 4/4 tcp 379 159194 109:03:41129.158.23.204,51875 128.237.157.136,6667 4/4 tcp 1782 95336 119:59:54129.158.23.204,64847 66.249.89.104,80 4/4 tcp 205 77480 119:59:09129.158.23.204,45222 192.18.19.180,993 4/4 tcp 1434 73694 119:58:39129.158.22.60,35174 66.249.89.99,80 4/4 tcp 245 66065 109:03:41129.158.22.60,33009 209.85.201.111,993 4/4 tcp 1106 64383 109:04:12129.158.23.204,38735 66.249.89.104,80 4/4 tcp 183 56408 119:59:09129.158.23.204,38719 209.85.147.109,993 4/4 tcp 894 46424 119:58:40129.158.22.60,62938 192.18.19.180,993 4/4 tcp 634 38145 109:04:12129.158.22.60,59366 209.85.201.111,993 4/4 tcp 373 34628 109:02:39129.158.22.60,52826 209.85.201.111,993 4/4 tcp 523 34577 109:04:12129.158.23.204,36820 66.249.89.147,80 4/4 tcp 75 34152 119:56:13129.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 -ipass in log quick proto tcp from 192.168.99.254/32 to any port = ftp flags S/FSRPAU keep state keep fragsblock in log quick proto tcp from any to any port = ftp flags S/FSRPAU keep state keep fragspass in log quick proto tcp from 192.168.99.254/32 to any port = ftp-data flags S/FSRPAU keep state keep fragsblock in log quick proto tcp from any to any port = ftp-data flags S/FSRPAU keep state keep fragspass in log quick proto icmp from any to any icmp-type routersolpass in log quick proto icmp from any to any icmp-type routeradpass in log quick proto tcp from any to any port = sshpass in log quick proto udp from any to any port = bootpcpass in log quick proto udp from any to any port = dhcpv6-clientblock 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 = passb = block
# ipmon06/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 NAT06/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 NAT06/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 IN06/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 IN06/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 IN06/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 IN06/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 IN06/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 IN06/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 OUT06/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 IN06/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 OUT06/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.loglocal0.warning /var/log/ipf_warn.loglocal0.notice /var/log/ipf_notice.loglocal0.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/tcpmap 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 -lList of active MAP/Redirect filters:rdr * 0.0.0.0/0 port 21 -> 0.0.0.0/32 port 21 tcp proxy ftpmap nge0 192.168.99.0/24 -> 0.0.0.0/32 proxy port ftp ftp/tcpmap nge0 192.168.99.0/24 -> 0.0.0.0/32 portmap tcp/udp automap 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 firewallhttp://arc.opensolaris.org/caselog/PSARC/2008/580
System Administration Guide: IP Serviceshttp://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/ipfipnat.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 # bootpcpass 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 # bootpcpass in log quick from any to any port = 546 # dhcpv6-client
# /sbin/netstrategyzfs nge0 dhcp #dhcpを keyに DHCPクライアントと認識
pass in log quick from any to any port = 68 # bootpcpass in log quick from any to any port = 546 # dhcpv6-client
OpenSolaris Evangelist
Kazuyuki Sato
ありがとうございました。
OpenSolarisIP Filterさりげなくパケットフィルタリングを実現する方法
おまけ
OpenSolaris IP Filter pg 64
routerを作成してみる
or
non-global zone
VirtualBox
The INTERNET
※イメージです
nge0vboxnic254
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 vboxnic0MAC addrは固定にしておくと何かと吉
global側に割り当てる vnicを作成dladm create-vnic -l vboxstub0 vnicnic254
OpenSolaris IP Filter pg 66
各 interfaceの設定
各 network interfaceの割り当て IP addressvboxnic254 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
出来上がったもの※イメージです
nge0vboxnic254
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/tcpmap 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 -lList of active MAP/Redirect filters:rdr * 0.0.0.0/0 port 21 -> 0.0.0.0/32 port 21 tcp proxy ftpmap nge0 192.168.99.0/24 -> 0.0.0.0/32 proxy port ftp ftp/tcpmap nge0 192.168.99.0/24 -> 0.0.0.0/32 portmap tcp/udp automap 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> createzonecfg:testzone> set zonepath=/rpool/testzonezonecfg:testzone> set ip-type=exclusivezonecfg:testzone> set autoboot=truezonecfg:testzone> add netzonecfg:testzone:net> set physical=zonevnic110zonecfg:testzone:net> endzonecfg:testzone> verifyzonecfg:testzone> commitzonecfg:testzone>
# zoneadm -z testzone install # zoneadm -z testzone boot# zlogin -C testzone testzoneに割り当てる IPは 192.168.99.100
gateway は、 192.168.99.254DNSを利用できるよう /etc/resolv.confおよび/etc/nsswitch.confの設定も忘れずに
OpenSolaris IP Filter pg 70
routerを作成してみる
or
non-global zone
VirtualBox
The INTERNET
出来上がったもの※イメージです
nge0vboxnic254
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の練習をしてみるのが安全はしょっりすぎて、情報が抜けている可能性もありますがご容赦を。。。