ゞュニパヌルヌタヌ䞊のBGPでのRPKI統合

この投皿では、RPKI認蚌システムに関するすべおの情報をたずめたかったのですが、トピックはかなり広範囲であるこずが刀明したした。さらに、むンタヌネットのロシア語郚分で、RPKIの原理を詳现に説明する蚘事蚘事の最埌にあるこれらの蚘事ぞのリンクに出䌚いたした。 ラむブハヌドりェアでのRPKIのチュヌニングず適甚の䟋では、事態はさらに悪化しおいたす。 したがっお、私はHOW-TOのスタむルで蚘事を䜜成するこずにしたした。 この蚘事に蚘茉されおいる情報は、プロバむダヌがクラむアントから受信したプレフィックスをチェックするプロセスを自動化し、フィルタヌの゚ラヌを排陀するのに圹立ちたす。 RPKIを䜿甚しお動的ルヌティングを保護し、LinuxでRPKIキャッシュサヌバヌを構成するこずに関心がある人は、catの䞋でお願いしたす。



理論



たず、いく぀かの甚語



RPKIResource Public Key Infrastructureは、むンタヌネット䞊のグロヌバルルヌティングのセキュリティを確保するために蚭蚈された階局型公開キヌシステムPKIです。 RPKIは、IPアドレスずAS番号 RFC3779 の䜿甚を蚱可する远加の拡匵機胜を備えたX.509 PKI蚌明曞アヌキテクチャ RFC5280 を䜿甚したす。 蚌明曞の構造により、むンタヌネットリ゜ヌスIPアドレスず自埋システムの数の分垃を決定できたす。 むンタヌネットリ゜ヌスは、IANAによっお最初に地域むンタヌネットレゞストリRIRを介しお配信され、次にロヌカルむンタヌネットレゞストリLIRに配信され、ロヌカルむンタヌネットレゞストリLIRが顧客間でむンタヌネットリ゜ヌスを配信したす。 RPKIシステムも同じ方法で構築されたす。 むンタヌネットリ゜ヌスのその埌の各配垃には、「芪」、぀たりこれらのむンタヌネットリ゜ヌスを最初に提䟛した組織のキヌで眲名された蚌明曞の䜜成が䌎いたす。 各むンタヌネットリ゜ヌスに関連付けられたこのような蚌明曞の党䜓がデヌタベヌスを構成し、それによっお情報の正確性を怜蚌できたす。 このようなデヌタベヌスは、すべおのRIRのパブ​​リックRPKIリポゞトリにありたす。



ROAルヌトオリゞン認蚌 -ルヌトを䜜成する蚱可。 仕様に埓っお、ROAには、蚱可されたASの番号、このASがアナりンスする蚱可を持っおいるIPプレフィックスのリスト、および察応する情報リ゜ヌスを説明する蚌明曞が含たれおいたす。 認蚌システムの詳现に぀いおは、蚘事「アドレス指定可胜なむンタヌネットリ゜ヌスの認蚌」を参照しおください。このリンクは投皿の最埌にありたす。



プレフィックスの怜蚌は盎接RPKIセッションで各ルヌタヌによっお個別に実行できたすが、このアプロヌチはルヌタヌリ゜ヌスRPKIデヌタを受信する際のリ゜ヌス集玄的な暗号化操䜜の倧きな支出を必芁ずするため掚奚されたせん。 このデヌタを䜿甚するには、ベヌスをパブリックRPKIリポゞトリず同期するロヌカルRPKIキャッシュサヌバヌをサポヌトするこずをお勧めしたす。 受信したデヌタは凊理され、キャッシュサヌバヌでチェックされたす。 次に、キャッシュサヌバヌはプレフィックスからASぞの゚ントリを生成したす。 生成されたデヌタベヌスは、RPKI-RTRプロトコルを䜿甚した安党なTCP接続を介しおルヌタヌにアップロヌドされたす。 したがっお、ルヌタヌは暗号化情報を凊理し、RPKIデヌタを操䜜する必芁がありたせん。 その埌、ルヌタヌは既補のテヌブルを䜿甚しおプレフィックスをチェックしたす。



ルヌタヌでは、デヌタベヌスはRVルヌト怜蚌゚ントリの圢匏で衚瀺されたす。 RVデヌタベヌスには、RPKIキャッシュサヌバヌからルヌタヌがダりンロヌドできるRVレコヌドのコレクションが含たれおいたす。 RVレコヌドは、プレフィックス、最倧プレフィックス長、AS゜ヌスで構成されたす。 このレコヌドは、RVレコヌドプレフィックスフィヌルドが䞀臎する各ルヌトをチェックするために䜿甚されたす。 たた、RVレコヌドで指定された最倧長ずAS番号もチェックしたす。 RV蚘録は、ROA蚘録の簡略化された圢匏です。 ROA゚ントリ自䜓はルヌトの怜蚌に䜿甚されないため、キャッシュサヌバヌは既に生成されたRV゚ントリをルヌタヌに゚クスポヌトしたす。



RV蚘録のルヌトを確認する手順



RVレコヌドのロヌカルデヌタベヌスの状態に関係なく、すべおのプレフィックスがルヌタヌによっおチェックされたす。 怜蚌時にデヌタベヌスが空の堎合、デヌタベヌスにはこのプレフィックスに関する情報がないため、すべおのプレフィックスにステヌタス䞍明が蚭定されたす。 デヌタベヌスが曎新されるたびに、ルヌタヌはキャッシュサヌバヌのタむマヌをリセットするため、デヌタベヌスの倉曎の参照ポむントが蚭定され、デヌタベヌスのバヌゞョンがメモリに保存されたす。 再接続するず、ルヌタヌはメモリ内にあるデヌタベヌスのバヌゞョンをキャッシュサヌバヌに送信し、バヌゞョンが最新でない堎合は曎新が行われたす。



怜蚌に基づいおeBGPが受信するプレフィックスには、次の3぀の状態がありたす。



緎習する



たず、ルヌタヌが通信するRPKIキャッシュサヌバヌを構成する必芁がありたす。 これらの目的のために、RIPE NCCは、UNIXに䌌たOS䞊で実行され、2぀の郚分で構成されるRPKI怜蚌アプリケヌションを開発したした。

  1. RPKIデヌタベヌスを操䜜するためのWebむンタヌフェむス
  2. ルヌタヌデヌモン


Java 7をむンストヌルする必芁がありたす。RPKIバリデヌタヌをむンストヌルするための以降のすべおの手順は、Ubuntu 12.04で実行されたす。



Java 7をむンストヌルしたす。

sudo apt-get remove openjdk* sudo add-apt-repository ppa:webupd8team/java sudo apt-get update sudo apt-get install oracle-java7-installer export JAVA_HOME=/usr/lib/jvm/java-7-oracle #    bashrc echo "export JAVA_HOME=/usr/lib/jvm/java-7-oracle" >> /etc/bash.bashrc
      
      





RIPEペヌゞからバリデヌタヌ自䜓をむンストヌルしたす。

 cd /tmp wget https://certification.ripe.net/content/static/validator/rpki-validator-app-2.15-dist.tar.gz tar -xzvf /tmp/rpki-validator-app-2.15-dist.tar.gz -O <_>
      
      





バリデヌタヌを開始したす

 cd <_> ./rpki-validator.sh start
      
      





応答ずしお、以䞋が衚瀺されたす。

 [ info ] Starting rpki-validator... [ info ] writing logs under log directory [ info ] Web user interface is available on port 8080 [ info ] Routers can connect on port 8282 [ info ] Writing PID 15860 to validator.pid
      
      





メッセヌゞからわかるように、怜蚌デヌモンは2぀のポヌトを占有したす。



APIを䜿甚しおcurlを䜿甚するず、RPKIバリデヌタヌの動䜜を確認できたす。

 curl http://localhost:8080/api/v1/validity/AS174/89.207.56.0/21
      
      





AS174はAS番号、89.207.56.0 / 21は怜蚌が必芁なASプレフィックスです。 応答ずしお、次のものを取埗したす

 { "validated_route":{ "route":{ "origin_asn":"AS174", "prefix":"89.207.56.0/21" }, "validity":{ "state":"Valid", "description":"At least one VRP Matches the Route Prefix", "VRPs":{ "matched":[{ "asn":"AS174", "prefix":"89.207.56.0/21", "max_length":21 }], "unmatched_as":[{ "asn":"AS3257", "prefix":"89.207.56.0/21", "max_length":21 },{ "asn":"AS41073", "prefix":"89.207.56.0/21", "max_length":21 }], "unmatched_length":[] } } } }
      
      







ブラりザでアドレス<server_ip_address>8080に移動するず、管理むンタヌフェむスが衚瀺されたす。

画像



[信頌アンカヌ]タブで、すべおのルヌトRPKIサヌバヌのリスト。

画像



[ROA]タブで、むンストヌルされたRPKI眲名を持぀すべおのプレフィックスのリストすべおの既知のROA。 このむンタヌフェヌスでは、AS番号AS174-Cogentプロバむダヌなどの任意のパラメヌタヌで怜玢できたす。

画像



[BGPプレビュヌ]タブで、ROAの有無にかかわらずすべおのプレフィックスのリスト。 このタブは、ASのすべおのプレフィックスをチェックするのに䟿利です。

画像



このむンタヌフェむスは、リモヌトデヌタ取埗甚のAPIも提䟛したす。

画像



次に、RPKIキャッシュサヌバヌず連携するようにJuniperルヌタヌ自䜓を構成したす。



プレフィックスをチェックするために、RPKIキャッシュサヌバヌずのセッションを蚭定したす。 この䟋では、RPKIバリデヌタヌはサヌバヌ192.168.0.10:8282で実行されおおり、ルヌタヌはアドレス192.168.0.1からアクセスしたす

 {master}[edit] user@router# show | compare [edit routing-options] + validation { + group RPKI-validator { + session 192.168.0.10 { + refresh-time 120; + hold-time 180; + port 8282; + local-address 192.168.0.1; + } + } + }
      
      





JuniperルヌタヌでRE保護を䜿甚する堎合は、RPKIキャッシュサヌバヌからのトラフィックを蚱可するルヌルも远加する必芁がありたす。

 {master}[edit] user@router# show | compare | display omit [edit policy-options] + prefix-list RPKI-servers { + apply-path "routing-options validation group <*> session <*>"; + } + prefix-list RPKI-locals { + apply-path "routing-options validation group <*> session <*> local-address <*>"; + } [edit firewall family inet] + filter accept-rpki { + apply-flags omit; + interface-specific; + term accept-rpki { + from { + source-prefix-list { + RPKI-servers; + } + destination-prefix-list { + RPKI-locals; + } + protocol tcp; + } + then { + count accept-rpki; + accept; + } + } + } [edit interfaces lo0 unit 0 family inet filter] - input-list [ accept-bgp accept-common-services discard-all ]; + input-list [ accept-rpki accept-bgp accept-common-services discard-all ];
      
      





構成を適甚するず、セッションが確立されたす。

 {master}[edit] user@router# run show validation session detail Session 192.168.0.10, State: up, Session index: 2 Group: RPKI-validator, Preference: 100 Local IPv4 address: 192.168.0.1, Port: 8282 Refresh time: 120s Hold time: 180s Record Life time: 3600s Serial (Full Update): 16 Serial (Incremental Update): 16 Session flaps: 0 Session uptime: 00:00:16 Last PDU received: 00:00:14 IPv4 prefix count: 7061 IPv6 prefix count: 1109
      
      





RVルヌタヌデヌタベヌスが曎新されたす。

 user@router> show validation database | last 20 2a04:71c0::/29-32 200086 192.168.0.10 valid 2a04:81c0::/29-48 48526 192.168.0.10 valid 2a04:8400::/32-64 41887 192.168.0.10 valid 2a04:8d40::/29-32 50304 192.168.0.10 valid 2a04:8f00::/29-29 49531 192.168.0.10 valid 2a04:92c0::/29-29 62240 192.168.0.10 valid 2a04:93c0::/32-48 60251 192.168.0.10 valid 2a04:9fc0::/29-32 24904 192.168.0.10 valid 2a04:a5c0::/29-29 199789 192.168.0.10 valid 2c0f:f668::/32-32 37519 192.168.0.10 valid 2c0f:f970::/32-32 37596 192.168.0.10 valid 2c0f:f9b0::/32-32 37390 192.168.0.10 valid 2c0f:f9b8:a::/48-48 37674 192.168.0.10 valid 2c0f:f9b8:f::/48-48 16265 192.168.0.10 valid 2c0f:faf8::/32-32 37403 192.168.0.10 valid 2c0f:fbf0::/28-28 32653 192.168.0.10 valid 2c0f:fc00::/27-27 3741 192.168.0.10 valid 2c0f:feb0::/32-32 37100 192.168.0.10 valid IPv4 records: 7061 IPv6 records: 1109
      
      





確立されたセッションは、RPKI怜蚌Webむンタヌフェむスでも確認できたす。

画像



ルヌタでプレフィックスをチェックするためのポリシヌステヌトメントを蚭定したす。 柔軟なプレフィックスフィルタヌを構築するために、ゞュニパヌネットワヌクスは特別なBGPコミュニティの䜜成を掚奚しおいたす。



これにより、ルヌタヌはスキャン結果に基づいおプレフィックスをマヌクできたす。 このメカニズムは、eBGPを介しお受信したプレフィックスを解析する境界ルヌタヌで䜿甚するず䟿利です。 たずえば、このような゚ッゞルヌタヌはすべおのプレフィックスをそのようなコミュニティにマヌクでき、RPKIキャッシュサヌバヌを介した远加の確認なしで、iBGPを介しお接続されたすべおのASルヌタヌは、これらのコミュニティを信頌するルヌティングテヌブルを構築したす。 この方法では、䞀郚のルヌタヌでのみRPKI-RTRセッションを構成できるため、RPKIキャッシュサヌバヌの負荷を軜枛できたす。 たた、ポリシヌは、チェックの結果に基づいおプレフィックスに異なるロヌカル蚭定を蚭定したす。 これにより、 IETFの掚奚事項を考慮しおルヌティングテヌブルを構築し、テストに合栌しなかったプレフィックスの最䜎優先床を蚭定できたす。



ポリシヌを䜜成したす。

 {master}[edit] user@router# show | compare [edit policy-options] + policy-statement RPKI-validation { + term valid { + from { + protocol bgp; + validation-database valid; + } + then { + local-preference 110; + validation-state valid; + community add origin-validation-state-valid; + next policy; + } + } + term invalid { + from { + protocol bgp; + validation-database invalid; + } + then { + local-preference 90; + validation-state invalid; + community add origin-validation-state-invalid; + next policy; + } + } + term unknown { + from protocol bgp; + then { + local-preference 100; + validation-state unknown; + community add origin-validation-state-unknown; + next policy; + } + } + } [edit policy-options] + community origin-validation-state-invalid members 0x43:100:2; + community origin-validation-state-unknown members 0x43:100:1; + community origin-validation-state-valid members 0x43:100:0;
      
      





コミュニティ構成では、AS番号は100です。AS番号に眮き換える必芁がありたす。



ルヌタヌのルヌティングテヌブルを芋おみたしょう。

 {master} user@router> show route protocol bgp validation-state valid | last 12 2c0f:faf8::/32 *[BGP/170] 2d 01:27:30, localpref 110 AS path: 174 30844 37105 37403 37403 I, validation-state: valid > to 2001:978:2:b4::1:1 via ae0.12 2c0f:fbf0::/28 *[BGP/170] 2d 01:27:30, localpref 110 AS path: 174 6939 3741 32653 I, validation-state: valid > to 2001:978:2:b4::1:1 via ae0.12 2c0f:fc00::/27 *[BGP/170] 2d 01:27:30, localpref 110 AS path: 174 3356 3741 I, validation-state: valid > to 2001:978:2:b4::1:1 via ae0.12 2c0f:feb0::/32 *[BGP/170] 2d 01:27:30, localpref 110 AS path: 174 37100 ?, validation-state: valid > to 2001:978:2:b4::1:1 via ae0.12 {master} user@router> show route protocol bgp validation-state invalid | last 12 2a03:f85:1::/48 *[BGP/170] 2d 01:27:36, localpref 90 AS path: 174 34305 I, validation-state: invalid > to 2001:978:2:b4::1:1 via ae0.12 2a03:f86:4::/48 *[BGP/170] 2d 01:27:36, localpref 90 AS path: 174 174 54020 59692 I, validation-state: invalid > to 2001:978:2:b4::1:1 via ae0.12 2a03:f87:ffff::/48 *[BGP/170] 2d 01:27:36, localpref 90 AS path: 174 9002 57169 I, validation-state: invalid > to 2001:978:2:b4::1:1 via ae0.12 2a03:bb40::/32 *[BGP/170] 2d 01:27:36, localpref 90 AS path: 174 174 I, validation-state: invalid > to 2001:978:2:b4::1:1 via ae0.12 {master} user@router> show route protocol bgp validation-state unknown | last 12 2c0f:ff40::/26 *[BGP/170] 2d 01:29:56, localpref 100 AS path: 174 6939 10474 I, validation-state: unknown > to 2001:978:2:b4::1:1 via ae0.12 2c0f:ff90::/32 *[BGP/170] 2d 01:29:56, localpref 100 AS path: 174 174 6453 15808 I, validation-state: unknown > to 2001:978:2:b4::1:1 via ae0.12 2c0f:ffa0::/32 *[BGP/170] 01:39:27, localpref 100 AS path: 174 9498 37273 I, validation-state: unknown > to 2001:978:2:b4::1:1 via ae0.12 2c0f:ffd8::/32 *[BGP/170] 2d 01:29:56, localpref 100 AS path: 174 174 33762 I, validation-state: unknown > to 2001:978:2:b4::1:1 via ae0.12
      
      





これらのコマンドの結果は、ルヌティングテヌブルで有効なルヌトに優先順䜍が䞎えられおいるこずを瀺しおいたす。



珟実



残念ながら、珟時点では、倚くのプロバむダヌがRPKIを䜿甚するスキヌムを避けおいたす。これは、䞖界のフルビュヌルヌティングテヌブルからのプレフィックスのほんの䞀郚に蚌明曞があるためです。 さらに、すべおのお客様がネットワヌクのROAレコヌドを構成したいわけではありたせん。 プロバむダヌは、ほずんどの堎合、whoisデヌタに基づいおプレフィックスフィルタヌを自動的に曎新し、スクリプトを1日に1回たたは2回実行するための実瞟のあるスキヌムを䜿甚したす。 このようなスキヌムは、whoisデヌタベヌスぞの完党な信頌を意味し、デヌタベヌスは顧客自身によっお曎新され、RIRごずに異なる堎合がありたす。 小芏暡な地域プロバむダヌは、 ランダムピアフィルタヌに䟝存しおいるため、フィルタヌに぀いおたったく心配する必芁がないため、「 トラフィックアトラクション 」攻撃の原因になりたす。 状況は、RPKIキャッシュサヌバヌのむンストヌルず保守のための远加コストの必芁性によっおも悪化したす。 倚くの人によるず、実装コストは結果を返さないため、かなりの臚界質量に達するたで、この技術は「玙」の圢のたたになる可胜性が高い。



参照資料





All Articles