کنترل سرویس ها(درخواست ها) تحت شبکه

کنترل سرویس ها(درخواست ها) تحت شبکه

xinetd مخفف eXtended INTErner Deamon سرویسی که در سیستم عامل های یونیکسی مانند لینوکس برای کنترل ارتباط های تحت شبکه به سرویس هایی مانند ssh, ftp استفاده می شود. پیش از xinetd از سرویس دیگزی به نام  inetd در توزیع های لینوکسی استفاده می شد ولی امروزه در توزیع های جدید لینوکس از xinetd استفاده می شود. ولی بازهم سرویس inetd در سیستم عامل هایی مانند FreeBSD کاربرد دارند. با xinetd می توانید تعیین کنید که کدام ماشین ها و در چه زمانی به یک سرویس روی ماشین مقصد دسترسی داشته باشند. حتی می توانید تعیین کنید که در هر زمان چه تعداد ارتباط از ماشین های راه دور به یک سرویس روی ماشین مقصد ایجاد شود. xinetd خود بعنوان یک سرویس است که با گوش کردن به در خواست های ورودی تحت شبکه و از طریق پورت به در خواست ها \اسخ می دهد. دارای یک فایل پیکربندی عمومی است که در زیر دایرکتوری etc/ و به نام xinetd.conf قرار دارد. می توانید با دستور زیر محتوای فایل را ببنید.

cat  /etc/xinet.conf

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

ls  -l  /etc.xinetd.d

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

service  service_name
{
param=value
param=value
…..
}

فایل etc/xinetd.conf/ :

تنظیمات عمومی سرویس xinetd که بر تمامی سرویس های تحت کنترل xinetd اثر می گذارد. با دستور cat محتوای آنرا مانند زیر نشان داده می شود. این فایل اولین باری که سرویس xinetd فعال یا start می شود توسط xinetd خوانده شده و پس از هر تغییری باید restart شود.

  • default یک نام است و یعنی اینکه فایل دارای تنظیمات پیش فرض و عمومی برای تمامی سرویس های تحت xinetd است. پارامتر های تنظیمات درون اکولاد های باز و بسته قرار می گیرند.
  • instances : حداکثر تعداد در خواست هایی که می تواند  به سرویس های تحت کنترل xinetd داده شود را کنترل می کند. در این مثال 60 یعنی حداکثر تعداد 60 در خواست اتصال به سرویس ها در امکان دارد.
  • log_type : امکان ثبت رویداد ها در فایل var/log/secure/ فراهم می کند.  البته می توان  با استفاده از مقدار FILE یک فایل را در دایرکتوری var/log/ تعیین کرد که رویداد ها در آن نوشته شوند. authpriv متدی برای ثبت رویداد ها در فایل secure است.
  • log_on_success : اگر تلاش برای اتصال موفقیت آمیز باشد یک رویداد ثبت می شود. مقادر HOST و PID یعنی  ثبت hostname یا آدرس IP و PID فرایندی که در خواست شده (منظور فرایندی است که در ماشین مقصد و تحت کنترل xinetd) ثبت شود.
  • log_on_failure : دقیقن عکس پارامتر بالا و زمانی که تلاش برای اتصال ناموفق باشد یک رویداد ثبت خواهد شد. و مفهوم مقدار HOST مانند بالاست.
  • cps : دو مقدار  یکی بر حسب تعداد درخواستو دیگری بر حسب زمان که با فاصله از هم جدا می شوند. در این مثال سرویس xinetd اجازه نمی دهد بیش از 25 اتصال روی تمامی سرویس ها ایجاد شوند و هر 30 ثانیه یکبار بررسی در خواست ها دوباره بررسی می شوند.

تمامی این پارامتر ها می توانند بصورت مجزا برای هر سرویس تعیین شوند ولی اگر در فایل پیکربندی هر سرویس در دایرکتوری xinetd.d تعیین نشوند سرویس xinetd از مقدار این پارامتر ها در فایل xinetd.conf استفاده می کند.

  • includedir : مسیر دایرکتوری xinetd.d که شامل تمامی فایل های پیکربندی سرویس ها راتعیین می کند..

دایرکتوری etc/xinetd.d/ : این دایرکتوری شامل تمامی فایل های پیکربندی سرویس هایی است که تحت کنترل سرویس xinetd هستند. فایل ها باید همنام با سرویسی باشند که توسط xinetd کنترل می شود. فرمت هر فایل مانند فایل xinetd.conf است یعنی با یک نام شروع شده و پارامتر ها درون یک آکولاد های باز و بسته قرار می گیرند. شکل زیر پیکربندی یک فایل برای سرویس telnet را نشان می دهد.

از مهمترین پارامتر ها :

  • خطوطی که با # شروع می شوند کامنت هستند.
  • service : برای تعیین نام است. در این مثال service rsync یعنی اینکه فایلی برای سرویس rsync ایجاد می کنیم. معمولن از سرویس های لیست شده در فایل etc/services/ .
  • disabled : اگر yse باشد یعنی رویس غیر فعال است و اگر no باشد یعنی سرویس فعال است.
  • flags : یک سری از خصوصیات اتصال را تنظیم می کند. هر مقدار برای این پارامتر عملکرد خاصی را برای در خواست ارسالی انجام می دهد. بطور مثال REUSE یعنی استفاده مجدد از socket برای اتصال. تعیین پروتکل IP در سرویس های تحت کنترل xinetd
  • log_type : بصورت پیش فرض از سرویس syslogd (در شکل اول SYSLOGD) برای ثبت رویداد ها استفاده می شود. رویداد ها در فایل های پیش فرض Log نوشته یا اینکه توسط پارامتر FILE در فایلی مجزا ثبت شود.
  • log_on_success و log_on_failure : مانند آنچه که در بالا گفته شد.
  • socket_type : نوع سوکت را تعیین می کند.
  • user : تعیین می کند تحت کدام user باید سرویس اجرا شود. در این مثال کاربر root تعیین شده است.
  • wait : اگر yse باشد اصطلاحن حالت Single-Thread گویند و تا زمانی که این در خواست تمام نشود در خواست جدید قبول نمی شود. اگر no باشد حالت Multi-Thread می گویند و چندین در خواست قبول می شود.
  • server : مسیر فایل باینری است که باید از ماشین های راه دور دسترسی شود.

البته پارامتر های دیگر هم هستند که بصورت زیر توضیح داده می شوند :

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

  • only_from : دسترسی تنها از هاست های مقابل این پارامتر
  • no_access : عدم دسترسی به این سرویس از هاست های جلوی no_access
  • access_time : بر اساس ساعت و با فرمت HH:MM-HH:MM تعیین می کند فقط در بین ساعت های تعیین شده باید به سرویس دسترسی داشت. بطور مثال 13:30-12:30 یعنی دسترسی بین ساعت های 12:30 تا 13:30 امکان پذیر است.

 مقادیر مجاز برای Log ها :

log_on_success یعنی وقتی تلاشی برای اتصال به سرویس موفقیت آمیز بود یک رکورد در فایلی ثبت کن و log_on_failure یعنی وقتی تلاش برای اتصال ناموفق بود رکوردی را ثبت کن و می توان با مقادیری نوع اطلاعات را برای ثبت کنترل کرد.

  • DURATION : در log_on_success استفاده می شود و مدت زمانی که ماشین راه دور از سرویس استفاده کرده است را ثبت می کند.
  • EXIT : وضیعیت خروج یا exit status را ثبت می کند. ( در log_on_success استفاده می شود)
  • PID : شناسه سرویسی که از ماشین راه دور به آن اتصال بر قرار شده را ثبت می کند(در log_on_success استفاده می شود)
  • HOST : آدرس IP یا hostname ماشین راه دور را ثبت می کند( در هر دو استفاده می شود)
  • USERID : شناسه کاربر راه دور را ثبت م کند ( در هر دو استفاده می شود)
  • ATTEMPT : در log_on_failure استفاده شده و تلاش های ناموفق را ثبت می کند.

مثال کلی

در مثال بالا :

  • سرویس فعال است چونکه disabled مقدار no دارد.
  • چون wait مقدار no دارد پس چندین در خواست قبول می شود.
  • مقدار server فایل باینری telnet است که باید تحت کاربر root باشد.
  • اگر تلاش برای اتصال ناموفق باشد به همراه بقیه اطلاعات USERID هم ثبت می شود (چون از =+ استفاده کرده است)
  • کاربران شبکه 172.16.45.0/24 حق اتصال به telent را ندارند. (پس برای بقیه مجاز است)
  • اگر ورود موفقیت آمیزی بود به همراه بقیه اطلاعات HOST,PID و EXIT را هم ثبت کن
  • دسترسی فقط بین ساعت های 09:45 تا 16:15 امکان پذیر است.