Archive for the ‘iptables’ Category

iptables – part 2

فوریه 9, 2008

یادآوری :

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

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


در جداول زیر چندین پارامتر دستور iptables بیان شده است . ادامه پارامتر ها را در جداول بعدی با توجه به مثال ها کامل می کنیم .

-t < table >

برای مشخص کردن جدول ( Filter ، NAT ، MANGLE ) از این پارامتر استفاده می شود . جدول پیش فرض Filter است و در صورت استفاده نکردن از این پارامتر به طور خود کار در نظر گرفته می شود.

-j

مشخص می کند که چه تصمیم گیری در مورد پکت انجام شود . ( شامل DROP ، REJECT ، ACCEPT و … (

-A

A مخفف عبارت Append بوده و قانون مشخص شده در جلوی آن را به انتهای زنجیر اضافه می کند .

-F

F مخفف عبارت Flush بوده و تمامی قوانین موجود در جدول انتخاب شده را حذف می کند .

-L

تمامی قوانین موجود در زنجیر ها را لیست می کند.

-E

برای تغییر نام یک زنجیر به کار می رود .

-N

برای ایجاد یک زنجیر جدید توسط کاربر به کاربر می رود .

-X

از این پارامتر برای حذف زنجیر های تعریف شده توسط کاربر استفاده می شود .

-p

برای کنترل پروتوکل به عنوان مثال icmp, tcp, udp به کار می رود .

-s

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

-d

برای تطبیق آدرس مقصد پکت استفاده می شود

-i

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

-o

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


مثال ۱:

iptables -A INPUT -s 192.168.0.55 -j ACCEPT

۱- قوانین به زنجیر input از جدول Filter ( جدول پیش فرض ( اضافه ) APPEND ) می شود .( در نتیجه مقصد پکت ها خود فایروال است .)

۲- قواننین فقط در مورد packet هایی اعمال می گردد که آدرس مبدا آنها 192.168.0.55 است .

۳ – سیاست اعمالی در مورد پکت هایی با ویژگی های بالا ACCEPT است .

در نتیجه :

تمامی پکت های ماشینی با آدرس آی پی 192.168.0.55 که آدرس مقصد آنها خود فایروال است پذیرفته می شود .


مثال ۲ :

iptables -A INPUT -j DROP -i eth0 -s 192.168.0.45

۱ – قوانین به زنجیر input از جدول Filter ( جدول پیش فرض ( اضافه ) APPEND ) می شود .( در نتیجه مقصد پکت ها خود فایروال است .)

۲- قواننین فقط در مورد packet هایی اعمال می گردد که آدرس مبدا آنها 192.168.0.45 است .

۳- قوانین فقط در مورد پکت هایی اعمال می گردد که از کارت اترنت شماره صفر واردمی شوند .

۴ – سیاست اعمالی در مرود پکت هایی با شرایط بالا DROP است .

در نتیجه :

پکت های ورودی با آدرس مبدا 192.168.0.45 که ازکارت شبکه اترنت صفر وارد می شوند حذف می شوند .


مثال ۳ :

iptables -A INPUT -s 0/0 -i eth0 -d 192.168.1.1 -p TCP -j ACCEPT

۱- قوانین به زنجیر input از جدول Filter ( جدول پیش فرض ( اضافه ) APPEND ) می شود .( در نتیجه مقصد پکت ها خود فایروال است .)

۲ – قوانین بر روی پکت هایی با هر آدرس مبدا ) 0/0 به معنی هر آدرسی است ( اعمال می گردد.

۳ – قوانین فقط در مورد پکت هایی اعمال می گردد که از کارت اترنت شماره صفر واردمی شوند .

۴ – قوانین در مورد پکت هایی اعمال می گردد که آدرس مقصد آنها 192.168.1.1 باشد .

۵ – قوانین فقط در مورد پکت های tcp اعمال می گردد .

۶ – سیاست اعمالی در مورد پکت هایی با شرایط بالا accept است .

در نتیجه :

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


مثال ۴ :

iptables –L INPUT

لیستی از قوانین موجود در زنجیره INPUT را نمایش می دهد .


مثال ۵ :

iptables –D FORWARD 1

دستور بالا قانون شماره 1 را در زنجیر FORWARD حذف می کند .


مثال ۶ :

iptables –D INPUT -s 0/0 -i eth0 -d 192.168.1.1 -p TCP -j ACCEPT

روش دیگر حذف قانونی خاص نوشتن کامل دستور با استفاده از پارامتر –D است . قانونی را که در مثال 3 به زنجیر INPUT اعمال کردیم در این مثال حذف نمودیم .


مثال ۷ :

iptables -A INPUT -s www.myjunk.com -j DROP

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


در iptables از علامت ! می توان برای معکوس کردن استفاده کرد .


مثال ۸ :

iptables -A INPUT -j ACCEPT ! -s 192.168.0.45

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


مثال ۹ :

iptables –A INPUT –p ICMP –d 192.168.0.1 –j DROP

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


مثال ۱۰ :

iptables –A INPUT –p tcp –dport 21 –j DROP

با این دستور پورت سرویس دهنده ftp ( پورت شماره ۲۱ ( بسته می شود .


مثال ۱۱ :

iptables –p tcp –h

نیازی به حفظ کردن تمامی دستورات iptables نیست . help پرقدرت iptables همیشه به شما کمک می کند . فقط کافی است از پارامتر –h استفاده نمایید . به عنوان مثال دستور بالا پارامتر هایی را که می توان برای اعمال محدودیت بر روی پروتوکل tcp از آنها استفاده کرد نمایش می دهد .


در iptables می توان پکت ها را با توجه به پورت مشخص شده در هدر آنها هدایت کرد .

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

–sport

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

–dport


مثال ۱۲ :

iptables -A FORWARD -s 0/0 -i eth0 -d 192.168.1.58 -o eth1 -p TCP \

–sport 1024:65535 –dport 80 -j ACCEPT

1- قوانین به زنجیر FORWARD از جدول Filter اعمال می گردد.( در نتیجه مقصد پکت ها ماشینی است که از طریق کارت شبکه دیگر این فایروال قابل دستیابی است .)

2 – قوانین بر روی پکت هایی با هر آدرس مبدا ) 0/0 به معنی هر آدرسی است ( اعمال می گردد.

3 – قوانین فقط در مورد پکت هایی اعمال می گردد که از کارت اترنت شماره صفر واردمی شوند و از کارت شبکه شماره 1 خارج می شوند .

4 – قوانین در مورد پکت هایی اعمال می گردد که آدرس مبدا آنها 192.168.1.58 است .

5 – قوانین فقط در مورد پکت های tcp اعمال می گردد .

6 – پورت مبدا پکت ارسالی باید در رنجه 1024 تا 65535 باشد و پورت مقصد پکت باید 80 باشد .

7 – سیاست اعمالی در مورد پکت هایی با ویژگی های بالا ACCEPT است .

در نتیجه :

با استفاده از این قانون به فایروال اجازه داده می شود تا پکت های tcp ای را با هر آدرس مبدا ای که از کارت شبکه شماره 0 وارد می شوند و از کارت شبکه شماره 1 خارج می شوند و مقصد آنها 192.168.1.85 است را مسیر یابی کند . البته با این شرط که پورت مبدا پکت ارسالی در رنجه 1024 تا 65535 باشد و پکت تصمیم به برقراری ارتباط با پورت 80 ماشین هدف داشته باشد .


استفاده از آدرس mac برای اعمال محدودیت ها ی مختلف در شبکهکاربرد زیادی دارد . زیرا آدرسی یکتا است و تغییر آن به روش های ساده و توسط کاربران مبتدی به راحتی انجام نمی گیرد . ( بر خلاف آدرس ip که تغییر آن به راحتی در صورت داشتن دسترسی root امکان پذیر است .) فرمت آدرس دهی mac به صورت

XX:XX:XX:XX:XX:XX

است.

–mac-source 00:00:00:00:00:01

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


مثال ۱۳ :

iptables –A INPUT –mac-source 00:00:00:00:11:12 -j DROP

پکت های ارسالی از ماشینی با آدرس مک 00:00:00:00:11:12 DROPکه مقصد آنها فایروال است DROP می شوند .


ذخیره کردن تنظیمات iptables :

با صادر کردن دستور های iptables قوانین فایروال به صورت موقت در سیستم اجرا می شوند و تا راه اندازی مجدد سیستم یا سرویس iptables به کار خود ادامه می دهند . برای ذخیره این تنظیمات از دستور

Service iptables save استفاده می شود.

این قوانین درون دایرکتوری /etc/sysconfig/iptables در فایل هایی


lokkit:

برای راحتی کار با iptables بعد از آشنایی با syntax های این دستورات میتوان از نرم افزار های مخصوص پیکربندی iptables استفاده کرد . lokkit یکی از این نرم افزار ها است که به طورپیش در نصب کامل فدورا نصب می شود و کار پیکربندی فایروال را بسیار ساده می سازد . البته فایل های تولید شده توسط این نرم افزار می تواند مثال بسیار خوبی برای آشنایی شما با دستورات iptables باشد.

این برنامه نیز فایل های حاوی دستورات iptables را درون دایرکتوری /etc/sysconfig نگهداری می کند .


itables-save و iptables-restore:

برای ذخیره قوانین iptables در فایلی خاص می توان از اسکریپت iptables-save استفاده کرد.

به عنوان مثال دستور زیر قواننی در حال اجرای iptables را درون فایل firewall-config ذخیره می کند .iptables-save > firewall-config

برای بازخوانی این اطلاعات از یک فایل نیز می توان از دستور iptables-restore استفاده نمود.

به عنوان مثال دستور زیر تنضیمات iptables موجود در فایل firewall-config را به عنوان تنضیمات جاری سیستم تعیین می کند .

iptables-restore < firewall-config

البته از این اسکریپت ها می توان در نسخه هایی مانند debian که نمی توان از دستور service iptables save استفاده کرد نیز بهره برد.

( در نسخه debian برای اجرای این دستور ابتدا باید وارد دایرکتوری /sbin شوید .)


iptables – part1

فوریه 9, 2008
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 است