هاست لینوکس پرسرعت سی پنل

آموزش Iptables فایروال لینوکس

Iptables نام معروف ترین دیوار آتش لینوکس است که روی بیشترین توزیع های لینوکس وجود دارد. که رابط اصلیِ قلاب های netfilter در سطح هستۀ لینوکس است. قواعدی (Rules) که توسط Iptables تبیین می شوند، از قلاب های netfilter برای بررسی بسته های اطلاعاتی که به سرور وارد یا از آن خارج می شوند، استفاده می کند. که در نهایت منجر به پالایش دسترسی ها و داده ها می گردد. این توضیحی بود از عملکرد iptables که به نوعی همان فایروال لینوکس قلمداد می شود. در قسمت ۸۷ ام از مجموعۀ آموزش کانفیگ سرور لینوکس به آموزش این بخش بسیار مهم از امنیت سرور لینوکس می پردازیم.

آموزش Iptables فایروال لینوکس

آموزش Iptables فایروال لینوکس

در قسمت قبلی راجع به چیستیِ فایروال لینوکس به طور کامل صحبت کردیم. برای درک ادامۀ این آموزش نیاز است که به طور مرتب آموزش ها را دنبال کنید تا پیش نیازهای مربوطه را کسب کنید. پس الان با توجه به اینکه می دانید iptables چیست، می خواهیم به سراغ نحوۀ کار کردن با آن برویم. البته ذکر این نکته هم بد نیست که باید بدانید در نسخه های جدید سیستم عامل RedHat و توزیعه های وابسته، iptables حذف شده و به جای آن firewalld جایگزین شده است.

پس باید بدانید که در نسخۀ ۷ سیستم عامل های برپایۀ redhat سرویس های iptables حذف شدند، اما همچنان دستورات iptables روی آنها کار می کنند. پس با توجه به اینکه iptables ای روی CentOS 7 وجود ندارد، ولی همچنان می توانید از دستورات آن استفاده کنید. پس باز هم خواندن ادامۀ این مقاله در صورتی که نسخۀ سیستم عامل لینوکس شما ۷ می باشد، بی فایده نیست.

زمانی که ارتباطی می خواهد با سرور شما برقرار شود، Netfilter شامل قلاب هایی است که iptables از این قلاب ها استفاده می کند تا بسته های اطلاعاتی را یکی یکی با قوانینی که برای آن در نظر گرفته شده است، تطبیق دهد. اگر پاسخ این تطبیق مثبت بود، اجازۀ ورود یا خروج را به آن بسته می دهد. در غیر این صورت دسترسی اش را مسدود می نماید. این روال کلی کار iptables بود.

iptables شامل یک ساختار منظم است که برای کار کردن با آن باید با این ساختار آشنا باشید. اول از همه باید بدانید که در کنار iptables که برای کار با IPv4 در نظر گرفته شده، یک ip6tables هم وجود دارد که مخصوص IPv6 است. اگر عملکرد IPv6 را روی سرور غیر فعال کرده باشید، نیازی به ip6tables هم نیست. نام iptables هم از جداولی می آید که درون آنها قوانینی برای IP های مختلف وضع شده. به همین دلیل است که به آن IP Tables گفته می شود.

iptables شامل جدول های مختلفی است (Table) که هر جدول شامل حلقه های مختص همان جدول است (Chains). حالا دستورات (Rules) به صورت ساختار بندی شده درون حلقه های جداولِ iptables ذخیره می شوند و برای تطبیق هر اتصال از آنها بهره گرفته می شود. به جداول فهرست دستورات هم گفته می شود؛ به این دلیل که در اصل جدول ها برای گروه بندی کردن دستورات هستند.

ما در iptables پنج تا جدول پیش فرض داریم که به غیر از آنها جداول دلخواه خودمان را هم می توانید بسازیم. جداول پیش فرض شامل موارد زیر هستند:

  1. filter : جدول پیش فرض برای بررسی بسته های شبکه.
  2. nat : به جهت تغییر بسته هایی که اتصال جدیدی می سازند یا برای Network Address Translation استفاده می شوند.
  3. mangle : مورد استفاده برای تغییر نوع خاصی از بسته ها
  4. raw : پیکربندی استثناها از ردگیری اتصالات در ترکیب با هدف NOTRACK.
  5. security : مورد استفاده برای دستورات شبکه بندی Mandatory Access Control (MAC)

حالا هر کدام از این جدول ها برای خود دارای حلقه (Chains) هایی هستند، که ما چون بیشتر با جدول filter سر و کار داریم، حلقه های این جدول را با هم بررسی می کنیم. البته حلقه های جدول security هم به مانند filter خواهد بود. پس جدول filter شامل ۳ تا حلقه است:

  • INPUT : این حلقه به جهت کنترل کردن رفتار با اتصال های ورودی کاربرد دارد. منظور از اتصال های ورودی درخواست هایی است که از خارج از سرور به سمت سرور ما متمایل می شوند.
  • OUTPUT : این حلقه هم برای کنترل اتصال های خروجی کاربرد دارد. به عنوان مثال اگر قصد ping گرفتن از یک سرور دیگری را داشته باشید، iptables با دستورات موجود در حلقۀ output خود آن اتصال را بررسی می کند.
  • FORWARD : این حلقه برای اتصال های ورودی است که مقصد آنها سرور ما نیست. بلکه مقصد یک سرور دیگر است که فقط از سرور ما عبور می کنند. مثلاً اگر سیستم عامل ما اینجا حکم روتر (Router) را داشته باشد، قطعاً این حلقه نقشی را ایفا خواهد کرد.

تعیین وضعیت پیش فرض حلقه های جدول filter در iptables

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

iptables -L -v

این دستور اطلاعات آمار و ارقامیِ تمامیِ حلقه ها را نشان می دهد. نتیجۀ این دستور روی CentOS 7 کمی طولانی تر است. که اگر خواسته باشیم خلاصه تر و مفیدتر نتیجۀ این دستور را بررسی کنیم، باید از همین دستور به صورت زیر استفاده کنید:

iptables -L -v | grep policy

این دستور یک صافی روی خروجیِ دستور قبل می گذارد. به علامت | دقت کنید که به آن Pipe گفته می شود. به فارسی معنیِ لوله می دهد. در عمل کارِ گرفتن خروجیِ دستور قبلی و دادن آن به دستور بعدی را انجام می دهد؛ به نوعی همان کار لوله کشی! در نهایت دستور grep کار صافی کردن را می کند که فقط خطوطی از نتیجه را به ما بر می گرداند که حاوی عبارت policy است. نتیجۀ این دستور را در زیر می بینید که با هم آن را بررسی می کنیم.

# iptables -L -v | grep policy
Chain INPUT (policy ACCEPT 1248 packets, 762 bytes)
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
Chain OUTPUT (policy ACCEPT 13550 packets, 1404K bytes)

در نتیجۀ بالا شما سه حلقۀ جدول اصلیِ iptables را شاهد هستید و اینکه هر حلقه چه مقدار بسته را پردازش کرده است در جلوی آن نمایش داده. خوب، نتیجه ای که ما از این نتیجه می گیریم، این است که حلقۀ INPUT مقدار ۱۲۴۸ بسته به حجم ۷۶۲ بایت را پردازش کرده؛ پس سرور ما ورودی داشته است.

از طرف دیگر حلقۀ OUTPUT میزان ۱۳۵۵۰ بسته را به حجم ۱۴۰۴K بایت پردازش کرده است که نشان می دهد سرور ما خروجی هم داشته. اما مقدار FORWARD را ۰ زده! به این معنا که حلقۀ FORWARD در جدول iptables بسته ای را پردازش نکرده، پس سرویس یا امکانی روی سرور ما نیست که دستورات این حلقه روی آن اعمال گردد.

حتی ممکن است زمانی که یک سرور نو تحویل می گیرید، با زدن دستور بالا، مقدار تمامی این حلقه ها ۰ یا خیلی کم باشد که کاملاً طبیعی است. به عنوان مثال اگر بعد از آن سرویس وب سرور مثل Apache نصب کنید و روی آن سایتی را بالا بیاورید، حتماً مقدار این اعداد افزایش خواهد یافت. به دلیل اینکه میزان بسته های داده های شبکه که از دیوار آتش عبور می کنند، افزایش می یابند.

نکتۀ دیگر از نتیجۀ آخرین دستوری که یاد گرفتید، این است که عبارت ACCEPT در روبروی policy نشان دهندۀ این موضوع است که فایروال سرور در حال حاضر امکان رد و بدل شدن بسته ها تحت نظر آن حلقه از جداول فایروال را می دهد. این موضوع در تعیین دستورات فایروالی که بعداً با استفاده از دستور iptables تعیین می کنیم، خیلی مهم است. مثلاً الان می دانیم که سرور ما بسته های ورودی را می پذیرد. حالا اگر خواسته باشیم این دسترسی را برای یک سرور بیرونیِ خاص مسدود کنیم، باید طبق این آگاهی ها اقدام نماییم.

نکته: ساختار فایروال ها چه روی سرور لینوکس و چه روی رایانۀ شخصیِ ویندوزیِ شما تقریباً از یک فلسفه تبعیت می کنند. اگر با نرم افزار های دیوار آتش مثل ESET Smart Security که روی رایانۀ شخصیِ شما نصب می شوند، آشنا باشید، راحت تر می تانید درک کاملی از فایروال سرور لینوکس به دست آورید.

تغییر حالت پیش فرض عملکرد حلقه های جداول iptables

در بالا ما دیدیم که حالت پیش فرض حلقه های جداول iptables به صورت ACCEPT بود. یعنی اجازۀ ورود و خروج را می دادند. اما اگر خواسته باشیم این وضعیت را تغییر دهیم، باید از دستور iptables به صورت زیر استفاده کنیم.

iptables --policy INPUT DROP
iptables --policy OUTPUT DROP
iptables --policy FORWARD DROP

هر کدام از خطوط دستورات بالا، حلقه های INPUT، OUTPUT و FORWARD را برای پذیرش بسته های شبکه مسدود می کنند. به عبارت DROP دقت کنید!

حالا اگر خواسته باشید تمامی حلقه های مذکور را باز کنید، باید از دستورات زیر بهره ببرید.

iptables --policy INPUT ACCEPT
iptables --policy OUTPUT ACCEPT
iptables --policy FORWARD ACCEPT

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

iptables -L -v | grep policy

پاسخ هایی که فایروال به درخواست های اتصال می دهد

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

سه حالت از پاسخ هایی که از همه مهم تر هستند به قرار زیر هستند:

  • Accept : اجازۀ برقراری اتصال را می دهد.
  • Drop : اجازۀ برقراری اتصال را نمی دهد، مثل اینکه هیچ اتفاقی نیافتاده است. در این حالت سرویس یا رایانۀ درخواست کنندۀ اتصال از وجود سرورِ شما مطلع نخواهد شد.
  • Reject : اجازۀ برقراری اتصال را نمی دهد. اما خطایی را به درخواست کننده ارسال می کند که متوجه بشود دیوار آتش دسترسیِ وی را بسته است.

تا اینجای آموزش فایروال iptables را داشته باشید. تا در قسمت بعدی راجع به Rule ها یا دستوراتی که درون حلقه های مختلف می توانیم وارد کنیم، به طور کامل صحبت نماییم. نکتۀ مهمی که مجدد باید به شما متذکر شوم، این است که اگر از بسته نرم افزارهای واسط مثل CSF برای پیکربندی دیوار آتش سرور استفاده کنید، نیازی نیست دستورات iptables را مستقیماً برای باز یا بستن پورت یا دسترسیِ خاصی وارد کنید. که آموزش نصب و پیکربندیِ CSF را هم در مباحث بعدی خدمت شما ارائه خواهیم کرد.

تا اینجای بحث کار با فایروال، باید به طور کامل با iptables آشنا شده باشید که با دنبال کردن دیگر آموزش های سایت وبنولوژی دانش شما از این هم بیشتر خواهد شد. البته تمرین و آزمون و خطا در محیط های آزمایشی را فراموش نکنید. که به تثبیت آموخته های شما کمک می کند.

دیدگاه تان را ارسال کنید.

لطفاً از درج نظرات خارج از موضوع این صفحه خودداری کنید!