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 از این تصمیم گیری ها به عنوان 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 است
