فایل‌ های core. چیست و چطور از ایجاد آن‌ها جلوگیری کنیم؟

فایل‌ های core. چیست و چطور از ایجاد آن‌ها جلوگیری کنیم؟

2.6kviews

در زاگریو قصد داریم به بررسی این‌که فایل‌ های core. چیست و چطور از ایجاد آن‌ها جلوگیری کنیم؟ بپردازیم، و همچنین در مورد فایل‌های Core dump به شما توضیح خواهیم داد.

فایل‌ های core

فایل‌های Core dump (فایل‌ های core) در اصل یک کپی از حافظه Memory و یا دیسک است. که در یک لحظه خاص که یک برنامه به صورت ناگهانی بسته می‌شود ایجاد می‌گردد. این بسته شدن ناگهانی ممکن است به دلایل متعددی به وجود آید. با این حال اکثر سیستم عامل‌ها بصورت پیش‌فرض به صورتی تنظیم شده‌اند که در زمان‌های خطا این فایل‌ها را ایجاد کنند.

فایل‌ های core

فایل‌های core به مدیران سرور کمک می‌کنند تا ایرادات نرم‌افزاری را در هنگام تولید و گسترش آن‌ها با همکاری برنامه‌نویسان برطرف کنند، اما در محیط‌های اشتراکی این موارد به ندرت استفاده می‌شوند و وجود آنها تنها باعث مصرف فضای دیسک و منابع مدیریت سرور شود، که برای هم استفاده کننده و هم برای مدیران سرورها مشکلاتی را ایجاد می‌کنند.

پیشنهاد می‌شود در چنین محیط‌هایی این امکان را غیرفعال کنید و در تنها در صورت نیاز آن‌ها را فعال نمائید.

در سیستم عامل‌های لینوکس می‌توانید با تعریف تنظیمات در فایل limits.conf که ماژول pam_limit را مدیریت می‌کند. با استفاده از دستور زیر آن را غیرفعال کنید:

echo '* soft core 0' >> /etc/security/limits.conf

یا می‌توانید در یک برنامه ویرایشگر متن مانند vi فایل را باز کنید:

vi /etc/security/limits.conf

و سپس خط زیر را در این فایل اضافه کنید:

* soft core 0

با این کار اطمینان حاصل می‌کنید که فایل‌های core dump (رونوشت حافظه) در سیستم ایجاد نمی‌شوند.

همچنین با دستور زیر می‌توانید فایل‌ های core را در سرور خود پیدا و حذف کنید:

find /home/*/public_html -name core.[0-9]*

میزبانی وب زاگریو

Replication

آموزش ایجاد Master-to-Master replication در MariaDB

745views

در این آموزش قصد داریم به بحث sql master-to-master replication بپردازیم، اگر نمی‌دانید که replication به شیوه master-to-master چیست در ادامه در این آموزش با ما همراه باشید، تا هم نحوه ایجاد و هم با این نوع replication آشنا شوید.

در این شیوه اجازه داده می‌شود که اطلاعات و داده ها توسط گروهی از سرورها ذخیره شوند و در هر زمان با آپدیت شدن این اطلاعات در هر کدام از این سرورها اطلاعات و داده‌های ما بروزرسانی و آپدیت شود. در مثال زیر ما از دو سرور استفاده می‌کنیم و همزمان در پیکربندی این سرورها آنها را Master و slave یکدیگر قرار می‌دهیم.

replication چیست

قبل از هرچیزی، به صورت مختصر به بررسی معنی کلمه Replication می‌رسیم، کلمه Replication، به معنی تشکیل کپی‌ها یا Replica‌ها از یک استوریج (storage)، روی استوریج (مخزن اطلاعات) دیگری است، تا در صورت بروز خرابی و حادثه، کپی از اطلاعات موجود باشد و داده‌ها به صورت دائمی پاک نشوند. مکان این دستگاه‌ها ممکن است از شهر یا کشور متفاوتی باشد.

استفاده از Replication، خصوصا برای شرکت‌هایی که اطلاعات مهم – mission critical data دارند بسیار مهم است. در پیاده سازی ریپلیکیشن باید تست‌های لازم انجام شود و بررسی شود که آیا پهنای باند لازم برای این کار فراهم است یا خیر.

موارد مورد نیاز ایجاد master-to-master replication

برای آموزش پیش رو ما فرض می‌کنیم که شما موارد زیر را در اختیار دارید و می‌توانید آن‌ها پیکربندی نمایید.

replication

  • دو سرور با دیتابیس MariaDB که از پیش نصب شده باشد.
  • یک دیتابیس نمونه
  • دسترسی روت به سرور
  • کلاینت SSH

در ادامه روند آموزش ما نام دیتابیس نمونه را replicate.db در نظر گرفته‌ایم. این دیتابیس در شروع آموزش اطلاعاتی در خود ندارد. اگر تمامی موارد بالا را در اختیار دارید می‌توانیم به سراغ ایجاد master-to-master replication برویم.

مدیریت سرور

پیکربندی سرور A

این سرور قرار است اولین Master server ما باشد و باید آن را برای پروسه replication و فعال کردن آن آماده نماییم. برای این منظور دستور زیر را اجرا نمایید.

در بخش [mysqld] باید بخش‌های زیر را اضافه نمایید.

سپس sql سرور خود را دوباره راه اندازی نمایید.

به MariaDB خود با دسترسی روت لاگین نمایید. و یک یوزر master با دسترسی‌های مورد نیاز ایجاد نمایید.

کامند ‘SHOW MASTER STATUS’  لاگ باینری فعلی موقعیتی که master باید از آن replication را شروع نماید را نشان می‌دهد. مانند زیر:

در نظر داشته باشید که موقعیت و فایل مورد نظر ر ا به خاطر بسپارید و ذخیره نمایید چون بعدا به آن نیاز خواهید داشت.

پیکربندی سرور B

قبل از شروع پروسه replication توجه داشته باشید که دیتابیس ساخته شده در سرور A را کپی نموده و به اینجا منتقل نمایید. این سرور دومین master سرور ما می‌باشد و برای عملیات replication باید آن را پیکربندی نماییم. برای شروع مثل قبل دوباره از دستور:

در بخش [mysqld] باید بخش‌های زیر را اضافه نمایید.

سپس sql سرور خود را دوباره راه اندازی نمایید.

مانند قبل به صورت روت به دیتابیس خود متصل شوید و یک یوزر master با دسترسی‌های مورد نیاز ایجاد نمایید.

قدم بعدی شامل بعضی از اطلاعات سرور A می‌شود که باید در سرور B نیز وارد شوند برای وارد نمودن این اطلاعات باید مانند زیر عمل نمایید.

قدم آخری که در سرور B باید برای تکمیل مراحل replication انجام دهیم تا اطلاعات را دریافت نماید بر مستر لاگ ذخیره کند و به سرور A ارسال نماید.

دستور ‘SHOW MASTER STATUS‘ لاگ باینری فعلی موقعیتی که master باید از آن replication را شروع نماید را نشان می‌دهد. مانند زیر:

در نظر داشته باشید که موقعیت و فایل مورد نظر ر ا به خاطر بسپارید و ذخیره نمایید چون بعدا به آن نیاز خواهید داشت.

کامل کردن replication بر روی سرور A

برای اتمام پروسه replication نیاز است که به سرور A وارد شوید و در MariaDB لاگین نمایید تا اطلاعتی که از سرور B دریافت کردیم را در این سرور وارد نماییم برای این منظور مانند زیر عمل نمایید:

بررسی عملکرد درست master-to-master

حالا که تمام پیکربندی‌ها کامل شد نیاز است که بررسی کنیم که آیا سیستم به درستی کار می‌کند یا نه؟ برای این منظور به سرو A لاگین می‌نماییم و وارد دیتابیس MariaDB می‌شویم، حالا یک جدول در دیتابیس replicate.db می‌سازیم.

حالا وارد سرور B شوید در این سرور نیز باید جدول ساخته شده را مشاهده نمایید.

که به صورت زیر نمایش داده می‌شود:

برای اینکه مطمئن شوید بر روی سرور B نیز این امر امکان پذیر است می‌توانید مانند عملیات بالا را برای سرور B نیز انجام دهید.

زاگریو

btmp

هدف وجود فایل‌های utmp, wtmp و btmp در لینوکس چیست؟

1.6kviews

 

 

در لینوکس همه چیز در دایرکتوری /var/log به صورت Log ذخیره می‌شود. این دایرکتوری شامل لاگ‌های تمامی سرویس‌ها و اپلیکیشن‌ها می‌باشد. اگر این دایرکتوری را بررسی کنید با فایل‌های utmp, wtmp و btmp روبرو خواهید شد. این فایل‌ها بر خلاف لاگ‌های سیستمی و لاگ‌های احراز هویت authentication، باینری binary می‌باشند. برای همین ما نمی‌توانیم از text editor های معمول خود یا دستورات ویرایش تکست مانند less یا grep استفاده نماییم. برای خواندن این فایل‌ها یا استخراج داده از این فایل‌ها نیاز است که ما از ابزاری استفاده نماییم که بتواند این نوع فایل باینری را برای ما بخواند.

utmp شامل اطلاعاتی نظیر ورود کاربران در هر ترمینال، خروج‌ها، رویدادهای سیستم(event)، وضع فعلی سیستم و system boot time می‌باشد.

wtmp شامل تاریخچه اطلاعت utmp می‌شود.

btmp شامل اطلاعات ورودهای شکست خورد و نامعتبر می‌شود.

 

دستور w یا who

کامند who یا w به ما کمک می‌کند اطلاعات یوزرهایی که لاگین کرده اند و فعالیتی که هم‌اکنون به آن مشغولند را مشاهده نماییم. و از فایل /var/run/utmp استخراج نماییم. اگر می‌خواهید لیست یوزرهایی که هم‌اکنون لاگین نموده اند را مشاهده نمایید باید از دستور who به شیوه زیر استفاده نمایید.

دستور last

کامند last اطلاعاتی نظیر اینکه چگونه یک یوزر لاگین نموده، چه زمانی لاگین نموده و چه زمانی لاگ‌اوت نموده را به ما نمایش می‌دهد.

همچنین ما می‌توانیم از کامند last برای خواندن فایل‌های utmp, wtmp و btmp نیز استفاده نماییم، اینکار به صورت زیر انجام می‌شود.

دستور lastb

با این کامند می‌توانید تاریخچه سشن‌های لاگ شده در /var/run/btmp را مشاهده نمایید.

دستور utmpdump

همانطور که اشاره کردیم بعلت آنکه فایل‌های ذکر شده به صورت باینری می‌باشند نمی‌توانیم آن‌ها را به صورت عادی با دستوراتی مانند cat، less و غیره بخوانیم، اما شاید راه حل درست استفاده از دستورات ساده‌ای مانند lastb، last و who نباشد، راه حل دیگر استفاده از دستور utmpdump می‌باشد که به صورت زیر می‌شود از آن استفاده نمود.

اگر قصد دارید محتوای باینری فایل‌های utmp, wtmp و btmp می‌توانید به صورت زیر از این کامند استفاده نمایید.

تعیین-ایمل-پیش‌فرض-برای-دامنه‌ها-در-cPanel

تعیین ایمیل پیش‌فرض برای دامنه‌ها در cPanel

 

 

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

قدم اول: با گذز واژه و نام کاربری وارد پنل cPanel خود شوید.

قدم دوم: به بخش EMAIL بروید و وارد بخش Default Address شوید.

قدم سوم: به دنبال Default Address Maintenance بگردید.

قدم چهارم: از منوی drop-down دامنه‌ی مورد نظر خود را انتخاب نمایید.

در این بخش می‌توانید انتخاب نمایید که ایمیل دریافت شده چگونه وارد فرایند مورد نظر شما شود.

 cpanel

تغییر صفحات ارورهای مختلف در DirectAdmin

 

 

در این مقاله کوتاه قصد داریم به نحوه تغییر صفحات ارور‌های مختلف در DirectAdmin بپردازیم، با ما در این آموزش کوتاه همراه باشید.

صفحات ارور بخشی جدایی ناپذیر از هر سایتی را تشکیل می‌دهند صفحاتی ماندد 404 یا 403 که در هر بار که گذر ما به پهنه‌ی وب می‌افتد مهمان ما هستند. اما زمانی که بخواهیم این صفحات را شخصی سازی کنیم و در DirectAdmin به کاربران نشان دهیم چگونه باید عمل کنیم:

قدم اول: با گذرواژه و نام کاربری خود وارد پنل DirectAdmin شوید.

قدم دوم: گزینه Custom Error Pages را بیابید و آن را انتخاب نمایید.

قدم سوم:  در این بخش می‌توانید صفحات مختلف مانند صفحات ریر  را ویرایش کنید و تغییر دهید:

– 401 Unauthorized
– 403 Forbidden
– 404 Not Found
– 500 Internal Server Error

قدم چهارم: تصور کنید که می‌خواهید صفحه ارور 404 را تغییر دهید، بر روی 404.shtml کلیک کنید.

قدم پنجم: یک ادیتور html باز می‌شود که می‌توانید تغییرات مورد نظر خود را اعمال نمایید.

قدم ششم: صفحه مورد نظر خود را با ورود به یک url اشتباه در سایت خود تست نمایید.

 

 

enable-http2

HTTP/2 در Nginx: راهنمای فعال سازی

623views

 

 

HTTP/2 نسخه جدید پروتکل منسوخ شده HTTP/1.1 می‌باشد که در سال 1999 به یک استاندارد کلی تبدیل شد. از آن زمان تا حالا تغییرات زیادی در سطح وب صورت گرفته است. وب اپلیکیشن‌های ما بسیار پیچیده تر شده‌اند و با وب اپلیکیشن‌های سال اواخر دهه نود و اوایل هزاره جدید قابل مقایسه نیستند. در این زمان تهدیدات هم افزایش یافت برای مقابله با این تهدیدات نیاز بود که HTTP/2 متولد شود.

مهمترین نکته درمورد HTTP/2 سریعتر بود آن نسبت به HTTP/1.1 برای کاربران مصرف کنند است، یعنی مصرف کننده‌های نهایی سایت سریعتری در اختیار خواهند داشت.

تعدادی از ویژگی‌های های HTTP/2:

  • HTTP/2 یک پروتکل باینری است.
  • HTTP/2 با HTTP/1.1 قابلیت هم‌خوانی و بازگشت به نسخه قبل را دارد.
  • HTTP/2 در سال 2015 عرضه شد.
  • دو مشخصه اصلی HTTP/ 2 را می‌توان: 1.پروتکل انتقال Hypertext نسخه 2 – RFC7540 و 2.فشرده سازی هدر RFC7541 در نظر گرفت
  • HTTP / 2 برنامه های ما را سریعتر ، ساده تر و قوی تر می کند.
  • هداف اصلی برای توسعه HTTP / 2 کاهش تأخیر بوده است.
  • HTTP / 2 براساس پروتکل SPDY گوگل است.
  • مرورگرها برای استفاده از HTTP / 2 به TLS مدرن نیاز دارند.
  • برای استفاده از HTTP/2 نیاز است که نسخه TLS ما حداقل 1.2 باشد. آموزش ارتقا TLS در این مقاله به تفصیل توضیح داده شده است.
  • اگر برای استفاده از HTTP /2 از یک سرور با TLS پایین تر از مقدار ذکر شده استفاده شود در اینصورت با خطای پروتکل روبرو می‌شویم.
  • برخی از ویژگی های اصلی HTTP / 2 عبارتند از: multiplexing ، فشرده سازی هدر ، اولویت بندی

 

ملزومات برای راه اندازی HTTP/2:

در قدم اول نیاز است Nginx را از ریپازیتوری اصلی نصب نمایید. برای الین کمنظور از کامند زیر استفاده نمایید:

 

 

بعد از اجرای این کامند می‌‍توانید مطمئن باشید که Nginx نصب شده است.

 

پیکربندی Nginx برای HTTP/2

پیکر بندی Nginx برای HTTP/ 2 بسیار راحت است و زمان کمی از شما خواهد گرفت برای این منظور نیاز است که تنها مقدار دستوردهنده listen را برای http2 درست تنظیم نمایید. و همانطور که قبلا هم اشاره کردیم لازم است TLS شما ورژن 1.2 یا بالاتر باشد.

 

HTTP/2
مشخصات مورد نیاز برای استفاده از HTTP/2

همانطور که متوجه شدید فعال سازی HTTP/ 2 بر روی ابنتو بسیار راحت است و برای دیگر سیستم عامل‌ها هم همین روش صادق است و تنها نیاز است که تعدادی از دستورات را طبق همان سیستم‌عامل وارد نمایید.

چگونه در DirectAdmin بکاپ بگیریم

 

 

در ادامه این مطلب کوتاه قصد داریم به شما آموزش دهیم چگونه در دایرکت ادمین بتوانید نسخه پشتیبان تهیه کنید یا از آن استفاده نمایید.

قدم اول: وارد اکانت دایرکت ادمین خود شوید.

قدم دوم: در این بخش موس خود را بر روی Advance Features نگه دارید منوی باز شده شامل گزینه create/restore backup می‌باشد.

 

 

قدم سوم: با کلیک بر روی این منو شما وارد صفحه ای می‌شوید که به شکل زیر است.

 

در این بخش دو گزینه در اختایر دارید. گرفتن بکاپ(نسخه پشتیبان) یا بازگرداندن بکاپ، اول به سراغ گرفتن بکاپ برویم.

پشتیبان گیری:

قدم چهارم: در این بخش با تیک زدن هرکدام از مواد می‌توانید از آن بکاپ تهیه نمایید.

قدم پنجم: با فشردن دکمه create backup یک دیالوگ مبنی بر Backup creation added to queue دریافت خواهید نمود که نشان می‌دهد فرایند پشتیبان گیری از اطلاعات درخواستی شما شروع شده است، و زمانی که این فرایند به پایان برسد سیستم پیامی مبنی بر Your backups are now ready به شما نمایش خواهد داد.

 

قدم ششم: همچنین شما می‌توانید بکاپ‌های خود را در آدرس /backups/ دامنه خود مشاهده کنید. این بکاپ‌ها با تاریخ خود نامگذاری شده‌اند.

بازگرداندن نسخه پشتیبان:

قدم هفتم: بازهم برای این منظور باید به بخش advance feature بروید در این بخش با انتخاب گزینه create/restore backup وارد همان صفحه ذکر شده در بالا خواهید شد

قدم هشتم: در بالای صفحه گزینه restore backup را انتخاب نمایید.

قدم نهم: با کلیک بر روی گزینه restore backup وارد صفحه restore backup می‌شوید.

همانطور که مشاهده می‌کنید، می‌توانید بکاپ مورد نظر را انتخاب نمایید و حتی انتخاب کنید چه نوع اطلاعاتی از بکاپ شما بازگردانده شود.

 

نصب pgAdmin4 بر روی CentOS7

461views

 

 

pgAdmin4 یک رابط کاربری تحت وب برای مدیریت پایگاه داده PostGresSQL می‌باشد. این رابط کاربری بر تعداد زیادی از پلتفرم‌های موجود مانند Windows، macOS و لینوکس قاابل استفاده است. در نسخه جدید pgAdmin4 از بوت استرپ 3 به نسخه 4 مهاجرت شده است. در این آموزش ما قصد داریم pgAdmin4 را بر روی centOS7 نصب نماییم.

برای این منظور شما نیاز دارید PostgresSQL 9.2 را قبلا بر روی centOS خود نصب نموده باشید. خب بریم سراغ اصل مطلب و نصب pgAdmin4:Read More

نحوه مدیریت و استفاده از FirewallD در CentOS7

1.7kviews

FirewallD یک راهکار مدیریت دیوار آتش برای اکثر توزیع های لینوکس است که به عنوان یک رابط کاربری برای iptables عمل می کند.

در این آموزش، نحوه استفاده از دستورات مدیریتی firewall-cmd را به شما آموزش خواهیم داد.

آشنایی با مفاهیم اولیه FirewallD

قبل از بررسی دستورات، لازم است با برخی مفاهیم اولیه آشنا شویم:

منطقه – Zones

سرویس firewalld مجموعه ای از قوانین به نام zones را مدیریت میکند. این مناطق بصورت کلی تعیین می کنند که چه ترافیکی می بایست بر اساس سطح اعمتادی که شما به شبکه های متصل به سیستم خود دارید رد و بدل شوند. کارت های شبکه به مناطق مورد نظر شما متصل می شوند تا رفتار ترافیکی توسط دیوار آتش کنترل شود.

برای سیستم های کامپیوتری مانند لپتاپ ها که همیشه در حال جابجایی هستند، این انعطاف پذیری کمک می کند تا راهکار خوبی را برای قوانین شبکه بر اساس محیط کاری شما ایجاد شود. شاید شما برای شبکه های عمومی مانند هتل ها و .. نیازمند راهکار سخت گیرانه تری باشید به نسبت شبکه خانگی خودتان. برای سرور ها این موقعیت ها خیلی مهم نیستند زیرا جابجایی نوع شبکه اصلا وجود ندارد و یا در صورت وجود به ندرت اتفاق می افتد.

بدون در نظر گرفتن اینکه چقدر محیط شبکه شما پویا است، دانستن و آشنا شدن با این ایده هایی که برای طراحی firewalld در نظر گرفته شده است امری ضروری است. به ترتیب در شبکه های پیشفرض تعریف شده از “کمترین میزان اعتماد” تا “بیشترین میزان اعتماد” مناطق زیر تعریف شده اند:

منطقه drop: کمترین میزان اعتماد به شبکه، تمامی ورودی ها بسته شده و درخواست های ارسالی بی پاسخ خواهند ماند و فقط اتصال های خروجی فعال هستند.

منطقه block: مانند مورد فوق با این تفاوت که اتصال های ورودی با پیام icmp-host-prohibited یا icmp6-adm-prohibited رد (reject) می شوند.

منطقه public: به عنوان شبکه عمومی و نا مطمئن. شما به سیستم های کامپیوتری موجود اعتمادی ندارید و صرفا ممکن است اجازه اتصال های ورودی را بر اساس مورد به مورد بدهید.

منطقه external: شبکه های خارجی در مواقعی که شما از فایروال به عنوان gateway خود استفاده می کنید. در اصل بصورت NAT masquerading به سمت شبکه داخلی شما متصل شده است و به همین منظور شبکه داخلی شما خصوصی اما در دسترس خواهد بود.

منطقه internal: سمت دیگر external است، برای بخش داخلی gateway شما است. سیستم های موجود تقریبا قابل اعتماد هستند و برخی سرویس ها نیز در دسترس هستند.

منطقه dmz: جهت استفاده برای سیستم هایی که در DMZ (سیستم هایی در شبکه که به هسته اصلی شبکه شما دسترسی ندارند) وجود دارد. صرفا برخی اتصال های ورودی مجاز هستند.

منطقه work: برای سیستم های کاری در نظر گرفته شده اند، در حالی که شما به سیستم های اطراف خود اطمینان دارید و برخی سرویس ها نیز فعال هستند.

منطقه home: شبکه خانگی، در اصل شبکه ای که شما به اجزای آن اطمینان دارید و سرویس های بیشتری در دسترس هستند.

منطقه trusted: به تمامی سیستم های موجود در شبکه اطمینان دارید. باز ترین نوع منطقه موجود که می بایست با بررسی دقیق انتخاب شود.

با استفاده از دیوارآتش، شما می توانید قوانین (rules) مورد نظر خود را ایجاد کنید و آنها را به مناطق مورد نظر خود متصل کنید و سپس آنها را به کارتهای شبکه مورد نظر الحاق کنید.

دوام قوانین

در firewalld، قوانین تعریف شده می توانند به دو صورت “فوری” یا “دائمی” تعریف شوند. چنانچه یک rule اضافه شود و یا تغییر یابد، بصورت فوری رفتار فایروال تغییر می کند اما پس از ریستارت شدن سیستم قوانین قدیمی مجددا فعال می شوند و تغییرات از بین خواهند رفت.

اغلب دستورات firewall-cmd می توانند گزینه permanent– را به همراه داشته باشند. این گزینه مشخص می کند که پس از ریستارت شدن سیستم قانون تعریف شده مجددا فراخوانی شده و حذف نشود. این بدین معناست که شما می توانید قوانین را بصورت همزمان تست کنید و در صورتی که مشکلی برای شما پیش آمد با یک ریستارت قانون تعریف شده را حذف کنید. همچنین استفاده از تگ permamnet– به شما کمک می کند تا تعداد زیادی قوانین را تعریف کنید که پس از ریستارت سیستم اعمال شوند.

نصب و فعالسازی فایروال بر روی سیستم در زمان بوت شدن

نرم افزار firewalld بصورت پیشفرص بر روی برخی از توریع های لینوکس اعم از CentOS 7 وجود دارد. با این حال با استفاده از دستور زیر می توانید آن را نصب کنید:

پس از نصب می توانید با استفاده از دستور زیر آن را در زمان بوت سیستم نیز فعال کنید. در یاد داشته باشید که با این دستور این سرویس در زمان بوت فعال می شود. بهترین روش این است که شما ابتدا تمامی قوانین موجود را تست کنید تا در صورت بروز اشکال در قوانین با مشکلات احتمالی روبرو نشوید.

پس از ریستارت شدن سیستم، فایروال می بایست فعال شده، کارتهای شبکه در zone مربوطه قرار گرفته (و یا به تنظیمات پیشرفض برگردد) و سپس قوانین تعریف شده پردازش شوند.

با استفاده از دستور زیر می توانید وضعیت فایروال را بررسی کنید:

این بدین معناست که فایروال فعال است و تنظیمات پیشرفض فعال است.

آشنایی با قوانین فعلی فایروال

قبل از شروع تغییرات ابتدا باید با شرایط و قوانین فعلی تعریف شده بر روی سرویس آشنا شوید.

مشاهده تنظیمات پیشرفض

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

از آنجایی که ما برای firewalld هنوز دستوراتی نزده ایم و بصورت پیشفرض است و هیچ یک از کارتهای شبکه ما به منطقه دیگری متصل کنید، تنها منطقه فعال همان مورد فوق است که کارتهای شبکه ما را کنترل می کند. جهت تایید میتوانید از دستور زیر استفاده کنید:

همانطور که میبینیم سرور ما دو کارت شبکه دارد که هر دو بصورت پیشفرض بر روی منطقه public تنظیم شده است.

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

همانطور که با استفاده از دستور قبلی هم دیدیم، هر دو کارت شبکه eth0 و eth1 به این zone متصل هستند. هرچند با این دستور میتوانیم ببینیم که سرویس DHCP Client و سرویس SSH بر روی این zone تعریف شده است.

مشاهده مناطق (zone) های دیگر

حالا ما اطلاعات کافی در مورد تنظیمات پیشفرض داریم، با استفاده از دستور زیر میتوانیم اطلاعات دیگر در خصوص zone های دیگر نیز به دست آوریم.

برای مشاهده لیست zone های موجود دستور زیر را بزنید:

ما می توانیم تنظیمات انجام شده برای یک zone خاص را با اضافه کردن دستور =zone– به همراه list-all– مشاهده کنیم:

شما می توانید تمامی مناطق تعریف شده را با استفاده از list-all-zones– مشاهده کنید.

انتخاب یک منطقه – Zone برای کارت شبکه شما:

در صورتی که شما برای یک کارت شبکه یه منطقه تعریف نکرده باشید، بصورت پیشفرض در زمان بوت منطقه پیشفرض برای آن تعریف شد است.

تغییر Zone بر روی کارت های شبکه

شما با استفاده از پارامتر =zone– به همراه =change-interface– می توانید تنظیمات را انجام دهید. همچنین برای دسترسی مدیریتی باید از sudo نیز استفاده کنید.

با استفاده از دستور زیر ما کارت شبکه eth0 را بر روی منطقه home تعریف می کنیم.

نکته

توجه داشته باشید که با تغییر zone ممکن است یک سرویس فعال از کار بی افتد، برای مثال در صورت انتقال به شبکه home سرویس SSH در آن فعال است و شما قادر به ادامه کار هستند اما برخی منطقه ها بصورت پیشفرض SSH برای آنها فعال نیست و در صورت جابجایی به آن مناطق دسترسی شما به سرور قطع خواهد شد و قادر به اتصال مجدد به سرور نخواهید بود.

با استفاده از دستور زیر می توانید موفقیت آمیز بودن دستور فوق را بررسی کنید:

تنظیم منطقه پیشفرض:

تمامی کارتهای شبکه شما می تواند توسط یک منطقه مدیریت شود. احتمالا راحت تر است که یک منطقه پیشفرض تعریف و تنظیم شود تا بتوانید از آن برای تنظیمات خود استفاده کنید.

شما می توانید منطقه پیشفرض را با پارامتر =set-default-zone– تنظیم کنید. این دستور بلافاصله تمامی کارتهای شبکه را که منطقه ای برای آن تعریف نشده است را به شرح مورد نظر شما تغییر می دهد:

انتخاب قوانین برای برنامه های شما

بهترین روش برای تعریف قوانین فایروال تعریف آنها به عنوان نرم افزار است. راه کار آن به شرح ذیل است:

اضافه کردن یک سرویس برای منطقه های شما:

راحت ترین روش اضافه کردن سرویس و یا پورت مورد نظر شما برای مناطقی است که از آن استفاده می کنید، مجددا با دستور get-services– سرویس های فعال را دریافت کنید:

نکته

شما می توانید اطلاعات بیشتری در خصوص هر سرویس با مشاهده فایلهای xml. آن به دست آورید که در مسیر /usr/lib/firewalld/services قرار دارد. برای مثال سرویس SSH شامل موارد ذیل است:

Apache/Prefork: تعیین حداکثر تعداد کلاینت‌ها

1.5kviews

اصول اولیه Apache/Prefork:

۱-    تعیین مقدار RAM که برای Apache/Prefork در دسترس است.
۲-    تعیین مقدار RAM برای هر کاربر آپاچی
۳-    تنظیم حداکثر تعداد کلاینت‌ها به: (مقدار RAM در هر فرآیند آپاچی) / (مقدار RAM در دسترس آپاچی)

۴-    نظارت و تنظیم

چگونه مقادیر را در Apache/Prefork تغییر دهیم:

 

مقادیر حداکثر تعداد کلاینت‌ها (MaxClients) در فایل اصلی main Apache configuration قرار گرفته است. به عنوان مثال /etc/apache2/apache2.conf یا /etc/httpd/httpd.conf.

بخش مربوطه مانند شکل زیر است:
Apache/Prefork
بعد از تغییر مقادیر فایل را دخیره کنید و Apache را با دستور apache2ctl graceful-stop && apache2ctl start ری‌استارت نمائید.

چرا این موضوع مهم است؟
یکی از شایع‌ترین دلایل سقوط یک وب سرور این است که تمام حافظه فیزیکی (RAM) موجود را مصرف می‌کند. وقتی که این اتفاق پیش می‌آید، سیستم عامل با حرکت بر روی دیسک تلاش می‌کند مقداری از این فضا را آزاد کند. در لینوکس این عمل Swap Space و در ویندوز Page File نامیده می‌شود.  این فرآیند به منظور شکست دادن RAM (که دسترسی سریع به داده‌ها را فراهم می‌کند) است و نیاز به منابع (CPU، دیسک I/O) برای انجام مبادله داده‌ها بین دیسک و RAM دارد. فضای جابجایی هم می‌تواند به طور کامل مصرف شود، اما مشکل اصلی این است که در یک محیط با سرعت بالا مانند وب سرور، سیستم به سرعت می‌تواند سرزیر شود و فقط تلاش برای مدیریت حافظه می‌تواند برای این سقوط موثر باشد. به همین دلیل به آن Thrashing می‌گویند.

به این کار اجتناب از شکست گفته می‌شود و تنها راه برای انجام این کار این است که آپاچی را از مصرف تمام RAM در دسترس نگهداری شود.


چگونه مقدار RAM موجود برای Apache/Prefork را تعیین کنیم:

مقدار حافظه در دسترس برای آپاچی مجموع مقدار RAM روی سیستم منهای مقداری است که توسط تمام فرآیندهای دیگر استفاده می‌شود. متاسفانه، تعیین مقدار RAM که بر روی سیستم استفاده می‌شود دشوار است. این مورد حتی از تعیین حداکثر حافظه‌ای که توسط دیگر فرآیندها زمانی که سرور تحت بار سنگین قرار دارد مشکل‌تر است. حتی زمانی که شما در حال اجرای Mysql بر روی همان سیستم هستید کار محاسبه دشوارتر می‌شود. به طور معمول هر درخواست که توسط Apache/Prefork به کار گرفته می‌شود حداقل یک اتصال با Mysql را باز می‌کند، بنابراین به عنوان یک درخواست آپاچی میزان مصرف RAM توسط Mysql افزایش می‌یابد. در کوتاه مدت، میزان مصرف حافظه Mysql بستگی دارد به اینکه چگونه آنرا توسط نرم‌افزار خود استفاده می‌شود. شما می‌توانید از اسکریپت mysqltuner  برای دریافت حداکثر مقدار Mysql استفاده کنید. اما اگر تنظمیات آپاچی شما به درستی صورت گرفته باشد به ندرت مشکلی درباره میزان حافظه خواهید داشت.

بهترین راه‌کار این است که Mysql را که مصرف بالایی دارد در یک سرور جداگانه قرار دهیم و بیشترین مقدار را برای آن سرور در نظر بگیریم و با توجه به Server load تنظیمات را انجام دهیم.
برای تمامی فرآیندهای دیگر مقدار ۲۵۶MB را در نظر بگیرید. اگر شما در حال استفاده از خدمات دیگری همانند ماشین میزبانی مجازی هستید، ممکن است تمایل داشته باشید که از مقدار بیشتری استفاده کنید.

بنابراین در ابتدا برای یک سیستم معمولی ۲۵۶MB +  حداکثر استفاده حافظه Mysql را در نظر بگیرید.

چگونه میزان RAM را برای مصرف هر فرآیند Apache تعیین کنیم:

 

باز هم، به حافظه مشترک (مخصوصا اگر از APC استفاده می‌کنید) بافر، دخیره و غیره توجه کنید. تعیین این موارد خیلی دشوار است. در تجربه ما، بهترین ابزار تعیین مصرف حافظه برای هر فرآیند  ps_mem.py است.
خروجی ps_mem.py شبیه شکل زیر است:
Apache/Prefork
در اینجا مشاهده می‌کنید که ۱۲۳ فرآیند Apache2 وجود دارد که در مجموع ۴٫۳GB مصرف حافظه دارند، بنابراین هر فرآیند Apache/Prefork حدود ۲۸MB از فضای RAM را استفاده می‌کنند. این سیستم حدود ۸GB حافظه (RAM) دارد و اگرچه ysqltuner.pl گزارش می‌دهد که Mysql حداکثر ۱GB از حافظه را مصرف می‌کند، ما می‌توانیم ببینم که مقداری که مصرف شده خیلی کمتر از ۱GB است. برای اطمینان برای دیگر فرآیندها ۱٫۵GB حافظه در نظر می‌گیریم و میانگین مصرف آپاچی را به ۳۲MB گرد می‌کنیم.
(۶٫۵ x 1024) / 32 = 208

برای اطمینان بیشتر آنرا به ۲۰۰  گرد می‌کنیم، زیرا بهتر است که کمتر تخمین زده شود.

نظارت کردن بر سرور:

 

فرآیندهای آپاچی و مجموع حافظه مصرف شده را مشاهده کنید. در اینجا دستوری داریم که خروجی یکسانی را نشان میدهد که هر ثانیه بروز رسانی می‌شود.
watch -n 1 “echo -n ‘Apache Processes: ‘ && ps -C apache2 –no-headers | wc -l && free -m”
خروجی تولید شده مانند شکل زیر است:
Apache/Prefork
با استفاده از +/- سطر را بافر / ذخیره کنید. مقادیر برحسب MB است. شما می‌توانید در یک نقطه از زمان ببینید که حدود ۲٫۳GB  از حافظه استفاده می‌شود و ۵٫۷GB از حافظه آزاد است. اگر فرآیندهای Apache/Prefork به تنظیمات حداکثر تعداد کلاینت‌ها نزدیک شوند و مقدار زیادی حافظه در دسترس خواهید داشت که شما می‌توانید قدم به قدم این مقدار را افزایش دهید تا این مقدار به کمتر از حداکثر تعداد کلاینت‌ها برسد و سپس آنرا Restart  کنید.