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

پاپت ( Puppet ) چیست؟ معرفی نرم افزار Network Automation

در این بخش از دوره آموزشیمان قصد داریم بپردازیم به انواع حالت های اسقرار سازی در حوزه Configuration Management 

دوره های شبکه، برنامه نویسی، مجازی سازی، امنیت، نفوذ و ... با برترین های ایران
نرم افزار Puppet چیست؟ آموزش نرم افزار Puppet ا Network Automation چیست؟ Configuration Management چیست؟ چگونه فرآیند های کاریمان را در سازمان اتوماتیک سازی کنیم؟ امروزه با افزایش تعداد سیستم ها و تجهیزات و گسترش پیدا کردن شبکه های کامپیوتری و زیرساخت ما اصولا معضلاتی نیز به وجود آمده است که یکی از آن ها پیکربندی سریع و آنی میباشد که با وجود چندین دیوایس متعدد اصولا نمیتوانیم پیکربندی را به شکلی به صورت سریع انجام بدهیم به همین سبب شما در نظر بگیرید که مهندس شبکه و یا Network Administrator در یک شبکه بزرگ در این موقعیت از شما درخواست میشود
که تمامی سرور های وجود در شبکه میبایست به صورت هرچه سریع تر سیستم عاملشان عوض شود ، یا که قرار است بر روی تمامی روتر های موجود در سطح کشور که متعلق به شعبی هستند که شما در آن قرار دارید یک پیکربندی خاص اعمال شود خب در این صورت اگر تعداد دیوایس ها و تجهیزات زیاد باشد پیکربندی تمامی آنها وقت بسیار زیادی رو از شما میگیرد ! اما همونطور که مقایس شبکه های امروزی درحال گسترش و پیشرفت است تکنولوژی و راه کار های متنوع نیز درحال پیشرفت و گسترش میباشند به همین سبب ما تصمیم بر این گرفتیم که به معرفی و نحوه کار با نرم افزار قدرتمند اتوماتیک سازی فرآیند های زیرساختی یعنی نرم افزار Puppet بپردازیم و آن را مورد بحث و بررسی قرار دهیم.

Network Automation چیست؟

در این موضوع ما با استفاده از ابزارها و تکنیک ها و زبان های برنامه نویسی میتوانیم به شکل خیلی بهتر و سریع تر فرآیند های پیکربندی دیوایس هایمان را انجام بدهیم که به این موضوع ما دیگر نیز نیست برای پیکربندی و بررسی 50 کامپیوتر تک تک به آن‌ها سر بزنیم فقط کافیست از پشت سیستم خودمان با استفاده از تکنیک های Network Automation دیوایس هایمان را به صورت یکجا پیکربندی کنیم که این دیوایس ها طیف متعددی رو شامل میشوند علاوه بر این موضوع ما به سبب Network Automation میتوانیم تجهیزات دیگر مانند سوییچ ها و روتر ها و سرور ها و حتی کلاینت های خودمان راهم پیکربندی کنیم
  • برای یادگیری Network Automation با زبان Python به لینک مقابل مراجعه کنید( Link )

نرم افزار Puppet چیست؟

درواقع Puppet یک نرم افزار قدرتمند در حوزه Configuration Management میباشد که به سبب آن ما توانایی پیکربندی و راه اندازی تجهیزات خود را به صورت کاملا سریع و Automated شده را داریم بدین شکل که در مدیریت دیوایس ها و پیکربندی های اون‌ها این نرم افزار بسیار قدرتمند است و جزوه یکی از بهترین نرم افزار های حوزه Network Automation در کنار دیگر نرم افزار های قدرتمند مانند Ansible قرار گرفته است‌. نرم افزار Puppet به سبب یک زبان کد نویسی منحصر به فرد خود با نام DSL که تشکل شده از کلمات Domain Specific Language میباشد توانایی بررسی و پیاده سازی پیکربندی های متعدد را بر روی سیستم ها دارد.

نرم افزار Puppet رایگان است؟

  • نرم افزار Puppet در دو نسخه ارائه میشود:
    نسخه Puppet Enterprise: در این نسخه ما قابلیت های بسیار زیادی را در Puppet میتوانیم داشته باشیم از جمله دسترسی GUI و دسترسی Cli، امکان استفاده از API های متنوع، توانایی گزارش گیری بالا و ویژگی های مختلف درون این نسخه تجاری وجود دارد.
    نسخه Puppet Open Source: این نسخه به صورت رایگان و Open Source ارائه شده است که میتوانیم از آن برای فرآیند های متنوع Configuration Management استفاده کنیم که البته ویژگی های متعددی که در نسخه Enterprise وجود دارد در این نسخه کمی کم رنگ میباشند.

چرا از Puppet استفاده کنیم؟

توجه کنید این سوال را میتوان به شکل دیگری هم پرسید برای مثال چرا از Configuration Management و Automation استفاده کنیم ؟! جواب ساده ایی داره چون شما درنظر بگیرید که در یک شرکت بسیار بزرگ Large Enterprise کار میکنید و قرار است بر روی 100 سرور یک پیکربندی مشابه یه یک مشکل را رفع کنید کنید برای مثال قصد دارید یک سیستم عامل جدید نصب کنید و یا یک تنظیمات خاص را ارائه کنید خب شما به عنوان یک ادمین شبکه اینکار براتون بسیار سخت و خسته کننده هست اما امروزه با پیشرفت تکنولوژی ما دیگه نیازی به انجام اینکارها نداریم !
پاپت ( Puppet ) چیست؟ معرفی نرم افزار Network Automation

امروزه وقتی ابزار های مختلف و قدرتمندی مثله Python و Puppet وجود دارند ما به راحتی میتوانیم این پیکربندی را درعرض چند ساعت و یا کمتر به انجام برسانیم(بستگی به پیکربندی دارد اما خیلی خیلی مقدار زمان نسبت به پیکربندی دستی کاهش پیدا میکند برای مثال اگر 100 ساعت این موضوع طول بکشد در فرآیند Automation فقط 1 تا 2 ساعت ممکن است زمان ببرد.) به سبب این موضوع Puppet میتواند به شما در اعمال یک پیکربندی مشابه و مدیریت آنها کمک بسیار زیادی کند.
پاپت ( Puppet ) چیست؟ معرفی نرم افزار Network Automation

نگاهی بر الگو های برنامه نویسی (Paradigm)

درواقع قبل از شروع کار با DSL که زبان Puppet میباشد میبایست یک نگاه به الگو های برنامه نویسی بیندازیم. در ابتدا میبایست بدانیم که Paradigm یک سبک از نحوه ایجاد یک نرم افزار رایانه است که توسعه دهندگان از آن برای ایجاد نرم افزار مورد نظر استفاده میکنند؛ ما چهار نوع Paradigm متنوع برای برنامه نویسی داریم که به شرح زیر هستند:
  • Imperative
  • Declarative
  • Functional
  • Object-oriented
در این مقاله تمرکز ما بر روی Imperative و Declarative میباشد.

بررسی Imperative Paradigm

در این Paradigm ما منطق محاسباتی ایجاد یک نرم افزار را پیش روی خودمان داریم و تعیین میکنیم که چه موضوع و کاری باید انجام بشود.
برای مثال شما توجه کنید که شما قرار است از تا مقصدتان که برای مثال محل کارتان است با یک تاکسی بروید وقتی که شما در تاکسی مینشینید و تمام مسیر را به راننده عنوان میکنید برای مثال میگید از این کوچه برو از سمت راست برو حالا این چهار راه رو رد کن برو چپ و... تاکه برسید به محل کارتون. این میشه یک فرآیندی که ما در Imperative Paradigm داریم.

بررسی Declarative Paradigm

در این حالت دقیقا ما بر عکس Imperative عمل میکنیم بدین شکل که در این الگو ما منطق محاسباتی را بدون بیان نحوه انجام آن پیش میبریم‌ ، برای مثال ما برای اینکه به محل کارمان بریم یک تاکسی میگیریم و مستقیما عنوان میکنیم که به آدرس مورد نظر برود.

نرم افزار Puppet از چه الگوریتمی استفاده میکند؟

نرم افزار Puppet از Declarative Paradigm استفاده میکند برای کد نویسی و ایجاد فایل های مورد نظر به همین سبب میتوانیم به مثال زیر توجه کنیم و تفاوت Puppet را با Bash در کد نویسی ببینیم: زبان Bash از الگوریتم Imperative استفاده میکند به همین سبب از طریق کد Bash زیر ما یک User را در سیستم مورد نظرمان ایجاد میکنیم
پاپت ( Puppet ) چیست؟ معرفی نرم افزار Network Automation
حال از طریق زبان DSL این فرآیند را انجام میدهیم
پاپت ( Puppet ) چیست؟ معرفی نرم افزار Network Automation
میبینیم که تفاوت بین کد نویسی Imperative و Declarative در سادگی چقدر زیاد میباشد.

Deployment Mode انواع حالت های اجرایی در پاپت

استقرار سازی چیست؟

مفهوم استقرار سازی یا Deployment به این معنا میباشد که من بتوانم مقدار ها و پیکربندی های خاصی که نیاز دارم رو بر روی چندین دیوایس خود Deployed یا استقرار سازی کنیم. که البته توضیح این موضوع به این شکل بیشتر در دید حوزه Configuration Management میباشد در حوزه های دیگر و موقعیت های دیگر نیز همین معنا را میدهد اما با کمی تغییر

حالت های استقرار سازی در Configuration Management به چه شکل است؟

حالت های استقرار سازی در Configuration Management به دو دسته متفاوت تقسیم بندی میشوند که عبارتند از:
Push-Based: در این روش از طریق Master Node‌ پیکربندی انجام میشود.
Pull-Based: در این روش استقرار سازی توسط Agent انجام میشود.

حالت استقرار سازی Push-Based

در این حالت Matser Node ما به عنوان یک سرور مرکزی عمل میکند و در این خود و دیوایس های مورد نظر یک ارتباط امن و مطمئن را ایجاد میکند، پس از ایجاد ارتباط شروع به پیکربندی و ارسال دستورات میکند مانند نرم افزار های Salt Stack و Ansible 

حالت استقرار سازی Pull-Based

در این حالت دیوایس ها به سرور مورد نظر متصل میشوند ارتباط امن و مطمئن را ایجاد میکنند و از برقراری صحیح ارتباط اطمینان حاصل میکنند و پس از آن پیکربندی را از سمت سرور دانلود میکنند و بر روی خود استقرار سازی میکنند مانند Chef و Puppet

نحوه کار Puppet در استقرار سازی به چه شکل است؟

نحوه کار Puppet بر پایه Pull یا همان Pull Based Deployment میباشد و از این بابت دیوایس ها و تجهیزات مورد نظر ما در هر 1800ثانیه به سمت Puppet یک ارتباط را ایجاد میکنند و بررسی میکنند که آیا در Puppet پیکربندی جدیدی برایشان قرار گرفته است یا که خیر، درصورتی که پیکربندی خاصی در Puppet قرار گفته باشد کد های مورد نظر را دانلود میکنند و بر روی خود استقرار میسازند.

مثال عملی از نحوه کار Puppet

سناریو ما در Configuration Management از دو بخش Master و Agent تشکیل شده است که به شرح زیر هستند:
بخش Master - در این بخش Puppet  بر روی یک سیستم لینوکسی اجرا سازی میشود و قرار است که به سرور ها و تجهیزات مورد نظر پیکربندی مورد نظرشان را ارائه کند.‌

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

بخش Agent - این بخش را تجهیزات و دیوایس ها ما تشکیل داده اند که هیچ محدودیتی در سیستم عاملشان وجود ندارد و میتوانند طیف گسترده ایی از سیستم های مختلف از جمله خانواده Microsoft سیستم های هسته لینوکس سیستم های خانواده BSD و سیستم عامل های متعدد دیگری مانند Solaris و Mac OS

در ابتدا در بین Matser و Agent یک ارتباط امن ایجاد میشود.

پاپت ( Puppet ) چیست؟ معرفی نرم افزار Network Automation

نکته: ارتباطات بین Master و Agent از طریق Certificate امن سازی میشود.

مرحله اول - ابتدایی ترین کاری که پس از ایجاد شدن ارتباط صورت میگیرد این است که از سمت Agent های ما اطلاعاتی در رابطه خودشان به سمت Master ارسال میشود که از جمله این اطلاعات عبارتند از:

  • IP Address
  • HostName
  • Kernel Details 
  • And ...

پاپت ( Puppet ) چیست؟ معرفی نرم افزار Network Automation

مرحله دوم - در این شرایط پس از دریافت اطلاعات توسط Puppet یک فایل توسط Puppet ایجاد میشود که اطلاعات تکمیلی Agent ها به همراه پیکربندی های مورد نیازشان در آن قرار میگیرد که آن را با عنوان Configuration List میشناسم و تمامی اطلاعات در کنار در فایلی به نام Catalog قرار میگیرد. از جمله پیکربندی های که میتوان توی Configuration List: نصب، حذف و بروزرسانی بسته نرم افزار خاصی، ایجاد User و حذف User، راه اندازی مجدد و Restart کردن سیستم، پیکربندی و تغییر تنظیمات IP و...

پاپت ( Puppet ) چیست؟ معرفی نرم افزار Network Automation
مرحله 3 - در این مرحله فایل قسمت Configuration List در فایل Catalog به سمت Agent ها ارسال میشود و آنها پس از دریافت پیکربندی ها آنهارا بر روی خودشان اعمال میکنند.
نکته: درصورتی که Configuration List خالی باشد هیچ پیکربندی بر روی Agent ها انجام نمیشود.

پاپت ( Puppet ) چیست؟ معرفی نرم افزار Network Automation

مرحله چهارم - در این مرحله گزارشی به سمت Puppet در رابطه با موفقیت آمیز بودن فرآیند اعمال پیکربندی ارسال میشود.

معرفی امکانات پاپت | Puppet Feature

مباحث متنوعی را در رابطه با Puppet یادگرفتیم حالا بیاید بررسی کنیم که Puppet دارای چه ویژگی هایی میباشد به نوع دیگر قرار است توی این بخش به Feature های متعدد Puppet بپردازیم

ویژگی Idempotency در Puppet چیست؟

این ویژگی یکی از جالب ترین تکنیک های مورد استفاده در Puppet است که به سبب آن، نرم افزار Puppet یک نرم افزار منحصر به فرد در این حوزه شده است. به واسطه Idempotency ما توانایی و این امکان را داریم که مجموعه ایی از پیکربندی هارا در بازه های زمانی خاص بر روی یک دیوایس اعمال کنیم. در شرایطی که تغییری در دیوایس مورد نظر ایجاد شود Puppet آن را بررسی میکند و ویژگی های قبلی را به سمت همان دیوایس در بازه های زمانی مختلف استقرار سازی میکند.

توجه داشته باشید ویژگی Puppet Idempotency در شرایطی میتواند بکار بیاید که شما بخواهید در بازه های زمانی یک پیکربندی خاصی را بر روی دیوایس اعمال کنید. درنظر داشته باشید که وقتی یک سیستم اجرا سازی میشود و شروع به کار میکند تا پایان عمر آن در بازه های زمانی نیاز به پیکربندی و تعمیر و بروزرسانی دارد که ما میتوانیم به سبب این ویژگی در Puppet اینکار هارا به انجام برسانیم، معمولا از این ویژگی برای بروزنگه داشتن سیستم ها استفاده میشود

ویژگی‌ RAL در Puppet چیست؟

اگر یادتان باشد در قسمت قبل ما عنوان کردیم که در Puppet محدودیتی وجود ندارد که سیستم های Agent چه سیستم عاملی را داشته باشند اما چطور؟! از کجا Puppet میتونه متوجه این بشه که برای سیستم مورد نظر از چه پیکربندی استفاده کند و از چه دستوری برای پیکربندی های مورد نظر استفاده کند؟ دقیقا اینجاست که ویژگی تحت عنوان RAL یا همان Resource Application Layer پا به میدان میگذارد و این نگرانی هارا برطرف میکند.



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

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

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

نظرات