امیرحسین تنگسیری نژاد
مهندس و مدرس شبکه و امنیت سایبری و مدیر کل جزیره هک و امنیت اطلاعات توسینسو

BMP یا همان Bgp Monitoring Protocol چیست + نحوه راه اندازی BMP

پس از ایجاد کردن BMP Server کافیست که آدرس IP و Port آن را تعیین نماییم و پس از آن نیست Source پیغام های Update راهم تعیین کنیم که از یک LoopBack استفاده کرده اییم

دوره های شبکه، برنامه نویسی، مجازی سازی، امنیت، نفوذ و ... با برترین های ایران
امروزه یکی‌ از مهم ترین موضوعات در دنیای اینترنت و Routing پروتکل BGP میباشد. در گذشته ما اصولا از پروتکل BGP صرفا برای ارتباطات درون دنیای Internet استفاده میکردیم و ارتباط مستقیم چندانی با Customer با BGP وجود نداشت اما امروزه با گذشت زمان و نیاز سازمان ها به استفاده از BGP و بالا رفتن رویکرد کاری آن، ما از BGP در بخش های متعددی استفاده مینماییم بدین شکل حتی Customer ها در بعضی شرایط برای متصل شدن به ISP معمولا از BGP استفاده میکنند. علاوه بر این با رویکار آمدن MPLS L3VPN این نیاز و استفاده از BGP در سمت مشتری ها و بخش های دیگر شبکه چندبرابر شد زیرا به سبب MPLS L3VPN میبایست یک L3 Link میان Customer و Provider که به ترتیب با عنوان های CE و PE در MPLS شناخته میشوند ایجاد شود که به صورت پیشنهادی معمولا استفاده از eBGP توسط Cisco پیشنهاد میشود.
برای یادگیری مباحث Routing و BGP میتوانید به دوره CCNP Enterprise ENARSI مراجعه کنید.
برای یادگیری مباحث MPLS و اجزا آن میتوانید به دوره MPLS مراجعه کنید.
همچنین برای ورود به حوزه Service Provider میتوانید به دوره آموزشی CCNA Service Provider مراجعه کنید.

نظارت بر BGP به چه شکل است؟

اصولا برای اینکه بتوانیم بر BGP Session های خودمان نظارت داشته باشیم راه های متنوعی میتواند جلوی روی ما وجود داشته باشد‌. بدین سبب که پروتکل BGP استفاده بسیار زیادی در دنیای امروزی دارد و معمولا برای ارتباطات Internet و Customer To Provider استفاده میشود مهم است که این ارتباطات حفظ شود و نظارت کافی بر روی آنها وجود داشته باشد.
ما در گذشته برای اینکه بر روی BGP Session هایمان نظارت داشته باشیم از روش تحت عنوان Cli Scraping استفاده میکردیم که این روش به نوبه خودش و در زمانی که ارائه شد بسیار روش پرکاربردی بود اما با گذشت زمان و بالا رفتن مقایس شبکه های کامپیوتری و استفاده از پروتکل BGP این روش از لحاظ Performance بسیار ضعیف شناخته شد و بعد از آن پروتکلی ارائه شد تحت عنوان BMP یا Bgp Monitoring Protocol

پروتکل BMP یا همان Bgp Monitoring Protocol چیست؟

همانطور که اشاره کردیم در گذشته راه های زیادی برای نظارت بر ارتباطات BGP بوده است اما خب مشکلات و معضلاتی را داشته اند و به همین سبب پروتکل BMP روی کار آمده است که هدف آن نظارت کامل و Monitoring اختصاصی بر روی BGP میباشد.

نحوه کار BMP به چه شکل میباشد؟

پروتکل BMP از یک یا چند سرور BMP که عموما با عنوان BMP Collector و یا Monitoring Station آن را میشناسیم برای نگهداری و جمع آوری اطلاعات استفاده میکند‌‌. در این شرایط یک روتر به عنوان BMP Client شناخته میشود و با دیگر همتایان BGP یا BGP Speaker ها ارتباط برقرار میکند به سبب این ارتباط روتر BMP Client ما به BMP Collector وصل میشود و اطلاعات از سمت BGP Speaker ها جمع آوری میکند و به سمت BMP Collector ارسال میکند. درصورت دریافت این اطلاعات توسط BMP Collector معمولا در Database خود این اطلاعات را به شکل کاملا خوانا و قابل فهم جایگذاری میکند.
در ابتدا BMP Client به صورت کامل Adj-RIB-In خود را تخلیه و به سمت BMP Collector ارسال میکند و پس از آن نیز در صورت دریافت Update جدید از سمت دیگر همتایان BGP یک پیغام Route Monitoring به سمت BMP Collector ارسال میکند.
نکته: تخلیه Adj-RIB-In فقط یک بار صورت میگیرد.

نحوه پیکربندی و راه اندازی BMP

برای پیاده سازی BMP پروژه های Open Source و Free بسیار زیادی وجود دارند که میتوانند نقش یک BMP Collector را ایفا کنند که از جمله بهترین آنها OpenBMP میباشد. این نرم افزار به راحتی توانایی دریافت و مرتب سازی داده هارا برای ما دارد و برای دریافت این داده ها معمولا از Apache Kafka استفاده مینمایید و برای ذخیره سازی آن معمولا از پایگاه های داده‌ایی مانند MongoDB و MySql استفاده میکند که در این سناریو ما از MySql استفاده میکنیم و قرار است ارتباط بین دو ISP با نام های ISP1 و ISP2 را پیکربندی کنیم که در این سناریو ما از روتر های CSR1000v استفاده مینماییم.
 BMP یا همان Bgp Monitoring Protocol چیست + نحوه راه اندازی BMP
در ابتدا وارد BGP Session ایجاد شده میشویم‌ و یک BMP Server ایجاد میکنیم
نکته: ایجاد BMP Server محدود به 4 عدد میباشد.
router bgp 64502
bmp server 1
address 198.51.100.3 port-number 5000
update-source Loopback 1
activate
exit-bmp-server-mode
bmp buffer-size 100

بعد از تمام شدن مراحل بالا کافیست به شکل زیر BGP Neighbor مورد نظر بر روی BMP Server ایجاد شده قرار دهیم

bgp log-neighbor-changes
neighbor 198.51.100.1 remote-as 64501
neighbor 198.51.100.1 bmp-activate server 1

نکته: در سمت ISP 2 نیازی به پیکربندی خاصی نمیباشد و همان پیکربندی عادی eBGP

router bgp 64501
bgp log-neighbor-changes
network 8.8.8.0 mask 255.255.255.0
network 9.9.9.0 mask 255.255.255.0
neighbor 198.51.100.2 remote-as 64502
neighbor 198.51.100.2 fall-over bfd

نحوه Verify سازی پیکربندی BMP

برای بحث Troubleshooting و Verify و از دستورات متنوعی میتوانیم استفاده کنیم برای مثال دستور زیر که به ما اتصال و ارتباط بین BMP را برای ما نمایش میدهد که در این جا این ارتباط برقرار نمیباشد زیرا هنوز OpenBMP و سرور Linux خودمان را روشن نکردیم

ISP2# show ip bgp bmp server summary
Number of BMP servers configured: 1
Number of BMP neighbors configured: 1
Number of neighbors on TransitionQ: 0, MonitoringQ: 0, ConfigQ: 1
Number of BMP servers on StatsQ: 0
BMP Refresh not in progress, refresh not scheduled
Initial Refresh Delay not configured
BMP buffer size configured, buffer size 100 MB, buffer size bytes used 0 MB
ID Host/Net Port TCB Status Uptime MsgSent LastStat 1 198.51.100.3 5000 0x0 Down 0
1  198.51.100.3  5000  0x0  Down          0     
پس از اینکه سرور ما و BMP راه اندازی شود ما با همچین پیغامی در کنسول روتر خودمان مواجه میشویم که از صحت برقراری ارتباط بین BMP Client و BMP Collector به ما خبر میدهد.
*Jul 5 21:13:06.643: %BGP-5-BMP_ADJCHANGE: BMP Server 1 – 198.51.100.3/5000 connection up
با دستور زیر میتوانیم خلاصه ای اطلاعات BMP Neighbor خودمان را ببینیم. در این خروجی ما آدرس 192.168.100.1 را میبینیم که BMP Collector ما میباشد.
ISP2# show ip bgp bmp neighbors
Number of BMP neighbors configured: 1
BMP Refresh not in progress, refresh not scheduled
Initial Refresh Delay not configured
BMP buffer size configured, buffer size 100 MB, buffer size bytes used 0 MB

Neighbor       PriQ  MsgQ  CfgSvr#   ActSvr#  RM Sent 
198.51.100.1   0     0     1         1        3      

دسترسی به اطلاعات به دست آمده توسط BMP

برای اینکه بتوانیم به این اطلاعات دسترسی داشته باشیم بسته به دیتابیس مورد استفاده توسط شما وارد آن شوید که اینجا ما از MySql استفاده مینماییم

$ mysql -u openbmp -p openBMP
mysql>

حال پس از وارد شدن به MySql با استفاده از دستور show tables; شروع به خارج کردن لیستی از Table های درون MySql میکنیم

mysql> show tables;
+------------------------------+
| Tables_in_openBMP            |
+------------------------------+
| as_path_analysis             |
| bgp_nexthop                  |
| bgp_peers                    |
| collectors                   |
| community_analysis           |
| gen_asn_stats                |
| gen_prefix_validation        |
| gen_whois_asn                |
| gen_whois_route              |
| geo_ip                       |
| geo_location                 |
| l3vpn_log                    |
| l3vpn_rib                    |
| ls_links                     |
| ls_nodes                     |
| ls_prefixes                  |
| path_attr_log                |
| path_attrs                   |
| peer_down_events             |
| peer_up_events               |
| prefix_aspath                |
| rib                          |
| routers                      |
| rpki_validator               |
| stat_reports                 |
| unicast_rib_lookup           |
| users                        |
| v_all_routes                 |
| v_geo_ip                     |
| v_l3vpn_routes               |
| v_ls_links                   |
| v_ls_nodes                   |
| v_ls_prefixes                |
| v_peer_prefix_report         |
| v_peer_prefix_report_last    |
| v_peer_prefix_report_last_id |
| v_peers                      |
| v_routes                     |
| v_routes_history             |
| v_routes_withdraws           |
| withdrawn_log                |
+------------------------------+
همانطور که در بالا میبینید BMP برای Log و وضعیت دیوایس های ما Table های متعددی ایجاد کرده که آنهارا پس از منظم سازی درون این Table ها قرار دهد.
حالا برای اینکه بخواهیم این مشخصات را ببینیم میتوانیم از Sql Query استفاده کنیم. برای مثال در Query زیر ما درخواست میکنیم که اطلاعات BMP Client های مارا به ما نمایش دهد از جدول Routers
mysql> select hash_id,ip_address,timestamp,isConnected from routers;

حالا اگر بخواهیم در رابطه با Prefix هایمان اطلاعاتی را به دست بیاوریم مییایست سراغ جدول RIB یا همان Routing Information Base در MySql برویم. Prefix های 8.8.8.0/24 و 9.9.9.0/24 توسط ISP 2 در BGP تبلیغ یا Advertise شده اند حال ما میخواهیم این Prefix هارا ببینیم:

mysql> select hash_id,origin_as,prefix,prefix_len,isWithdrawn,isAdjRibIn,isPrePolicy from rib;


امیرحسین تنگسیری نژاد
امیرحسین تنگسیری نژاد

مهندس و مدرس شبکه و امنیت سایبری و مدیر کل جزیره هک و امنیت اطلاعات توسینسو

متخصص امنیت اطلاعات و کارشناس شکار تهدیدات بانک ملی ایران ، دارای مدارک مختلف از Splunk و AWS و Fortinet و Huawei حوزه اصلی فعالیت بنده در زمینه شبکه مباحث R&S و Service Provider می‌باشد و در زمینه امنیت نیز در موقعیت های مختلفی مانند PenTest و SoC فعالیت داشته و دارم. سابقه همکاری با بعضی سازمان های در قالب پروژه و... را داشته ام الان به عنوان تحلیلگر امنیت سایبری در زیرساخت بانک ملی مشغول به کار هستم. لینکداین: https://www.linkedin.com/in/amirhoseintangsirinezhad/

نظرات