DynagenでCCIEを目指す
INE Workbook Volume I Security Tips
最終更新:
it_certification
-
view
Tips
11.5 Traffic Filtering using Extended Access-Lists
tracerouteが使用しているUDP portを暗記しても、CCIE試験会場でど忘れするリスクは避ける事ができません。以下の方法を使用すれば、仮にど忘れしたとしても、port番号を調べる事ができます。
R4: access-list 100 permit udp an range 3000 65535 any logging buffered 4096 ! debug ip packet detail 100 Rack22R4#traceroute 155.22.45.5 Type escape sequence to abort. Tracing the route to 155.22.45.5 1 155.22.45.5 8 msec * 8 msec Rack22R4# Sep 9 04:30:17.511: FIBipv4-packet-proc: route packet from (local) src 155.22.45.4 dst 155.22.45.5 Sep 9 04:30:17.511: FIBipv4-packet-proc: packet routing succeeded Sep 9 04:30:17.511: IP: s=155.22.45.4 (local), d=155.22.45.5 (Serial0/1/0), len 28, sending Sep 9 04:30:17.511: UDP src=49161, dst=33434 Sep 9 04:30:17.511: IP: s=155.22.45.4 (local), d=155.22.45.5 (Serial0/1/0), len 28, sending full packet Sep 9 04:30:17.511: UDP src=49161, dst=33434 Sep 9 04:30:17.519: FIBipv4-packet-proc: route packet from (local) src 155.22.45.4 dst 155.22.45.5 Sep 9 04:30:17.519: FIBipv4-packet-proc: packet routing succeeded Sep 9 04:30:17.519: IP: s=155.22.45.4 (local), d=155.22.45.5 (Serial0/1/0), len 28, sending Sep 9 04:30:17.519: UDP src=49162, dst=33435 Sep 9 04:30:17.519: IP: s=155.22.45.4 (local), d=155.22.45.5 (Serial0/1/0), len 28, sending full packet Sep 9 04:30:17.519: UDP src=49162, dst=33435 Rack22R4# Sep 9 04:30:20.519: FIBipv4-packet-proc: route packet from (local) src 155.22.45.4 dst 155.22.45.5 Sep 9 04:30:20.519: FIBipv4-packet-proc: packet routing succeeded Sep 9 04:30:20.519: IP: s=155.22.45.4 (local), d=155.22.45.5 (Serial0/1/0), len 28, sending Sep 9 04:30:20.519: UDP src=49163, dst=33436 Sep 9 04:30:20.519: IP: s=155.22.45.4 (local), d=155.22.45.5 (Serial0/1/0), len 28, sending full packet Sep 9 04:30:20.519: UDP src=49163, dst=33436 Rack22R4#
11.11 Preventing Packet Spoofing with uRPF
uRPFは、送信元IPアドレスをチェックし、送信元アドレスが偽装されている可能性があるパケットを破棄する機能です。設定コマンドは以下の通りです。
{{
<pre class="simple">
Routetr(config-if)# <b>ip verify unicast source reachability-via</b> { <b>rx</b> | <b>any</b> } [ <b>acl</b> ] [ <b>self-ping</b> ] [ <b>default-route</b> ]
</pre>
<pre class="simple">
Routetr(config-if)# <b>ip verify unicast source reachability-via</b> { <b>rx</b> | <b>any</b> } [ <b>acl</b> ] [ <b>self-ping</b> ] [ <b>default-route</b> ]
</pre>
パラメタ | 意味 |
---|---|
rx | strict modeで動作します。strict modeは、ルーティングテーブルと送信元IPアドレスを付け合わせ、最短ルートとなるI/Fから入ってきた場合のみ、パケットを受信します。 |
any | loose modeで動作します。loose modeは、ルーティングテーブルに存在する(default route, Null0へのルートは除く)IPアドレスの場合、パケットを受信します。マルチホーミング環境でasymmetric routingが発生しうる場合は、このmodeを選択します。 |
acl | uRPFチェックの結果が不適合と判断された場合、ACLに合致したパケットは例外的に転送を許可する事ができます。また、全拒否ログ出力のACLを定義すれば、uRPFチェック不適合のパケットをログ出力する事もできます。 |
self-ping | DOS攻撃を防止する観点から、デフォルトではルータ自身へのpingは許可されていませんが、このオプションを投入する事でルータ自身へのpingを許可するようになります。 | default-route | default-routeも含めて、uRPFチェックの対象とします。 |
動作確認には、ある程度コツが必要です。
uRPFを設定したR4でACLによるログ出力を可能にするため、以下を投入します。
uRPFを設定したR4でACLによるログ出力を可能にするため、以下を投入します。
R4: ip access-list log-update threshold 1 ! interface FastEthernet0/1 no ip route-cache
R1からR4へ送信元IPアドレスを偽装して、pingを送信します。以下のようにLoopbackアドレスに適当なIPアドレスを設定する事で送信元IPアドレスを偽装します。
R1: interface Loopback1 ip address 1.1.1.1 255.255.255.255 Rack16R1#ping 155.16.146.4 source Loopback 1 repeat 2 timeout 1 Type escape sequence to abort. Sending 2, 100-byte ICMP Echos to 155.16.146.4, timeout is 1 seconds: Packet sent with a source address of 1.1.1.1 .. Success rate is 0 percent (0/2) Rack16R1#
R4において、送信元を偽装したパケットについてログ出力されている事を確認します。
R4: Rack16R4#show logging omitted Sep 9 15:47:20.739: %SEC-6-IPACCESSLOGNP: list 34 denied 0 1.1.1.1 -> 155.16.146.4, 1 packet Sep 9 15:47:21.739: %SEC-6-IPACCESSLOGNP: list 34 denied 0 1.1.1.1 -> 155.16.146.4, 1 packet Rack16R4#
11.12 Using NBAR for Content-Based Filtering
CBACが使用可能な正規表現は以下の通りです。Linuxで使用される正規表現と異なるので、注意が必要です。( "."には任意の一文字という意味はないので注意。癖で".*"と書きたくなるので、要注意です。)
* - matches any sequence of characters (non-empty) ? - matched any single character (you need to oress Ctrl-V in order to enter "?") | - alternative, logical OR [] - range, e.g. [ab] matches either "a" or "b" () - grouping; delimit the logical end of patter; or you can use "*.(exe|bin)" as equivalent to "*.exe|*.bin"
11.21 Port Security
本問題は、error disableの自動復旧を設定しなければなりませんが、cause名を暗記するのは難しいです。また、ヘルプメッセージから設定を探しても、尤もらしい設定が複数あり、混乱を招きます。
Rack16SW1(config)#errdisable recovery cause ? all Enable timer to recover from all error causes arp-inspection Enable timer to recover from arp inspection error disable state bpduguard Enable timer to recover from BPDU Guard error channel-misconfig Enable timer to recover from channel misconfig error dhcp-rate-limit Enable timer to recover from dhcp-rate-limit error dtp-flap Enable timer to recover from dtp-flap error gbic-invalid Enable timer to recover from invalid GBIC error inline-power Enable timer to recover from inline-power error l2ptguard Enable timer to recover from l2protocol-tunnel error link-flap Enable timer to recover from link-flap error loopback Enable timer to recover from loopback error mac-limit Enable timer to recover from mac limit disable state pagp-flap Enable timer to recover from pagp-flap error port-mode-failure Enable timer to recover from port mode change failure psecure-violation Enable timer to recover from psecure violation error security-violation Enable timer to recover from 802.1x violation error sfp-config-mismatch Enable timer to recover from SFP config mismatch error small-frame Enable timer to recover from small frame error storm-control Enable timer to recover from storm-control error udld Enable timer to recover from udld error vmps Enable timer to recover from vmps shutdown error Rack16SW1(config)#errdisable recovery cause
そこで、cause名を調べる事ができないかを考えます。R1に以下の設定を投入し、HSRPによる仮想IPアドレス, 仮想MACアドレスを定義する事によって、意図的にport-security違反を発生させます。
この方法を使用すれば、cause名をど忘れしたとしても、何とか設定を投入する事ができます。
この方法を使用すれば、cause名をど忘れしたとしても、何とか設定を投入する事ができます。
R1 interface FastEthernet0/0 standby ip 155.16.146.111 SW1 Rack16SW1#show interfaces status err-disabled Port Name Status Reason Err-disabled Vlans Fa0/1 err-disabled psecure-violation Rack16SW1#
11.23 DHCP Snooping
DHCP SnoopingはDHCPのパケットを覗き見する事で、不正なDHCP packetを遮断する機能です。本機能を有効にするには、以下を投入します。
Router(config)# ip dhcp snooping Router(config)# ip dhcp snooping vlan vlan
以下の要領で、覗き見した情報を保存するデータベースを定義する事ができます。
Router(config)# ip dhcp snooping data-base url Router(config)# ip dhcp snooping data-base write-delay sec
ポートに対してtrust, untrustを定義します。trustであるポートからのみDHCPサーバからのパケット(OFFER, ACKなど)を許可する事で、不正なDHCPサーバからのパケットを遮断します。デフォルトで全てのポートはuntrustに設定されており、untrustからtrustに変更するには以下の設定を投入します。通常は、uplink portに対して投入するコマンドです。
Router(config-if)# ip dhcp snooping trust
DHCP Snoopingを設定すると、自動的にOption 82フィールを挿入の設定も有効になります。Option 82フィールを挿入を無効化したい場合は以下の設定を投入します。
Router(config)# no ip dhcp snooping information option
Option 82はDHCPに関する追加情報を付与するフィールドです。このフィールドの中で、特に注意しなければならないのが、giaddrです。giaddrはDHCPを転送したルータのIPアドレスが格納されます。具体的に言えば、DHCP relay agentのIPアドレスが格納されるフィールドです。
ところで、DHCP SnoopingはデフォルトでOption 82の挿入を行う事を思い出して下さい。エッジスイッチで、DHCP Snoopingを行うと、Option 82のgiaddrには0.0.0.0が格納されます(オンラインドキュメントでは、この値を"zero giaddr"と記載されています)。
IOS DHCP Serverは、デフォルトでzero giaddrが設定されたDHCPを破棄してしまいます。つまり、DHCP Snoopingが設定されている環境では明示的に"zero giaddr"を許可する設定を投入しないとDHCPを受信できないという事です。zero giaddrを許可するには、以下のいずれかのコマンドを投入します。
ところで、DHCP SnoopingはデフォルトでOption 82の挿入を行う事を思い出して下さい。エッジスイッチで、DHCP Snoopingを行うと、Option 82のgiaddrには0.0.0.0が格納されます(オンラインドキュメントでは、この値を"zero giaddr"と記載されています)。
IOS DHCP Serverは、デフォルトでzero giaddrが設定されたDHCPを破棄してしまいます。つまり、DHCP Snoopingが設定されている環境では明示的に"zero giaddr"を許可する設定を投入しないとDHCPを受信できないという事です。zero giaddrを許可するには、以下のいずれかのコマンドを投入します。
Router(config)# ip dhcp relay information trust-all Router(config-if)# ip dhcp relay information trusted
11.24 DHCP Snooping and the Information Option
DHCP Snoopingの過程で、Options 82フィールドに明示的な値を挿入する事ができます。設定は以下の通りです。
Router(config)# ip dhcp snooping information option format remote-id string string Router(config-if)# ip dhcp snooping information option allow-untrusted
Catalyst Switchは、untrust portでOption 82が付与されたDHCPパケットを受信するとそのパケットを破棄します(untrust port配下にはDHCP Serverが存在しない事が多いので)。もし、この挙動を打ち消したい場合は、以下のコマンドを投入します。
Router(config)# ip dhcp snooping information option allow-untrusted
Option 82はベンダーやプラットフォーム毎にフォーマットが異なるので、showコマンド等でOption 82を確認する方法は提供されていません。
Option 82を確認するには、以下の通りdumpを取得するしか方法がありません。なお、dumpオプションは入力補完が効かない隠しコマンドです。
Option 82を確認するには、以下の通りdumpを取得するしか方法がありません。なお、dumpオプションは入力補完が効かない隠しコマンドです。
R4: access-list 100 permit udp any any bootpc access-list 100 permit udp any any bootps ! debug ip packet dump 100 Rack14R4# EEE95C40: FFFF FFFFFFFF ...... EEE95C50: 0019AA1D 48A00800 4500014D 05A40000 ..*.H ..E..M.$.. EEE95C60: FE11B5FC 00000000 FFFFFFFF 00440043 ~.5|.........D.C EEE95C70: 01391CAA 01010600 000023E6 00008000 .9.*......#f.... EEE95C80: 00000000 00000000 00000000 00000000 ................ EEE95C90: 0019AA1D 48A00000 00000000 00000000 ..*.H .......... EEE95CA0: 00000000 00000000 00000000 00000000 ................ EEE95CB0: 00000000 00000000 00000000 00000000 ................ EEE95CC0: 00000000 00000000 00000000 00000000 ................ EEE95CD0: 00000000 00000000 00000000 00000000 ................ EEE95CE0: 00000000 00000000 00000000 00000000 ................ EEE95CF0: 00000000 00000000 00000000 00000000 ................ EEE95D00: 00000000 00000000 00000000 00000000 ................ EEE95D10: 00000000 00000000 00000000 00000000 ................ EEE95D20: 00000000 00000000 00000000 00000000 ................ EEE95D30: 00000000 00000000 00000000 00000000 ................ EEE95D40: 00000000 00000000 00000000 00000000 ................ EEE95D50: 00000000 00000000 00000000 00000000 ................ EEE95D60: 63825363 35010139 0204803D 07010019 c.Sc5..9...=.... EEE95D70: AA1D48A0 0C085261 636B3134 52363708 *.H ..Rack14R67. EEE95D80: 01060F2C 0321962B 521A010B 01092252 ...,.!.+R....."R EEE95D90: 4F555445 52362202 0B010922 53574954 OUTER6"...."SWIT EEE95DA0: 43483222 FF CH2".
11.35 Control Plane Protection (CPPr)
Control Plane Protection (CPPr)は、control plane policingの拡張機能です。CPPrは、Routing Process(RP)を以下3つの仮想的なsub I/Fに分類し、sub I/F毎のより詳細な制御が可能になる機能です。
sub interface | 説明 |
---|---|
host | ルータ宛てのトラフィックがこのI/Fに分類されます。但し、非IPは除きます。 |
transit | ルータを経由するトラフィックがこのI/Fに分類されます。 |
sef exception | 非IPのルータ宛てトラフィックがこのI/Fに分類されます。CDP, arp, L2 keepaaliveなどが該当します。 |
CPPrは、policing以外にport-filtering, per protocol queueingが可能です。
port-filteringはFirewallのような機能で、host sub interfaceに対してポート単位の制御をする事が可能です。設定例は以下の通りです。
port-filteringはFirewallのような機能で、host sub interfaceに対してポート単位の制御をする事が可能です。設定例は以下の通りです。
class-map type port-filter CMAP_FILTER_CLOSED match closed-port match not port 3020 ! policy-map type port-filter PMAP_FILTER_CLOSED class CMAP_FILTER_HOST drop ! control-plane host service-policy type port-filter input PMAP_FILTER_CLOSED
per protocol queueingは、host, transit, cef exceptionの全てのsub interfaceに対して設定可能な機能で、プロトコル毎のqueueuingを定義できます。設定例は以下の通りです。
class-map type queue-threshold CMAP_QUEUE_HTTP match protocl http ! policy-map type queue-threshold PMAP_QUEUE_HTTP class CMAP_QUEUE_HTTP queue-limit 100 ! control-plane host service-policy type queue-threshold input PMAP_QUEUE_HTTP
11.38 Flexible Packet Matching
Flexible Packet Matchingは、かなり詳細な条件(例えば、ペイロードに"AAA"を含む)に基づいたパケットの制御ができる機能です。
注意事項として、正規表現を使用する時は、Cisco流の正規表現ではなくLinux流の正規表現を使用するように注意して下さい。例えば、"AAA"を含む文字列を表現したいならば、".*AAA.*"と記載します。具体例は以下の通りです。
注意事項として、正規表現を使用する時は、Cisco流の正規表現ではなくLinux流の正規表現を使用するように注意して下さい。例えば、"AAA"を含む文字列を表現したいならば、".*AAA.*"と記載します。具体例は以下の通りです。
class-map type access-control match-all ICMP_ECHO_STRING match field icmp type eq 8 match start icmp payload offset 0 size 256 regexp ".*AAA.*"