سفر خاک

یادداشت های غلامحسین توسلی

سفر خاک

یادداشت های غلامحسین توسلی

جز غبار از سفر خاک چه حاصل کردیم؟ / سفر آن بود که ما در قدم دل کردیم

ترفندهای iptables

سه شنبه, ۲۹ بهمن ۱۳۹۲، ۰۴:۴۸ ب.ظ

iptables در پروژه Netfilter توسعه داده شده و از لینوکس 2.4 به بعد (سال 2001) به عنوان بخشی از هسته لینوکس در دسترس کاربران قرار داده شده است. در این سری پست‌ها قصد آموزش iptables رو ندارم. به اندازه کافی منابع خوب واسش هست. (مثلا این واسه شروع خوبه) قصد دارم اینجا تنها تجارب شخصی خودم رو منتشر کنم.
اغلب کاربران میان دو اصطلاح iptables و netfilter دچار سردرگمی می‌شوند. حداقل من که این مشکل رو داشتم! Netfilter نام پروژه رسمی برای تمامی امکانات فیلتر کردن بسته‌های شبکه در لینوکسه. همچنین Netfilter چارچوبی رو در درون هسته لینوکس مهیا کرده که برنامه‌های دیگه می‌تونن از توابع تعریف شده در این چارچوب برای گیرانداختن! بسته‌ها در پشته شبکه استفاده کنن. شما با استفاده از این ابزار می توانید نرم افزاری بنویسید که به کلیه بسته های شبکه نظارت داشته و در صورت لزوم میتونه از ورود بسته های ناخواسته به سیستم جلوگیری کنه.
در مقابل iptables از این چارچوب برای انجام عملیات روی بسته‌های شبکه (مثل فیلترینگ) در درون پشته شبکه استفاده می‌کنه. خیلی ساده بخوام بگم Netfilter چارچوبی رو مهیا کرده که از طریق اون iptables میتونه دیوار آتش رو بسازه.
از طرف دیگه iptables به ابزاری در سطح کاربر هم گفته میشه که مدیر شبکه از طریق اون میتونه با دادن دستورات در خط فرمان سیاست‌های دیوار آتش هسته سیستم عامل رو در سطح کاربر تغییر بده. اصطلاحاتی چون جدول1، زنجیره2، تطبیق3 و هدف در اینجا معنی پیدا میکنه. در حقیقت Netfilter ترافیک شبکه رو خودش فیلتر نمیکنه بلکه توابعی رو آماده کرده که اجازه فیلترینگ رو به iptables میده. این از این؛ میمونه نکته این پست...

مسئله: چطور آهنگ عبور بسته ها رو میشه با iptables مدیریت کرد؟

راه حل:

بذارید اول یه زنجیره تو جدول Filter که جدول پیش فرض هست، به اسم LIMITC بسازیم. بعد کلیه ترافیک رو میفرستیم تو این زنجیره قوانین مورد نیاز رو در این زنجیره قرار میدیم تا روی بسته‌های ورودی اعمال بشه.

iptables -N LIMITC

برای ایجاد محدودیت باید از سوئیچ
-m limit
استفاده کرد. این سوئیچ بر اساس تعداد تطبیق های مشاهده شده در ثانیه کار می کنه. این سوئیچ دو گزینه اختیاری نیز دارد.
--limit
عددی که پس از این سویچ در دستور قرار می گیرد ماکزیمم میانگین تعداد تطبیق در ثانیه رو نشون میده. این عدد میتونه صریحا با یکی از گام های زمانی در دستور قرار داده شود. مقدار پیش فرض برای این گزینه مقدار سه تطبیق در ساعته.
--limit-burst
عددی که پس از این گزینه در دستور قرار می گیره ماکزیمم ترافیک burst مجاز پیش از مشاهده رویداد رو معین می کنه. مقدار پیش فرض برای این گزینه عدد 5 است. یعنی قبل از اعمال limit بدون هیچ محدودیتی 5 تطبیق پشت سر هم میتونه اتفاق بیافته، بعد از اون محدودیت مشخص شده با گزینه limit روی تطبیق ها اعمال میشه.

مثال:

iptables -A FORWARD -m limit -j LOG

در این قانون اولین 5 (مقدار پیش فرض) بسته به زنجیره LOG منتقل می شه. پس از رسیدن پنجمین بسته از این به بعد بدون توجه به ترافیک ورودی هر بیست دقیقه (1/3 ساعت - مقدار پیش فرض) یک بسته به زنجیره LOG منتقل می شه. از این مثال می تونید برای کاهش نرخ ثبت رویداد استفاده کنید. (برای جلوگیری از افزایش بیش از اندازه فایل های ثبت رویداد)

از این امکان iptables می تونید برای جلوگیری از برخی حملات منع سرویس DOS نیز استفاده کنید. در ادامه مثال هایی از این دست ارائه خواهد شد.

iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT

دستور بالا برای جلوگیری از حملات SYN-Flood کاربرد داره.

iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST
-m limit --limit 1/s -j ACCEPT

از این دستور می توان برای جلوگیری از اسکن پورت به صورت مخفیانه استفاده کرد.

iptables -A FORWARD -p icmp --icmp-type echo-request -m limit \
--limit 1/s -j ACCEPT

از دستور بالا می توان برای جلوگیری از حمله Ping Of Death استفاده کرد.


پ.ن
-------------------------------------------

1. Table

2. Chain

3. Match

نظرات (۱)

سلام عالی بود
ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی