Forwarded from Deleted Account
منظور از DevOps (دوآپس) چیست؟
اگر شما هم در زمینهٔ توسعهٔ نرمافزار فعالیت داشته باشید، ممکن است آگهیهای استخدام مهندس DevOps نظر شما را به خود جلب نموده یا حداقل سبب شده باشند تا از خود یا اطرافیان بپرسید که دوآپس چیست و یک متخصص این حوزه چه مسئولیتهایی دارا است و این همان چیزی است که در این این مقاله قصد داریم به بررسیاش بپردازیم.
برای درک بهتر این موضوع که مهندسان DevOps دقیقاً چه کاری انجام میدهند، بهتر است به چرخهٔ تولید نرمافزار نگاهی داشته باشیم اما پیش از آن، نیمنگاهی به تعریف این اصطلاح از ویکیپدیا خواهیم داشت:
در واقع DevOps یک فرایند تولید نرمافزار است که بر مبنای ارتباط و همکاری هرچه بیشتر میان تیمهای تولید و توسعهٔ نرمافزار و تیمهای اجرایی بنا شده است که در طی این فرآیند عملیاتی مانند Integration ،Testing و Deployment و همچنین اِعمال تغییرات زیرساختی به صورت خودکار درمیآیند و در کل هدف از چنین فرایندی ایجاد فرهنگی است که در آن تولید، تست و انتشار نرمافزار به شیوهای سریع، مداوم و مطمئن انجام شود.
حال بپردازیم به بررسی فرایند توسعهٔ نرمافزار به طوری که این فرایند را میتوان به پنج مرحلهٔ اصلی تقسیم کرد که عبارتند از Planning ،Development ،Testing ،Deployment و Maintenance که در این میان، دو مرحلهٔ Planning و Maintenance بیشترین زمان مهندسین دوآپس را به خود اختصاص میدهند.
📌 طرح ریزی یا Planing
در این مرحله از کار، تیمی متشکل از دولوپرها، مدیران تولید و … اهداف پروژه را تعریف و ترسیم نموده و ساختار کلی نرمافزار را تعیین میکنند و در این مرحله مهندس دوآپس باید از دانش فنی اعضای تیم و تسلط آنها بر پلتفرمهای مورد استفاده بهره برده و بررسی نماید که چگونه میتوان در قالب یک سیستم جامع و یکپارچه به تمام اهداف مورد نظر تیم جامهٔ عمل پوشاند (در کل، این مرحله از کار یکی از مراحل زمانبر است.)
پس از اینکه شِمای کلی سیستم اولیه پیادهسازی و اجرا شد، مهمترین مسئله هدایت تیم در جهت نحوهٔ افزودن قابلیتها و تکنولوژیهای از قبل تولیدشده به این سیستم است. در واقع، مهندس دوآپس همواره باید به دنبال راهکارهایی برای انجام خودکار فرآیندهای مختلف باشد تا بار انجام این کارها تا حد امکان از دوش اعضای تیم برداشته شود. در این مرحله، مهندس دوآپس باید پاسخ سؤالات زیر را بیابد:
- دو سرویس مختلف چگونه میتوانند با هم در تعامل باشند؟
- برای مرتبط کردن این دو سرویس، از چه پروتکلی باید استفاده نمود؟
- آیا سختافزاری که در اختیار ما قرار دارد پاسخگوی نیاز ما هست؟
- برای اینکه بتوانم در امر تولید به مهندسان کمک کنم، نیاز به چه چیزهایی دارم؟
- آیا سرویس مذکور به اصطلاح Production-Ready خواهد بود؟
- آیا تمام دیپندنسیهای مورد استفاده در نرمافزار برای ما ملموس هستند؟
- چه چیزی را لازم است بسازیم و چه چیزی را باید خریداری کنیم؟
- آیا یک تَسک خاص را میتوان به صورت خودکار انجام داد؟
- چهطور میتوان در آینده از این نرمافزار پشتیبانی نمود؟
📌 توسعه یا Development
در این مرحله، ترکیببندی کلی کار مشخص شده و دیگر نوبت دولوپرها است که کد بزنند و قابلیتهای پیشبینی شده را برای نرمافزار ایجاد کنند و هدف عمدهٔ مهندس دوآپس در این مرحله این است که به دنبال راههایی برای سریعتر انجام شدن کارها باشد. به عبارتی، وی باید راهی پیش پای دولوپرها بگذارد تا بتوانند بهترین کار را در کمترین زمان ممکن انجام دهند و این دقیقاً با هدف نهایی کار، یعنی تولید نرمافزار، هماهنگ و سازگار است.
در حقیقت، در این پروسه مهندس دوآپس به دولوپرها میگوید که از چه ابزاری استفاده کنند و همچنین ابزارهای جدید را در اختیار آنها قرار میدهد تا کارشان تسهیل گردد. همچنین این مهندس دوآپس است که باید بخشهای مختلف کدهایی که توسط دولوپرها و در محیط توسعه نوشته شدهاند را مانند قطعات پازل در کنار هم قرار داده و آنها را با محیط نهایی نرمافزار هماهنگ کند و این کاری است که هر دولوپری از عهدهٔ آن بر نمیآید و شاید اگر مهندس دوآپس نمیبود، بسیاری از نرمافزارها قدرت، جلوه و شکوه امروزی خود نداشتند! سؤالاتی که یک مهندس دوآپس در این مرحله ممکن است با آن مواجه شود عبارتند از:
- چگونه میتوانم دولوپرها را در فضایی مشابه فضای محصول نهایی نگاه دارم؟
- چهطور به دولوپرها اجازه دهم تا از ابزارهای مورد علاقهٔ خود استفاده کنند؟
- چگونه میتوانم بهرهوری و کارایی دولوپرها را افزایش دهم؟
- چهطور باید برای دولوپرها توضیح دهم که محیط نهایی نرمافزار چگونه خواهد بود؟
اگر شما هم در زمینهٔ توسعهٔ نرمافزار فعالیت داشته باشید، ممکن است آگهیهای استخدام مهندس DevOps نظر شما را به خود جلب نموده یا حداقل سبب شده باشند تا از خود یا اطرافیان بپرسید که دوآپس چیست و یک متخصص این حوزه چه مسئولیتهایی دارا است و این همان چیزی است که در این این مقاله قصد داریم به بررسیاش بپردازیم.
برای درک بهتر این موضوع که مهندسان DevOps دقیقاً چه کاری انجام میدهند، بهتر است به چرخهٔ تولید نرمافزار نگاهی داشته باشیم اما پیش از آن، نیمنگاهی به تعریف این اصطلاح از ویکیپدیا خواهیم داشت:
در واقع DevOps یک فرایند تولید نرمافزار است که بر مبنای ارتباط و همکاری هرچه بیشتر میان تیمهای تولید و توسعهٔ نرمافزار و تیمهای اجرایی بنا شده است که در طی این فرآیند عملیاتی مانند Integration ،Testing و Deployment و همچنین اِعمال تغییرات زیرساختی به صورت خودکار درمیآیند و در کل هدف از چنین فرایندی ایجاد فرهنگی است که در آن تولید، تست و انتشار نرمافزار به شیوهای سریع، مداوم و مطمئن انجام شود.
حال بپردازیم به بررسی فرایند توسعهٔ نرمافزار به طوری که این فرایند را میتوان به پنج مرحلهٔ اصلی تقسیم کرد که عبارتند از Planning ،Development ،Testing ،Deployment و Maintenance که در این میان، دو مرحلهٔ Planning و Maintenance بیشترین زمان مهندسین دوآپس را به خود اختصاص میدهند.
📌 طرح ریزی یا Planing
در این مرحله از کار، تیمی متشکل از دولوپرها، مدیران تولید و … اهداف پروژه را تعریف و ترسیم نموده و ساختار کلی نرمافزار را تعیین میکنند و در این مرحله مهندس دوآپس باید از دانش فنی اعضای تیم و تسلط آنها بر پلتفرمهای مورد استفاده بهره برده و بررسی نماید که چگونه میتوان در قالب یک سیستم جامع و یکپارچه به تمام اهداف مورد نظر تیم جامهٔ عمل پوشاند (در کل، این مرحله از کار یکی از مراحل زمانبر است.)
پس از اینکه شِمای کلی سیستم اولیه پیادهسازی و اجرا شد، مهمترین مسئله هدایت تیم در جهت نحوهٔ افزودن قابلیتها و تکنولوژیهای از قبل تولیدشده به این سیستم است. در واقع، مهندس دوآپس همواره باید به دنبال راهکارهایی برای انجام خودکار فرآیندهای مختلف باشد تا بار انجام این کارها تا حد امکان از دوش اعضای تیم برداشته شود. در این مرحله، مهندس دوآپس باید پاسخ سؤالات زیر را بیابد:
- دو سرویس مختلف چگونه میتوانند با هم در تعامل باشند؟
- برای مرتبط کردن این دو سرویس، از چه پروتکلی باید استفاده نمود؟
- آیا سختافزاری که در اختیار ما قرار دارد پاسخگوی نیاز ما هست؟
- برای اینکه بتوانم در امر تولید به مهندسان کمک کنم، نیاز به چه چیزهایی دارم؟
- آیا سرویس مذکور به اصطلاح Production-Ready خواهد بود؟
- آیا تمام دیپندنسیهای مورد استفاده در نرمافزار برای ما ملموس هستند؟
- چه چیزی را لازم است بسازیم و چه چیزی را باید خریداری کنیم؟
- آیا یک تَسک خاص را میتوان به صورت خودکار انجام داد؟
- چهطور میتوان در آینده از این نرمافزار پشتیبانی نمود؟
📌 توسعه یا Development
در این مرحله، ترکیببندی کلی کار مشخص شده و دیگر نوبت دولوپرها است که کد بزنند و قابلیتهای پیشبینی شده را برای نرمافزار ایجاد کنند و هدف عمدهٔ مهندس دوآپس در این مرحله این است که به دنبال راههایی برای سریعتر انجام شدن کارها باشد. به عبارتی، وی باید راهی پیش پای دولوپرها بگذارد تا بتوانند بهترین کار را در کمترین زمان ممکن انجام دهند و این دقیقاً با هدف نهایی کار، یعنی تولید نرمافزار، هماهنگ و سازگار است.
در حقیقت، در این پروسه مهندس دوآپس به دولوپرها میگوید که از چه ابزاری استفاده کنند و همچنین ابزارهای جدید را در اختیار آنها قرار میدهد تا کارشان تسهیل گردد. همچنین این مهندس دوآپس است که باید بخشهای مختلف کدهایی که توسط دولوپرها و در محیط توسعه نوشته شدهاند را مانند قطعات پازل در کنار هم قرار داده و آنها را با محیط نهایی نرمافزار هماهنگ کند و این کاری است که هر دولوپری از عهدهٔ آن بر نمیآید و شاید اگر مهندس دوآپس نمیبود، بسیاری از نرمافزارها قدرت، جلوه و شکوه امروزی خود نداشتند! سؤالاتی که یک مهندس دوآپس در این مرحله ممکن است با آن مواجه شود عبارتند از:
- چگونه میتوانم دولوپرها را در فضایی مشابه فضای محصول نهایی نگاه دارم؟
- چهطور به دولوپرها اجازه دهم تا از ابزارهای مورد علاقهٔ خود استفاده کنند؟
- چگونه میتوانم بهرهوری و کارایی دولوپرها را افزایش دهم؟
- چهطور باید برای دولوپرها توضیح دهم که محیط نهایی نرمافزار چگونه خواهد بود؟
پرایم در آرچ
اول درایور intel و amd نصب کنید:
sudo pacman -S xf86-video-intel
sudo pacman -S xf86-video-amdgpu
sudo pacman -S xf86-video-ati
با این دستور لیست کارت گرافیکهارو میبینی:
xrandr --listproviders
معمولن پیشفرض از intel استفاده میشه که میتونی ببینی:
glxinfo | grep "OpenGL renderer"
با دستور زیر میتونی لود کنی کارت گرافیکت رو(خروجی دستوری که لیست کارت شبکه هارو دیدی به عدد ۰ و عدد ۱ توجه کن ، با جابجا کردن اعداد در دستور زیر میتونی گرافیک مورد نظرت رو انتخاب کنی)
xrandr --setprovideroffloadsink 1 0
حالا پیشفرض از اینتل استفاده میکنی و برای استفاده از amd باید بزنی:
DRI_PRIME=1 firefox
اول درایور intel و amd نصب کنید:
sudo pacman -S xf86-video-intel
sudo pacman -S xf86-video-amdgpu
sudo pacman -S xf86-video-ati
با این دستور لیست کارت گرافیکهارو میبینی:
xrandr --listproviders
معمولن پیشفرض از intel استفاده میشه که میتونی ببینی:
glxinfo | grep "OpenGL renderer"
با دستور زیر میتونی لود کنی کارت گرافیکت رو(خروجی دستوری که لیست کارت شبکه هارو دیدی به عدد ۰ و عدد ۱ توجه کن ، با جابجا کردن اعداد در دستور زیر میتونی گرافیک مورد نظرت رو انتخاب کنی)
xrandr --setprovideroffloadsink 1 0
حالا پیشفرض از اینتل استفاده میکنی و برای استفاده از amd باید بزنی:
DRI_PRIME=1 firefox
local.conf
1.4 KB
این فایل رو در مسیر زیر قرار میدید:
/etc/fonts/local.conf
اسم فونتهای دلخواهتون رو برای سه خانواده فونت
sans-serif
serif
monospace
به ترتیب اولویت به همین شکلی که در فایل من میبینید قرار بدهید
البته دقت کنید که فونت وزیر و وزیر کد نسخه WOL رو استفاده کنید که بتونید از فونت لاتین دلخواهتون استفاده کنید
/etc/fonts/local.conf
اسم فونتهای دلخواهتون رو برای سه خانواده فونت
sans-serif
serif
monospace
به ترتیب اولویت به همین شکلی که در فایل من میبینید قرار بدهید
البته دقت کنید که فونت وزیر و وزیر کد نسخه WOL رو استفاده کنید که بتونید از فونت لاتین دلخواهتون استفاده کنید
- منظور از VLAN mismatch یعنی اینکه شما در شبکه فیزیکی روی physical switch تون VLAN روی ساختید مثل VLAN X و روی vDS هم VLAN Y رو ساختید حالا اگر اینها رو بهم assign کنید اصطلاحاً VLAN mismatch بوجود میاد و VLANها با هم منطبق نیستند. این مورد روی Native VLAN هم گاهی بوجود میاد.
- منظور از mismatch MTU هم اینه که معمولاً در شبکه ها MTU رو مقدارش رو 1500 ست میکنند و by defulat هم همین مقدار (یا مقدار 1518 بعضی جاها ست شده) و اگر مقدار MTU رو کاربر تغییر داده باشه این مشکل بوجود میاد توی شبکه و ارتباطات بهم میریزه. یا بعضی از پلتفرم ها مثل NSX باید MTU رو براشون 9000 ست کنید و توی سوئیچ های فیزیکی شبکه تون این مقدار رو براش به 9000 تنظیم کنید والا mismatch MTU پیش میاد.
- منظور از mismatch MTU هم اینه که معمولاً در شبکه ها MTU رو مقدارش رو 1500 ست میکنند و by defulat هم همین مقدار (یا مقدار 1518 بعضی جاها ست شده) و اگر مقدار MTU رو کاربر تغییر داده باشه این مشکل بوجود میاد توی شبکه و ارتباطات بهم میریزه. یا بعضی از پلتفرم ها مثل NSX باید MTU رو براشون 9000 ست کنید و توی سوئیچ های فیزیکی شبکه تون این مقدار رو براش به 9000 تنظیم کنید والا mismatch MTU پیش میاد.
در انتشار جدید zfs چه چیزهایی اضافه شدند؟
در نسخه 0.8.0با ساپورت کرنلهای لینوکس2.6تا 5.1 قابلیتهای زیر اضافه شدند:
-Native encryption
برای ایجاد فایل سیستم ها و ولوم های رمز نگاری شده که الگوریتم پیش فرض آن aes-256-ccm است
-raw encrypted zfs send/receive
انتقال اطلاعات رفت و برگشتی بطور امن بین poolها
-device removal
اجازه حذف دستگاه ها از سطح بالا از pool storageها
-pool checkpoints
رزرو و نگهداری حالتی کلی از pool و در صورت نیاز برگرداندن به آن حالت در هر موقعی مانند snapshot
-pool TRIM
قابلیتی اساسی برای بهبود پرفورمنس در حافظه های SSD
- pool initialization
از بین بردن ساختار و الگوی قبلی و ایجاد الگوی جدید در فضای اشغال نشده حافظه
-Project accounting and qouta
اضافه شدن ابعاد جدیدی در سطح سابق کاربری/گروه در محدودیتها و صفها و ارتقای مدیریتی و محدودیتها و گزارش استفاده آنها
-channel programs
برای اجرای دستورات مدیریتی در قالب اسکریپتهای Lua در محیط امن و محصور شده با زمان و مموری محدود
-pyzfs & python3 compatibilty
اضافه شدن کتابخانه های جدید برای ارتباط با برنامه های پایتونی بطور api و غیره و بهبود سازگاری با ورژن3پایتون
-direct IO support
سازگاری با مکانیزم لینوکسی direct IO
اطلاعات و توضیحات بیشتر در صفحه گیتهاب zfsonlinux: github.com/zfsonlinux
در نسخه 0.8.0با ساپورت کرنلهای لینوکس2.6تا 5.1 قابلیتهای زیر اضافه شدند:
-Native encryption
برای ایجاد فایل سیستم ها و ولوم های رمز نگاری شده که الگوریتم پیش فرض آن aes-256-ccm است
-raw encrypted zfs send/receive
انتقال اطلاعات رفت و برگشتی بطور امن بین poolها
-device removal
اجازه حذف دستگاه ها از سطح بالا از pool storageها
-pool checkpoints
رزرو و نگهداری حالتی کلی از pool و در صورت نیاز برگرداندن به آن حالت در هر موقعی مانند snapshot
-pool TRIM
قابلیتی اساسی برای بهبود پرفورمنس در حافظه های SSD
- pool initialization
از بین بردن ساختار و الگوی قبلی و ایجاد الگوی جدید در فضای اشغال نشده حافظه
-Project accounting and qouta
اضافه شدن ابعاد جدیدی در سطح سابق کاربری/گروه در محدودیتها و صفها و ارتقای مدیریتی و محدودیتها و گزارش استفاده آنها
-channel programs
برای اجرای دستورات مدیریتی در قالب اسکریپتهای Lua در محیط امن و محصور شده با زمان و مموری محدود
-pyzfs & python3 compatibilty
اضافه شدن کتابخانه های جدید برای ارتباط با برنامه های پایتونی بطور api و غیره و بهبود سازگاری با ورژن3پایتون
-direct IO support
سازگاری با مکانیزم لینوکسی direct IO
اطلاعات و توضیحات بیشتر در صفحه گیتهاب zfsonlinux: github.com/zfsonlinux
GitHub
ZFS on Linux
ZFS on Linux has 15 repositories available. Follow their code on GitHub.
- منظور از Storage Controller که بهش Storage Processor یا SP یا array controller هم میگن، منظور بخشی هست که کارشون اینه که شما اجازه میدن مدیریت storage تون (SAN) رو از طریق اون بصورت GUI انجام بدین و دو تا از این واحدها داریم به اسم SP-A و SP-B که بر روی DPE قرار میگرن.
- منظور RAID Controller هم device هستش روی سرورها که سرور از طریق اون میتونه دیسک ها رو RAID بندی کنه که حالا RAID Controller سخت افزاری داریم و نرم افزاری داریم. روی Storage هم باز ما این رو داریم ولی اونجا اصطلاحاً بهش میگن Disk Array Controller.
- منظور از disk enclosure در واقع یه محفظه ای از دیسک ها هست توی Storageها. ما توی مفاهیم Storage یه DPE داریم یه DAE. که DPE یا Disk Processor Enclosure کلیه قطعات کاربری storage و کلیه چیزهایی که با پروتکل های block-based در ارتباط هستند رو شامل میشه و روش vault driveها که محل قرار گیری OE (سیستم عامل storage) هستند رو هم روی این دیسک هاست. توی EMC معمولاً این DPE خودش 25 تا دیسک داره که 4 تای اول Vault driveها هستند و 21 دیسک بعدی دیسک های ذخیره سازی شما هستند که اگر ظرفیتشون پر بشه میاد یه DAE یا Disk Array Enclosure به DPE اضافه میکنن که اون دیگه OE و Vault drive نداره و تمام دیسک هاش برای ذخیره سازی استفاده میشن. به این DAEها Disk Enclosure هم میگن.
- در مورد external RAID Controller هم تعریف زیر رو بخونید:
The RAID controller is best described as a device in which servers and storage intersect. The controller can be internal to the server, in which case it is a card or chip, or external, in which case it is an independent enclosure, such as a NAS (network-attached storage) .
- منظور RAID Controller هم device هستش روی سرورها که سرور از طریق اون میتونه دیسک ها رو RAID بندی کنه که حالا RAID Controller سخت افزاری داریم و نرم افزاری داریم. روی Storage هم باز ما این رو داریم ولی اونجا اصطلاحاً بهش میگن Disk Array Controller.
- منظور از disk enclosure در واقع یه محفظه ای از دیسک ها هست توی Storageها. ما توی مفاهیم Storage یه DPE داریم یه DAE. که DPE یا Disk Processor Enclosure کلیه قطعات کاربری storage و کلیه چیزهایی که با پروتکل های block-based در ارتباط هستند رو شامل میشه و روش vault driveها که محل قرار گیری OE (سیستم عامل storage) هستند رو هم روی این دیسک هاست. توی EMC معمولاً این DPE خودش 25 تا دیسک داره که 4 تای اول Vault driveها هستند و 21 دیسک بعدی دیسک های ذخیره سازی شما هستند که اگر ظرفیتشون پر بشه میاد یه DAE یا Disk Array Enclosure به DPE اضافه میکنن که اون دیگه OE و Vault drive نداره و تمام دیسک هاش برای ذخیره سازی استفاده میشن. به این DAEها Disk Enclosure هم میگن.
- در مورد external RAID Controller هم تعریف زیر رو بخونید:
The RAID controller is best described as a device in which servers and storage intersect. The controller can be internal to the server, in which case it is a card or chip, or external, in which case it is an independent enclosure, such as a NAS (network-attached storage) .
توضیحی درمورد ابزار قدرتمند و محبوب Ansible و اینکه چطور میتونه به یه Zabbix کار و یا SysAdmin کمک کنه
خب اول بزارین ببینیم خود Ansible چیه ؟ با گسترش روز افزون تکنولوژی و حجیم شدن داده ها و افزایش سرورها و سیستم ها، دستی مدیریت کردن منابع و سرویس ها کاری بسیار دشوار و غیر عقلانی هست، چون ممکنه مثلا کلی خطای غیر عمدی و سهوی در کانفیگ کردن سرورها اتفاق بیفته و باعث down شدن سرویس ها بشه که البته پس از زیاد شدن سرورها و سرویس ها امری طبیعی و غیر قابل انکار هست، حالا یه راهکاری که اکثر سازمان ها و شرکت ها استفاده میکردن و همچنان خیلی ازش استفاد میکنن بحث Scripting بوده و هست که کار همچین آسونی هم نیست، به قول استاد مهرانفرید عزیز که میگفتن شما ممکنه یه اسکریپت بنویسین تو 5 ثانیه اجرا بشه و ممکنه همون اسکریپت رو جوری بنویسین که با برف سال دیگه نتیجه حاصل بشه 😀 (پس این هم کار هر کسی نیست و تخصص خودش رو میخواد)، خب پس راهکار چی بود ؟ این وسط و پس از گذشت چندین سال ابزارهایی مثل Ansible، Puppet، Chef، SaltStack، CFEngine و ... به وجود اومدند که کار اصلی اونها Configuration management (مدیریت پیکربندی) و Application-deployment (پیاده سازی نرم افزار) هست که کار مدیران سیستم ها رو با پیاده سازی automation بسیار آسون میکنه و ما رو به شدت در برابر خطای انسانی و از دست دادن زمان کمک میکنه.
یکی از محبوب ترین این ابزارها Ansible هست که توسط شرکت Redhat پشتیبانی میشه و نسخه ی رایگان و پولی (Tower) داره که یکی از مزیت های اصلی این نرم افزار Agentless (بی نیاز بودن به نصب agent بر روی هاستی که قراره مدیریت بشه) بودن اون هست و این نرم افزار از طریق پروتکل SSH و با استفاده از زبان YAML سرورهای تحت پوشش خودش رو مدیریت میکنه. ضمنا یه فضای مخصوص خودش رو به نام Ansible-galaxy داره که کاربران template هایی که ساختن رو در اونجا قرار میدن و شما فقط کافیه اون template رو برای محیط خودتون سفارشی سازی کنین و استفاده کنین.
حالا ما چطور میتونیم از Ansible و راهکارایی که در اون برای زبیکس وجود داره استفاده کنیم ؟ ذیلا چندتا مثال از این موارد میزنم :
1- نصب زبیکس سرور و زبیکس پراکسی
2- نصب زبیکس Agent، خصوصا وقتی که قراره اون رو روی تعداد زیادی Host نصب کنین.
3- اعمال تغیرات و تنظیمات بر روی تمامی هاست ها، خصوصا زمانی که میخواهیم تغییری را در سطح تمامی agent ها اعمال کنیم.
4- استفاده از زبیکس برای ساختن Ansible inventory : یعنی زمانی که شما زبیکس توی سازمان دارین و تازه میخواین Ansible رو پیاده سازی و استفاده بکنین میتونین Ansible inventory یا همون لیست هاست هارو از زبیکس سرور استخراج کنین که کار شمارو بسیار آسون میکنه.
لینک هایی که برای پیگیری این موارد میتونین ازشون استفاده کنین ذیلا آورده شدن:
https://www.zabbix.com/integrations/ansible
https://github.com/burgosz/ansible-zabbix-inventory
خب اول بزارین ببینیم خود Ansible چیه ؟ با گسترش روز افزون تکنولوژی و حجیم شدن داده ها و افزایش سرورها و سیستم ها، دستی مدیریت کردن منابع و سرویس ها کاری بسیار دشوار و غیر عقلانی هست، چون ممکنه مثلا کلی خطای غیر عمدی و سهوی در کانفیگ کردن سرورها اتفاق بیفته و باعث down شدن سرویس ها بشه که البته پس از زیاد شدن سرورها و سرویس ها امری طبیعی و غیر قابل انکار هست، حالا یه راهکاری که اکثر سازمان ها و شرکت ها استفاده میکردن و همچنان خیلی ازش استفاد میکنن بحث Scripting بوده و هست که کار همچین آسونی هم نیست، به قول استاد مهرانفرید عزیز که میگفتن شما ممکنه یه اسکریپت بنویسین تو 5 ثانیه اجرا بشه و ممکنه همون اسکریپت رو جوری بنویسین که با برف سال دیگه نتیجه حاصل بشه 😀 (پس این هم کار هر کسی نیست و تخصص خودش رو میخواد)، خب پس راهکار چی بود ؟ این وسط و پس از گذشت چندین سال ابزارهایی مثل Ansible، Puppet، Chef، SaltStack، CFEngine و ... به وجود اومدند که کار اصلی اونها Configuration management (مدیریت پیکربندی) و Application-deployment (پیاده سازی نرم افزار) هست که کار مدیران سیستم ها رو با پیاده سازی automation بسیار آسون میکنه و ما رو به شدت در برابر خطای انسانی و از دست دادن زمان کمک میکنه.
یکی از محبوب ترین این ابزارها Ansible هست که توسط شرکت Redhat پشتیبانی میشه و نسخه ی رایگان و پولی (Tower) داره که یکی از مزیت های اصلی این نرم افزار Agentless (بی نیاز بودن به نصب agent بر روی هاستی که قراره مدیریت بشه) بودن اون هست و این نرم افزار از طریق پروتکل SSH و با استفاده از زبان YAML سرورهای تحت پوشش خودش رو مدیریت میکنه. ضمنا یه فضای مخصوص خودش رو به نام Ansible-galaxy داره که کاربران template هایی که ساختن رو در اونجا قرار میدن و شما فقط کافیه اون template رو برای محیط خودتون سفارشی سازی کنین و استفاده کنین.
حالا ما چطور میتونیم از Ansible و راهکارایی که در اون برای زبیکس وجود داره استفاده کنیم ؟ ذیلا چندتا مثال از این موارد میزنم :
1- نصب زبیکس سرور و زبیکس پراکسی
2- نصب زبیکس Agent، خصوصا وقتی که قراره اون رو روی تعداد زیادی Host نصب کنین.
3- اعمال تغیرات و تنظیمات بر روی تمامی هاست ها، خصوصا زمانی که میخواهیم تغییری را در سطح تمامی agent ها اعمال کنیم.
4- استفاده از زبیکس برای ساختن Ansible inventory : یعنی زمانی که شما زبیکس توی سازمان دارین و تازه میخواین Ansible رو پیاده سازی و استفاده بکنین میتونین Ansible inventory یا همون لیست هاست هارو از زبیکس سرور استخراج کنین که کار شمارو بسیار آسون میکنه.
لینک هایی که برای پیگیری این موارد میتونین ازشون استفاده کنین ذیلا آورده شدن:
https://www.zabbix.com/integrations/ansible
https://github.com/burgosz/ansible-zabbix-inventory
GitHub
GitHub - burgosz/ansible-zabbix-inventory: Ansible inventory noscript for Zabbix
Ansible inventory noscript for Zabbix. Contribute to burgosz/ansible-zabbix-inventory development by creating an account on GitHub.
نرمافزار (AIDE (Advanced Intrusion Detection Environment یک سامانه پیشرفته تشخیص رخنه Host است که در حقیقت میتواند سیستم ما را اسکن نموده و هر تغییری که بر روی فایلها و دایرکتوریها که به دلایل مختلف از جمله نفوذ، تغییر با rootkitها و … به وجود آمده باشد را گزارش دهد.
این نرمافزار به عنوان جایگزینی Free در سال ۲۰۱۰ برای نرمافزار Tripwire ارائه شد. نحوه عملکرد AIDE به این صورت است که یک snapshot از وضعیت سیستم بر اساس المانهایی چون الگوریتمهای message digest و خصایص فایلها تهیه میکند و در بانک اطلاعاتی خود ذخیره مینماید که معمولاً فایل snapshot به منظور امنیت بیشتر در یک External Device نگهداری میشود.
سپس هنگامی که مدیر سیستم میخواهد صحت و سلامت سیستم را تست کند، با دستور aide سیستم را دوباره اسکن مینماید و خروجی تست با فایل snapshot مقایسه میگردد. نرمافزار AIDE تمامی تغییرات به وجود آمده را مییابد و برای مدیر سیستم گزارش تغییرات ارسال میگردد.
امکانات AIDE
این نرمافزار Portable بوده و میتوان از آن طوری استفاده نمود که شخص مهاجم به هیچ وجه از وجود آن در سیستم ما مطلع نشود. به مدیران سیستمهای لینوکس پیشنهاد میشود که این نرمافزار را بر روی سرورهای عملیاتی خود نصب نمایند.
این نرمافزار به عنوان جایگزینی Free در سال ۲۰۱۰ برای نرمافزار Tripwire ارائه شد. نحوه عملکرد AIDE به این صورت است که یک snapshot از وضعیت سیستم بر اساس المانهایی چون الگوریتمهای message digest و خصایص فایلها تهیه میکند و در بانک اطلاعاتی خود ذخیره مینماید که معمولاً فایل snapshot به منظور امنیت بیشتر در یک External Device نگهداری میشود.
سپس هنگامی که مدیر سیستم میخواهد صحت و سلامت سیستم را تست کند، با دستور aide سیستم را دوباره اسکن مینماید و خروجی تست با فایل snapshot مقایسه میگردد. نرمافزار AIDE تمامی تغییرات به وجود آمده را مییابد و برای مدیر سیستم گزارش تغییرات ارسال میگردد.
امکانات AIDE
این نرمافزار Portable بوده و میتوان از آن طوری استفاده نمود که شخص مهاجم به هیچ وجه از وجود آن در سیستم ما مطلع نشود. به مدیران سیستمهای لینوکس پیشنهاد میشود که این نرمافزار را بر روی سرورهای عملیاتی خود نصب نمایند.
ارتباط X سرور با X کلاینتها
خب x سرور ارتباطش با x کلاینت ها روی شبکه هست
اگه سخت افزاری نداری میتونی مجازی دوتا سیستم عامل بالا بیاری
اگر ip یکی 192.168.1.3 باشه و یکی دیگه مثلن 192.168.1.20 باشه که هر دو در یک شبکه باشن و پینگ همدیگه رو بگیرن
حالا مثلن یه ادیتور داخل سیستم اول میتونی باز کنی اما پنجره باز شدش در سیستم عامل دوم نمایش داده بشه
برای این کار متغیر محیطی display رو داریم اگر ببینیش
داخلش نوشته 0: قبل از علامت دونقطه اگر ip نباشه میشه لوکال هاست و اون صفر هم چون یه display داریم و مالتی نیست. بخاطر اینکه متغیر display روی لوکال هاسته پس هر برنامهای ران کنیم داخل سیستمی نشون داده میشه که همون برنامه اجرا میشه
حالا بیا متغیر display رو تغییر بده
حالا مثلن فایرفاکس رو اگه اجرا کنی خطا میده که نمیتونه به x سرور وصل بشه
حالا باید بری روی سیستم دوم و تنظیمات dm اون رو تغییر بدی مثلن اگر lightdm داره باید داخل
یه lightdm.conf درست کنی و بنویسی
که x سرور اجازه بده از بیرون برنامهها بهش وصل بشن ، بعد سرویس lightdm رو یبار ریاستارت کن.
و درآخر باید بگیم حالا کی میتونه به x سرور وصل بشه پس میزنیم:
میتونی بزنی
که همه بتونن وصل بشن
حالا اگه بری داخل سیستم اول و یه فایرفاکس باز کنی، میبینی پنجرش داخل سبستم عامل دوم دیده میشه :))
خب x سرور ارتباطش با x کلاینت ها روی شبکه هست
اگه سخت افزاری نداری میتونی مجازی دوتا سیستم عامل بالا بیاری
اگر ip یکی 192.168.1.3 باشه و یکی دیگه مثلن 192.168.1.20 باشه که هر دو در یک شبکه باشن و پینگ همدیگه رو بگیرن
حالا مثلن یه ادیتور داخل سیستم اول میتونی باز کنی اما پنجره باز شدش در سیستم عامل دوم نمایش داده بشه
برای این کار متغیر محیطی display رو داریم اگر ببینیش
echo $DISPLAYداخلش نوشته 0: قبل از علامت دونقطه اگر ip نباشه میشه لوکال هاست و اون صفر هم چون یه display داریم و مالتی نیست. بخاطر اینکه متغیر display روی لوکال هاسته پس هر برنامهای ران کنیم داخل سیستمی نشون داده میشه که همون برنامه اجرا میشه
حالا بیا متغیر display رو تغییر بده
export DISPLAY=192.168.1.20:0.0حالا مثلن فایرفاکس رو اگه اجرا کنی خطا میده که نمیتونه به x سرور وصل بشه
حالا باید بری روی سیستم دوم و تنظیمات dm اون رو تغییر بدی مثلن اگر lightdm داره باید داخل
/etc/lightdm/lightdm.d/یه lightdm.conf درست کنی و بنویسی
[SeatDefaults]
xserver-allow-tcp=trueکه x سرور اجازه بده از بیرون برنامهها بهش وصل بشن ، بعد سرویس lightdm رو یبار ریاستارت کن.
و درآخر باید بگیم حالا کی میتونه به x سرور وصل بشه پس میزنیم:
xhost +192.168.1.3میتونی بزنی
xhost +که همه بتونن وصل بشن
حالا اگه بری داخل سیستم اول و یه فایرفاکس باز کنی، میبینی پنجرش داخل سبستم عامل دوم دیده میشه :))
نوشتن یک rule (قانون) ساده در udev:
همه rule های udev توی پوشه /etc/udev/rules.d/ قرار دارن
محتویات پوشه :
توجه داشته باشین که این اعداد که اول فایل ها نوشته شده برای نوبت بندی فایل هاست یعنی موقع هندل کردن از فایل هایی با شماره پایین تر قانون ها خونده میشه تا اخرین فایل
حالا یه فایل میسازیم :
و یک فایل اجرایی هم میسازیم :
حالا با nano فایل 1_usb.rule رو باز میکنیم و دستورات زیر رو توش سیو میکنیم :
write following text in rule file :
save and exit
خب حالا وارد فایل اجرایی میشیم و دستوری که میخوایم موقع متصل شدن usb را بشه رو مینویسیم :
write following text in execute file
save and exit
خب حالا فقط باید permission اجرایی رو به فایل بدین با دستور زیر :
حالا باید udev رو reload کنیم :
کار تمومه میتونین امتحان کنین یه usb به کامپیوتر متصل کنین و خبر و زمان دقیقش رو توی فایل
میتونین قانون های خودتون رو بنویسین
همه rule های udev توی پوشه /etc/udev/rules.d/ قرار دارن
محتویات پوشه :
70-persistent-cd.rules
73-special-net-names.rules
73-usb-net-by-mac.rulesتوجه داشته باشین که این اعداد که اول فایل ها نوشته شده برای نوبت بندی فایل هاست یعنی موقع هندل کردن از فایل هایی با شماره پایین تر قانون ها خونده میشه تا اخرین فایل
حالا یه فایل میسازیم :
$ touch 1_usb.rulesو یک فایل اجرایی هم میسازیم :
$ touch ruel.shحالا با nano فایل 1_usb.rule رو باز میکنیم و دستورات زیر رو توش سیو میکنیم :
$ nano 1_usb.ruleswrite following text in rule file :
SUBSYSTEM=="usb", ACTION=="add", ENV{DEVTYPE}=="usb_device", RUN+="/etc/udev/ruels.d/rule.sh"save and exit
خب حالا وارد فایل اجرایی میشیم و دستوری که میخوایم موقع متصل شدن usb را بشه رو مینویسیم :
$ nano rule.shwrite following text in execute file
#!/bin/bash
echo "USB device added at $(date)" >>/tmp/noscripts.logsave and exit
خب حالا فقط باید permission اجرایی رو به فایل بدین با دستور زیر :
chmod +x rule.shحالا باید udev رو reload کنیم :
$ usevadm control —reloadکار تمومه میتونین امتحان کنین یه usb به کامپیوتر متصل کنین و خبر و زمان دقیقش رو توی فایل
/tmp/noscripts.log نوشته میشه میتونین قانون های خودتون رو بنویسین
دستور arp
دستور ARP یا همان Address Resolution Protocol یکی از پروتکلهای TCP/IP است. وظیفهی اصلی arp پیدا کردن آدرس سختافزاری MAC Address دستگاهها در شبکه است. و به ما اجازهی مشاهدهی کش مربوط به پروتکل ARP را میدهد؛ تا در صورت نیاز آنرا بتوان ویرایش کرد.
مشاهده فهرست با استفاده از کش پروتکل ARP
برای مشاهده آدرسهای سختافزاری کش شده با پروتکل ARP، پارامتر a- را میتوان بهکاربرد:
با توجه به تصویر زیر، فرمان arp فهرست MAC آدرسهای ذخیره شده بههمراه IP Address مرتبط را بهنمایش میگذارد.
پارامتر g- هم دقیقاً مانند a- عمل کرده و فهرست MAC آدرسهای کش شده را نمایش میدهد.
مشاهده فهرست با استفاده از کش پروتکل ARP
در ستون Type کلمهی Static به معنی تنظیم دستی است و زمان آن موقت نیست؛ اما پس از اولین توقف TCP/IP در ویندوز این نوع کش MAC ADDRESS نیز حذف میشود.
دستور نمایش ARP Table مختص هر Interface
برای نمایش جدول ARP یک کارت شبکه، میبایست از فرمان arp بههمراه پارامترهای a- و n- استفاده کرد. در این دستور مشخص شده که جدول Arp متعلق به کارت شبکهای که آدرس ۱۹۲.۱۶۸.۱.۱۴۵ روی آن تنظیم شده است، نمایش داده شود.
به مثال زیر توجه کنید:
اضافه کردن MAC Address به جدول ARP
برای اضافه کردن MAC Address به جدول ARP، میبایست از فرمان arp و پارامتر s- استفاده کرد. برای کار با این دستور کافی است بعد از پارامتر s- آدرس آی پی مورد نظر خود و سپس با یک فاصله آدرس سخت افزاری کارت شبکه مربوط به آن را وارد کنید. به مثال زیر توجه کنید:
در این دستور مشخص شده که آدرس سختافزاری ۰۰-۱f-fb-c4-e6-c5 به آدرس ۱۹۲.۱۶۸.۱.۱ مربوط میشود:
اضافه کردن MAC Address به جدول ARP
حذف کردن MAC Address از جدول ARP
برای حذف آدرس سختافزاری از جدول ARP باید از فرمان arp و پارامتر d- استفاده کرد. در این دستور IP Adress: 192.168.1.1 باید از جدول ARP حذف شود. به مثال زیر توجه کنید:
اگر به جای آدرس سخت افزاری خاص از علامت (*) استفاده کنید، کل جدول Arp به صورت کامل خالی میشود.
دستور ARP یا همان Address Resolution Protocol یکی از پروتکلهای TCP/IP است. وظیفهی اصلی arp پیدا کردن آدرس سختافزاری MAC Address دستگاهها در شبکه است. و به ما اجازهی مشاهدهی کش مربوط به پروتکل ARP را میدهد؛ تا در صورت نیاز آنرا بتوان ویرایش کرد.
مشاهده فهرست با استفاده از کش پروتکل ARP
برای مشاهده آدرسهای سختافزاری کش شده با پروتکل ARP، پارامتر a- را میتوان بهکاربرد:
arp –aبا توجه به تصویر زیر، فرمان arp فهرست MAC آدرسهای ذخیره شده بههمراه IP Address مرتبط را بهنمایش میگذارد.
پارامتر g- هم دقیقاً مانند a- عمل کرده و فهرست MAC آدرسهای کش شده را نمایش میدهد.
مشاهده فهرست با استفاده از کش پروتکل ARP
در ستون Type کلمهی Static به معنی تنظیم دستی است و زمان آن موقت نیست؛ اما پس از اولین توقف TCP/IP در ویندوز این نوع کش MAC ADDRESS نیز حذف میشود.
دستور نمایش ARP Table مختص هر Interface
برای نمایش جدول ARP یک کارت شبکه، میبایست از فرمان arp بههمراه پارامترهای a- و n- استفاده کرد. در این دستور مشخص شده که جدول Arp متعلق به کارت شبکهای که آدرس ۱۹۲.۱۶۸.۱.۱۴۵ روی آن تنظیم شده است، نمایش داده شود.
به مثال زیر توجه کنید:
arp -a -n 192.168.1.145اضافه کردن MAC Address به جدول ARP
برای اضافه کردن MAC Address به جدول ARP، میبایست از فرمان arp و پارامتر s- استفاده کرد. برای کار با این دستور کافی است بعد از پارامتر s- آدرس آی پی مورد نظر خود و سپس با یک فاصله آدرس سخت افزاری کارت شبکه مربوط به آن را وارد کنید. به مثال زیر توجه کنید:
در این دستور مشخص شده که آدرس سختافزاری ۰۰-۱f-fb-c4-e6-c5 به آدرس ۱۹۲.۱۶۸.۱.۱ مربوط میشود:
arp -s 192.168.1.1 00-1f-fb-c4-e6-c5اضافه کردن MAC Address به جدول ARP
حذف کردن MAC Address از جدول ARP
برای حذف آدرس سختافزاری از جدول ARP باید از فرمان arp و پارامتر d- استفاده کرد. در این دستور IP Adress: 192.168.1.1 باید از جدول ARP حذف شود. به مثال زیر توجه کنید:
arp -d 192.168.1.1اگر به جای آدرس سخت افزاری خاص از علامت (*) استفاده کنید، کل جدول Arp به صورت کامل خالی میشود.
arp -d *
GNU/Linux
Photo
نرمافزار Glances
نرمافزار Glances یک نرمافزار Open source و cross-platform جهت مانیتورینگ (real-time) مانند (top و htop) قابلاستفاده بر روی سرورهای مجازی است. این نرمافزار میتواند در حالتهای (standalone)، (clinet/server) و حالت (web server) سرویسدهی کند.
جهت اجرا در حالت وبسرویس نیاز به نصب (python bottle) و (WSGI) دارید.
مرحله اول نصب:
پس از نصب برای اجرا از –w استفاده کنید تا برنامه در حالت وب سرور اجرا شود:
یا
برای باز کردن پورت ۶۱۲۰۸ میتوان از فرمان زیر استفاده کرد:
و یا
بعد از انجام مراحل بالا سرور با آدرس
درصورتی که تمایل دارید این نرمافزار بهعنوان سرویس بر روی سرور شما اجرا شود، میتوانید بهوسیلهی دستورات زیر آنرا به سرویسها اضافه کنید:
و اطلاعات زیر را در این فایل اضافه کنید:
توجه داشته باشید بعد از (URL) میتوانید زمان بهروزرسانی خودکار را نیز برای صفحه مشخص کنید.
نرمافزار Glances یک نرمافزار Open source و cross-platform جهت مانیتورینگ (real-time) مانند (top و htop) قابلاستفاده بر روی سرورهای مجازی است. این نرمافزار میتواند در حالتهای (standalone)، (clinet/server) و حالت (web server) سرویسدهی کند.
جهت اجرا در حالت وبسرویس نیاز به نصب (python bottle) و (WSGI) دارید.
مرحله اول نصب:
sudo apt install glances python-bottle #Debian/Ubuntusudo yum install glances python-bottle #RHEL/CentOSsudo dnf install glancespython-bottle #Fedora 22پس از نصب برای اجرا از –w استفاده کنید تا برنامه در حالت وب سرور اجرا شود:
glances -wیا
glances -wبرای باز کردن پورت ۶۱۲۰۸ میتوان از فرمان زیر استفاده کرد:
sudo firewall-cmd –permanent –add-port=61208/tcp
sudo firewall-cmd –reloadو یا
sudo ufw allow 61208/tcp
sudo ufw allow reloadبعد از انجام مراحل بالا سرور با آدرس
(http://server_IP:61208) در دسترس خواهد بود.درصورتی که تمایل دارید این نرمافزار بهعنوان سرویس بر روی سرور شما اجرا شود، میتوانید بهوسیلهی دستورات زیر آنرا به سرویسها اضافه کنید:
$ sudo vim /usr/lib/systemd/system/glancesweb.serviceو اطلاعات زیر را در این فایل اضافه کنید:
[Unit]
Denoscription = Glances in Web Server Mode
After = network.target
[Service]
ExecStart = /usr/bin/glances -w -t 5
[Install]
WantedBy = multi-user.targetتوجه داشته باشید بعد از (URL) میتوانید زمان بهروزرسانی خودکار را نیز برای صفحه مشخص کنید.
http://SERVERI_P:61208/8نگاه کلی به دستورات Network
میتوان لیست کارت شبکهها و اطلاعات آن را با دستور ifconfig بدست آورد.
دادن ip به اینترفیس فیزیکی enp0s31f6
تغییر مک آدرس یک کارت شبکه فیزیکی(برای مک اسپوفینگ)
دیدن شبکهها وایرلس
که در اینجا wlp4s0 اسم کارت شبکه وایرلس ما است.
برای وصل شدن به یکی از شبکههایی که در دستور قبل دیدیم، از دستور زیر استفاده میکنیم:
دیدن روتینگ سیستم
یا دستور:
پاک کردن دیفالت گتوی(DG)
اضافه کردن دیفالت گتوی(DG)
دستور ip
دیدن اینترفیسها و جزئیات
دیدن جدول روتینگ سیستم
دادن یک route (اینجا DG)
دادن ip به یک اینترفیس
حذف یک ip از یک اینترفیس
غیرفعال کردن یک کارت شبکه
فعال کردن یک اینترفیس
دیدن مکآدرسها و اینکه چه ip گرفتن
دیدن تمام سوکتها
چک کردن مسیر تا مقصد(مثلن گوگل)
یا دستور
دستور nc یا netcat
برای listen کردن روی یک پورت(مثلن ۱۲۳۴)
وصل شدن به یک پورت در لوکال هاست
دستور nmap
اسکن کردن یک سایت(گرفتن اطلاعات)
چک کردن یک پورت خاص در تمام سیستمهای یک شبکه (مثلن پورت تلنت)
پیدا کردن ip یک سایت
یا دستور
میتوان لیست کارت شبکهها و اطلاعات آن را با دستور ifconfig بدست آورد.
دادن ip به اینترفیس فیزیکی enp0s31f6
ifconfig enp0s31f6 up 192.168.1.5 netmask 255.255.255.0تغییر مک آدرس یک کارت شبکه فیزیکی(برای مک اسپوفینگ)
ifconfig enp0s31f6 hw ether AA:BB:CC:DD:EE:FFدیدن شبکهها وایرلس
iwlist wlp4s0 scanکه در اینجا wlp4s0 اسم کارت شبکه وایرلس ما است.
برای وصل شدن به یکی از شبکههایی که در دستور قبل دیدیم، از دستور زیر استفاده میکنیم:
iwconfig wlp4s0 essid "arman" key s:passwordدیدن روتینگ سیستم
netstat -nrیا دستور:
route -nپاک کردن دیفالت گتوی(DG)
route del default gw 192.168.1.1اضافه کردن دیفالت گتوی(DG)
route add defualt gw 192.168.1.1دستور ip
دیدن اینترفیسها و جزئیات
ip addr showدیدن جدول روتینگ سیستم
ip route showدادن یک route (اینجا DG)
ip route add default via 192.168.1.1دادن ip به یک اینترفیس
ip addr add 192.168.1.5/24 dev interfacenameحذف یک ip از یک اینترفیس
ip addr del 192.168.1.5/24 dev interfacenameغیرفعال کردن یک کارت شبکه
ip link set interfacename downفعال کردن یک اینترفیس
ip link set interfacename upدیدن مکآدرسها و اینکه چه ip گرفتن
arp -nدیدن تمام سوکتها
ss -lچک کردن مسیر تا مقصد(مثلن گوگل)
traceroute google.comیا دستور
mtr google.comدستور nc یا netcat
برای listen کردن روی یک پورت(مثلن ۱۲۳۴)
nc -l 1234وصل شدن به یک پورت در لوکال هاست
nc localhost 1234دستور nmap
اسکن کردن یک سایت(گرفتن اطلاعات)
nmap -v google.comچک کردن یک پورت خاص در تمام سیستمهای یک شبکه (مثلن پورت تلنت)
nmap 192.168.1.1/24 -p 23پیدا کردن ip یک سایت
nslookup google.comیا دستور
dig google.comدستور tcpdump
دیدن تمام اینترفیسها
شنود کردن روی یک پورت
بعد از سوئیچ i که any گذاشتیم، یعنی تمام اینترفیسها
ریختن دادههای دریافتی از شنود در یک فایل
مبدا اگر یک ip بود
اگر مقصد یک ip بود
برای درست کردن وایت لیست
درست کردن بلکلیست
دیدن تمام اینترفیسها
tcpdump -Dشنود کردن روی یک پورت
tcpdump -i any port 1234بعد از سوئیچ i که any گذاشتیم، یعنی تمام اینترفیسها
ریختن دادههای دریافتی از شنود در یک فایل
tcpdump -i any port 1234 -w file.pcapمبدا اگر یک ip بود
tcpdump src ...اگر مقصد یک ip بود
tcpdump dst ...برای درست کردن وایت لیست
/etc/hosts.allowدرست کردن بلکلیست
/etc/hosts.denyتفسیر چند مفهوم مهم USS/PSS/VSS/RSS در حافظه اصلی:
سیستم عامل حافظه اصلی کامپیوتر (Memory) را به جای Byte به صورت صفحه به صفحه (Page) استفاده می کند و در لینوکس معمولا اندازه این صفحات 4096 بایت می باشد.
پارامتر VSS یا VSZ: این پارامتر مخفف Virtual Set Size است و مقدار کل فضای آدرسی (Address Space) که برنامه در اختیار دارد را نشان می دهد، یعنی مثلا اگر برنامه ما یک فایل 1GB را Memory Map کند (در مقالات بعدی توضیح خواهم داد) این پارامتر آن را نیز حساب می کند، پس این عدد نشانگر خوبی برای مقدار استفاده واقعی برنامه ما از Memory نیست و استفاده های دیگری دارد. در نتیجه این پارامتر مقدار کل فضای آدرسی که اشغال شده است را نشان می دهد که این آدرس ها می تواند اندازه خود برنامه اصلی، مقدار Heap اشغال شده توسط ()malloc، فایل ها، دیوایس های و ... باشد.
پارامتر RSS: این پارامتر مخفف Resident Set Size است و مقدار کل حافظه ای که خود برنامه بعلاوه Shared Library ها اشغال کرده اند را نشان می دهد، در نتیجه این پارامتر نیز برای محاسبه مقدار واقعی حافظه ای که خود برنامه استفاده می کند نیز مناسب نیست چون Shared Library ها فقط یک بار در حافظه Load می شوند و بین همه برنامه ها به اشتراک گذاشته می شوند و ممکن است یک Shared Library قبل از اجرا برنامه شما در حافظه فراخوانی شده باشد و یا برای اولین بار توسط برنامه شما به حافظه فراخوانی شود. در کل پارامتر بسیار جالب و کاربردی است ولی برای استخراج مقدار حافظه اشغال شده توسط کد های نوشته شده توسط شما مناسب نیست.
پارامتر PSS: این پارامتر مخفف Proportional Set Size است که همانطور که از Proportional به معنی متناسب مشخص است برخلاف RSS که کل فضای اشغال شده توسط Shared Library را به هر برنامه اضافه می کند، PSS آن را بین برنامه ها تقسیم می نماید! یعنی اگر یک Shared Library که 20 صفحه حافظه اشغال کرده توسط دو برنامه مورد استفاده قرار گرفت، PSS هر برنامه مقدار 10 = 2 / 20 را به عنوان Shared Library بعلامه مقدار حافظه خود برنامه جمع می زند. این پارامتر برای مجموع حافظه کل سیستم بسیار مناسب است چرا که با جمع زدن PSS همه برنامه های سیستم مقدار واقعی حافظه کل سیستم مشخص می شود.
پارامتر USS: و در آخر پارامتر USS که مخفف Unique Set Size است به معنی میزان حافظه دقیقی خود برنامه ما استفاده می کند را نشان می دهد.
نکته مهم: در صورت Kill شدن برنامه در سیستم عامل کل حافظه USS برگشت داده خواهد شد ولی در بقیه پارامتر ها به خاطر وجود Shared Library ها کل آن مقدار به حافظه برگشت داده نخواهد شد چون ممکن است آن کتابخانه توسط برنامه دیگر در حال استفاده باشد در غیر اینصورت آن کتابخانه نیز از حافظه حذف خواهد شد.
سیستم عامل حافظه اصلی کامپیوتر (Memory) را به جای Byte به صورت صفحه به صفحه (Page) استفاده می کند و در لینوکس معمولا اندازه این صفحات 4096 بایت می باشد.
پارامتر VSS یا VSZ: این پارامتر مخفف Virtual Set Size است و مقدار کل فضای آدرسی (Address Space) که برنامه در اختیار دارد را نشان می دهد، یعنی مثلا اگر برنامه ما یک فایل 1GB را Memory Map کند (در مقالات بعدی توضیح خواهم داد) این پارامتر آن را نیز حساب می کند، پس این عدد نشانگر خوبی برای مقدار استفاده واقعی برنامه ما از Memory نیست و استفاده های دیگری دارد. در نتیجه این پارامتر مقدار کل فضای آدرسی که اشغال شده است را نشان می دهد که این آدرس ها می تواند اندازه خود برنامه اصلی، مقدار Heap اشغال شده توسط ()malloc، فایل ها، دیوایس های و ... باشد.
پارامتر RSS: این پارامتر مخفف Resident Set Size است و مقدار کل حافظه ای که خود برنامه بعلاوه Shared Library ها اشغال کرده اند را نشان می دهد، در نتیجه این پارامتر نیز برای محاسبه مقدار واقعی حافظه ای که خود برنامه استفاده می کند نیز مناسب نیست چون Shared Library ها فقط یک بار در حافظه Load می شوند و بین همه برنامه ها به اشتراک گذاشته می شوند و ممکن است یک Shared Library قبل از اجرا برنامه شما در حافظه فراخوانی شده باشد و یا برای اولین بار توسط برنامه شما به حافظه فراخوانی شود. در کل پارامتر بسیار جالب و کاربردی است ولی برای استخراج مقدار حافظه اشغال شده توسط کد های نوشته شده توسط شما مناسب نیست.
پارامتر PSS: این پارامتر مخفف Proportional Set Size است که همانطور که از Proportional به معنی متناسب مشخص است برخلاف RSS که کل فضای اشغال شده توسط Shared Library را به هر برنامه اضافه می کند، PSS آن را بین برنامه ها تقسیم می نماید! یعنی اگر یک Shared Library که 20 صفحه حافظه اشغال کرده توسط دو برنامه مورد استفاده قرار گرفت، PSS هر برنامه مقدار 10 = 2 / 20 را به عنوان Shared Library بعلامه مقدار حافظه خود برنامه جمع می زند. این پارامتر برای مجموع حافظه کل سیستم بسیار مناسب است چرا که با جمع زدن PSS همه برنامه های سیستم مقدار واقعی حافظه کل سیستم مشخص می شود.
پارامتر USS: و در آخر پارامتر USS که مخفف Unique Set Size است به معنی میزان حافظه دقیقی خود برنامه ما استفاده می کند را نشان می دهد.
نکته مهم: در صورت Kill شدن برنامه در سیستم عامل کل حافظه USS برگشت داده خواهد شد ولی در بقیه پارامتر ها به خاطر وجود Shared Library ها کل آن مقدار به حافظه برگشت داده نخواهد شد چون ممکن است آن کتابخانه توسط برنامه دیگر در حال استفاده باشد در غیر اینصورت آن کتابخانه نیز از حافظه حذف خواهد شد.
GNU/Linux
Photo
تفاوت و شباهت های Storageهای EMC VNX و EMC Unity و EMC UnityVSA
🔹بطور کلی می توان گفت Unity که در سال 2015 معرفی شد، نسل جایگزین Storageهای شرکت DELL\EMC به جای Storageهای VNX است که از دسامبر سال 2018 دیگر تولید نمی شوند. در ادامه برخی شباهت ها و تفاوت های این دو محصول با یکدیگر آمده است:
🔹بطور کلی معماری Unity و VNX متفاوت از یکدیگر است و Unity کارایی و Performance بهتری دارد.
🔹تجهیزات Unity در دو سری Hybrid (مدل های: 300 و 400 و 500 و 600 و دسته جدیدتر 350 و 450 و 550 و 650) و سری All-Flash (مدل های: 300F و 400F و 500F و 600F و سری جدیدتر AF یعنی 350F و 450F و 550F و 650F – که حرف F در آنها نشان AF بودن است) معرفی شده اند.
🔹تجهیزات VNX اما در دو سری VNX1 (یا همان VNX شامل مدل های: 5100 و 5300 و 5500 و 5700) و سری VNX2 (مدل های 5200 و 5400 و 5600 و 5800 و 7600 و 8000) ارائه شده اند که این مدل های Hybrid هستند. اما تجهیز VNX-F از سری All-Flash محصولات VNX به شمار می رود.
🔹هر دو خانواده VNX و Unity محصول virtualی نیز وجود دارد: vVNX و UnityVSA (توجه داشته باشید که این محصولات Simulator نیستند بلکه محصولات virtual applianceی هستند که در دسته SDSها یا Software-Define Storageها می باشند و می توان آنها را در محیط های Production نیز مورد استفاده قرار داد.)
🔹از لحاظ تکنولوژی Replication با یکدیگر متفاوت هستند. محصول VNX از نرم افزار MirrorView و محصول Unity از Unity Replication استفاده می کند.
🔹در هر دو محصول VNX و Unity قابلیت Synchronous Replication و Asynchronous Replication ساپورت می شود (اما در UnityVSA فقط Asynchronous Replication ساپورت می شود ولی Synchronous Replication خیر)
🔹برای مدیریت هر دو محصول VNX و Unity می توان از راهکار GUI مبتنی Unisphere و یا USM استفاده کرد. اما رابط کاربری Unisphere در Unity مبتنی بر HTML5 است و تغییرات گرافیکی زیادی داشته.
🔹محصول VNX از قابلیت VMware VVoL پشتیبانی نمی کند، اما راهکار Unity و UnityVSA و vVNX هر سه این feature را ساپورت می کنند.
🔹تجهیز Unity یک Unified Storage است یعنی علاوه بر حالت Block-based و File-based می تواند به صورت Object-based storage نیز کار کند، اما تجهیز VNX فقط به صورت Block-based و File-based کار می کند.
🔹در هر دو محصول VNX و Unity قابلیت های FAST Cache و FAST VP پشتیبانی می شود. (اما در UnityVSA قابلیت FAST Cache نداریم، فقط قابلیت FAST VP ساپورت می شود)
🔹در هر دو محصول VNX و Unity ارتباطات شبکه ای یا Storage Networking بر پایه پروتکل های FC و FCoE و iSCSI و FCIP پشتیبانی می شود (اما در UnityVSA، پروتکل Fiber Channel پشتیبانی نمی شود)
🔹قابلیت های RAID Group و Storage Pool در هر دو محصول VNX و Unity وجود دارد.
🔹قابلیت Data At Rest Encryption یا به اختصار D@RE در هر دو محصول VNX و Unity پشتیبانی می شود (اما UnityVSA از این feature پشتیبانی نمی کند)
🔹نرم افزار AppSync با هر دو محصول VNX و Unity کار می کند.
🔹بطور کلی می توان گفت Unity که در سال 2015 معرفی شد، نسل جایگزین Storageهای شرکت DELL\EMC به جای Storageهای VNX است که از دسامبر سال 2018 دیگر تولید نمی شوند. در ادامه برخی شباهت ها و تفاوت های این دو محصول با یکدیگر آمده است:
🔹بطور کلی معماری Unity و VNX متفاوت از یکدیگر است و Unity کارایی و Performance بهتری دارد.
🔹تجهیزات Unity در دو سری Hybrid (مدل های: 300 و 400 و 500 و 600 و دسته جدیدتر 350 و 450 و 550 و 650) و سری All-Flash (مدل های: 300F و 400F و 500F و 600F و سری جدیدتر AF یعنی 350F و 450F و 550F و 650F – که حرف F در آنها نشان AF بودن است) معرفی شده اند.
🔹تجهیزات VNX اما در دو سری VNX1 (یا همان VNX شامل مدل های: 5100 و 5300 و 5500 و 5700) و سری VNX2 (مدل های 5200 و 5400 و 5600 و 5800 و 7600 و 8000) ارائه شده اند که این مدل های Hybrid هستند. اما تجهیز VNX-F از سری All-Flash محصولات VNX به شمار می رود.
🔹هر دو خانواده VNX و Unity محصول virtualی نیز وجود دارد: vVNX و UnityVSA (توجه داشته باشید که این محصولات Simulator نیستند بلکه محصولات virtual applianceی هستند که در دسته SDSها یا Software-Define Storageها می باشند و می توان آنها را در محیط های Production نیز مورد استفاده قرار داد.)
🔹از لحاظ تکنولوژی Replication با یکدیگر متفاوت هستند. محصول VNX از نرم افزار MirrorView و محصول Unity از Unity Replication استفاده می کند.
🔹در هر دو محصول VNX و Unity قابلیت Synchronous Replication و Asynchronous Replication ساپورت می شود (اما در UnityVSA فقط Asynchronous Replication ساپورت می شود ولی Synchronous Replication خیر)
🔹برای مدیریت هر دو محصول VNX و Unity می توان از راهکار GUI مبتنی Unisphere و یا USM استفاده کرد. اما رابط کاربری Unisphere در Unity مبتنی بر HTML5 است و تغییرات گرافیکی زیادی داشته.
🔹محصول VNX از قابلیت VMware VVoL پشتیبانی نمی کند، اما راهکار Unity و UnityVSA و vVNX هر سه این feature را ساپورت می کنند.
🔹تجهیز Unity یک Unified Storage است یعنی علاوه بر حالت Block-based و File-based می تواند به صورت Object-based storage نیز کار کند، اما تجهیز VNX فقط به صورت Block-based و File-based کار می کند.
🔹در هر دو محصول VNX و Unity قابلیت های FAST Cache و FAST VP پشتیبانی می شود. (اما در UnityVSA قابلیت FAST Cache نداریم، فقط قابلیت FAST VP ساپورت می شود)
🔹در هر دو محصول VNX و Unity ارتباطات شبکه ای یا Storage Networking بر پایه پروتکل های FC و FCoE و iSCSI و FCIP پشتیبانی می شود (اما در UnityVSA، پروتکل Fiber Channel پشتیبانی نمی شود)
🔹قابلیت های RAID Group و Storage Pool در هر دو محصول VNX و Unity وجود دارد.
🔹قابلیت Data At Rest Encryption یا به اختصار D@RE در هر دو محصول VNX و Unity پشتیبانی می شود (اما UnityVSA از این feature پشتیبانی نمی کند)
🔹نرم افزار AppSync با هر دو محصول VNX و Unity کار می کند.