۱۳۹۰ شهریور ۱۵, سه‌شنبه

گام دوم : بررسی گزینه های دیواره آتش میکروتیک

برای دسترسی به دیواره آتش میکروتیک، با استفاده از وینباکس ( نرم افزار مدیریتی میکروتیک ) به دستگاه وصل شده ، سپس مطابق شکل 1 از منوی اصلی ابتدا IP سپس Firewall را انتخاب کنید.
شکل 1
پنجره Firewall مطابق با شکل 2 باز خواهد شد.
شکل 2
بخش های اصلی دیواره آتش میکروتیک به قرار زیر است :
  • Layer 7 Protocol
  • Address Lists
  • Connections
  • Service Ports
  • Mangle
  • NAT
  • Filter Rules

Layer7-Protocols
Layer7Protocols یک روش جستجوی الگو در جریان داده UDP ,ICMP  و TCP می باشد.
تطبیق دهنده لایه هفتم، 10 بسته اولیه یا 2KB اولیه جریان ارتباطی را جمع آوری کرده و بدنبال الگوی مشخص شده در داده جمع آوری شده می گردد.تطبیق دهنده اگر الگو در داده جمع آوری شده پیدا نشد بررسی بیشتری انجام نخواهد داد.حافظه اختصاص داده شده به این امر خالی شده و پروتکل بعنوان ناشناخته در نظر گرفته می شود.باید به این نکته توجه داشته باشید که مصرف حافظه با افزایش تعداد ارتباطات بطور قابل توجهی بیشتر خواهد شد.
تطبیق دهنده لایه هفتم به دو طرف ارتباط ( ورودی و خروجی ) برای بررسی بسته ها نیاز دارد،بدین منظور باید قانون های لایه هفتم را در زنجیره Forward قرار دهید.اگر قانون در زنجیره Prerouting جدول INPUT قرار گرفت ، باید مشابه همین قانون را در زنجیره Postrouting جدول Output ایجاد کنید،در غیر اینصورت داده جمع آوری شده ممکن است در تبطیق دادن الگو نیتجه نتیجه اشتباهی در بر داشته باشد.

Address Lists
Address Lists یکی از ویژگی های خوب و کاربردی میکروتیک می باشد ،با استفاده از لیست آدرس می توان بصورت دستی و خودکار لیستی از آدرس ها تهیه کرد تا هنگام استفاده نوشتن قوانین از آنها بهره جست.
شکل 3
مزیت لیست آدرس در کمتر شدن و ساده تر شدن قوانین می باشد.بدین صورت که اگر بخواهید برای چندین کاربر دسترسی مشترکی را محدود یا باز کنید، در حالت عادی باید به ازای هر کاربر یک قانون ایجاد کنید ولی در این حالت کافیست ، یک لیست آدرس ایجاد ، آدرس کاربران را به آن اضافه کرده و در قانون ها بجای آدرس مبدا یا مقصد از لیست آدرس مبدا یا مقصد که متعلق به گزینه های پیشرفته می باشد ، استفاده کنید.
با استفاده از لیست آدرس خودکار می توان ، آدرس ها را بصورت  خودکار به لیست اضافه کرد ، برای این منظور کافیست در تب Action قانون، گزینه Add dst to address list  برای ارسال مقصد بسته ها و Add src to address list  برای ارسال مبدا بسته ها به لیست آدرسی که در زیر آن مشخص می شود ، استفاده کرد.
می توانید ابتدا یک قانون برای ایجاد لیست آدرس خودکار ایجاد کرده و سپس عملیات مورد نظر را بر روی لیست آدرس انجام دهید..
لیست آدرس در  آنالیز شبکه هم قابل استفاده است ، برای مثال تهیه  لیستی شامل تمامی کاربرانی که از سرویس SSH استفاده می کنند یا سرورهایی که آنها به آن متصل می شوند را با لیست آدرس خودکار می توان بدست آورد.مم

Connections
از طریق تب Connections می توانید لیست کلیه ارتباط هایی که با میکروتیک برقرار شده است را بر اساس آدرس مبدا و مقصد ، نوع پروتکل و مدت زمان فعال بودن ارتباط مشاهده کنید.
شکل 4

Service Ports
سرویس هایی وجود دارند که در صورت فعال شدن نت بدلیل احتیاج به ارتباط واقعی پایاپای بدرستی کار نخواهند کرد،برای حل این مشکل میکروتیک از خاصیت NAT Traversal برای چند سرویس خاص استفاده می کند.
شکل 5


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

شکل 6
برای اضافه کردن قانون جدید بر روی علامت  “+” کلیک کنید تا پنجره New Manage Rule باز شود. گزینه ها در سه دسته عمومی ، پیشرفته و اضافی تقسیم بندی شده اند.
این گزینه ها در هر سه جدول NAT , Mangle  و Filter یکسان می باشند و فقط در جدول نت P2P وجود ندارد.این گزینه ها را در شکل های 7 ، 8 ، 9 می توانید مشاهده کنید.
شکل 7

نیاز به یادآوری است که دانستن ساختار بسته ها ، یکی از ملزومات تنظیم دیواره آتش می باشد.اکثر گزینه های موجود با دانش نسبت به این ساختار، کاربردی و قابل استفاده خواهند بود.
در دسته عمومی ، گزینه ها شامل نوع زنجیره ، آدرس مبدا و مقصد ، نوع پروتکل ، درگاه مبدا و مقصد ، اینترفیس ورودی یا خروجی ، بسته و ارتباطات قبلا نشانه گذاری شده و وضعیت ارتباط می باشد.
گزینه های دسته پیشرفته در بر گیرنده ، لیست آدرس مبدا یا مقصد ، پروتکل لایه هفتم ، محتوای خاص در آدرس ، آدرس سخت افزاری ، TOS ، TTL و ... می باشد.
شکل 8

دسته اضافی شامل گزینه هایی همچون تنظیم زمان برای فعال شدن قانون بر اساس ساعت و روزهای هفته ، نوع آدرس از قبیل Broadcast , Unicast , Multicast  و Local ، محدود کردن تعداد ارتباطات و ... می باشد.
شکل 9
عملیات های قابل انجام توسط منگل در تب Action شکل 10 لیست شده اند. باید توجه داشت که هر قانون فقط یک عمل در آن واحد قادر است انجام دهد.پس برای عملیات های متفاوت باید قوانین مجزا ایجاد کنید.
شکل 10

عملیات های قابل انجام توسط جدول فیلتر در شکل زیر آورده شده است.
شکل 11

و در آخر لیست عملیات های جدول فیلتر در ادامه قابل مشاهده است.
شکل 12

عملیات های مشترک بین همه جدول ها عبارت اند از :
  • Accept : قبول کردن بسته ، بسته در قانون های بعدی بررسی نمی شود.
  • Add dst to address list : اضافه کردن آدرس مقصد به لیست آدرس مشخص شده
  • Add src to address list : اضافه کردن آدرس  مبدا  به لیست آدرس مشخص شده
  • Jump : پرش به زنجیره مشخص شده
  • Log : فرستادن پیغامی حاوی قانون تطبیق داده شده با فرمت خاص به سیستم ثبت وقایع
  • Passthrough : در نظر نگرفتن قانون و رفتن به قانون بعدی (کاربرد، بیشتر برای آمارگیری )
  • Return : برگردان کنترل به زنجیره در جایی که پرش صورت گرفته

عملیات های غیرمشترک جدول فیلتر متشکل شده از :
  • Drop : رها کردن بسته بدون ارسال پیغام
  • Reject : رها کردن بسته همراه با ارسال یک پیغام ICMP Reject
  • Tarpit : ضبط و نگهداری ارتباطات TCP ( کاربرد در کم کردن اثر حملات DOS )

عملیات های غیرمشترک جدول نت بقرار زیر است :
  • Src-NAT : ترجمه آدرس مبدا بسته به آدرس مشخص شده
  • Dst-NAT : ترجمه آدرس مقصد بسته به آدرس مشخص شده
  • MASQUERADE : ترجمه آدرس مبدا بسته به آدرس عمومی موجود در سیستم
  • Redirect : جایگزین کردن درگاه مقصد بسته با درگاه مشخص شده
  • Same
  • Netmap

عملیات های غیرمشترک جدول منگل عبارت اند از :
  • Change DSCP ( TOS ) :  تغییر مقدار فیلد TOS بسته
  • Change TTL : تغییر مقدار فیلد TTL بسته
  • Change MSS : تغییر مقدار فیلد Maximum Segment Size بسته
  • Clear DF : پاک کردن بیت Don’t Fragment  (کاربرد در تانل IPSEC )
  • Mark Connection : نشانه گذاری ارتباط
  • Mark Packet : نشانه گذاری بسته ( کاربرد در کنترل پهنای باند )
  • Mark Routing : نشانه گذازی مسیر ( کاربرد در عملیات مسیریابی پیشرفته )
  • Set Priority : تغییر مقدار فیلد اولویت در لینک هایی که مقدار اولویت را ارسال می کنند.
  • Strip IPv4 Options

تب Statistics نیز آماری از میزان ترافیک و تعداد بسته هایی که این قانون شامل حال آنها می شود را بصورت عددی و گراف در اختیار ما قرار می هد.از طریق این تب می توان درستی قانون نوشته شده را مورد بررسی قرار داد. شکل 13 گویای این موضوع می باشد.
شکل 13
نگارنده : رضا بهروزی

منبع:
[1] http://wiki.mikrotik.com/wiki

گام اول : اصول دیواره آتش ( فایروال ) میکروتیک

از آنجاییکه که دیواره آتش میکروتیک از کرنل بهینه سازی شده لینوکسی بهمراه مجموعه NetFilter  بهره می گیرد ، پس برای درک بهتر اصول و قوائد نحوه کار دیواره آتش میکروتیک باید اصول Netfilter در لینوکس مورد بررسی قرار گیرد.
دیواره آتش میکروتیک متشکل از مجموعه ای از زنجیره ها و زنجیره ها تشکیل شده از چندین جدول با کاربرد مختلف می باشند.
زنجیره های کلی عبارتند از :
  • زنجیره PreRouting
  • زنجیره Forward
  • زنجیره Input
  • زنجیره Outout
  • زنجیره PostRouting
جدول های کلی شامل :
  • جدول Mangle
  • جدول Nat
  • جدول Filter
نکته :
تعداد زنجیره ها در لینوکس قابل افزایش هستند ولی در میکروتیک این امر امکان پذیر نیست.
هر زمان بسته ای وارد میکروتیک شود ، از این زنجیره ها عبور کرده و در جدول ها مورد پردازش قرار می گیرد.
لازمه ی دانستن چگونگی تنظیمات دیواره آتش میکروتیک داشتن درک خوب نسبت به مراحل گذر بسته ها از زنجیره ها و جدول های مختلف می باشد.
مراحل گذر بسته در شکل زیرآورده شده است.

شکل یک

سوال مهم که در اینجا مطرح می شود اینست که بسته ها چگونه و از چه زنجیره هایی عبور می کنند؟
در هنگام بررسی زنجیره ها می بایست به این نکته توجه داشته باشید که یک بسته از همه ی زنجیره ها عبور نمی کند و با توجه به این که بسته متعلق به خود سیستم می باشد یا سیستم دیگری ، مراحل عبور از زنجیره ها متفاوت می باشد.
همانطور که در شکل مشخص شده است ، بلافاصله بعد از اینکه بسته ای به میکروتیک برسد ، فارغ از اینکه متعلق به کجاست و به کجا می رود ، ابتدا وارد زنجیره Prerouting   می شود.بعد از این وارد مرحله مسیریابی شده و مقصد بعدی بسته و جهت حرکت بسته مشخص خواهد شد.
  • اگر بسته متعلق به سیستم دیگری باشد وارد زنجیره Forward شده وسپس زنجیره Postrouting را طی می کند.
  • اگر بسته متعلق به خود میکروتیک باشد ابتدا وارد زنجیره Input شده و پردازش های داخلی بر روی آن صورت می گیرد.
  • اگر آغازگر بسته ای خود میکروتیک باشد ابتدا وارد زنجیره Output شده و سپس زنجیره Postrouting را طی می کند.
شکل 2
اشتباه رایج اکثر افراد در این است که تصور می کنند زنجیره Input و Output  بر روی بسته هایی که متعلق به میکروتیک نیست نیز اثرگذار است در حالیکه اگر به شکل 1 به دقت نگاه شود ،متوجه خواهید شد که برای بسته های عبوری، این دو زنجیره پردازشی صورت نخواهند داد.
در شکل 2 مسیرهای مختلف توضیح داده شده در بالا با رنگ های متفاوت آورده شده است.
  • کاربرد جدول ها در زنجیره ها
قبل از بررسی عملکرد جدول در زنجیره ها نیاز است که ساختار بسته ها را بخوبی بشناسید.مهمترین بخش بسته هدر می باشد که ساختار آن در شکل  3 آورده شده است.
هدر در ابتدای بسته قرار  می گیرد و شامل فیلدهایی می باشد که اطلاعات مربوط به بسته مانند آدرس مبدا  و مقصد ، درگاه مبدا و مقصد و ... در آن قرار می گیرد.در واقع مسیریابها ،سوییچ ها و دیگر دستگاه ها با بررسی هدر بسته ها به اطلاعاتی راجب آنها دست پیدا می کنند و عملیات مورد نیاز را بر روی آنها انجام می دهند.
شکل 3
در زنجیره ها با بررسی آدرس مقصد در فیلد Destination Address زنجیره بعدی مشخص می شود و از فیلد Source Address مشخص کننده اینست که آغاز گر بسته میکروتیک یا سیستم دیگری در شبکه بوده است.


  • جدول Mangle
جدول منگل در تعریف ساده برای دستکاری بسته ها مورد استفاده قرار می گیرد و سه هدف عمده را دنبال می کند :
  1. TOS
  2. TTL
  3. Mark
TOS
از طریق منگل می توان فیلد TOS ( Type of Service ) هدر بسته را تغییر داد. این تنظیم در اکثر روتر ها ، فایروال ها و ... بی تاثیر است مگر اینکه در سیاست های تنظیماتی در مسیریابی ، فیلترینگ ، QOS و ... مورد استفاده قرار گیرد.

TTL
از طریق منگل می توان فیلد TTL ( Time To Live ) در هدر بسته را تغییر داد.فیلد TTL برای این منظور است که بسته های سرگردان بعد از مدتی از بین برند ،بدین ترتیب که بسته از هر روتر ( به اصطلاح HOP ) که عبور می کند ،یکی از مقدار TTL کم می شود تا نهایتا مقدار آن به صفر برسید و بسته از بین برود.
در صورتیکه از TTL استفاده نمی شد ، حلقه هایی با تکرار بی نهایت اتفاق می افتاد که با گسترش سریع این حلقه ها ، به مرور کل شبکه از فعالیت باز می ایستاد.
شکل 4
یکی از کاربردهای تغییر TTL اینست که با تعییر TTL می توان عملیات هایی که در شبکه ما رخ می دهد را تا حدودی مخفی کرد.بعضی خرابکاران از طریق مقدار TTL به نوع سیستم عامل یا دستگاه های موجود در شبکه پی می برند یا سرویس دهندگان اینترنت از طریق TTL می توانند متوجه شوند که آیا سرویس گرفته شده بین چندین سیستم به اشتراک گذاشته شده است یا خیر.

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


  • جدول NATَ
جدول NAT ( Network Address Translation ) فقط برای ترجمه آدرس در بسته های مختلف مورد استفاده قرار می گیرد.ترجمه آدرس هم می تواند بر روی آدرس مبدا صورت پذیرد و هم بر روی آدرس مقصد.

سه عملیات اصلی جدول NAT  عبارت اند از :
  1. DNAT
  2. SNAT
  3. MASQUERADE

DNAT
عملیات DNAT ( Destination Netowrk Address Translation ) برای ترجمه آدرس مقصد بسته استفاده می شود.بیشترین کاربرد DNAT در محیط های DMZ می باشد.
فرض کنید شبکه ای مطابق  شکل 5 داشته باشید :
شکل 5
کاربری از طریق اینترنت می خواهد وبسایت شرکت واقع در شبکه داخلی با آدرس 10.1.10.100 را مشاهده کند ، ولی این آدرس خصوصی است و از طریق اینترنت قابل دسترسی نیست.
راه حل این است که  به کاربر، آدرس عمومی شبکه یعنی 200.150.10.3 که از اینترنت در دسترس است را داده و بر روی میکروتیک بوسیله DNAT آدرس مقصد یعنی 200.150.10.3 را به 10.1.10.100 ترجمه کرده تا وبسایت قابل مشاهده گردد.

SNAT
عملیات SNAT ( Source Network Address Translation )  بر خلاف DNAT برای ترجمه آدرس صورت مورد استفاده قرار می گیرد.زمانیکه سیستمی در شبکه داخلی بخواهد به منابع مختلف موجود در اینترنت از قبیل صفحات وب ، پست الکترونیکی ، سرورهای انتقال فایل و ... دسترسی داشته باشد ، باید از یک آدرس عمومی برای این منظور استفاده شود ، این در حالیست که سیستم در شبکه داخلی از آدرس خصوصی استفاده می کند ، پس باید آدرس خصوصی به یک آدرس عمومی ترجمه شود که به این عملیات SNAT گویند.
علت استفاده از آدرس خصوصی در شبکه ها معمولا به دلایل امنیتی یا کمبود آدرس عمومی می باشد.


شکل 6
MASQUERADE
عملیات MASQUERADE دقیقا همانند SNAT می باشد با این تفاوت که برای هر بار فرخوانی عملیات MASQUERADE برای یک بسته ، سیستم بصورت خودکار بدنبال آدرس عمومی که برای ترجمه مورد نیاز است ، می گردد.
پس MASQUERADE بار و عملیات اضافی به سیستم تحمیل می کند ، هر چند امتیاز بزرگی نسبت به SNAT دارد  و آن اینست که با هر بار تغییر آدرس عمومی ، تغییری در عملکرد سیستم به وجود نمی آید.
بعضی از سرویس دهندگان از طریق DHCP ، PPPoE  ، VPN و ... اینترنت در اختیار مشترکان قرار می دهند که با هر قطع و وصل شدن ارتباط و سیستم ، آدرس عمومی تغییر خواهد کرد ، پس ناگریز به استفاده از MASQUERADE خواهید بود.
  • جدول Filter
هدف اصلی در جدول Filter ، فیلترینگ بسته ها بر اساس سیاست های امنیتی تعریف شده در مجموعه می باشد.در جدول فیلتر بسته هایی که اجازه عبور دارند و بسته های غیر مجاز که باید فیلتر شوند تعیین می شود.
امکان فیلتر بسته ها بر اساس آدرس مبدا و مقصد ، درگاه مبدا و مقصد ، زمان عبور بسته ها ، وضعیت ارتباط ، محتوا ، TOS ، TTL، بسته های نشانه گذاری شده در منگل  و بسیاری گزینه های دیگر وجود دارد.
حال که اطلاعاتی در ارتباط با زنجیره ها و جدول های تشکیل دهنده آن کسب کردید ، مهترین نکته در استفاده از دیواره آتش میکروتیک ، انتخاب درست زنجیره و جدول مورد استفاده می باشد.این انتخاب با توجه به کارکرد مورد نظر و شناختی که بعد از معرفی زنجیره ، جدول و مسیر عبوری بسته ها بدست آوردید ، حاصل می شود.
توجه داشته باشید که ترتیب قرار گیری جدول ها در زنجیره ها مهم می باشد ، همیشه در یک زنجیره اولیت با جدولی منگل سپس نت و در آخر فیلتر می باشد.


  • انتخاب زنجیره بر اساس جدول ها
Filter
برای فیلتر کردن زنجیره های Input , Output و Forward مورد استفاده قرار می گیرد.
اگر مبدا و مقصد بسته سیستم دیگری جز میکروتیک می باشد از زنجیره Forward استفاده کنید.
اگر مبدا بسته میکروتیک و مقصد سیستم دیگری باشد از زنجیره Output استفاده کنید.
اگر مبدا بسته سیستم دیگر و مقصد میکروتیک باشد از زنجیره Input استفاده کنید.

Nat
اگر می خواهید عملیات SNAT یا MASQUERADE را بکار بگیرید ، از زنجیره POSTROUTING استفاده کنید.
اگر می خواهید عملیات DNAT را بکار بگیرید ، از زنجیره PREROUTING استفاده کنید.

نکته:
در میکروتیک زنجیره Postrouting به SNAT و زنجیره Prerouting به DNAT تغییر نام یافته است.

Mangle
انتخاب زنجیره بر اساس جدول منگل مشکل تر از بقیه جدول ها می باشد و کاملا وابسته به کارکرد بسته ، دیگر قوانین تنظیم شده و ... دارد.این عدم قطعیت از آنجا ناشی می شود که جدول منگل در واقع یاری رسان دیگر جدول ها یعنی NAT و بخصوص Filter می باشد و بدون توجه به تنظیمات آنها نمی توان از منگل استفاده کرد.
در صورتیکه می خواهید بسته را قبل از مسیریابی دستکاری کنید باید از زنجیره Prerouting استفاده کنید.

همانطور که ترتیب جدول ها در زنجیره مهم می باشد ، در هنگام نوشتن قوانین باید به  اولویت زنجیره ها که در شکل 1-2 بر اساس محل عبور بسته مشخص شده است ، نیز توجه کافی داشت.
اگر اولویت قرارگیری و بررسی جدول ها و زنجیره ها مورد توجه قرار نگیرد ، احتمال آنکه قوانین نوشته شده بدرستی کار نکنند و تداخل ایجاد شود ، وجود خواهد داشت.
فرض کنید بسته ای را در زنجیره Forward فیلتر کرده اید ، پس نشانه گذاری یا ترجمه آدرس آن در زنجیره Postrouting سودی نخواهد داشت.
نگارنده : رضا بهروزی
منابع:
[1] Gheorghe, L , Designing and Implementing Linux Firewalls and QoS using netfilter, iproute2, NAT, and L7-filter , PACKT Publishing, 2006
[2] Henmi, A, Lucas, M, Singh, A, Cantrell, C, Firewall Policies and VPN Configurations, Syngress, 2006