فایروال در لینوکس یا IP TABLES - نسخه قابل چاپ +- Parsi Coders (http://parsicoders.com) +-- انجمن: Hardware / Software (http://parsicoders.com/forumdisplay.php?fid=66) +--- انجمن: Computer Software/OS (http://parsicoders.com/forumdisplay.php?fid=68) +---- انجمن: Linux Software (http://parsicoders.com/forumdisplay.php?fid=120) +---- موضوع: فایروال در لینوکس یا IP TABLES (/showthread.php?tid=141) |
فایروال در لینوکس یا IP TABLES - key-one - 05-02-2011 با سلام این مطلب رودوست خوبم جناب فرهادنیا ارائه نمودن ! نکات IPTables IPTable فایروال توکار لینوکس هستش که قدرت بی همتایی داره همین قدر ازش بگم که روتر میکروتیک یه جورایی تمامی قدرتش رو از IPTable می گیره... با IPTable هر چیزی که به فکرتون برسه در مورد امنیت شبکه ، مدیریت شبکه و مسیر یابی اطلاعات می تونید پیاده سازی کنید... فقط کافیه یک لینوکس نصب کنید به تعداد دلخواه کارت شبکه اضافه کنید و IPTable رو کانفیگ کنید. قدرت این فایروال هم طبیعتا بستگی به Platform ای داره که داره روش اجرا می شه یعنی می تونید به راحتی ترافیک کل یک کشور رو با یک سخت افزار صحیح و یک کانفیگ بهینه آنالیز کنید و در موردش تصمیم گیری کنید... با قدرت لینوکس و IPTable سیستم های فایروال زیادی ساخته شده مثلا آستارو ، میکروتیک ، IPFire و خیلی دیگه از سخت افزار ها و نرم افزار هایی که توی بازار می بینید که تا دلتون بخواد الان در بازار زیاد شدن و هر کسی هم ادعا می کنه مال ما قویتره... من شخصا گمان می کنم که JUNOS و IOS و همه شرکت هایی غول دیگه ای هم که سیستم عامل روتر و فایروال می سازن همشون از لینوکس های بهینه سازی شده و سفارشی سازی شده استفاده می کنن... حالا که همه دارن فایروال می سازن ما چرا برای خودمون یکی نسازیم؟ با این مقدمه تو فکر این هستم که شروع به آموزش یک دوره مقدماتی تنظیمات IPTable و ساخت فایروال شخصی با لینوکس در این فروم با کمک همه بچه های خوب اینجا هستم... برای شروع بهتره که همه ما یک لینوکس روی سیستمون نصب کنیم و دو تا کارت شبکه روش بزاریم و اگه هم نخوایم منابع سیستمون رو اشغال کنیم می شه روی یک نرم افزار Emulator نظیر VirtualBox یا VMWare استفاده کنیم. برای ورژن لینوکس هم هر چی که خودتون راحترین ولی ئیشنهاد من نصب یک لینوکس سبک و لخت هستش ( نیازی به نصب محیط Desktop مثلا gnum یا نرم افزار های اداری نیست ) مثلا یک ابونتو سرور یا یک CentOS یا هر چی دیگه ای که خودتون می دونید. خوبی لینوکس لخت سرعت و نیاز کمش به سخت افزار قوی و هستش. مثلا بعدا می تونید فایروالتون رو روی یک Mainboard کوچیک و ارزون نصب کنید و با زدن چهار کارت شبکه و خرید یک باکس با برچسب شرکت خودتون بفروشید و بگید Cisco کیه داداش D: از شوخی که بگذریم جدا تجربه جالبیه و خیلی هم در بالا بردن سواد تاثیر داره... تنها یک نکته عرض کنم و اونم اینه که متاسفانه من مشغله کاری زیادی دارم و احتمالا نمی رسم که زود به زود پست بزنم... برای این که همه مون حسابی کیف کنیم و هیجانمون خالی بشه باید بقیه دوستان هم اینجا پست بزنن و از اطلاعاتشون به بقیه بچه انتقال بدن تا حسابی سرحال بیام همگی... استاد های زیادی توی فروم هستن که می تونیم حسابی از علمشون استفاده کنیم و چیز یاد بگیریم و خوش بگذرونیم RE: فایروال در لینوکس یا IP TABLES - key-one - 05-02-2011 برای شروع وارد مباحث تکنیکی IPTables نمیشیم چون عموما در کلاس هایی که برگزار کردم و در لاگ هایی که بودم عمومیت کاربران از نرم افزار IPTables می ترسن و احساس می کنن که هیچ وقت نمی تونن ازش سر دربیارن و اگه کوچکترین تنظیماتی روش انجام بدن کل اینترنتشون قطع میشه O: درصورتی که IPTables به سادگی و با قدرت زیاد همه چیز رو در اختیار شما گذاشته... ورژن های مختلفی از IPTables وجود داره برای مثال: IPTables این ورژن مختص IPv4 هستش. IP6Tables همونطور که از اسمش پیداست برای IPv6 طراحی شده. arptables برای مدیریت بسته های ARP ebtables برای مدریت فریم های Ethernet بوجود آمده. دستورات IPTables بسته به نوع کاربردشون در جداولی (Table) ذخیره می شن که این جداول خود شامل زنجیره ای ( Chain ) از فرامین هستند. یکی از مهمترین این جداول جدول Filtering هستش که وظیفه اون سیاست گذاری و دادن مجوز برای ورود و خروج بسته های TCP/IP به سیستم است. این جدول شامل سه زنجیر INPUT برای ترافیک ورودی به سیستم ، OUTPUT برای ترافیک خروجی از سیستم و FORWARD برای ترافیک فوروارد شده از سیستم است. از دیگر جداول IPTABLES می شه به موارد زیذ اشاره کرد: ....... table nat table mangling table که بصورت مختصر جدول ....... رو معرفی کردیم و موارد دیگه رو در زمان شروع مباحث اون جدول معرفی می کنیم. به عنوان اولین گام مایل هستیم که اجازه ندیم به هیچ کامپیوتری که سرور ما رو PING کنه یعنی اصطلاحا می خوایم PING رو ببندیم... برای این کار باید به ترافیک پروتکل ICMP اجازه ورود ندهیم... برای این منظور باید به صورت زیر عمل کنیم: با مجوز کاربر ROOT وارد سیستم شوید. فرمان زیر رو اجرا کنید: iptables -A INPUT -p ICMP -j DROP فرمان زیر میگه که در انتهای ( بخاطر استفاده از سویچ A یعنی Append ) زنجیر INPUT ( یعنی ترافیک ورودی) پروتکل ICMP را DROP کن. نوع پروتکل رو با سویچ p- مشخص می کنیم که در جلوی این سویچ می تونیم موارد TCP ، UDP ، ICMP و all رو بنویسیم. برای مشخص کردن نحوه برخورد با ترافیک مورد نظر از سویچ j- استفاده می کنیم به معنی jump به موارد DROP ، LOG ، ACCEPT ، REJECT هستش. در اینجا تفاوتی که بین DROP و REJECT هست و اون هم این هستش که در DROP برای کاربر پیامی مبنی بر حذف بسته اش ارصال نمی شه ولی در REJECT به فرستنده پیام یک بسته عدم قبول ترافیک ارسال میشه. در پست های بعدی در این مورد بیشتر صحبت خواهیم کرد. RE: فایروال در لینوکس یا IP TABLES - key-one - 05-02-2011 در این قسمت با دو سویچ مهم از IPTABLES آشنا می شویم: سویچ s- و d- برای مشخص کردن source و destination در یک بسته TCP/IP به ترتیب از سویچ های معرفی شده استفاده می کنیم. فرض کنید تصمیم داریم که به کاربران شبکه 192.168.1.0/24 اجازه دهیم شبکه 192.168.2.0/24 رو PING کنن برای این کار باید یک rule در chain مربوط به خروج ( OUTPUT ) بسته ها در جدول ....... اضافه کنیم: iptables -A INPUT -p ICMP -s 192.168.1.0/24 -d 192.168.2.0/24 -j ACCEPT به همین سادگی می توانید منبع و مقصد یک بسته TCP/IP رو در فرامین خود مشخص کنید. بدیهی است که برای مشخص کردن یک آدرس خاص نیز می توان به همین روش استفاده کرد. مثلا می خواهیم به ماشین admin شبکه اجازه دهیم که کل شبکه رو PING کنه و بقیه ماشین ها این اجازه رو در شبکه 192.168.1.0/24 نداشته باشن ٍ آدرس ماشین Admin برابر 192.168.1.2 می باشد: برای این منظور از دو عدد rule به صورت زیر استفاده می کنیم: iptables -A INPUT -p ICMP -s 192.168.1.0 -d 192.168.1.0/24 -j ACCEPT iptables -A INPUT -p ICMP -s 192.168.1.0/24 -j REJECT برای پاک کردن محتویات جداول IPTables می توانید از فرمان iptables -F یعنی FLUSH استفاده کنید. برای دیدن محتویات جداول IPTables می توانید از فرمان iptables -L استفاده کنید: خروجی: <LEFT> root@yunix-LT:~# iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT icmp -- 192.168.1.0/24 192.168.2.0/24 ACCEPT icmp -- 192.168.1.0 192.168.1.0/24 REJECT icmp -- 192.168.1.0/24 anywhere reject-with icmp-port-unreachable Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination <LEFT/> در پست بعدی به تحلیل خروجی فرمان iptables -L می پردازیم. RE: فایروال در لینوکس یا IP TABLES - key-one - 05-02-2011 در این پست همانطور که قبلا وعده داده شده بود به بررسی خروجی دستور iptables -L می پزدازیم: در خروجی فرمان فوق ستون هایی به شرح زیر نمایش داده شده است: target prot opt source destination در target ما می تواین هدف پرش (jump) قانون مورد نظر را ببینیم که از بین گزینه های ACCEPT, REJECT,DROP,LOG می تواند باشد. در ستون prot می توانیم پروتکل مورد استفاده در این قانون را مشاهده کنیم یعنی udp,tcp و ... در ستون opt تنظیمات و جزئیات مربوط به هر rule نمایش داده می شود. ستون های source و destination نیز که منبع و مقصد بسته های را مشخص می کند. در iptables ما می تواینم به جای استفاده از سویچ های کوتاه شده نظیر j- از کلمات کامل شده استفاده کنیم مانند jump-- برای j- یا source-- بجای s- بدین ترتیب خوانایی فرمانهای iptables بیشتر شده و بخاطر آوری آنها نیز راحتر می گردد. یک سناریو کوچک : فرض کنید از یک ip آدرس به شماره 11.12.13.14 یکی از سرویس دهنده های شما مورد حمله DOS قرار گرفته و شما مایل به Block کردن ترافیک ارسالی از این آدرس IP هستید برای این کار به صورت زیر عمل کنید: iptables --Append INPUT --protocol all --source 11.12.13.14 --jump DROP تا بدین جا با تنظیمات ساده از iptables آشنا شدیم حال می خواهیم بدانیم که چطور می توان بر روی ترافیک لایه 4 یعنی لایه transport یا به زبان ساده تر کنترل ترافیک پورت ها سیاست امنیتی اعمال کرد: برای این منظور از سویچ dport-- استفاده می شود. مثال1: فرض کنید می خواهیم ترافیک ورودی به شبکه از پورت 5050 را Block کنیم: iptables -A INPUT -p TCP --dport 5050 -j DROP مثال2: در این مثال می خواهیم ترافیک پورت telnet یعنی 23 را برای شبکه 192.168.1.0/24 بسته و به جای آن ترافیک ssh یعنی پورت 22 را باز کنیم: iptables -A OUTPUT -p tcp --dport 23 -s 192.168.1.0/24 -j DROP iptables -A OUTPUT -p tcp --dport 22 -s 192.168.1.0/24 -j ACCEPT لازم به ذکر است که بجای سویچ dport-- می تواین از سویچ destination-port--نیز استفاده کرد. در پست بعدی به نحوه حذف و اضافه کردن قوانین به سطور خاصی از زنجیر ها می پردازیم. RE: فایروال در لینوکس یا IP TABLES - key-one - 05-02-2011 در ادامه مباحث مطرح شده : اولویت بازبینی قوانین مربوط به IPTables بر طبق مکان درج آنها در هر Chain مشخص می شود. به عنوان مثال در دو قانون زیر: iptables -A OUTPUT -p all -j DROP iptables -A OUTPUT -p all -j ACCEPT* دسترسی کل شبکه قطع خواهد شد به دلیل اینکه قانون iptables -A OUTPUT -p all -j DROP بالاتر از قانون دسترسی به کل پروتکل های شبکه است ( قانون دوم ). در سویچ A- هر گاه ما قانون جدیدی بنویسیم در پایین زنجیر مربوطه درج خواهد شده برای اینکه یک قانون را در موقعیت خاصی در زنجیر ها درج کنیم باید از سویچ I-* به معنی INSERT استفاده کنیم. به مثال زیر دقت کنید در این مثال ما می خواهیم قانون خود را در مکان دوم زنجیر مربوط به OUTPUT درج کنیم: iptables -I OUTPUT 2 -p tcp --dport 21 -s 192.168.2.1 -j ACCEPT همانطور که ملاحظه می فرمایید برای مشخص کردن مکان درج Rule* محل درج را به صورت عددی با شروع از یک بعد از اسم Chain ( زنجیر ) می نویسیم در اینجا بعد از زنجیر OUTPUT*محل درج را نوشته ایم. به همین ترتیب برای حذف یک قانون خاص از مجموعه قوانین یک زنجیر از سویچ D- به معنی DELETE استفاده می کنیم. به مثال زیر دقت کنید. در این مثال می خواهیم قانون شماره سوم را از زنجیر INPUT حذف کنیم. iptables -D INPUT 3 دستور فوق باعث حذف قانون شماره سوم زنجیر INPUT می شود. حال به معرفی دو ویژگی مدیریت بسته های TCP/IP*می پردازیم: سویچ sport-- خواهر سویچ dport-- محسوب می شود و برای مشخص کردن شماره *پورت منبع بسته های TCP/IP*است. با یک مثال کاربرد سویچ sport--*را نشان می دهیم: فرض کنید مایل هستیم که ترافیک ورودی به سمت پورت ۴۴۴۴ را مسدود کنیم برای این کار از قانون زیر استفاده می کنیم: iptables -A INPUT -p tcp --sport 4444 -j DROP با استفاده از سویچ های sport-- و dport-- می توانید قوانین خود را بر روی *پروتکل های ارتباطی مورد نظر خود اعمال کنید. |