iptables – part1

By omid mohajerani
Iptables چیست ؟

Iptables که توسط گروه netfilter نوشته شده است از کرنل 2.4 به بعد جایگزین ipchains شد . و در حال حاضر به طور پیش فرض بر روی اکثر نسخه های لینوکس نصب است . از دو بخش اصلی تشکیل شده است . 1 – ماژول کرنل 2 – یک اینترفیس برای ارتباط با کاربر

ماژول iptables میتواند پکت های ورودی و خروجی را مدیریت و فیلتر کند و از جمله فایروال های حالت گرا است .


دانلود و نصب iptables

همانطور که گفته شد به صورت پیش فرض روی نسخه های مختلف لینوکس نصب است ولی به هر حال آخرین نسخه iptables را می توانید از خود وبسایت netfilter دریافت کنید .اگر از نسخه فدورا استفاده می کنید می توانید به راحتی از rpm

rpm –ivh iptables-1.2.9-1.i386.rpm


اجرا و متوقف کردن iptables

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

service iptables start

service iptables stop

service iptables restart

استفاده می شود . وبرای نمایش وضعیت این سرویس از دستور service iptables status استفاده می شود برای را ه اندازی خودکار این سرویس بعد از هر بار ریستارت کردن سیستم هم باید از دستور

chkconfig iptables on

استفاده کرد .


برای اینکه بتوانیم قوانین iptables را با توجه به نیاز ها بنویسیم باید با مسیر پردازش پکت های ورودی و خروجی و همچنین ساختار و اصطلاحات مربوط به iptables از جمله جدول ( table ) و زنجیر( Chain ) آشنا شویم .

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

این مراحل شمال عبور از جداول و زنجیر ) chain ) های آنها است .


زنجیر ) chain )

همانند ipchains در هسته های قدیمی ،iptables نیز از یک سری قوانین زنجیروار استفاده می کند . سه زنجیر پیش فرض ، INPUT ، OUTPUT وForward هستند . یک زنجیر فهرستی ساده از قوانین است و مشخص می کند با هر پکت چطور رفتار شود . به عنوان مثال پکت DROP یا ACCEPT شود .

اولین تصمیمی که کرنل در هنگام دریافت یک بسته می گیرد درباره مقصد بسته است . اگر مقصد بسته ها خود ماشین لینوکس ( که iptables برروی آن در حال اجرا است . ) باشد برای تصمیم گیری در مورد آن پکت از قوانین زنجیر INPUT استفاده می کند .

اگر مقصد پکت ها کارت شبکه دیگر ( کلا ماشینی که تحت حمایت فایروال iptables است .) باشد و شما ipforwarding را فعال کرده باشید . پکت با قوانین زنجیر Forward کنترل می شود .

اگر خود لینوکس نیاز به ارسال پکت به شبکه خارج داشت آن پکت با توجه به قوانین زنجیر OUTPUT کنترل میشود و در صورت ACCEPT شدن اجازه خروج پیدا می کند .

پس توجه داشته باشید که زنجیر های INPUT و OUTPUT مربوط به خود ماشین لینوکس می شوند نه تمامی پکت های ورودی و خروجی


جدول

در iptables به طور پیش فرض سه جدول وجود دارد که زنجیر ها در محدوده این جدول قرار می گیرند .

در واقع می توان گفت پکت ها از این جداول عبور می کنند که هر یک از این جداول حاوی زنجیر ( فهرستی از دستورات ) هستند.

۱ - جدول mangle :

این جدول وظیفه تغییر بیت ها در هدر TCP از جمله بیت های کنترلی QOS را بر عهده دارد .

۲ - جدول filter :

وظیفه فیلتر کردن پکت ها را بر عهده دارد . و از سه زنجیر INPUT ، OUTPUT و FORWARD تشکیل شده است .

۳ - جدول NAT :

وظیفه آن ترجمه آدرس شبکه ) Network Address Translation ) است .

که شامل دو زنجیر اصلی PREROUTING و POSTROUTING است .

PREROUTING : وقتی استفاده می شود که نیاز به تغییر ) ترجمه ( آدرس مقصد پکت باشد .

قوانین این زنجیره قبل از عمل مسیریابی اعمال می گردند .

POSTROUTING : وقتی استفاده می شود که نیاز به تغییر ) ترجمه ( آدرس مبدا پکت باشد .

قوانین این زنجیره بعد از عمل مسیریابی اعمال می گردند .


جدول

وظیفه

زنجیر

توضیحات

Filter

فیلتر کردن پکت

Forward

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

Input

فیلتر کردن پکت هایی که مقصد آنها خود لینوکس ( فایروال )است .

Output

فیلتر پکت های ارسالی از خود لینوکس (فایروال)

Nat

ترجه آدرس شبکه پکت

PREROUTING

قبل از عمل مسیریابی انجام گرفته و عمل تبدیل آدرس آی پی مقصد ( برای سازگار بودن با جدول مسیریابی فایروال) را تسهیل می کند . که به این عمل DNAT می گویند .

POSTROUTING

بعد از عمل مسیریابی انجام می گیرد و بیان می کند که نیازی به تغییر آدرس آی پی مقصد پکت در زنجیرPREROUTING نیست . به این نوع NAT اصطلاحا SNAT می گویند.

OUTPUT

عمل NAT برای پکت های ایجاد شده توسط خود فایروال انجام می شود . ( به ندرت در شبکه های کوچک تا متوسط کاربرد دارد . )

Mangle

تغییر هدر TCP پکت

PREROUTING POSTROUTING OUTPUT INPUT FORWARD

قبل از عمل مسیریابی رخ داده و بیت های TCP در QOS را تغییر می دهد .

( به ندرت در شبکه های کوچک تا متوسط کاربرد دارد . )

 


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

تصمیم گیری بر اساس مقصد پکت صورت می گیرد

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

قبل از تصمیم گیری در مورد پکت ، ابتدا از سه مرحله زیر عبور می کند :

مرحله اول : پکت وارد جدول Mangle شده و قوانین این جدول (برای تغییر بیت QOS ) بر آن اعمال می گردد .

مرحله دوم : پکت وارد جدول NAT شده و در صورت نیاز قوانین زنجیر PREROUTING برای عمل DNAT برروی آن اعمال می گردد .

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

در مرحله مسیر یابی اگر آدرس مقصد کلاینتی در شبکه تحت پوشش فایروال باشد که از طریق کارت شبکه دیگر فایروال قابل دسترسی است . ( این عمل در صورت فعال بودن ip_forwarding امکان پذیر است .)

قوانین زنجیر های FORWARD و POSTROUTING بر روی آن اعمال می گردد .

ولی اگر مقصد پکت خود ماشین فایروال باشد ، پکت برای دسترسی به برنامه کاربردی یا اجرای سرویسی خاص در خود ماشین فایروال ابتدا با قوانین زنجیر INPUT از جدول Mangle کنترل شده و سپس فیلترینگ پکت با توجه به قوانین زنجیر INPUT از جدول Filter انجام می شود .

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

برای درك بهتر اين موضوع به شكل زير كه در آن زنجيرها و ارتباط آنها رسم شده است توجه كنيد:

 

iptables.jpg


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

Target

توضیحات

رایج ترین پارامتر

ACCEPT

Iptables پردازش بیشتر را متوقف می کند .

پکت امکان دسترسی به برنامه کاربردی یا … را پیدا می کند .

DROP

Iptables پردازش بیشتر را متوقف می کند .

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

LOG

اطلاعات پکت برای ثبت به syslog ارسال می شود .

Iptables با اجرای دستور بعدی به کار خود ادامه می دهد.

چون نم یتوان عمل log کردن و DROP ا به طور همزمان انجام شود معمولا ترتیبی از قوانین در نظر گرفته می شود که قانون اول عمل log کردن و قانون دوم عمل DROP را انجام می دهد .

–log-prefix “string”

این پارامتر به iptables می گوید تمامی پیام های log را با پیشوندی که کاربر در “string” مشخص می کند ذخیره کند . معمولا برای ثبت علت DROP شدن پکت ها استفاده می شود .

REJECT

همانند DROP عمل می کند با این تفاوت که بعد از، از بین بردن پکت پیامی به فرستنده آن مبنی بر نابودی پکت ارسال می کند.

–reject-with qualifier

qualifier نوع پیام ارسالی برای فرستنده پکت را مشخص می کند .که شامل موارد زیر است :

icmp-port-unreachable (default)

icmp-net-unreachable

icmp-host-unreachable

icmp-proto-unreachable

icmp-net-prohibited

icmp-host-prohibited

tcp-reset

echo-reply

DNAT

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

–to-destination ipaddress

توسط این پارامتر می توان آدرس مقصد در پکت را تغییر داد.

SNAT

برای ترجمه آدرس شبکه مبدا به کار می رود. به عنوان مثال تغییر آی پی مبدا در پکت

–to-source

[-

][:
-
]

آدرس آی پی و پورت های مبدا که در SNAT استفاده می شود را مشخص می کند.

MASQUERADE

برای ترجمه آدرس شبکه مبدا به کار می رود .ولی آدرس آی پی مبدا همان آی پی در نظر گرفته می شود که توسط کارت شبکه فایروال از آن استفاده می شود.

[--to-ports
[-
]]

این پارامتر رنجی از پورت ها که می تواند جایگزین پورت های اولیه در پکت شود را بیان می کند .

 


 

خوب بعد از همه این تفاسیر که به نظر من از دانستن دستورات iptables به مراتب خیلی مهم تره نوبت به نحوه نوشتن و ساختار خود دستورات iptables است

برچسب‌ها:

يك پاسخ برايش بگذاريد

ببخشید، برای نوشتن دیدگاه باید وارد بشوید