موضوع:
دیوار آتش مبتنی بر سیستم عامل لینوکس
استاد راهنما:
نگارش:
پیشگفتار:
این قابلیت که بتوان یک کامپیوتر را در هر کجا به کامپیوتری دیگر در جایی دیگر متصل کرد، به منزله یک سکه دو رو است؛ برای اشخاصی که در منزل هستند گردش در اینترنت بسیار لذت بخش است در حالی که برای مدیران امنیت در سازمان ها، یک کابوس وحشتناک به حساب میآید.
"دیوار آتش" پیاده سازی مدرنی از روش قدیمی حصارهای امنیتی است: خندقی عمیق دور تا دور قلعه حفر می کردند. این الگو همه را مجبور می کند تا برای ورود یا خروج از قلعه، از یک پل متحرک و واحد بگذرند و بتوان همه را توسط پلیس حراست بازرسی کرد. در دنیای شبکه های کامپیوتری، همین راهکار ممکن خواهد بود: یک سازمان میتواند هر تعداد شبکه محلی داشته باشد که به صورت دلخواه به هم متصل شده اند، اما تمام ترافیک ورودی یا خروجی سازمان صرفاً از طریق یک پل متحرک (همان دیوار آتش) میسر است.
مطالب این پایان نامه در دو فصل تنظیم شده است. فصل اول به معرفی دیوارهای آتش می پردازد. در این فصل، مطالبی از قبیل اثرات مثبت و منفی دیوار آتش، تواناییها و ناتواناییهای آن، نحوه عملکرد دیوارهای آتش، انواع دیوار آتش، معماری های دیوار آتش و نحوه انتخاب، پیاده سازی و آزمایش یک دیوار آتش بررسی میشوند. این فصل، یک دید جامع در مورد نحوه انتخاب دیوار آتش منطبق با سیاست امنیتی سازمان میدهد. فصل دوم به پیاده سازی نرم افزاری یک دیوار آتش فیلتر کننده بسته با استفاده از ابزار ارائه شده در سیستم عامل لینوکس، یعنی iptables می پردازد. در این فصل، مطالبی از قبیل نحوه پیکربندی سیستم مبتنی بر لینوکس به عنوان یک مسیریاب، جداول و زنجیرها، قوانین و تطبیق ها و اهداف، پیکربندی iptables، مشخصات فیلترسازی، تعمیم ها، مشخصات هدف، ترکیب NAT با فیلترسازی بسته و نحوه ذخیره و بازیابی دستورات iptables بررسی میشوند. این فصل، نحوه نوشتن قوانین دیوار آتش فیلتر کننده بسته را به منظور کنترل مناسب ترافیک ورودی یا خروجی توضیح میدهد.
فهرست مطالب
فهرست مطالب 3
فهرست شکل ها 9
فهرست جدول ها 11
چکیده (فارسی) 12
فصل اول: دیوارهای آتش شبکه 13
1-1 : مقدمه 14
1-2 : یک دیوار آتش چیست؟ 15
1-3 : دیوارهای آتش چه کاری انجام می دهند؟ 16
1-3-1 : اثرات مثبت 16
1-3-2 : اثرات منفی 17
1-4 : دیوارهای آتش، چه کارهایی را نمی توانند انجام دهند؟ 18
1-5 : چگونه دیوارهای آتش عمل می کنند؟ 20
1-6 : انواع دیوارهای آتش 21
1-6-1 : فیلتر کردن بسته 22
1-6-1-1 : نقاط قوت 24
1-6-1-2 : نقاط ضعف 25
1-6-2 : بازرسی هوشمند بسته 28
1-6-2-1 : نقاط قوت 31
1-6-2-2 : نقاط ضعف 32
1-6-3 : دروازه برنامه های کاربردی و پراکسیها 32
1-6-3-1 : نقاط قوت 35
1-6-3-2 : نقاط ضعف 36
1-6-4 : پراکسیهای قابل تطبیق 38
1-6-5 : دروازه سطح مداری 39
1-6-6 : وانمود کننده ها 40
1-6-6-1 : ترجمه آدرس شبکه 40
1-6-6-2 : دیوارهای آتش شخصی 42
1-7 : جنبه های مهم دیوارهای آتش کارآمد 42
1-8 : معماری دیوار آتش 43
1-8-1 : مسیریاب فیلترکننده بسته 43
1-8-2 : میزبان غربال شده یا میزبان سنگر 44
1-8-3 : دروازه دو خانه ای 45
1-8-4 : زیر شبکه غربال شده یا منطقه غیرنظامی 46
1-8-5 : دستگاه دیوار آتش 46
1-9 : انتخاب و پیاده سازی یک راه حل دیوار آتش 48
1-9-1 : آیا شما نیاز به یک دیوار آتش دارید؟ 48
1-9-2 : دیوار آتش، چه چیزی را باید کنترل یا محافظت کند؟ 49
1-9-3 : یک دیوار آتش، چه تاثیری روی سازمان، شبکه و کاربران
خواهد گذاشت؟ 50
1-10 : سیاست امنیتی 51
1-10-1 : موضوعات اجرایی 52
1-10-2 : موضوعات فنی 53
1-11 : نیازهای پیاده سازی 54
1-11-1 : نیازهای فنی 54
1-11-2 : معماری 54
1-12 : تصمیم گیری 55
1-13 : پیاده سازی و آزمایش 56
1-13-1 : آزمایش، آزمایش، آزمایش! 57
1-14 : خلاصه 58
فصل دوم: پیاده سازی دیوار آتش با استفاده از iptables 60
2-1 : مقدمه 61
2-2 : واژگان علمی مربوط به فیلترسازی بسته 62
2-3 : انتخاب یک ماشین برای دیوار آتش مبتنی بر لینوکس 65
2-4 : به کار بردن IP Forwarding و Masquerading 65
2-5 : حسابداری بسته 70
2-6 : جداول و زنجیرها در یک دیوار آتش مبتنی بر لینوکس 70
2-7 : قوانین 74
2-8 : تطبیق ها 75
2-9 : اهداف 75
2-10 : پیکربندی iptables 76
2-11 : استفاده از iptables 77
2-11-1 : مشخصات فیلترسازی 78
2-11-1-1 : تعیین نمودن آدرس IP مبدا و مقصد 78
2-11-1-2 : تعیین نمودن معکوس 79
2-11-1-3 : تعیین نمودن پروتکل 79
2-11-1-4 : تعیین نمودن یک رابط 79
2-11-1-5 : تعیین نمودن قطعه ها 80
2-11-2 : تعمیم هایی برای iptables (تطبیق های جدید) 82
2-11-2-1 : تعمیم های TCP 82
2-11-2-2 : تعمیم های UDP 86
2-11-2-3 : تعمیم های ICMP 86
2-11-2-4 : تعمیم های تطبیق دیگر 87
2-11-3 : مشخصات هدف 92
2-11-3-1 : زنجیرهای تعریف شده توسط کاربر 92
2-11-3-2 : هدف های تعمیمی 92
2-11-4 : عملیات روی یک زنجیر کامل 94
2-11-4-1 : ایجاد یک زنجیر جدید 94
2-11-4-2 : حذف یک زنجیر 94
2-11-4-3 : خالی کردن یک زنجیر 95
2-11-4-4 : فهرست گیری از یک زنجیر 95
2-11-4-5 : صفر کردن شمارنده ها 95
2-11-4-6 : تنظیم نمودن سیاست 95
2-11-4-7 : تغییر دادن نام یک زنجیر 96
2-12 : ترکیب NAT با فیلترسازی بسته 96
2-12-1 : ترجمه آدرس شبکه 96
2-12-2 : NAT مبدا و Masquerading 98
2-12-3 : NAT مقصد 99
2-13 : ذخیره نمودن و برگرداندن قوانین 101
2-14 : خلاصه 102
نتیجه گیری 105
پیشنهادات 105
فهرست شکل ها
فصل اول
شکل 1-1 : نمایش دیوار آتش شبکه 15
شکل 1-2 : مدل OSI 22
شکل 1-3 : دیوار آتش از نوع فیلترکننده بسته 23
شکل 1-4 : لایه های OSI در فیلتر کردن بسته 23
شکل 1-5 : لایه های OSI در بازرسی هوشمند بسته 28
شکل 1-6 : دیوار آتش از نوع بازرسی هوشمند بسته 30
شکل 1-7 : لایه مدل OSI در دروازه برنامه کاربردی 33
شکل 1-8 : دیوار آتش از نوع دروازه برنامه کاربردی 34
شکل 1-9 : مسیریاب فیلتر کننده بسته 44
شکل 1-10 : دیوار آتش میزبان غربال شده یا میزبان سنگر 45
شکل 1-11 : دروازه دو خانه ای 46
شکل 1-12 : زیر شبکه غربال شده یا منطقه غیرنظامی 46
شکل 1-13 : دستگاه دیوار آتش 47
فصل دوم
شکل 2-1 : یک سیستم مبتنی بر لینوکس که به عنوان یک مسیریاب به
جلو برنده پیکربندی شده است. 67
شکل 2-2 : تغییر شکل شبکه 10.1.2.0 به عنوان آدرس 66.1.5.1 IP 69
شکل 2-3 : مسیر حرکت بسته شبکه برای filtering 72
شکل 2-4 : مسیر حرکت بسته شبکه برای Nat 73
شکل 2-5 : مسیر حرکت بسته شبکه برای mangling 73
فهرست جدول ها
فصل اول
فصل دوم
جدول 2-1 : جداول و زنجیرهای پیش فرض 71
جدول 2-2 : توصیف زنجیرهای پیش فرض 71
جدول 2-3 : هدف های پیش فرض 76
جدول 2-4 : حالت های ردیابی ارتباط 91
جدول 2-5 : سطوح ثبت وقایع 93
جدول 2-6 : ماجول های کمکی NAT 97
چکیده:
تامین امنیت شبکه، بخش حساسی از وظایف هر مدیر شبکه محسوب میشود. از آنجاییکه ممکن است محافظت های متفاوتی موردنیاز باشد، لذا مکانیزم های گوناگونی هم برای تامین امنیت در شبکه وجود دارد. یکی از این مکانیزم ها استفاده از دیوار آتش میباشد. مدیر شبکه باید درک بالایی از انواع دیوار آتش، نقاط قوت و ضعف هر نوع، حملات تهدید کننده هر نوع، معماری های دیوار آتش، تاثیرات آن بر شبکه و کاربران، سیاست امنیتی سازمان و همچنین نیازهای فنی پیاده سازی داشته باشد تا بتواند راه حل مناسب را انتخاب و به درستی پیاده سازی نماید و سپس آنرا مورد آزمایش قرار دهد. در همین راستا، سیستم عامل "Linux" برای پیاده سازی نرم افزاری دیوار آتش فیلتر کننده بسته، ابزاری را به نام "iptables" در اختیار کاربر قرار میدهد تا با استفاده از دستورات این ابزار بتواند قوانین و فیلترهای موردنیاز را برای کنترل مطلوب دسترسی، خواه از داخل شبکه به خارج و خواه بالعکس، پیکربندی نماید.
فصل اول
دیوارهای آتش شبکه
فصل اول: دیوارهای آتش شبکه
1-1 : مقدمه
امروزه با وجود طیف گسترده راه حل های دیوار آتش، انتخاب و پیاده سازی دیوار آتش به فرایندی زمان گیر مبدل شده است. روش جذاب در راه حل های دیوار آتشی که به بازار عرضه شده اند، به همراه ادعاهای نصب و مدیریت آسان، ممکن است سازمانها را به سمتی سوق دهد که بدون آنکه به طور کامل نیاز به راه حل دیوار آتش را بررسی نمایند، تصمیم به پیاده سازی آن بگیرند. با اتخاذ تصمیمات عجولانه، سازمانها اثراتی را که یک راه حل دیوار آتش بر شبکه موجود و کاربران آنها می گذارد، نادیده می گیرند.
چه متغیرهایی باید در هنگام تعیین نیاز به یک دیوار آتش، مورد توجه قرار گیرند؟ سازمانهایی که اتصال به اینترنت یا هر شبکه نامطمئن دیگر دارند، ممکن است نیاز به پیاده سازی یک راه حل دیوار آتش داشته باشند. به هر حال، این سازمانها باید اثراتی را که یک دیوار آتش بر سرویسهای شبکه، منابع و کاربران آن خواهد گذاشت مورد توجه قرار دهند و نحوه قرارگیری دیوار آتش براساس نیازهای تجاری خاص آنها و زیربنای شبکه را در نظر بگیرند. سازمانها باید نیازهای ویژه خود را مشخص کنند، زیربنای فعلی شبکه خود را تجزیه و تحلیل نمایند و از اطلاعات بدست آمده به عنوان مبنایی برای تصمیمات خود استفاده کنند. در برخی موارد، ممکن است بعد از بررسی تمام متغیرها، دریابند که یک راه حل دیوار آتش، ضروری نیست و یا پیاده سازی آن غیرعملی است.
1-2 : یک دیوار آتش چیست؟
دیوارهای آتش شبکه، سدی مابین شبکه ها به وجود می آورند که از ترافیک (traffic) ناخواسته یا بدون مجوز (unauthorized) جلوگیری می کند.
تعریف: دیوار آتش شبکه، سیستم یا گروهی از سیستمهاست که با استفاده از قوانین (rules) یا فیلترهای از پیش پیکربندی شده، دسترسی مابین دوشبکه- یک شبکه مطمئن (Trusted) و یک شبکه نامطمئن (Untrusted)- را کنترل می کند.
شکل 1-1: نمایش دیوار آتش شبکه
ممکن است دیوارهای آتش، فقط از یک مسیریاب (router)، چندین مسیریاب، یک سیستم میزبان یا چندین میزبان اجرا کننده نرم افزار دیوار آتش، دستگاههای سخت افزاری مخصوصی که برای تامین سرویسهای دیوار آتش طراحی شده اند، یا هر ترکیبی از آنها تشکیل شده باشد. این موارد از نظر طراحی، کاربردی بودن، معماری و هزینه متغیر هستند. بنابراین، برای پیاده سازی موفق یک راه حل دیوار آتش در یک سازمان، مهم است که دریابیم که هر راه حل دیوار آتشی چه کاری می تواند انجام دهد و چه کاری نمی تواند انجام دهد. راه حلهای دیوار آتش می توانند هم اثرات مثبت بر شبکه بگذارند و هم اثرات منفی.
1-3 : دیوارهای آتش چه کاری انجام می دهند؟
1-3-1 : اثرات مثبت
اگر دیوارهای آتش، به درستی پیاده سازی شوند می توانند دسترسی به شبکه و از شبکه را کنترل کنند. دیوارهای آتش طوری می توانند پیکربندی شوند که از دسترسی کابران بیرونی یا بدون مجوز به شبکه ها و سرویسهای داخلی یا محرمانه جلوگیری نمایند؛ و نیز می توانند طوری پیکربندی شوند که از دسترسی کاربران داخلی به شبکه ها و سرویس های بیرونی یا بدون مجوز جلوگیری کنند. برخی از دیوارهای آتش می توانند داخل یک سازمان طوری قرار بگیرند که دسترسی به سرویسها را مابین بخشها و دیگر شبکه های محرمانه کنترل کنند.
* تایید اعتبار کاربر (User authentication): دیوارهای آتش می توانند طوری پیکربندی شوند که نیاز به تایید اعتبار کاربر داشته باشند. این مورد به مدیران شبکه امکان می دهد که دسترسی کاربران خاصی را به سرویسها و منابع خاصی کنترل نمایند. تایید اعتبار، این امکان را نیز به مدیران شبکه می دهد که فعالیت معینی از کاربر و تلاشهای بدون مجوز برای دستیابی به شبکه ها و سرویسهای محافظت شده را دنبال کنند.
* نظارت و ثبت وقایع (Auditing and logging): دیوارهای آتش می توانند امکانات نظارت و ثبت را در اختیارمان قرار دهند. با پیکربندی دیوار آتش جهت نظارت و ثبت فعالیت، می توان اطلاعات را نگهداری نمود و در آینده مورد تجزیه و تحلیل قرار داد. دیوارهای آتش می توانند بر اساس اطلاعاتی که جمع آوری کرده اند، آمارهایی تولید نمایند. این آمارها می تواند در اتخاذ تصمیمات خط مشی (Policy) که مربوط به دستیابی به شبکه و سودمندی آن است، مفید واقع شود.
* امنیت (Security): برخی از دیوارهای آتش به گونه ای عمل می کنند که می توانند شبکه های مطمئن یا داخلی را از شبکه های نامطمئن یا بیرونی پنهان کنند. این لایه امنیتی اضافه می تواند از سرویس ها در مقابل پویش های ناخواسته محافظت نماید.
دیوارهای آتش همچنین می توانند یک نقطه مرکزی برای مدیریت امنیت ایجاد کنند. این مسئله، زمانی که منابع انسانی و مالی یک سازمان محدود باشد می تواند بسیار مفید واقع گردد.
1-3-2 : اثرات منفی
اگرچه راه حلهای دیوار آتش مزایای بسیاری دارند، اما ممکن است برخی اثرات منفی نیز بر جای بگذارند.
* گلوگاههای ترافیکی (Traffic bottlenecks): در بعضی از شبکه ها، دیوارهای آتش، یک گلوگاه ترافیکی ایجاد می کنند. با عبور دادن تمام ترافیک شبکه از دیوار آتش، امکان متراکم شدن شبکه بیشتر می شود.
* نقطه شکست واحد (Single point of failure): دیوارهای آتش می توانند یک نقطه شکست واحد ایجاد نمایند. در اغلب پیکربندیهایی که دیوارهای آتش تنها ارتباط مابین شبکه ها هستند، اگر به درستی پیکربندی نشوند و یا در دسترس نباشند، هیچ ترافیکی را از خود عبور نخواهند داد.
* محروم سازی کاربر (User frustration): دیوارهای آتش ممکن است کاربران را ناامید سازند زمانیکه منابع شبکه یا سرویسهای آن مسدود باشند یا در دسترس کاربران نباشند و یا برای دستیابی نیاز به تایید اعتبار باشد و کاربران کلمه عبورشان را فراموش کرده باشند.
* مسئولیتهای مدیریتی بیشتر: اغلب یک دیوار آتش، مسئولیتهای مدیریتی شبکه را بیشتر می کند و عیب یابی شبکه را پیچیده تر می سازد. اگر مدیران شبکه زمانی را برای پاسخ به هر اخطار و بررسی ثبت وقایع به طوری منظم صرف نکنند، هرگز متوجه نخواهند شد که آیا دیوار آتش وظیفه خود را به درستی انجام می دهد یا نه. تمام دیوارهای آتش نیاز به پشتیبانی اجرایی مداوم، نگهداری کلی، به روز رسانیهای نرم افزاری، وصله های امنیتی (patch) و اداره مناسب حوادث دارند که بر مسئولیتهای مدیران شبکه می افزاید.
1-4 : دیوارهای آتش، چه کارهایی را نمی توانند انجام دهند؟
رایج ترین تصور غلط در مورد دیوارهای آتش، این است که دیوارهای آتش، امنیت شبکه شما را تضمین می کنند. یک دیوار آتش نمی تواند و تضمین نمی کند که شبکه شما صددرصد امن است. برای حفاظت بیشتر، یک دیوار آتش بهتر است به همراه دیگر معیارهای امنیت استفاده شود. حتی در آن صورت نیز، هیچ تضمینی وجود ندارد که شبکه، صددرصد امن باشد.
دیوارهای آتش نمی توانند هیچ حفاظتی در مقابل حملات درونی انجام دهند. برای آنکه یک دیوار آتش، موثر واقع شود، باید تمام ترافیک از آن عبور کند. معمولاً کاربران شبکه مطمئن یا درونی، بدون نیاز به عبور از دیوار آتش، به سرویسهای حفاظت شده دسترسی دارند. امروزه درصد زیادی از حوادث امنیتی، از درون شبکه مطمئن ناشی می شوند.
دیوارهای آتش نمی توانند در مقابل دسترسی ناخواسته یا بدون مجوز از طریق درهای پشتی (back doors) شبکه شما، محافظت کنند. معمولاً درهای پشتی زمانی ایجاد می شوند که یک کاربر درونی از طریق یک مودم غیرمجاز با بیرون تماس می گیرد و با یک شبکه نامطمئن، ارتباط برقرار می کند.
در بیشتر پیاده سازیها، دیوارهای آتش نمی توانند حفاظتی در مقابل ویروسها یا کد مخرب (malicious code) انجام دهند. از آنجاییکه بیشتر دیوارهای آتش، فیلد بارکاری (payload) بسته را بررسی نمی کنند، از تهدیدهایی که ممکن است در بسته ها باشد، آگاه نیستند.
سرانجام، هیچ دیوارآتشی نمی تواند در مقابل خط مشهای ناکافی یا بدمدیریت شده، محافظتی انجام دهد. اگر یک کلمه عبور، اعلان شود شبکه شما در خطر است. برخی از نفوذهای امنیتی به این دلیل رخ می دهند که کاربران به طور غیرعمدی، کلمه عبورشان را اعلان می کنند یا اینکه ایستگاه کاری خود را به صورت باز رها می کنند.
1-5 : چگونه دیوارهای آتش عمل می کنند؟
اکنون که یک دیوار آتش را تعریف نمودیم و به تواناییها و ناتواناییهای آن اشاره نمودیم، نوبت به بررسی نحوه عملکرد دیوارهای آتش فرا می رسد.
دیوارهای آتش شبکه برای اتخاذ تصمیم در مورد کنترل دسترسی از دو نگرش منطق طراحی امنیتی استفاده می کنند. این دو نگرش، منطق متضادی دارند اما هدف هر دو، کنترل دسترسی است. این دو نگرش عبارتند از:
* هر چیزی که به طور مشخص اجازه داده نشود، رد می شود.
* هر چیزی که به طور مشخص رد نشود، اجازه داده می شود.
هر نگرش طرفدارانی دارد، اما نگرشی که اغلب توصیه می شود، این است که هر چیزی که به طور مشخص اجازه داده نشود، رد می شود. این نگرش، در مقابل دسترسی ناخواسته یا غیرمجاز، حالتی آینده نگر (proactive) پیش می گیرد. این نگرش، براساس این اصل کار می کند که کل دسترسی، تا زمانیکه یک قانون یا فیلتر پیکربندی شود که به طور مشخص اجازه دسترسی دهد، رد می شود. این نگرش، به طور پیش فرض امنیت بیشتری را تامین می کند، اما می تواند خیلی محدود کننده محسوب شود. در بسیاری حالات، ترافیک قانونی تا زمانیکه متغیرهای صحیح تعیین شود و قوانین یا فیلترهایی پیکربندی شوند و پیاده سازی شوند که اجازه عبور را به ترافیک بدهند، منتظر می ماند.
منطق طراحی متضاد، یعنی هر چیزیکه به طور مشخص رد نشود، اجازه داده می شود، در مقابل دسترسی ناخواسته یا غیرمجاز، حالتی واکنشی (reactive) از خود نشان می دهد. این نگرش، براساس این اصل کار می کند که کل دسترسی، تا زمانیکه یک قانون یا فیلتر پیکربندی شود که به طور مشخص آنرا رد کند، اجازه داده می شود. این نگرش، امنیت کمتری را تامین می کند اما انعطاف پذیرتر محسوب می شود زیرا ترافیک قانونی، دیگر منتظر نمی ماند.
1-6 : انواع دیوارهای آتش
منطق طراحی امنیت یک دیوار آتش، با استفاده از برخی روشهای غربال کردن بسته (packet screening) اجرا می شود. هر روش از اطلاعات لایه های متفاوتی از مدل OSI استفاده می کند. اساس این روشها بر مبنای این است که چگونه دیوارهای آتش از هر دو مورد قوانین و فیلترهای از پیش پیکربندی شده و دیگری اطلاعات جمع آوری شده از بسته ها و نشستها (sessions) برای تعیین اجازه عبور یا رد ترافیک استفاده می کنند. سه روش معروف عبارتند از: فیلتر کردن بسته (packet filtering)، بازرسی هوشمند بسته (stateful packet inspection) و دروازه برنامه های کاربردی و پراکسیها
(application gateways/proxies). روشهای ترکیبی غربال کردن بسته، اغلب دو یا تعداد بیشتری از این روشها را ترکیب می کنند تا امنیت و کارایی بیشتری حاصل شود.
شکل 1-2 : مدل OSI
1-6-1 : فیلتر کردن بسته (Packet Filtering)
این روش، ساده ترین روش غربال کردن بسته می باشد. یک دیوار آتش از نوع فیلترکننده بسته دقیقاً همان کاری را انجام می دهد که از نام آن برمی آید. رایجترین پیاده سازی آن، روی یک مسیریاب یا بر روی دروازه دو خانه ای (dual-homed gateway) انجام می شود. فرایند فیلتر کردن بسته به روش زیر صورت می گیرد: هنگامی که هر بسته از دیوار آتش عبور می کند، بررسی می شود و اطلاعاتی که درون سرآیند (header) آن قرار دارد با یک مجموعه قوانین یا فیلترهای از پیش پیکربندی شده مقایسه می شود. براساس نتایج مقایسه، یک تصمیم اجازه ورود (allow) یا رد کردن (deny) گرفته می شود. هر بسته به طور جداگانه و بدون توجه به دیگر بسته هایی که قسمتی از همان ارتباط هستند، بررسی می شود.
شکل 1-3 : دیوار آتش از نوع فیلترکننده بسته
معمولاً یک دیوار آتش از نوع فیلتر کننده بسته، یک دیوار آتش لایه شبکه نامیده می شود زیرا عمل فیلتر کردن به طور عمده در لایه شبکه (لایه سوم) یا لایه انتقال (لایه چهارم) از مدل مرجع OSI انجام می شود.
شکل 1-4 : لایه های OSI در فیلتر کردن بسته
قوانین یا فیلترهای مربوط به فیلتر کننده بسته می توانند طوری پیکربندی (configure) شوند که براساس یک یا چند مورد از متغیرهای زیر، اجازه ورود یا رد کردن ترافیک را صادر کنند:
* Source IP address (مبدا)
* Destination IP address (مقصد)
* نوع پروتکل (TCP یا UDP)
* Source Port
* Destination Port
لازم به ذکر است که تمام دیوارهای آتش توانایی انجام بعضی شکلهای فیلتر کردن بسته را دارند.
1-6-1-1 : نقاط قوت
فیلتر کردن بسته به طور شاخصی سریعتر از دیگر روشهای غربال کردن بسته عمل می کند. از آنجاییکه فیلتر کردن بسته در لایه های پائین تر مدل OSI انجام می شود، لذا زمان کمتری صرف انجام پردازش روی بسته می شود و اگر به درستی پیاده سازی شود، تاثیر بسیار اندکی بر روی عملکرد (Performance) کلی شبکه بر جای می گذارد.
دیوارهای آتش از نوع فیلتر کننده بسته می توانند به صورت شفاف یا پنهان از دید کاربر (transparent) پیاده سازی شوند. این نوع دیوارهای آتش معمولاً به پیکربندی اضافه ای برای کاربران نیاز ندارند. تنها نشانه ای که ممکن است کاربران از روی آن متوجه شوند که دیوار آتشی وجود دارد، این است که نتوانند به منبع (resource) یا سرویسی که مسدود (block) شده است، دسترسی یابند.
دیوارهای آتش از نوع فیلترکننده بسته، معمولاً گران نیستند. بسیاری از وسایل سخت افزاری و بسته های نرم افزاری، ویژگیهای فیلتر کردن بسته را به عنوان بخشی از خصوصیات استاندارد خود دارا هستند. اگر سازمانی در حال حاضر یک وسیله یا بسته نرم افزاری با قابلیت های فیلتر کردن بسته داشته باشد، علاوه بر عدم نیاز به صرف زمان برای طراحی و پیکربندی قوانین یا فیلترها، دیگر نیازی به هزینه های اضافی هم نخواهد بود.
دیوارهای آتش از نوع فیلتر کننده بسته، معمولاً نسبت به دیگر انواع دیوارهای آتش، بهتر مقیاس (scale) می شوند. این موضوع شاید با این واقعیت توجیه شود که سربار (overhead) ناشی از پردازشی که در دیگر انواع دیوار آتش وجود دارد، در این نوع وجود ندارد.
دیوارهای آتش از نوع فیلتر کننده بسته، مستقل از برنامه کاربردی
(application independent) هستند. تصمیمات، برمبنای اطلاعات درون سر آیند بسته اتخاذ می شود و نه بر مبنای اطلاعات مرتبط با یک برنامه کاربردی خاص.
6-1-1-2 نقاط ضعف:
دیوارهای آتش از نوع فیلتر کننده بسته، اجازه برقراری یک ارتباط مستقیم مابین دو نقطه انتهایی (endpoints) را می دهند. اگرچه این روش غربال کردن بسته، برای اجازه ورود دادن یا رد کردن ترافیک مابین دو شبکه، پیکربندی میشود اما مدل سرویس دهنده/ مشتری (client / server) هرگز نقض نمیشود.
دیوارهای آتش از نوع فیلتر کننده بسته سریع هستند و معمولاً تاثیری بر روی عملکرد شبکه نمی گذارند، اما اغلب یک نگرش همه یا هیچ چیز (all- or- nothing) محسوب می شود. اگر پورتها (ports) باز باشند، برای کل ترافیک عبوری از آن پورت باز هستند و در نتیجه یک حفره امنیتی (hole) در شبکه شما باقی می ماند.
تعریف کردن قوانین و فیلترهای یک دیوار آتش از نوع فیلتر کننده بسته ممکن است به کار پیچیده ای تبدیل شود. مدیر شبکه باید درک خوبی از سرویسها و پروتکلها (protocol) داشته باشد تا بتواند نیازهای امنیتی سازمان را به مجموعه دقیقی از قوانین یا فیلترهای اجازه یا رد ترجمه نماید. در بعضی حالات، ممکن است کار پیکربندی قوانین یا فیلترها آنقدر پیچیده شود که پیاده سازی را غیرممکن سازد. قوانین یا فیلترهای دسترسی طولانی می تواند تاثیر منفی روی عملکرد شبکه بگذارد و بستر خطا را فراهم سازد. هنگامی که تعداد قوانین یا فیلترها افزایش می یابد، مدت زمانی که دیوار آتش صرف اتخاذ تصمیمات مقایسه ای می کند افزایش می یابد و امکان اینکه یک قانون یا فیلتر، نادرست باشد نیز اضافه خواهد شد.
آزمایش صحت قوانین یا فیلترهای دیوار آتش از نوع فیلتر کننده بسته ممکن است دشوار باشد. حتی اگر قوانین یا فیلترها ساده به نظر آیند، بررسی درستی یک قانون از طریق آزمایش می تواند فرایندی زمان گیر باشد. گاهی اوقات نتایج آزمایش می تواند گمراه کننده و غیردقیق باشد.
دیوارهای آتش از نوع فیلترکننده بسته در معرض حملات مشخصی هستند. از آنجاییکه بازرسی بسته، از اطلاعات سرآیند بسته فراتر نمی رود، دچار مشکل کردن این روش غربال سازی بسته آسانتر است و در مقابل حملاتی (attack) که در سطح برنامه های کاربردی صورت می گیرند، نمی تواند حفاظتی انجام دهد. دیوارهای آتش از نوع فیلتر کننده بسته نسبت به سه نوع استثمار (exploit)، مستعد پذیرش هستند. این سه مورد عبارتند از:
* IP spoofing (فریب دادن ماشین ها با آدرسهای IP جعلی)
* Buffer overruns (لبریز شدن بافر)
* ICMP tunneling (ایجاد تونل)
IP spoofing ، یعنی فرستادن داده های شما و وانمود کردن یک آدرس مبدا مورد تایید دیوار آتش. لبریز شدن بافر معمولاً زمانی رخ می دهد که اندازه داده های داخل یک بافر از مقدار تخصیص یافته بیشتر می شود. ایجاد تونل ICMP به یک نفوذگر (hacker) اجازه می دهد که داده های خود را به داخل یک بسته قانونی ICMP اضافه نماید.
دیوارهای آتش از نوع فیلترکننده بسته، تایید اعتبار کاربر را انجام نمی دهند. مجدداً یادآوری می کنم که این روش غربال سازی بسته به اطلاعات موجود در سرآیند بسته نگاه می کند و فقط براساس آن، تصمیم می گیرد.
1-6-2 : بازرسی هوشمند بسته (Stateful Packet Inspection)
بازرسی هوشمند بسته از همان شیوه بنیادی غربال سازی بسته که روش فیلترکننده بسته استفاده می کند، بهره می برد. به علاوه، این روش، اطلاعات سرآیند بسته را از لایه شبکه تا لایه برنامه های کاربردی مدل OSI بررسی می کند تا دریابد که آیا بسته، بخشی از یک ارتباط قانونی (legitimate) است و آیا پروتکل ها مطابق انتظار عمل می کنند یا خیر.
شکل 1-5 : لایه های OSI در بازرسی هوشمند بسته
فرآیند بازرسی هوشمند بسته به شیوه زیر انجام می شود. هنگامی که بسته از دیوار آتش عبور می کند، اطلاعات سرآیند بسته بررسی می شود و داخل یک جدول حالت پویا (dynamic state table) قرار می گیرد. بسته ها با قوانین یا فیلترهای از پیش پیکربندی شده مقایسه می شوند و براساس نتایج مقایسه، تصمیمات اجازه یا رد صادر می شود. سپس از داده های جدول حالت به منظور ارزیابی بسته های بعدی استفاده می شود تا معلوم شود که آیا آنها بخشی از همان ارتباط هستند یا خیر. به طور خلاصه، بازرسی هوشمند بسته برای تعیین اینکه آیا بسته ها اجازه خواهند یافت یا نه، از یک فرآیند دو مرحله ای استفاده می کند. این روش می تواند براساس یک یا چند مورد از متغیرهای زیر، تصمیم بگیرد:
* Source IP address
* Destination IP address
* نوع پروتکل (TCP یا UDP)
* Source Port
* Destination Port
* Connection state (حالت ارتباط)
حالت ارتباط، از اطلاعات جمع آوری شده در بسته های قبلی نتیجه می شود. حالت ارتباط، یک عامل ضروری در اتخاذ تصمیم برای تلاشهای ارتباطی جدید است. بازرسی هوشمند بسته، بسته ها را با قوانین یا فیلترها مقایسه می کند و سپس جدول حالت پویا را بررسی می کند تا تعیین کند که بسته ها بخشی از یک ارتباط برقرار شده معتبر هستند. این روش غربال سازی بسته با داشتن قابلیت به خاطر سپردن وضعیت یک ارتباط، بهتر از روش استاندارد فیلتر کننده بسته در مقابل حملات مجهز می شود.
شکل 1-6 : دیوار آتش از نوع بازرسی هوشمند بسته
راه حلهای بازرسی هوشمند بسته، قابلیتهای تصمیم گیری پیچیده ای را ارائه می دهند، با این حال سریعتر از دیگر روشهای غربال سازی بسته عمل می کنند زیرا به سربار پردازشی اندکی نیاز دارند. تصمیمات اجازه یا رد در لایه های پائین تر مدل OSI گرفته می شوند.
برخی از دیوارهای آتش جدیدتر از نوع بازرسی هوشمند بسته، اطلاعات گسترده تری را راجع به حالت ارتباط نگهداری می کنند. برخی از آنها قادرند بسته ها را هنگام عبور از میان دیوار آتش، مجدداً گردآوری نمایند و پردازشهای دیگری نظیر فیلتر کردن محتوا (content) را انجام دهند.
1-6-2-1 : نقاط قوت
دیوارهای آتش از نوع بازرسی هوشمند بسته، مانند دیوارهای آتش از نوع فیلتر کننده بسته، تاثیر اندکی روی عملکرد شبکه دارند، می توانند به طور پنهان از دید کاربر پیاده سازی شوند و مستقل از برنامه های کاربردی هستند.
دیوارهای آتش از نوع بازرسی هوشمند بسته، امن تر از دیوارهای آتش نوع فیلتر کننده بسته هستند. از آنجاییکه بازرسی هوشمند بسته به طور عمیق تری اطلاعات سرآیند بسته را کاوش می کند تا حالت ارتباط مابین دو نقطه انتهایی را معلوم کند، لذا در مقابل دسترسی ناخواسته یا غیرمجاز بهتر مجهز می شود.
بازرسی هوشمند بسته، آگاهی از پروتکل در لایه برنامه های کاربردی را ممکن می کند. این روش غربال سازی بسته با نگاه عمیق تر به اطلاعات سرآیند بسته می تواند دریابد که آیا پروتکلهای لایه برنامه های کاربردی مطابق انتظار عمل می کنند یا خیر.
دیوارهای آتش از نوع بازرسی هوشمند بسته معمولاً برخی قابلیتهای ثبت فعالیت را دارند. ثبت فعالیت می تواند در شناسایی و دنبال کردن انواع متفاوت ترافیکهایی که از میان دیوار آتش عبور می کنند، کمک نماید.
1-6-2-2 : نقاط ضعف
مانند فیلتر کننده بسته، بازرسی هوشمند بسته نیز مدل سرویس دهنده/ مشتری را نقض نمی کند و بنابراین اجازه برقراری یک ارتباط مستقیم مابین دو نقطه انتهایی را می دهد.
قوانین و فیلترهای این روش غربال سازی بسته ممکن است به قدری پیچیده شوند که مدیریت آنها دشوار شود و منجر به بروز خطا شوند و آزمایش آنها نیز مشکل شود.
علیرغم اشکالات، به طور حتم، بازرسی هوشمند بسته مزیت تامین سطح بالاتری از امنیت را از طریق نگهداری و نظارت بر اطلاعات حالت ارتباط دارا می باشد.
1-6-3 : دروازه برنامه های کاربردی و پراکسیها (Application Gateways / Proxies)
برخی تصور می کنند که یک دروازه برنامه کاربردی/ پراکسی، پیچیده ترین روش غربال سازی بسته است. این نوع دیوار آتش معمولاً روی یک سیستم میزبان امن (host) که با دو رابط شبکه (network interface) پیکربندی شده باشد، پیاده سازی می شود. این نوع دیوار آتش مانند یک میانجی مابین دو نقطه انتهایی عمل می کند. در حقیقت، این روش غربال سازی بسته، مدل سرویس دهنده/ مشتری را به دو ارتباط موردنیاز تجزیه می کند: یکی از مبدا به دروازه / پراکسی و دیگری از دروازه / پراکسی به مقصد. هر نقطه انتهایی فقط از طریق گذشتن از میان دروازه / پراکسی می تواند با نقطه انتهایی دیگر ارتباط برقرار کند.
این نوع دیوار آتش در لایه برنامه های کاربردی مدل OSI عمل می کند. برای آنکه نقاط انتهایی مبدا و مقصد بتوانند با یکدیگر ارتباط برقرار کنند، باید برای هر پروتکل برنامه کاربردی، یک سرویس پراکسی پیاده سازی شود. از آنجاییکه دروازه ها/ پراکسیها تنها نقطه ارتباط مابین دو شبکه هستند، باید به دقت طراحی شوند تا قابل اطمینان باشند. معمولاً زمانیکه یک پراکسی توسعه داده شد، نرم افزار نوشته می شود تا امنیت در حد امکان برقرار شود. نقطه قوت دیگر این روش غربال سازی بسته این است که رابط های سیستم میزبان، بسته ها را به جلو (forward) حرکت می دهد.
شکل 1-7 : لایه مدل OSI در دروازه برنامه کاربردی
یک دیوار آتش از نوع دروازه برنامه کاربردی / پراکسی به شیوه زیر عمل می کند. زمانیکه یک مشتری (client) درخواستی از شبکه نامطمئن صادر می کند، یک ارتباط با دروازه برنامه کاربردی/ پراکسی برقرار می شود. پراکسی (از طریق مقایسه درخواست با قوانین یا فیلترها) تعیین می کند که آیا درخواست، معتبر است یا نه و سپس یک درخواست جدید از طرف مشتری به مقصد می فرستد. با استفاده از این شیوه، هرگز یک ارتباط مستقیم از شبکه مطمئن به شبکه نامطمئن برقرار نمی شود و به نظر می رسد که درخواست از جانب دروازه برنامه کاربردی / پراکسی نشات گرفته است.
درخواست، به طریقه مشابهی پاسخ داده می شود. پاسخ به عقب به سمت دروازه برنامه کاربردی / پراکسی فرستاده می شود تا تعیین شود که معتبر است یا نه و سپس آنرا به مشتری می فرستد. این نوع دیوار آتش، با نقض مدل سرویس دهنده/ مشتری می تواند به طور موثرتری شبکه مطمئن را از شبکه نامطمئن پنهان سازد. مهم است که توجه کنید که دروازه برنامه کاربردی/ پراکسی، در حقیقت، یک درخواست جدید تولید می کند و قبل از فرستادن آن به مقصد، تنها از فرمانهای قابل قبول شناخته شده نسخه برداری می کند.
شکل 1-8 : دیوار آتش از نوع دروازه برنامه کاربردی
برخلاف فیلتر کننده بسته و بازرسی هوشمند بسته، یک دروازه برنامه کاربردی/ پراکسی می تواند تمام جنبه های لایه برنامه های کاربردی را مشاهده کند لذا می تواند بخشهای خاص تری از اطلاعات را جستجو کند. به عنوان نمونه، می تواند تفاوت مابین یک پست الکترونیکی شامل متن و یک پست الکترونیکی شامل یک تصویر گرافیکی را تشخیص دهد یا تفاوت میان یک صفحه وب که در آن از جاوا استفاده شده باشد با یک صفحه وب بدون آن. از یک دیدگاه امنیتی، روش غربالسازی بسته دروازه برنامه کاربردی/ پراکسی، خیلی برتر از دیگر روشهای غربال سازی بسته می باشد. با این حال، استفاده از این شیوه همیشه عملی ترین راه نیست.
1-6-3-1 : نقاط قوت
دروازه برنامه های کاربردی / پراکسیها، اجازه برقراری یک ارتباط مستقیم مابین نقاط انتهایی را نمی دهد. در حقیقت، مدل سرویس دهنده/ مشتری را نقض می کند. در این رابطه، این روش غربال سازی بسته به درستی شبکه های داخلی و خارجی را جدا از یکدیگر نگه می دارد.
دروازه برنامه های کاربردی / پراکسیها، مابین شبکه ها مسیریابی (route) نمی کنند. این امر، شبکه داخلی را جدا از شبکه خارجی نگه می دارد. از آنجاییکه هیچ مسیریابی ای انجام نمی شود، این روش غربال سازی بسته، ذاتاً نوعی از ترجمه آدرس شبکه (NAT) را فراهم می سازد.
دروازه برنامه های کاربردی/ پراکسیها، به مدیر شبکه این امکان را می دهند که کنترل بیشتری روی ترافیک عبوری از میان دیوار آتش داشته باشد. آنها می توانند برنامه های کاربردی معینی یا خصوصیات معینی از یک برنامه کاربردی را اجازه یا رد کنند. بسیاری از متخصصین امنیت اعتقاد دارند که دروازه برنامه های کاربری/ پراکسیها به خاطر همین کنترل طبقه- طبقه (granular)، امن تر هستند.
دروازه برنامه های کاربردی/ پراکسیها، معمولاً بهترین قابلیت های فیلترکردن محتوا (content) را دارند. از آنجاییکه آنها توانایی بررسی فیلد بارکاری (Payload) بسته را دارند، لذا قابلیت تصمیم گیری بر مبنای محتوا را نیز دارند.
دروازه برنامه های کاربردی/ پراکسیها، تایید اعتبار کاربر را بسیار پرقدرت انجام می دهند. در بسیاری موارد، آنها می توانند با پایگاه داده های کاربر سیستم میزبان، یکپارچه شوند تا به مدیر شبکه امکان استفاده سودمند از اطلاعات کاربر/ گروه موجود را بدهد.
همچنین این روش غربال سازی بسته، قابلیتهای ثبت وقایع وسیعی دارد. توانایی ثبت کردن فعالیت کاربر و انواع متفاوت ترافیک را دارد. این قابلیت، یک منبع ارزشمند برای برخورد با حوادث امنیتی و پیاده سازی خط مشی (policy) می باشد.
1-6-3-2 : نقاط ضعف
عمده ترین ضعف یا اشکال دروازه برنامه های کاربردی/ پراکسی، تاثیری است که آنها روی عملکرد شبکه می گذارند. از آنجاییکه تمام ترافیک ورودی (incoming) و خروجی (outgoing) در سطح برنامه کاربردی بازرسی می شود، معمولاً آهسته تر از روشهای فیلتر کننده بسته و بازرسی هوشمند بسته که ترافیک را در لایه شبکه بررسی می کنند، عمل می کند. کل ترافیک، قبل از آنکه بازرسی شود باید از تمام هفت لایه مدل OSI عبور کند. در نتیجه، فرآیند بازرسی نیازمند توان پردازشی بیشتری است و مستعد تبدیل شدن به یک گلوگاه برای شبکه است.
اشکال دیگر دروازه برنامه های کاربردی/ پراکسیها این است که هر پروتکل
( SMTP، HTTP و غیره) نیاز به برنامه کاربردی پراکسی/ دروازه مربوط به خود دارد. اگر یکی موجود نباشد، آنگاه پروتکل متناظرش اجازه عبور از دیوار آتش را نخواهد داشت. به علاوه، از آنجاییکه هر پروتکل نیاز به پراکسی/ دروازه مربوط به خود دارد، پشتیبانی برای برنامه های کاربردی جدید می تواند مشکل ساز شود.
معمولاً دروازه برنامه های کاربردی/ پراکسیها نیاز به پیکربندی اضافه کاربر دارند. ممکن است کاربران شبکه نیاز به نرم افزار اختصاصی یا تغییرات در پیکربندی داشته باشند تا بتوانند به دروازه برنامه کاربردی/ پراکسی وصل شوند. این موضوع می تواند روی شبکه های بزرگتر با تعداد کاربران زیاد، تاثیر بگذارد.
مقیاس پذیری (scalability) می تواند مشکل ساز باشد اگر دروازه برنامه های کاربردی/ پراکسیها در شبکه های بزرگ نصب شوند. معمولاً زمانیکه تعداد سرویس گیرنده ها (clients) افزایش می یابد یا تعداد دروازه ها/ پراکسیهای استقرار یافته در سیستم های میزبان افزایش می یابد، عملکرد کاهش می یابد.
دروازه برنامه های کاربردی/ پراکسیهای نصب شده روی سیستم عاملهای همه منظوره (general- purpose)، در برابر راههای گریز (loopholes) امنیتی سیستم در زیر قرار گرفته، آسیب پذیر (vulnerable) هستند. اگر سیستم در زیر قرار گرفته، امن نباشد دیوار آتش، امن نخواهد بود.
این روش غربال سازی بسته، در مقابل حملات توزیع شده اخلال در سرویس دهی (denial of service) آسیب پذیر است. اگر داده های کافی به دروازه/ پراکسی تحمیل شود، منجر به توقف عمل آن خواهد شد.
در بعضی موارد، هزینه های پیاده سازی ممکن است بازدارنده باشد. امنیت بهبود یافته دروازه برنامه های کاربردی/ پراکسیها ممکن است نیاز به خریداری سخت افزار، نرم افزار، نیروی انسانی ماهر یا پشتیبانی بیشتر داشته باشد که موجب بالا رفتن هزینه راه حل دیوار آتش خواهد شد.
1-6-4 : پراکسیهای قابل تطبیق (Adaptive Proxies)
همانگونه که بازرسی هوشمند بسته به عنوان شکل بهبود یافته فیلتر کننده بسته توسعه داده شد، پراکسیهای قابل تطبیق (که به پراکسیهای پویا نیز معروفند) نیز به عنوان شکل بهبود یافته دروازه برنامه های کاربردی/ پراکسیها توسعه داده شد. پراکسیهای قابل تطبیق، با ترکیب نمودن مزایای فیلتر کننده بسته و دروازه برنامه های کاربردی/ پراکسیها، با بازرسی اولین بخش یک ارتباط در لایه برنامه های کاربردی تصمیم به اجازه عبور یا رد می گیرد. سپس بسته های بعدی در لایه شبکه بازرسی می شوند و در آن لایه به آنها اجازه عبور داده می شود یا رد می شوند. پراکسیهای قابل تطبیق مانند بازرسی هوشمند بسته، بسته ها را بررسی می کنند و سپس اطلاعات را داخل جداول حالت پویا قرار می دهند. سپس داده های جدول برای ارزیابی نمودن بسته های بعدی همان ارتباط استفاده می شوند. اگر بسته ها بخشی از یک ارتباط جدید محسوب شوند، آنها به سمت بالا به لایه برنامه های کاربردی پس فرستاده می شوند و در آنجا بازرسی می شوند. به این ترتیب، این همیشه پراکسی قابل تطبیق است که در لایه برنامه های کاربردی عمل می کند، بازرسی می کند و برای هر ارتباط جدید تصمیم اجازه عبور یا رد را اخذ می کند. تنها بعد از آنکه پراکسی قابل تطبیق در لایه برنامه های کاربردی، نشست را تصویب کرد آنرا به فیلتر کننده بسته با امنیت کمتر اما سریعتر در لایه شبکه می فرستد.
1-6-5 : دروازه سطح مداری (Circuit – Level Gateway)
برخلاف یک دیوار آتش فیلتر کننده بسته، یک دروازه سطح مداری تک تک بسته ها را بررسی نمی کند. در عوض بر نشستهای TCP یا UDP نظارت می کند. هر بار که یک نشست بنا نهاده می شود، دروازه سطح مداری پورت را باز می گذارد تا به تمام بسته های دیگر متعلق به آن نشست، اجازه عبور دهد. زمانیکه نشست خاتمه یابد، پورت بسته می شود. از بسیاری لحاظ، این روش غربال سازی بسته به دروازه برنامه های کاربردی/ پراکسیها و پراکسیهای قابل تطبیق شباهت دارد، اما دروازه های سطح مداری در لایه انتقال مدل OSI عمل می کنند.
1-6-6 : وانمود کننده ها (Impostors)
وقتی در مورد دیوارهای آتش، شیوه های غربال سازی بسته و نحوه عمل کردن دیوار آتش صحبت می کنیم، نیاز است که چند تصور غلط را در این زمینه مورد توجه قرار دهیم:
* ترجمه آدرس شبکه
* دیوارهای آتش شخصی
1-6-6-1 : ترجمه آدرس شبکه (Network Address Translation)
یک فن آوری که به طور متداول تصور می شود که مثل یک راه حل دیوار آتش عمل می کند، ترجمه آدرس شبکه (NAT) می باشد. NAT، آدرسهای IP داخلی روی یک شبکه را به آدرسهای IP خارجی روی شبکه ای دیگر ترجمه می کند. ترجمه آدرس شبکه از سه روش برای ترجمه آدرس استفاده می کند که عبارتند از:
* ترجمه آدرس ایستا (Static NAT)
* ترجمه آدرس محدوده ای (Pooled NAT)
* ترجمه آدرس سطح پورت (Port Level NAT)
ترجمه آدرس ایستا، یک آدرس واحد معین را به آدرس واحد معین دیگر نسبت می دهد. (map)
مثال: 10.0.0.1 -mapped to- 168.13.1.1
ترجمه آدرس محدوده ای، به طور پویا تمام آدرسهای واحد معین را به یک محدوده (range) از آدرسهای خارجی نسبت می دهد.
مثال: 10.0.0.1 – 10.0.0.254 -mapped to- 168.13.1.1- 168.13.1.254
ترجمه آدرس سطح پورت، به طور پویا تمام آدرسهای داخلی واحد معین را به یک آدرس خارجی واحد معین نسبت می دهد. آدرس داخلی از طریق ترکیب آدرس خارجی خاص با یک شماره پورت یکتا شناسایی می شود.
مثال: 10.0.0.1 -mapped to- 168.13.1.1:1084
10.0.0.2 -mapped to- 168.13.1.1:1085
10.0.0.3 -mapped to- 168.13.1.1:1086
با مقایسه روشی که NAT مابین دو شبکه به آن عمل می کند و روشی که شیوه های غربال سازی بسته مابین دو شبکه به آن عمل می کنند، می توان دریافت که ترجمه آدرس شبکه با تعریف دیوار آتش همخوانی ندارد. ترجمه آدرس شبکه، دسترسی مابین دو شبکه را کنترل نمی کند. برخی ممکن است بیان کنند که ترجمه آدرس شبکه، به طور حتم، دسترسی را کنترل می کند زیرا شما نمی توانید شبکه داخلی را ببینید. ترجمه آدرس شبکه، این کار را با استفاده از قوانین یا فیلترها انجام نمی دهد و شبکه را از کاربران خارجی پنهان می سازد.
1-6-6-2 : دیوارهای آتش شخصی (Personal Firewalls)
فناوری دیگری که به طور متداول یک "دیوار آتش" نامیده می شود و به عنوان محصولی که امنیت را برای یک شبکه فراهم خواهد کرد، در معرض فروش قرار می گیرد، دیوار آتش شخصی می باشد. یک دیوار آتش شخصی، حفاظت از یک وسیله واحد (معمولاً یک کامپیوتر شخصی) را در مقابل یک شبکه نامطمئن (معمولاً اینترنت) انجام می دهد. زمانیکه آنرا با تعریف دیوار آتش مقایسه می کنیم، درمی یابیم که دیوارهای آتش شخصی، معیار موردنظر را برآورده نمی کنند. دیوارهای آتش شخصی، دسترسی مابین دو شبکه را کنترل نمی کنند بلکه دسترسی به یک وسیله (device) خاص را کنترل می کنند.
1-7 : جنبه های مهم دیوارهای آتش کارآمد
صرفنظر از اینکه کدام منطق طراحی امنیت یا روش غربالسازی بسته انتخاب شود، دو جنبه مهم پیاده سازی دیوارهای آتش می توانند تعیین کنند که آیا یک راه حل دیوار آتش، کارآمد خواهد بود یا نه:
* نخست آنکه وسیله یا سیستم میزبانی که راه حل دیوار آتش روی آن مقیم می شود، باید مطمئن باشد. اگر دیوار آتشی که انتخاب کرده اید، بر مبنای یک سیستم عامل شبکه ای معروف است، اطمینان یابید که وصله های (patch) امنیتی آن به طور کامل نصب شده اند و تمام به روز رسانیهای امنیتی اعمال شده اند.
* دوم آنکه برای اینکه یک دیوار آتش، کارآمد باشد تمام ترافیک ورودی به یا خروجی از شبکه شما باید از میان دیوار آتش عبور کند. اگر یک دیوار آتش به طور فیزیکی یا منطقی قابل دور زدن (bypass) باشد، آنگاه تضمینی وجود ندارد که شبکه مطمئن شما امن باشد. معماری به کار رفته برای راه حل دیوار آتش شما، بسیار مهم است.
1-8 : معماری دیوار آتش (Firewall Architecture)
از آنجاییکه راه حلهای دیوار آتش می توانند با استفاده از یک سیستم واحد یا چندین سیستم، پیکربندی شوند لذا معماری به کار رفته برای پیاده سازی راه حل می تواند ساده یا پیچیده باشد. هنگام تصمیم گیری در مورد یک معماری خاص، به خاطر بسپارید که کارآمدترین راه حلهای دیوار آتش به گونه ای پیاده سازی می شوند که تمام ترافیک شبکه از میان آنها عبور کند. این ویژگی پیاده سازی در معماریهای دیوار آتش رایج و شناخته شده زیر، به طور بدیهی به چشم می خورد:
* مسیر یاب فیلتر کننده بسته
* میزبان غربال شده (میزبان سنگر)
* دروازه دو خانه ای (دو محلی)
* زیرشبکه غربال شده یا منطقه غیرنظامی (غیرمحرمانه)
* دستگاه دیوار آتش
1-8-1 : مسیریاب فیلتر کننده بسته (Packet Filtering Router)
مسیریاب فیلتر کننده بسته، مسیریابی است که پیکربندی شده تا بسته های مابین دو شبکه را غربال کند. این مسیریاب، ترافیک مابین دو شبکه را مسیردهی می کند و با استفاده از قوانین فیلترکننده بسته، به ترافیک اجازه عبور می دهد یا آنرا رد می کند. معمولاً پیاده سازی امنیت با یک مسیریاب، ساده نیست. بیشتر مسیریابها برای مسیردهی به ترافیک طراحی می شوند نه برای تامین وظایف دیوار آتش؛ لذا رابط فرمان استفاده شده برای پیکربندی قوانین و فیلترها ساده نیست.
شکل 1-9 : مسیریاب فیلترکننده بسته
1-8-2 میزبان غربال شده یا میزبان سنگر (Screened Host or Bastion Host) :
میزبان غربال شده یا میزبان سنگر، معمولاً روی شبکه مطمئنی که از طریق یک مسیریاب فیلترکننده بسته، در مقابل شبکه نامطمئن حفاظت می شود، قرار می گیرد. تمام ترافیک ورودی گذرنده از مسیریاب فیلتر کننده بسته، به میزبان غربال شده هدایت می شود. ترافیک خروجی ممکن است به میزان غربال شده هدایت شود یا نشود. این نوع دیوار آتش، در اغلب موارد بر مبنای نرم افزار است و روی یک کامپیوتر همه منظوره که نسخه امنی از یک سیستم عامل را دارد، اجرا می شود. معمولاً امنیت در سطح برنامه های کاربردی پیاده سازی می شود.
شکل 1-10 : دیوار آتش میزبان غربال شده یا میزبان سنگر
1-8-3 : دروازه دو خانه ای (Dual – homed Gateway)
معمولاً یک دروازه دوخانه ای، پشت دروازه (معمولاً یک مسیریاب) طرف شبکه نامطمئن قرار می گیرد و بیشتر مواقع یک سیستم میزبان با دو رابطه شبکه می باشد. به جلو راندن (forwarding) ترافیک در این سیستم، غیرفعال است؛ در نتیجه تمام ترافیک مابین دو شبکه را وادار به عبور از برخی انواع دروازه برنامه های کاربردی یا پراکسی می نماید. فقط دروازه یا پراکسی مربوط به سرویس هایی که ضروری در نظر گرفته می شوند، روی سیستم نصب می شوند. معمولاً این معماری خاص، قبل از اینکه اجازه دسترسی به دروازه یا پراکسی داده شود، نیاز به تایید اعتبار کاربر خواهد داشت. هر پراکسی، مستقل از دیگر پراکسیهای سیستم میزبان است.
شکل 1-11 : دروازه دوخانه ای
1-8-4 زیرشبکه غربال شده یا منطقه غیرنظامی(Screened Subnet or Demilitarized Zone)
یک زیر شبکه غربال شده یا DMZ معمولاً مابین دو مسیریاب فیلترکننده بسته ایجاد می شود. موقع استفاده از این معماری، راه حل دیوار آتش روی این قطعه (segment) زیرشبکه غربال شده، در کنار سرویسهای موجود دیگر برای شبکه نامطمئن، قرار می گیرد. می توان تصور نمود که این معماری، مشابه معماری یک میزبان غربال شده است به جز اینکه امکان دسترسی به یک شبکه کامل (به جای یک میزبان واحد) از خارج وجود دارد.
شکل 1-12 : زیرشبکه غربال شده یا منطقه غیرنظامی
1-8-5 : دستگاه دیوار آتش (Firewall Appliance)
یک دستگاه دیوار آتش، معمولاً پشت دروازه شبکه نامطمئن قرار می گیرد. این معماری از این جهت که تمام ترافیک باید از دستگاه عبور کند، مشابه معماریهای مسیریاب فیلتر کننده بسته و دروازه دوخانه ای است. در اکثر موارد، این دستگاهها به صورت از پیش پیکربندی شده در جعبه هایشان در معرض فروش گذاشته می شوند. همچنین امکان دارد که سرویسهای دیگری نظیر سرویس دهنده های وب و پست الکترونیکی را نیز به صورت تعبیه شده (built- in) داشته باشند. به خاطر اینکه معمولاً نیاز به پیکربندی گسترده ای ندارند، مشتریان را جذب می کنند. بعضی از تولید کنندگان، آنها را به عنوان راه حل های دیوار آتش " plug and play" به بازار عرضه می کنند.
شکل 1-13 : دستگاه دیوار آتش
در برخی از شبکه ها، ممکن است پیاده سازی بیش از یک راه حل دیوار آتش، انتخاب بهتری باشد. به عنوان نمونه، پیاده سازی یک مسیریاب فیلترکننده بسته در مدخل شبکه به منظور امنیت پیرامون و سپس پیکربندی یک دروازه برنامه های کاربردی برای یک بخش یا ساختمان خاص. این نوع راه حل، نه تنها شبکه مطمئن را در مقابل خارج محافظت می کند بلکه یک بخش یا ساختمان خاص را نیز در مقابل کاربران غیرمجاز شبکه مطمئن محافظت می کند.
1-9 : انتخاب و پیاده سازی یک راه حل دیوار آتش
به منظور انتخاب بهترین معماری و شیوه غربالسازی بسته برای یک راه حل دیوار آتش، پرسشهای زیر را باید مورد توجه قرار دهیم:
* چه کاری نیاز است که دیوار آتش، انجام دهد؟
* چه سرویسهای دیگری برایمان مطلوب است؟
* چگونه راه حل دیوار آتش، با شبکه موجود تطبیق می یابد؟
* چگونه راه حل دیوار آتش، سرویس ها و کاربران موجود را تحت تاثیر قرار خواهد داد؟
1-9-1 : آیا شما نیاز به یک دیوار آتش دارید؟
تصمیم برای پیاده سازی یک راه حل دیوار آتش نباید بدون تحقیق و تجزیه و تحلیل انجام شود. تصمیم برای پیاده سازی راه حل دیوار آتش بهتر است برمبنای نیازهایی که شناسایی و مستند شده اند باشد، نه به خاطر آنکه پیاده سازی یک دیوار آتش، به عنوان یک راه حل در دیگر سازمانها شناسایی شده است. پیاده سازیهای بدون اندیشه دیوار آتش، می تواند حفره های امنیتی بیشتری را به وجود آورد و منجر به پیدایش مشکلات شبکه ای بیشتری نسبت به حالتی که هیچ پیاده سازی دیوار آتشی وجود ندارد، شود.
1-9-2 : دیوار آتش، چه چیزی را باید کنترل یا محافظت کند؟
به منظور اتخاذ یک تصمیم درست، اول باید مشخص نمود چه وظایفی نیاز است که دیوار آتش انجام دهد. آیا دیوار آتش، دسترسی به شبکه و از شبکه را کنترل خواهد کرد، یا آیا دیوار آتش، از سرویس ها و کاربران محافظت خواهد کرد؟
دیوار آتش، چه چیزی را باید کنترل کند؟
* دسترسی به داخل شبکه
* دسترسی به خارج شبکه
* دسترسی مابین شبکه ها، بخش ها یا ساختمانهای داخلی
* دسترسی برای گروهها، کاربران یا آدرسهای معین
* دسترسی به منابع یا سرویسهای معین
دیوار آتش، چه چیزی را باید محافظت کند؟
* ماشین ها یا شبکه های معین
* سرویس های معین
* اطلاعات (خصوصی یا عمومی)
* کاربران
بعد از مشخص نمودن اینکه دیوار آتش، چه چیزی را نیاز است که کنترل یا حفاظت کند، باید تعیین کنیم که بدون این کنترل و حفاظت، چه اتفاقی ممکن است رخ دهد. اگر کاربران به چیزهایی دسترسی داشته باشند که بهتر است نداشته باشند، چه اتفاقی ممکن است رخ دهد؟ اگر سرویس ها یا اطلاعات حفاظت نشده، توافق شوند چه اتفاقی ممکن است رخ دهد؟ آیا خطر نداشتن کنترل یا حفاظت، به قدری است که برداشتن گام بعدی در تشخیص نیاز به یک راه حل دیوار آتش را تضمین نماید؟
1-9-3 : یک دیوارآتش، چه تاثیری روی سازمان، شبکه وکاربران شما خواهد گذاشت؟
* برای پیاده سازی و نگهداری (maintain) یک راه حل دیوار آتش، چه منابعی موردنیازند؟
* چه کسی کار را انجام خواهد داد؟ آیا کارکنان فنی با تجربه برای کار، در اختیار داریم یا نیاز به در اختیار گرفتن افرادی از بیرون سازمان داریم؟
* آیا سخت افزاری که نیازهای پشتیبانی از یک راه حل دیوار آتش را برآورده سازد، در اختیار داریم؟
* آیا سرویسهای موجود، از طریق یک دیوار آتش نیز قادر به عمل هستند؟
* تاثیر مالی روی سازمان چگونه خواهد بود؟ (تاثیر مالی، شامل هزینه های پیاده سازی اولیه، نگهداری و ارتقاءهای مداوم، هزینه های سخت افزار و نرم افزار و هزینه های پشتیبانی فنی، خواه این پشتیبانی در درون سازمان انجام شود و خواه از یک منبع در بیرون سازمان تامین شود، می باشد).
بررسی اینکه چه اعمالی نیاز است که دیوار آتش انجام دهد، چگونه در شبکه موجود جای خواهد گرفت و چگونه کاربران و سرویسهای موجود را تحت تاثیر قرار خواهد داد، به سازمان کمک خواهد کرد تا تصمیمی آگاهانه در مورد اینکه یک دیوار آتش، موردنیاز هست یا نه، بگیرد. گام بعدی در فرآیند انتخاب، مرور نمودن یا بسط دادن سیاست امنیتی سازمان است.
1-10 : سیاست امنیتی (Security Policy)
موفقیت هر پیاده سازی راه حل دیوار آتشی مستقیماً مربوط به وجود یک سیاست امنیتی خوب اندیشیده شده و به طور استوار پیاده سازی شده است. بدون یک سیاست امنیتی، هیچ راهنما و نشانه ای که بر مبنای آن یک تصمیم برای انتخاب صورت گیرد، وجود ندارد. در سطح بالا، یک سیاست امنیتی تعیین می کند که یک سازمان، کدام معیارهای امنیتی را لازم دارد. این معیارهای امنیتی، به صورت مستقل از هر راه حل فنی که برای اجرای آنها استفاده خواهد شد، بسط داده میشوند. با مجزا نمودن سیاست امنیتی و راه حل فنی، سیاست امنیتی به خاطر قابلیتهای سخت افزار یا نرم افزار یا هر راه حل دیوار آتش معینی محدود نخواهد شد. انتخاب فناوری به کار رفته در راه حل دیوار آتش باید سیاست امنیتی را منعکس کند.
توسعه یک سیاست امنیتی نیاز به ورودی از تمام سطحهای یک سازمان دارد. گرفتن ورودی و پشتیبانی از تمام بخشها در مدت توسعه سیاست امنیتی، فرایند انتخاب دیوار آتش را روانتر می کند و مشکلات کمتری را در مدت پیاده سازی به وجود خواهد آورد.
معمولاً سیاست های امنیتی یک بخش اجرایی (administrative) و یک بخش فنی (technical) دارند. بخش اجرایی، موضوعاتی از قبیل اینکه آیا دسترسی از راه دور (remote) اجازه داده خواهد شد، آیا تمام کاربران به سرویس های پست الکترونیکی دسترسی دارند، و چه کسی مسئول تغییرات و به روز رسانیها میباشد را مورد توجه قرار میدهد. بخش فنی، موضوعاتی از قبیل اینکه آیا دسترسی توسط شناسه کاربر، گروههای کاربران یا آدرسهای IP کنترل می شود، فعالیت توسط شناسه های کاربر، ردیابی خواهد شد یا توسط آدرسهای IP، آیا تمام ترافیک ورودی به شبکه یا خروجی از آن کنترل خواهد شد یا فقط ترافیک وب. بسیاری از مواردی که در بخش فنی مورد توجه قرار می گیرند، شالوده ای را بنا می نهند که قوانین و فیلترهای یک راه حل دیوار آتش براساس آن ایجاد میشوند.
بعضی از موضوعاتی که یک سیاست امنیتی مورد توجه قرار میدهد عبارتند از:
* موضوعات اجرایی
* موضوعات فنی
1-10-1 : موضوعات اجرایی (Administrative Issues)
* دسترسی کاربر: به چه کاربرانی اجازه دسترسی به شبکه و از شبکه داده خواهد شد؟
* دسترسی به سرویس ها: چه سرویس هایی در شبکه و خارج از آن اجازه داده خواهد شد؟
* دسترسی به منابع: چه منابعی در اختیار کاربران خواهد بود؟
* تایید اعتبار کاربر: آیا سازمان نیاز به تایید اعتبار کاربر خواهد داشت؟
* نظارت و ثبت وقایع: آیا سازمان خواهد خواست که فایلهای گزارش و ثبت وقایع را نگهداری کند؟ چه چیزی ثبت خواهد شد؟ اگر سازمان قصد دارد اقداماتی در مورد تخلفات سیاستی انجام دهد، آنگاه جمع آوری داده های مناسب به عنوان مدرک، اهمیت می یابد. اگر هرگز چنین اقدامی انجام نشود، مکانیزم پرزحمت ثبت وقایع، هزینه و پیچیدگی غیرضروری ای را اضافه می کند.
* پیامدهای تخلف سیاستی: (policy violation): تخلف سیاستی، چه پیامدهایی خواهد داشت؟
* استثناءها (Exceptions): چگونه استثناءهای سیاست امنیتی، مدیریت میشوند؟
* مسئولیت ها: چه کسی سیاست امنیتی را سرپرستی و مدیریت خواهد کرد؟
* مسئولیت های فنی: چه کسی پیاده سازی فنی را سرپرستی و مدیریت خواهد کرد؟
1-10-2 : موضوعات فنی (Technical Issues)
* دسترسی از راه دور (Remote access) : آیا سازمان اجازه دسترسی از راه دور به شبکه را خواهد داد؟
* امنیت فیزیکی: چگونه امنیت فیزیکی ماشین ها (یکی از بدیهی ترین عوامل امنیتی که اغلب از آن چشم پوشی میشود.) فراهم میشود؟
* روش های پیاده سازی: چه روش هایی برای پیاده سازی سیاست امنیتی به کار گرفته خواهد شد؟
* محافظت در برابر ویروس (Virus Protection): چگونه سازمان، محافظت در برابر ویروس را مدیریت می کند؟
بسیار مهم است که برای ایجاد یک سیاست امنیتی جامع، زمان صرف کنیم زیرا سندی است که بسیاری از نیازهای فنی برای انتخاب یک دیوار آتش، براساس آن است.
1-11 : نیازهای پیاده سازی
1-11-1 : نیازهای فنی
نیازهای فنی یک راه حل دیوار آتش باید سیاست امنیتی سازمان و زیربنای شبکه (infrastructure) را منعکس کند. نخست آنکه بهتر است قابلیتهای دیوار آتش، مطابق با نیازهای امنیتی معینی که در سیاست امنیتی ذکر شده اند باشد. یک درک ضعیف از نیازهای یک سیاست امنیتی میتواند منجر به پیاده سازی یک راه حل فنی پیچیده شود، حال آنکه شاید یک راه حل ساده نیز همان کار را انجام دهد.
1-11-2 : معماری
برای آنکه یک سازمان، تصمیم آگاهانه ای در مورد اینکه از کدام وظایف دیوار آتش و معماریها استفاده کند، بگیرد باید مشخص کند که چگونه یک دیوار آتش با محیط خود تطبیق خواهد یافت. معماری فعلی شبکه باید مرور گردد تا معلوم شود که از کدام راه حل های دیوار آتش و کدام معماریها پشتیبانی خواهد کرد.
یک مرحله سودمند و ضروری در طول مدت فرایند، ایجاد یا به روز رسانی مستندات شبکه (documentation) است. یک نمودار خوب شبکه (diagram)، در اجتناب از اشتباهات کمک خواهد کرد و فرایندهای انتخاب و پیاده سازی دیوار آتش را آسانتر می کند. نمودارهای پیکربندی های زیر بسیار سودمند است:
* پیکربندی فیزیکی فعلی
* پیکربندی منطقی فعلی
* پیکربندی فیزیکی راه حل پیشنهادی دیوار آتش
* پیکربندی منطقی راه حل پیشنهادی دیوار آتش
1-12 : تصمیم گیری
زمانیکه سازمان، یک سیاست امنیتی ایجاد می کند و یک نمودار شبکه به وجود می آورد، واقعاً در می یابد که کدام راه حلهای دیوار آتش، به بهترین نحو نیازهای آنرا برآورده می سازد. برخی مواردیکه هنگام انتخاب یک راه حل دیوار آتش، باید در نظر گرفته شوند عبارتند از:
* سهولت نصب
* سهولت پیکربندی: پیکربندی فیلترها و قوانین، چه قدر دشوار است؟ آیا یک رابط گرافیکی کاربر (GUI) وجود دارد، یا اینکه پیکربندی از طریق خط فرمان انجام میشود؟
* آموزش: آیا مدیر دیوار آتش به آموزش اضافی نیاز خواهد داشت؟
* مقیاس پذیری (Scalability)
* انعطاف پذیری (Flexibility) : راه حلهای دیوار آتشی که بر مبنای سخت افزار هستند، آسانتر نصب میشوند اما راه حل های نرم افزاری، انعطاف پذیری بیشتری را از خود نشان می دهند.
* پشتیبانی از دیوار آتش: یک دیوار آتش کارآمد، نیازمند مدیریت دائمی است.
* پلتفورم (Platform): باید دیوار آتشی را انتخاب کنیم که روی پلتفورمی کار کند که مدیران با آن آشنایی داشته باشند.
1-13 : پیاده سازی و آزمایش
مولفه های بسیاری در ارتباط با پیاده سازی یک دیوار آتش وجود دارند. هر یک از این مولفه ها باید شناسایی، پیکربندی و آزمایش شوند. مولفه ای که بیشترین تاثیر را روی شبکه و توانایی دیوار آتش جهت تامین کنترل مناسب دسترسی، می گذارد پیکربندی قوانین و فیلترهاست.
در طرح پیاده سازی ایده آل، راه حل دیوار آتش در یک محیط آزمایشی
(test environment) نصب می شود، قوانین و فیلترها آزمایش میشوند و سپس راه حل در محیط تولید (Production environment) پیاده سازی میشود. در برخی حالات، این امر ممکن نیست.
1-13-1 : آزمایش، آزمایش، آزمایش!
* از برنامه های موجود، برای پویش (scan) پورتها در دیوار آتش هم از شبکه مطمئن داخلی و هم از شبکه نامطمئن بیرونی استفاده می کنیم.
* آیا قوانین و فیلترها، مطابق انتظار، دسترسی را کنترل می کنند؟ آیا دیوار آتش، ترافیکی را که باید اجازه داده شود، عبور میدهد و ترافیکی را که باید رد شود، مسدود می کند؟
* از هر قطعه شبکه (segment)، آزمایش را انجام میدهیم.
* اگر تایید اعتبار، پیاده سازی شده است آنرا آزمایش می کنیم.
* قابلیتهای ثبت وقایع را بررسی می کنیم. مطمئن می شویم که دیوار آتش، مواردی که معین کرده ایم را دنبال یا ردیابی می کند (track).
* هر آزمایش را چندین بار انجام میدهیم.
ممکن است این فرآیند، زمان گیرباشد اما میتواند مشکلات را قبل از آنکه خطرساز شوند، شناسایی کند.
1-14 : خلاصه
یک دیوار آتش نمی تواند و تضمین نمی کند که شبکه سازمان، صددرصد امن است. برای حفاظت بیشتر، بهتر است یک دیوار آتش به همراه دیگر معیارهای امنیت استفاده شود. حتی در آن صورت نیز، هیچ تضمینی وجود ندارد که شبکه، صددرصد امن باشد. دیوارهای آتش نمی توانند هیچ حفاظتی در مقابل حملات درونی و ویروس ها یا کدهای مخرب انجام دهند. دو نگرش در مورد کنترل دسترسی بیان شد که یکی آینده نگر و دیگری واکنشی است. روش های غربالسازی بسته بیان شد که ساده ترین آنها فیلترسازی بسته است. روش دیگر، بازرسی هوشمند بسته است که امن تر از روش اول میباشد ولی هر دو روش، سریع و مستقل از برنامه کاربردی هستند و تاثیر اندکی روی عملکرد شبکه می گذارند. روش سوم، دروازه برنامه های کاربردی و پراکسیها هستند که امن تر از سایر روش ها می باشند اما آهسته تر از دو روش قبل عمل می کنند. روش چهارم، پراکسیهای قابل تطبیق است که ترکیبی از مزایای روش های اول و سوم را داراست. روش پنجم، دروازه سطح مداری است که از بسیاری جهات مشابه روش های سوم و چهارم است با این تفاوت که در لایه انتقال عمل می کند. در مبحث بعدی، معماری دیوار آتش بیان شد. کارآمدترین راه حل های دیوار آتش به گونه ای پیاده سازی میشوند که تمام ترافیک شبکه از میان آنها عبور کند. موفقیت پیاده سازی دیوار آتش، مستقیماً مربوط به وجود یک سیاست امنیتی خوب اندیشیده شده است. در پیاده سازی ایده آل، ابتدا دیوار آتش در یک محیط آزمایشی نصب می شود، قوانین و فیلترها آزمایش میشوند و سپس در محیط تولید پیاده سازی میشود.
فصل دوم
پیاده سازی دیوار آتش با استفاده از iptables
فصل دوم: پیاده سازی دیوار آتش با استفاده از iptables
2-1 : مقدمه
انجمن کد منبع باز (open source community)، در ایجاد نرم افزار دیوار آتش که به طور ایده آلی برای شبکه با هر اندازه ای مناسب باشد، حضور برتری داشته است. سیستم عامل لینوکس (Linux) نیز طبیعتاً از قابلیتهای مسیریابی (route) بسته ها و فیلتر کردن آنها پشتیبانی می کند. سیستم زیرمجموعه هسته لینوکس (Linux Kernel Subsystem) که پردازش بسته های شبکه را بر عهده دارد، Netfilter نام دارد و iptables، دستوراتی برای پیکربندی آن است. تا نسخه 2/2 هسته لینوکس، از ipchains و قبل از آن نیز از ipfwadm استفاده میشد اما در نسخه های جدیدتر از 2/2 باید از iptables استفاده کنیم. بسته نرم افزاری iptables از عملیات تغییر شکل (masquerading) و فیلترسازی (filtering) که در هسته 3/2 و بعد از آن وجود دارند، پشتیبانی می کند. بنابراین به منظور استفاده از iptables، باید هسته را کامپایل مجدد (recompile) کنیم تا netfilter نصب شود و نیز باید بسته نرم افزاری iptables را نصب کنیم. بسته به نسخه هسته سیستم، میتوان از این برنامه های کاربردی برای پیکربندی سیستم لینوکس استفاده کرد تا به عنوان یک مسیریاب عمل کند، در این صورت تضمین میشود که بسته ها از یک شبکه به شبکه ای دیگر فرستاده شوند و مسیریاب لینوکسی، هیچ ترافیکی را بررسی یا فیلتر نخواهد کرد.
امکان دیگری که ipchains و iptables فراهم می سازد، پیکربندی مسیریاب لینوکسی برای تغییر شکل دادن ترافیک یا بررسی و مسدود نمودن آن است، مثلاً با بازنویسی سرآیندهای IP، اینگونه به نظر خواهد رسید که یک بسته، از یک میزبان معین ناشی شده است.
2-2 : واژگان علمی مربوط به فیلترسازی بسته (Packet Filtering Terminology)
رابط (interface) : معمولاً منظور، یک کارت رابط شبکه (NIC) است. بیشتر دیوارهای آتش، چندین NIC دارند و باید به درستی آنها را پیکربندی کنیم تا ترافیک را فیلتر کنند. لینوکس، رابط اول را با eth0 ، دومی را با eth1، سومی را با eth2 و … نشان میدهد.
چند خانه ای (چند محلی) (Multihomed): منظور، میزبانی است که حداقل دو رابط داشته باشد. معمولاً یک رابط در معرض یک شبکه عمومی قرار میگیرد و یک رابط نیز فقط برای شبکه مطمئن، باز (open) است. به این ترتیب، مسیریاب یا دیوار آتش قادر خواهند بود تا بسته ها را به سمت اینترنت حرکت دهند.
ورودی (Ingress) : ترافیک ورودی به یک میزبان شبکه یا رابط را گویند.
خروجی (Egress) : ترافیک خروجی از یک میزبان شبکه یا رابط را گویند.
قانون (Rule) : یک مدخل (entry) در پایگاه داده دیوار آتش که تعیین می کند چگونه با بسته IP برخورد خواهد شد. اگر یک بسته IP، مطابق با شرایط یک قانون ویژه باشد، آنگاه به عنوان مثال، بسته دور انداخته میشود (drop) ؛ اگرچه یک دیوار آتش همچنین میتواند یک بسته را به طرف میزبان یا پورت دیگری حرکت دهد یا میتواند یک بسته را به منظور پردازش، به سمت قانون دیگری روانه کند.
Source IP address (مبدا) : آدرس IP جاییکه بسته در آنجا ایجاد شده است. یک دیوار آتش، این آدرس را از درون یک بسته می خواند تا معین کند که کدام قوانین خود را اعمال نماید.
Source Port : پورتی که بسته در آنجا ایجاد شده است. تقریباً همیشه، پورت مبدا به آدرس IP مبدا مرتبط است.
Destination IP address (مقصد): آدرس IP میزبانی که یک بسته به آن فرستاده میشود. یک دیوار آتش، این آدرس را از درون یک بسته می خواند تا تعیین کند که چگونه یک قانون را اعمال نماید.
Destination Port : پورتی که بسته IP به آن تحویل داده میشود. تقریباً همیشه، پورت مقصد به آدرس IP مقصد مرتبط است.
Private IP addresses (اختصاصی): نیروی کار مهندسی اینترنت یا IETF
(Internet Engineering Task Force) برای نگهداری آدرسهای IP، آدرسهای IP شبکه ای زیر را به عنوان "اختصاصی" معرفی نموده است. این بدان معناست که شبکه های زیر باید پشت دیوارهای آتش و مسیریاب ها به کار گرفته شوند:
* 10.0.0.0/8
* 172.16.0.0/12
* 192.168.0.0/16
هر چند ممکن است بتوان این پروتکل ها را با استفاده از یک مسیریاب لینوکسی، مسیردهی نمود، اما مسیریاب های اینترنت، بسته های علامت گذاری شده با این آدرس های IP را به جلو حرکت نخواهند داد. اگر بخواهیم ترافیک را از شبکه های اختصاصی به سمت اینترنت حرکت دهیم، باید این ارتباط ها را تغییر شکل (masquerade) دهیم یا اینکه از ترجمه آدرس شبکه/ پورت (NAT/PAT) استفاده کنیم.
تغییر شکل (Masquerading): قابلیت تغییر آدرس IP مبدا یا مقصد یک بسته برای آنکه این بسته را بتوان به سمت اینترنت، مسیردهی نمود.
تغییر ساختار بسته (Packet mangling) : تغییر دادن در فیلدهای سرآیند بسته (از قبیل آدرسهای شبکه و آدرسهای پورت) یا فیلد بارکاری (payload) را گویند.
ترجمه آدرس شبکه (NAT) : ترجمه آدرس شبکه، نوعی تغییر ساختار بسته است که شامل رونویسی (overwrite) آدرسهای مبدا و یا مقصد و یا آدرسهای پورت میباشد. واژه "NAT مبدا" یا (Source NAT) SNAT اشاره به NATای دارد که شامل تغییرات در آدرس و یا پورت مبدا باشد و "NAT مقصد" یا (Destination NAT) DNAT نیز اشاره به NATای دارد که دربرگیرنده تغییرات در آدرس یا پورت مقصد باشد. Masquerading، نوع خاصی از SNAT است که در آن یک کامپیوتر، بسته ها را بازنویسی (rewrite) می کند تا به نظر برسد که آنها از خودش ناشی شده اند.
2-3 : انتخاب یک ماشین برای دیوار آتش مبتنی بر لینوکس
برخلاف آنچه تصور می شود، لزومی ندارد که یک دیوار آتش، قدرتمندترین سیستم شبکه باشد. یک شبکه کوچک را توسط یک سیستم پنتیوم 3 یا پنتیوم 4 (Pentium) با 128 مگابایت RAM و یک پردازنده 500 مگاهرتزی به خوبی میتوان سرویس دهی نمود. شبکه های بزرگتر، ممکن است به یک سیستم قوی تر نیاز داشته باشند. ملاحظات برای سیستمهای قوی تر، ممکن است شامل موارد زیر باشد:
* یک پردازنده یک گیگاهرتزی (GHZ)
* حداقل 256 مگابایت RAM
* کارت های I/O و کارتهای رابط شبکه با کیفیت بالا و شاید RAID 0 برای پردازش های سریعتر داده ها
* درایوهای دیسک سخت از نوع SCSI به خاطر سریع تر بودن و بادوام تر بودن نسبت به درایوهای نوع IDE
2-4 : به کار بردن Masquerading و IP Forwarding
IP forwarding یا به جلو حرکت دادن IP، توانایی یک سیستم مبتنی بر لینوکس در عمل کردن به عنوان یک مسیریاب است. بسته ها وارد هسته لینوکس میشوند و سپس توسط سیستم عامل، مورد پردازش قرار می گیرند. برای آنکه سیستم عامل لینوکس، نقش یک به جلو حرکت دهنده ساده IP را ایفا کند باید مراحل زیر را انجام دهیم:
1) حداقل دو کارت رابط شبکه در سیستم نصب می کنیم. این امر برای آنکه سیستم لینوکس قادر به سرویس دهی به دو شبکه متفاوت باشد، ضروری است. البته باید تمام کابل ها و hubهای موردنیاز، برای ایجاد امکان استفاده سیستم ها از تمام میزبانهای موجود شبکه را در اختیار داشته باشیم.
2) در یک ترمینال (terminal)، دستور زیر را وارد می کنیم:
echo "1" > /proc/sys/net/ipv4/ip_forward
این دستور، به جلو حرکت دادن IP را در مسیریاب لینوکسی فعال می کند. با وارد کردن این دستور در فایلی که هر زمان سیستم، راه اندازی (boot up) می شود، اجرا میشود، IP forwarding به طور پیش فرض، فعال خواهد شد. میتوان یک فایل شخصی ایجاد نمود یا اینکه دستور قبل را در انتهای فایل متعلق به مسیر زیر وارد کنیم:
/etc/rc.d/rc.local
3) با وارد کردن دستور زیر میتوان بررسی نمود که آیا سیستم، به عنوان یک مسیریاب (مثلاً به جلو حرکت دهنده IP) عمل می کند یا خیر.
cat /proc/sys/net/ipv4/ip_forward
اگر دستور فوق، مقدار 1 را بخواند، در این صورت اکنون سیستم به عنوان یک مسیریاب عمل می کند. مقدار صفر نشان میدهد که سیستم لینوکسی، مسیریابی نمی کند.
نکته اصلی که باید به خاطر سپرد این است که یک سیستم لینوکسی که
IP forwarding در آن فعال شده است، میتواند هر آدرس شبکه ای را به آدرس شبکه ای دیگر مسیردهی نماید. یادآوری می کنم که مسیریاب های اینترنت، ترافیک را از آدرس های IP اختصاصی، forward نخواهند کرد.
شکل زیر، نشان میدهد که به عنوان مثال چگونه ترافیک از شبکه 10.1.2.0 و شبکه 192.168.1.0 میتواند به تمام شبکه ها از جمله شبکه 128.187.22.0 برسد. با این حال، ترافیک فقط از شبکه 128.187.22.0 میتواند به اینترنت برسد.
شکل 2-1 : یک سیستم مبتنی بر لینوکس که به عنوان یک مسیریاب به جلو برنده پیکربندی شده است.
شکل فوق نشان میدهد که ترافیک از شبکه های 192.168.1.0 , 10.1.2.0 نمی تواند به میزبانهای اینترنت برسد، تنها به این خاطر که مسیریاب های اینترنت، این ترافیک را نخواهند پذیرفت. برای دادن امکان دسترسی به اینترنت به آدرسهای اختصاصی شبکه، باید از IP masquerading بر مبنای iptables یا ipchains استفاده نماییم.
Masquerading زمانیست که سیستم مبتنی بر لینوکس، سرآیند IP یک بسته شبکه را بازنویسی می کند تا به نظر برسد که بسته، از یک میزبان متفاوت ناشی شده است. زمانیکه سرآیند IP به یک آدرس غیراختصاصی IP، بازنویسی میشود از این پس آن بسته میتواند دوباره به سمت اینترنت مسیردهی شود. همانطور که قبلاً ذکر نمودم، عمل بازنویسی بسته های IP اصطلاحاً packet mangling (تغییر ساختار بسته) نامیده میشود.
همانطور که در شکل زیر دیده می شود، masquerading به سیستم مبتنی بر لینوکس اجازه ترجمه شبکه 10.1.2.0 به آدرس 66.1.5.1 IP که قابل آدرس دهی در اینترنت است را میدهد. هر بار که شبکه اختصاصی 10.1.2.0 به عنوان آدرس masquerade , 66.1.5.1 IP میشود (تغییر شکل میدهد)، تمام میزبانهای این شبکه میتوانند به اینترنت دسترسی یابند. بنابراین بسته به الگوی زیر شبکه (subnet mask) استفاده شده برای شبکه 10.1.2.0، صدها و حتی شاید هزاران میزبان میتوانند تحت این یک آدرس masquerade , IP شوند.
شکل 2-2 : تغییر شکل شبکه 10.1.2.0 به عنوان آدرس IP 66.1.5.1
ترجمه آدرس اختصاصی به آدرس قابل مسیردهی در اینترنت، از طریق یک پایگاه داده ذخیره شده بر روی مسیریاب لینوکسی مبتنی بر iptables یا ipchains صورت میگیرد.
مسیریاب تغییر شکل دهنده (masquerading) مبتنی بر لینوکس، این پایگاه داده را نگه می دارد تا بداند که چگونه بسته هایی را که ساختارشان تغییر کرده است (mangled)، به حالت اولیه ترجمه کند (untranslate) تا اینکه قابل آدرس دهی به سمت شبکه اختصاصی محلی باشند.
Masquerading ساده، شبکه را در حالت "wide open" (بی پناه) باقی می گذارد، به طوریکه هر چه که به عنوان یک دروازه پیش فرض (default gateway) وارد دیوار آتش یا مسیریاب شود میتواند دسترسی کامل به تمام شبکه های متصل داشته باشد. فیلترسازی بسته، پاسخی به جلوگیری از دسترسی به شبکه است.
2-5 : حسابداری بسته (Packet Accounting)
حسابداری بسته، قابلیت خلاصه کردن میزان استفاده از پروتکل در یک شبکه IP است. برای مثال، میتوان از این خصوصیت برای فهرست کردن مقدار ترافیک TCP، ICMP و IP گذرنده از رابط ها استفاده نمود. یک بار که هسته سیستم را کامپایل مجدد نمودیم و سیستم را دوباره راه اندازی کردیم، بررسی می کنیم که آیا فایل زیر در سیستم- فایل مجازی /proc وجود دارد یا خیر:
/proc / net/ ip_ acct
اگر فایل، وجود داشته باشد آنگاه هسته سیستم از IP accounting نیز (علاوه بر تمام ویژگیهای دیگر) پشتیبانی می کند.
2-6 : جداول و زنجیرها در یک دیوار آتش مبتنی بر لینوکس
iptables، نام خود را از سه جدول (table) پیش فرضی که از آنها استفاده می کند گرفته است. این سه جدول در جدول 2-1 مشاهده میشوند.
جدول 2-1: جداول و زنجیرهای پیش فرض
نام جدول
زنجیرهای پیش فرض
توضیح
Filter
INPUT
FORWARD
OUTPUT
به منظور تنظیم سیاست هایی برای ترافیک هایی که اجازه ورود، گذر یا خروج از کامپیوتر به آنها داده شده است، به کار می رود.
Nat
PREROUTING
OUTPUT
POSTROUTING
به منظور فعال نمودن masquerading به کار می رود.
Mangle
PREROUTING
INPUT
OUTPUT
FORWARD
POSTROUTING
به منظور تغییر در محتوای بسته ها به کار می رود.
جدول 2-2، زنجیرهای پیش فرض را نشان میدهد.
جدول 2-2 : توصیف زنجیرهای پیش فرض
زنجیر
توضیح
FORWARD
امکان پردازش بسته هایی را میدهد که در یک کامپیوتر gateway در حرکتند، وارد یک رابط میشوند و از رابطی دیگر خارج میشوند.
INPUT
امکان پردازش بسته ها را درست قبل از آنکه به یک پردازش محلی تحویل داده شوند، میدهد.
OUTPUT
امکان پردازش بسته ها را درست بعد از آنکه توسط یک پردازش محلی تولید می شوند، میدهد.
POSTROUTING
امکان پردازش بسته ها را درست قبل از آنکه یک رابط شبکه را ترک کنند، می دهد.
PREROUTING
امکان پردازش بسته ها را درست هنگامیکه از یک رابط شبکه می رسند، میدهد.
Iptables، تعمیمی برای ipchains میباشد، زیرا iptables، جداول nat و mangle را نیز اضافه می کند. در iptables، اگر نام جدول را مشخص نکنیم، به طور پیش فرض جدول filter در نظر گرفته خواهد شد. برای تعیین نمودن جدول در iptables، از نشانه – t استفاده میشود.
یک chain (زنجیر)، مجموعه ای از اقدامات (actions) است که باید روی یک بسته صورت گیرد. بسته های هر رابط سیستم، میتواند توسط زنجیرهای هر یک از جداول، مدیریت شود و تغییر داده شود. به عنوان مثال، اگر از جدول filter استفاده می کنیم هر رابط شبکه، سه زنجیر پیش فرض متفاوت را خواهد داشت.
شکل 2-3 ، نشان میدهد که در فیلترسازی بسته، چگونه بسته ها سیستم را می پیمایند.
شکل 2-3 : مسیر حرکت بسته شبکه برای filtering
شکل 2-4 ، نشان میدهد که در ترجمه آدرس شبکه، چگونه بسته ها سیستم را طی می کنند.
شکل 2-4 : مسیر حرکت بسته شبکه برای Nat
شکل 2-5 ، نشان میدهد که در تغییر ساختار بسته، چگونه بسته ها سیستم را می پیمایند.
شکل 2-5 : مسیر حرکت بسته شبکه برای mangling
در آغاز، زنجیرها خالی هستند. در ضمن میتوان زنجیرهای دلخواهی برای سازماندهی قوانین به وجود آورد. سیاست (policy) یک زنجیر، سرنوشت بسته هایی را که به انتهای آن زنجیر می رسند تعیین می کند.
بسته ها، زنجیرها را می پیمایند و به قوانین زنجیر، به ترتیب، ارائه میشوند. اگر بسته، مطابق با معیار قانون نباشد، بسته به طرف قانون بعدی در زنجیر حرکت می کند. اگر یک بسته به آخرین قانون یک زنجیر برسد و هنوز مطابق نباشد، سیاست زنجیر در مورد بسته اعمال خواهد شد.
2-7 : قوانین (Rules)
یک قانون iptable از یک یا چند معیار تطبیق (match criteria) و یک مشخصات هدف (target specification) تشکیل میشود. معیارهای تطبیق تعیین می کنند که بر کدام بسته های شبکه تاثیر می گذارند. اگر تمام معیارهای تطبیق برآورده شوند، بسته با قانون، مطابقت دارد. مشخصات هدف تعیین می کند که چگونه بسته های شبکه تحت تاثیر قرار خواهند گرفت.
سیستم، برای هر قانون، شمارنده بسته و شمارنده بایت (byte counter) را نگه می دارد. هر زمان که یک بسته به یک قانون می رسد و مطابق با معیار قانون است، شمارنده بسته یکی افزایش می یابد و به شمارنده بایت نیز به مقدار اندازه بسته تطبیق یافته اضافه میشود.
هر دو بخش match وtarget ، اختیاری هستند. اگر هیچ معیار تطبیقی وجود نداشته باشد، تمام بسته ها، مطابق در نظر گرفته میشوند. اگر هیچ مشخصات هدفی وجود نداشته باشد، هیچ عملی روی بسته ها صورت نمی گیرد. به عبارت دیگر مثل زمانیکه قانون وجود ندارد، پردازش پیش می رود و تنها شمارنده های بسته و بایت، به روزرسانی میشوند.
2-8 : تطبیق ها (matches)
تطبیق های متنوعی برای استفاده در iptables وجود دارد، اگرچه برخی از آنها فقط در هسته هایی که ویژگیهای معینی در آنها فعال باشد، وجود دارد. تطبیق های مربوط به پروتکل اینترنت (IP) (نظیر پروتکل، آدرس مبدا یا آدرس مقصد) در مورد هر بسته IP قابل اعمال هستند. علاوه بر تطبیق های کلی فوق، iptables شامل تطبیق های ویژه ای نیز میباشد که از طریق "تعمیمات بار شونده به طور پویا" (dynamically loaded extensions) در اختیارمان قرار می گیرند. برای آنکه به iptables اطلاع دهیم که می خواهیم از یکی از این تعمیم ها استفاده کنیم، باید از گزینه -m یا –match استفاده نماییم.
2-9 : اهداف (Targets)
اهداف برای مشخص نمودن عملی (action) که باید هنگام انطباق یک بسته با یک قانون، صورت گیرد و نیز برای مشخص نمودن سیاست زنجیر استفاده میشود. چهار هدف پیش فرض در iptables وجود دارد و ماجولهای تعمیمی (extension modules)، هدف های دیگری را نیز در اختیارمان قرار می دهند. جدول 2-3 ، targetهای پیش فرض را شرح میدهد.
جدول 2-3 : هدف های پیش فرض
هدف
توضیح
ACCEPT
به بسته اجازه ورود به مرحله بعدی پردازش داده میشود. پیمایش زنجیر فعلی، متوقف میشود.
DROP
به طور کامل پردازش بسته قطع میشود و بسته در مقابل قوانین دیگر، بررسی نخواهد شد. اگر بخواهیم به فرستنده بسته، پیامی از نوع ICMP ارسال شود باید از تعمیم هدف REJECT استفاده کنیم.
QUEUE
(صف)
بسته به فضای برنامه کاربر (userspace) فرستاده میشود.
RETURN
(بازگشت)
اگر در قانونی از یک زنجیر تعریف شده توسط کاربر باشد، پردازش این زنجیر قطع میشود و پیمایش زنجیر فراخواننده از قانون بعد از قانونی که هدف آن این زنجیر بوده، از سر گرفته میشود. اگر در قانونی از یک زنجیر پیش فرض باشد، پردازش بسته قطع میشود و سیاست زنجیر، روی بسته اعمال می شود.
برای یک زنجیر پیش فرض، فقط هدف های پیش فرض ACCEPT و DROP میتوانند به عنوان سیاست (policy) استفاده شوند و پیش فرض آن ACCEPT است. تمام زنجیرهای تعریف شده توسط کاربر، به طور ضمنی یک سیاست RETURN دارند که قابل تغییر نیست. برای تعیین نمودن هدف در iptables از نشانه -j استفاده می شود، مانند: -j DROP
2-10 : پیکربندی iptables
روش های پیکربندی iptables، براساس توزیع (distribution) فرق می کند. در سیستم های جدید Red Hat، میتوان قوانین ذخیره شده iptables را در مسیر زیر یافت:
/ etc / sysconfig / iptables
با اجرای دستور زیر نیز می توانیم تعیین کنیم که کدام سطوح اجرای(runlevels) ،iptables را فعال می سازد: chkconfig –list iptables
با اجرای دستور زیر میتوان iptables را برای سطوح اجرایی 3، 4 و 5 فعال نمود:
chkconfig –levels 345 iptables on
با اجرای دستور زیر میتوان به طور دستی، iptables را راه اندازی کرد:
service iptables start
با دستور زیر نیز می توان آنرا متوقف نمود:
service iptables stop
2-11 : استفاده از iptables
اعمالی که برای مدیریت زنجیرها میتوان انجام داد عبارتند از:
1) ایجاد یک زنجیر جدید با استفاده از -N
2) پاک کردن یک زنجیر خالی با استفاده از -X
3) تغییر سیاست یک زنجیر پیش فرض با استفاده از -P
4) فهرست کردن قوانین یک زنجیر با استفاده از -L
5) حذف (Flush) قوانین از یک زنجیر با استفاده از -F
6) صفر کردن شمارنده بسته و شمارنده بایت برای تمام قوانین یک زنجیر با استفاده از -Z
روشهای گوناگونی برای دستکاری قوانین درون یک زنجیر وجود دارد که عبارتند از:
1) افزودن (append) یک قانون جدید به انتهای یک زنجیر با استفاده از -A
2) اضافه کردن (insert) یک قانون جدید در محلی دلخواه از یک زنجیر با استفاده از -I
3) جایگزین کردن (replace) قانون موجود درمحلی دلخواه از یک زنجیر با استفاده از -R
4) پاک کردن (Delete) قانون موجود در محلی دلخواه از یک زنجیر یا اولین قانونی که مطابق باشد، با استفاده از -D
2-11-1 : مشخصات فیلترسازی (Filtering Specifications)
2-11-1-1 : تعیین نمودن آدرس IP مبدا و مقصد
آدرس های IP مبدا (-S یا –source یا –src) و مقصد (-d یا –destination یا –dst) به چهار روش میتوانند مشخص شوند. متداولترین روش، استفاده از نام کامل مانند localhost یا www.yahoo.com میباشد. روش دوم، مشخص کردن آدرس IP مانند 127.0.0.1 است. روش های سوم و چهارم، امکان مشخص کردن گروهی از آدرس های IP مانند 199.95.207.0/24 یا 199.95.207.0 / 255.255.255.0 را میدهد. هر دو گروه، هر آدرس IP از 199.95.207.0 تا 199.95.207.255 را شامل میشوند. /32 یا/255.255.255.255 پیش فرض است. عدد بعد از ممیز بیانگر تعداد بیت های 1 الگوی زیرشبکه (subnet mask) از چپ به راست است.
2-11-1-2 : تعیین نمودن معکوس
بسیاری از نشانه ها (flags)، مانند -s یا -d میتوانند قبل از آرگومانهای خود یک علامت '!' (یعنی نقیض) داشته باشند تا آدرس های غیر از آدرس داده شده را تطبیق دهند. به عنوان مثال، -s ! localhost هر بسته ای را که از localhost نیاید تطبیق میدهد.
2-11-1-3 : تعیین نمودن پروتکل
پروتکل را میتوان با استفاده از نشانه -p یا –protocol تعیین نمود. پروتکل میتواند یا شماره معادل یک پروتکل باشد مانند 23 برای پروتکل TCP و یا یک نام مانند TCP ، UDP یا ICMP. بزرگ یا کوچک بودن حروف اهمیتی ندارد، پس هردوی tcp و TCP درست هستند. پیشوند '!' را میتوان برای معکوس کردن، قبل از نام پروتکل قرار داد. به عنوان مثال -p ! TCP برای مشخص کردن بسته های غیر TCP است.
2-11-1-4 : تعیین نمودن یک رابط (interface)
گزینه های -i یا –in-interface و -o یا –out-interface نام رابطی را مشخص می کنند که باید تطبیق یابد. یک رابط، وسیله فیزیکی است که بسته، به آن وارد میشود
(-i) یا از آن خارج میشود (-o). با استفاده از دستور ifconfig میتوان فهرست رابط هایی را که فعال هستند، مشاهده نمود.
ایرادی ندارد که رابطی را تعیین کنیم که در حال حاضر موجود نیست. قانون، چیزی را مطابق نخواهد یافت تا زمانیکه رابط نصب شود. این مورد برای پیوندهای
dial-up که از پروتکل نقطه به نقطه (ppp) استفاده می کنند بسیار مفید خواهد بود. اولین رابط از این نوع را با ppp0 نشان میدهیم.
اگر در انتهای نام رابط یک علامت ' + ' قرار دهیم، تمام رابط هایی که نامشان با آن رشته شروع میشود، تطبیق خواهند یافت چه در حال حاضر موجود باشند و چه نباشند. به عنوان مثال، برای تعیین قانونی که تمام رابط های ppp را تطبیق خواهد کرد، از گزینه -i ppp+ استفاده میشود.
قبل از نام رابط میتوان از یک علامت ' ! ' استفاده کرد تا بسته ای تطبیق یابد که رابط مشخص شده را تطبیق نکند مانند -i ! ppp+
2-11-1-5 : تعیین نمودن قطعه ها (Fragments)
دیتاگرام های (datagram) لایه شبکه ممکن است در راه رسیدن به مقصد خود مجبور باشند از شبکه های متفاوتی عبور کنند و پروتکلهای لایه پیوند داده (data-link) که دیتاگرام ها با آنها مواجه خواهند شد، محدودیتهایی دارند. یکی از این محدودیت ها، حداکثر اندازه بسته اجازه داده شده توسط پروتکل است. به عنوان مثال فریم های
Token Ring (حلقوی علامتی) ممکن است به بزرگی 4500 بایت باشد، اما فریم های اترنت (Ethernet) محدود به 1500 بایت هستند. زمانیکه یک دیتاگرام بزرگ ناشی شده از یک شبکه حلقوی علامتی به سمت یک شبکه اترنت مسیردهی می شود، پروتکل لایه شبکه باید آنرا به تکه هایی کوچکتر یا مساوی 1500 بایت تقسیم کند. این فرآیند، قطعه قطعه سازی (fragmentation) نام دارد.
در مدت فرآیند قطعه قطعه سازی، پروتکل لایه شبکه، دیتاگرام را تا جایی قطعه قطعه می کند که هر قطعه برای انتقال توسط پروتکل لایه پیوند داده، به اندازه کافی کوچک باشد. هر قطعه (fragment)، خود به بسته ای تبدیل میشود که به سمت مقصد خود در لایه شبکه حرکت می کند. تا زمانیکه تمام بسته هایی که دیتاگرام را می سازند، به سیستم مقصد نرسند قطعه ها دوباره سازی نمیشوند. در برخی موارد، ممکن است دیتاگرام ها قطعه قطعه شوند و قطعه های آنها ممکن است قبل از رسیدن به مقصدشان، به طور تکراری دوباره قطعه قطعه شوند.
مشکلی که در رابطه با قطعه ها وجود دارد این است که قطعه اول، فیلدهای سرآیند را به طور کامل دارد اما بسته های بعدی فقط یک زیرمجموعه از فیلدهای سرآیند را دارند. بنابراین بررسی سرآیندهای پروتکل (مانند آنچه در مورد تعمیم های ICMP ، TCP و UDP انجام میشود) در داخل قطعه های بعدی امکان پذیر نیست.
مهم است بدانیم که قوانین فیلترسازی چه رفتاری با قطعه ها نشان خواهند داد. با قطعه اول، مانند سایر بسته ها رفتار می شود، اما قطعه های دوم به بعد اینگونه نخواهند بود.
میتوان با استفاده از نشانه -f یا –fragment ، قانونی برای قطعه های دوم و بعد از آن نوشت. همچنین با قرار دادن یک علامت ' ! ' قبل از آرگومان نشانه -f می توان تعیین نمود که قانون، در مورد قطعه های دوم و بعد از آن اعمال نمی شود.
از آنجایی که فیلترسازی، بر قطعه اول اثر خواهد گذاشت و بنابراین از دوباره سازی در میزبان هدف جلوگیری خواهد کرد، لذا معمولاً دادن اجازه عبور به قطعه های دوم و بعد از آن، امن در نظر گرفته می شود.
2-11-2 : تعمیم هایی برای iptables (تطبیق های جدید)
iptables ، قابل تعمیم است، بدین معنی که هر دوی هسته و ابزار iptables می توانند بسط داده شوند تا ویژگیهای جدیدی را فراهم سازند.
تعمیم های هسته معمولاً در زیر شاخه ماجول هسته قرار دارد. تعمیم های iptables، کتابخانه های مشترکی است که معمولاً در مسیر /usr/local/lib/iptables/ قرار دارند که البته این مسیر بسته به توزیع (distribution) فرق می کند.
تعمیم ها دو نوع هستند: هدف های جدید و تطبیق های جدید
برای درخواست راهنمایی در مورد یک تعمیم، ابتدا برای بارکردن (load) آن از نشانه مورد نظر (-p ، -j یا -m) استفاده کرده و به دنبال آن نشانه -h یا –help را می آوریم، به عنوان مثال:
iptables -p tcp –help
2-11-2-1 : تعمیم های TCP
اگر -p tcp را ذکر کرده باشیم، تعمیم های TCP به طور خودکار بار می شوند و گزینه های زیر را فراهم می سازد:
–tcp-flags:
به دنبال آن یک علامت اختیاری '!' و سپس دو رشته از فلگ ها می آید که امکان فیلترسازی فلگ های TCP معینی را می دهد. رشته اول فلگ ها، الگو (mask) است، یعنی یک فهرست از فلگ هایی است که می خواهیم بررسی شوند. رشته دوم فلگ ها بیان می کند که کدام فلگ ها باید یک (set) شوند. به عنوان مثال:
iptables -A INPUT -p tcp –tcp-flags All SYN, ACK -j DROP
این قانون بیان می کند که تمام فلگ ها باید بررسی شوند اما فقط فلگ های SYN و ACK باید یک (set) شوند. 'ALL' معادل است با تمام فلگ ها یعنی: SYN, ACK, FIN, RST,URG,PSH . آرگومان دیگری نیز به نام 'NONE' وجود دارد که بیان می کند هیچ فلگی بررسی نمی شود.
–syn :
می توان به طور اختیاری قبل از آن یک علامت '!' قرار داد. درواقع شکل مختصر شده
'–tcp-flags SYN,RST,ACK SYN' است.
برقراری یک ارتباط TCP به شیوه زیر صورت می گیرد:
1) شروع کننده ارتباط یک بسته TCP بدون هیچگونه داده و با یک کردن فلگ SYN و صفر کردن فلگ ACK، برای طرف مقابل ارسال می کند. در حقیقت ارسال چنین بسته ای به معنای "تقاضای برقراری ارتباط" تلقی می شود.
2) در پاسخ به درخواست ارتباط، در صورتیکه طرف مقابل به برقراری ارتباط تمایل داشته باشد، بسته ای برمی گرداند که در آن بیت SYN، یک و بیت ACK نیز یک است. این بسته نقش "پذیرش یک ارتباط" را بازی می کند.
گاهی اوقات سودمند است که ارتباطات TCP را تنها در یک جهت اجازه دهیم. به عنوان مثال، ممکن است بخواهیم به ارتباطاتی که با یک سرویس دهنده وب خارجی صورت می گیرد اجازه دهیم ولی به ارتباطاتی که از آن سرویس دهنده صورت می گیرد اجازه ندهیم. راه نادرست آن است که بسته های TCP که از سرویس دهنده می آیند را مسدود کنیم، زیرا برقراری ارتباطات TCP نیاز به حرکت بسته ها در هر دو جهت دارد. راه درست، آن است که فقط بسته های به کار رفته برای درخواست برقراری یک ارتباط را مسدود کنیم. این بسته ها ، بسته های SYN نامیده می شوند. از نظر فنی در این بسته ها فلگ SYN ، یک و فلگ های ACK و RST ، صفر هستند. نشانه –syn نیز به همین منظور استفاده می شود. این نشانه فقط برای قانون هایی معتبر است که پروتکل را TCP تعیین کرده اند.
به عنوان مثال، برای مشخص نمودن درخواست های برقراری ارتباط TCP که از آدرس 192.168.1.1 انجام می شود، باید چنین نوشت:
-p tcp -s 192.168.1.1 –syn
–sport یا –source-port :
به دنبال آن یک علامت اختیاری '!' و سپس یا یک پورت TCP واحد و یا یک محدوده از پورت ها می آید. پورت می تواند یا نام یک پورت باشد که لیست پورت ها در مسیر /etc/services قرار دارد و یا شماره معادل یک پورت مانند 21 برای ftp، 23 برای telnet، 80 برای http و 443 برای https. محدوده پورت ها را می توان به یکی از سه روش زیر تعیین نمود:
1) دو پورت که با یک علامت ':' از یکدیگر جدا شده اند.
2) یک پورت با علامت ':' در انتهای آن برای مشخص کردن پورت های بزرگتر یا مساوی با پورت داده شده.
3) یک پورت با علامت ':' در ابتدای آن برای مشخص کردن پورت های کوچکتر یا مساوی با پورت داده شده.
لازم به ذکر است که سه محدوده در مورد پورت های TCP وجود دارد:
1) از پورت صفر تا پورت 1023 که پورت های معروف (well-known) نامیده می شوند و در اکثر سیستم ها فقط پردازش های انحصاری (privileged) می توانند از آنها استفاده کنند.
2) از پورت 1024 تا پورت 49151 که به پورت های ثبت شده (registered) معروفند و در اکثر سیستم ها، پردازش های معمولی کاربر می توانند از آنها استفاده کنند.
3) از پورت 49152 تا پورت 65535 که پورت های اختصاصی (private) یا پویا (dynamic) نامیده می شوند و تحت کنترل یا ثبت IANA
(Internet Assigned Numbers Authority) (مجوز شماره های اینترنتی نسبت داده شده) قرار دارند.
–dport یا –destination-port :
مانند –sport است با این تفاوت که به جای پورت مبدا، پورت مقصدی را تعیین می کند که باید تطبیق شود.
2-11-2-2 : تعمیم های UDP
اگر '-p udp' را ذکر کرده باشیم، تعمیم های UDP به طور خودکار بار می شوند و گزینه های '–source-port' ، '–sport' ، '–dport' و'–destination-port' را فراهم می سازد که آنچه در مورد TCP گفته شد، در اینجا نیز صدق می کند.
2-11-2-3: تعمیم های ICMP
اگر '-p icmp' را ذکر کرده باشیم، تعمیم های icmp به طور خودکار بار می شوند و تنها یک گزینه جدید را فراهم می سازد:
–icmp-type :
به دنبال آن یک علامت اختیاری '!' می آید و سپس یکی از سه مورد زیر می آید:
1) نام یک نوع icmp مانند host-unreachable
2) شماره یک نوع icmp مانند3
3) شماره یک نوع و کد آن که با یک علامت '/' از هم جدا شده اند مانند 3/3
با استفاده از '-p icmp –help' می توان فهرستی از نام انواع icmp را بدست آورد.
2-11-2-4: تعمیم های تطبیق دیگر
تعمیم های دیگر در بسته نرم افزاری netfilter، تعمیم هایی هستند که اگر نصب شوند با گزینه '-m' می توان آنها را فراخوانی نمود.
mac :
این ماجول باید به طور واضح توسط'-m mac' یا '–match mac' مشخص شود. کاربرد آن در تطبیق دادن آدرس اترنت منبع (MAC) بسته ورودی است و در نتیجه فقط در مورد بسته هایی سودمند است که زنجیرهای INPUT و PREROUTING را می پیمایند. این ماجول، فقط یک گزینه را فراهم می سازد:
–mac-source:
به دنبال آن یک علامت اختیاری '!' می آید و سپس یک آدرس اترنت. به عنوان مثال:
–mac-source 00:60:08:91:CC:B7
limit :
این ماجول باید به طور واضح توسط '-m limit' یا '–match limit' مشخص شود. کاربرد آن در محدود نمودن نرخ (rate) تطبیق ها می باشد مانند جلوگیری از پیغام های ثبت وقایع. تا زمانیکه حد نرخ بسته فراتر برده نشود، تطبیق انجام می شود، در غیر این صورت تطبیق، متوقف می شود. دو آرگومان اختیاری دارد:
–limit rate/unit :
تعداد بسته هایی در واحد (unit) زمان را مشخص می کند که به آنها اجازه عبور داده می شود. اگر هیچ آرگومانی داده نشود، مقدار پیش فرض 3/hour در نظر گرفته می شود. اگر هیچ واحدی داده نشود، پیش فرض آن ثانیه است. واحدهای موجود عبارتند از :
hour, minute, second و day .
–limit-burst count:
شمارش (count) بسته هایی را که در یک مقطع (burst) واحد، تطبیق خواهند شد، تنظیم می کند. اگرشمارش داده نشود، مقدار پیش فرض آن 5 است.
به عنوان مثال، برای پذیرفتن تمام ping هایی که حداکثر 10 بار در ثانیه رخ می دهند، از قانون زیر استفاده می کنیم:
iptables -A INPUT -p icmp –icmp-type ping -m limit –limit 10/s -j ACCEPT
لازم به ذکر است که s/ در قانون فوق همان /second می باشد. یادآوری می شود که به فرآیند رفت بسته Echo و بازگشت پاسخ، عمل ping گفته می شود. ( پیام Echo Request وقتی صادر می شود که یک مسیریاب بخواهد بداند آیا یک ماشین خاص شبکه قابل دسترسی و موجود است یا خیر. در پاسخ به دریافت Echo Request، مقصد با ارسال پیام Echo Reply به آن پاسخ می دهد.)
به عنوان مثالی دیگر، برای نادیده گرفتن تمام ping هایی که نرخ آنها از 10 بار در ثانیه بیشتر می شود ، از قانون زیر استفاده می کنیم:
iptables -A INPUT -p icmp –icmp-type ping -m limit ! –limit 10/s -j DROP
اغلب، برای ثبت وقایع به صورت محدود به نرخ (rate-limited) از این تطبیق به همراه هدف LOG استفاده می شود. برای درک بهتر، قانون زیر را در نظر می گیریم که بسته ها را با پارامترهای حدی پیش فرض ثبت می کند:
iptables -A FORWARD -m limit -j LOG
اولین باری که به این قانون دسترسی پیدا می شود، بسته ثبت خواهد شد. درواقع، از آنجایی که مقطع پیش فرض، 5 است لذا پنج بسته اول ثبت خواهند شد. از آن پس، صرفنظر از اینکه چه تعداد بسته به این قانون برسند، بیست دقیقه طول می کشد تا یک بسته توسط این قانون ثبت شود. همچنین هر بیست دقیقه ای که بدون تطبیق یک بسته سپری می شود، یکی از مقاطع دوباره بازیابی خواهد شد. اگر در مدت 100 دقیقه، هیچ بسته ای به این قانون برخورد نکند، مقطع به طور کامل دوباره تنظیم خواهد شد.
همچنین می توان از این ماجول به منظور اجتناب از حملات گوناگون اخلال در سرویس دهی (DOS) با یک نرخ سریعتر برای افزایش حساسیت استفاده نمود.
به عنوان مثال، حمله نوع SYN Flood (سیل بسته های SYN) را بررسی می کنیم. یک ارتباط TCP، طبق قاعده دست تکانی سه مرحله ای (3-Way Handshake) صورت می گیرد. مرحله اول، ارسال بسته TCP با یک کردن فلگ SYN برای ماشین سرویس دهنده می باشد (ارسال بسته SYN) به شرطی که در طرف سرویس دهنده، پورت مربوطه باز باشد و پروسه ای به آن پورت گوش بدهد و در مرحله دوم یک بسته با یک کردن فلگ های SYN و ACK آن ازطرف سرویس دهنده برای متقاضی ارتباط ارسال می شود.
مسئله مهم آنست که پروسه TCP در سمت سرویس دهنده، مجبور است پس از دریافت بسته SYN، یک قطعه کوچک از فضای حافظه خود را برای ذخیره محتوای فیلد Sequence Number ( برای استفاده در مرحله سوم) اختصاص دهد. هر بار سرویس دهنده، یک بسته SYN دریافت کند یک ارتباط "نیمه باز" (Half open) به وجود می آید. پروسه TCP، از تمام ارتباطات نیمه باز، یک صف تشکیل می دهد و اطلاعات لازم از هر ارتباط نیمه باز را درون این صف ذخیره می کند.
حال فرض می کنیم که یک بسته SYN به مقصد برسد و اطلاعات لازم از آن درون صف ذخیره شود ولی مراحل بعدی آن ادامه نیابد. اطلاعات درون صف تا مدت زمانی بین 45 ثانیه تا 360 ثانیه باقی خواهد ماند و سپس آن اطلاعات از صف دور انداخته خواهد شد.
در حمله SYN Flood، نفوذگر در یک حلقه بی نهایت بسته های SYN را تولید و با آدرسهای IP دروغین به سمت هدف ارسال می کند. در سرویس دهنده به ازای دریافت هر یک از آنها، یک عنصر به صف و یکی به تعداد ارتباطات نیمه باز اضافه می شود. چون هیچگاه این ارتباط نیمه باز TCP تکمیل نخواهد شد لذا صف مربوطه شروع به رشد می کند و تا سپری شدن زمان انقضاء، صف خالی نخواهد شد.
اگر نفوذگر، پهنای باند کافی در اختیار داشته باشد تا بتواند تعداد بسیار زیادی بسته SYN را به سمت سرویس دهنده هدف بفرستد به گونه ای که قبل از زمان انقضا و خالی شدن صف، فضای مجاز حافظه آن پر شود، در صف جایی برای پذیرش تقاضای برقراری ارتباط TCP باقی نمی ماند و سرویس دهنده عملاً از کار می افتد و این همان هدفی است که نفوذگر دنبال می کرده است.
برای حفاظت در برابر حمله SYN Flood ، از دستور زیر می توان استفاده نمود:
iptables -A FORWARD -p tcp –syn -m limit –limit 1/s -j ACCEPT
تطبیق حالت (State):
مفیدترین معیار تطبیق توسط تعمیم 'state' فراهم می شود که تحلیل ردیابی ارتباط (connection-tracking) مربوط به ماجول ip_conntrack را تفسیر می کند.
مشخص نمودن '-m state' گزینه زیر را فراهم می سازد:
–state state, state, … :
اگر ارتباطی که بسته به آن تعلق دارد، یکی از حالت های جدول 2-4 را داشته باشد بسته تطبیق خواهد یافت. استفاده از علامت '!' نیز اختیاری است.
جدول 2-4: حالت های ردیابی ارتباط
حالت
توضیح
NEW
بسته ای که یک ارتباط جدید را آغاز می کند یا بخشی از یک ارتباط است که هنوز بسته ها را در هر دو جهت ندیده است.
ESTABLISHED
بسته ای که به یک ارتباط موجود تعلق دارد مانند یک بسته پاسخ.
RELATED
بسته ای که ارتباطی جدید را آغاز می کند اما این ارتباط جدید، مربوط به یک ارتباط موجود است مانند بسته ای که یک ارتباط داده ای ftp را ایجاد می کند.
INVALID
بسته ای که به علتی مانند پربودن حافظه یا علل دیگر، قابل شناسایی نیست و به هیچ ارتباط ردیابی شده ای تعلق ندارد. معمولاً این بسته ها drop می شوند.
2-11-3: مشخصات هدف (Target Specifications)
علاوه بر هدف های پیش فرض، دو نوع هدف دیگر وجود دارد که عبارتند از :
* زنجیرهای تعریف شده توسط کاربر
* هدف های تعمیمی
2-11-3-1 : زنجیرهای تعریف شده توسط کاربر
طبق قرارداد، زنجیرهای تعریف شده توسط کاربر، با حروف کوچک هستند تا بتوانیم آنها را از زنجیرهای پیش فرض متمایز سازیم.
زمانیکه یک بسته با یک قانون تطبیق می یابدو هدف آن قانون، یک زنجیر تعریف شده توسط کاربر است، بسته شروع به پیمایش قوانین در آن زنجیر تعریف شده توسط کاربر می کند. اگر آن زنجیر در مورد سرنوشت بسته تصمیم نگیرد آنگاه هر وقت که پیمایش زنجیر تعریف شده توسط کاربر، تمام شود پیمایش زنجیر فعلی از قانون بعدی آغاز می شود.
زنجیرهای تعریف شده توسط کاربر می توانند به دیگر زنجیر های تعریف شده توسط کاربر، پرش (jump) کنند ولی نباید حلقه ای (loop) ایجاد شود زیرا در این صورت بسته ها drop خواهند شد.
2-11-3-2 : هدف های تعمیمی
یک تعمیم هدف، شامل یک ماجول هسته و یک تعمیم اختیاری به iptables است تا گزینه های خط فرمان جدیدی را فراهم سازد.
LOG:
این ماجول، ثبت وقایع مربوط به بسته های تطبیق یافته را توسط هسته امکان پذیر می سازد. این ماجول، گزینه های اضافی زیر را فراهم می سازد:
–log-prefix :
به دنبال آن یک رشته حداکثر 29 کاراکتری می آید. این رشته پیغام، به ابتدای پیغام ثبت وقایع فرستاده می شود، تا به طور منحصر بفرد قابل شناسایی باشد.
–log-level:
به دنبال آن یک شماره سطح یا یک نام سطح می آید. ثبت وقایع، در سطح مشخص شده انجام می شود. سطح پیش فرض، warning است.
جدول 2-5 ، فهرست شماره و نام سطوح ثبت وقایع را نشان می دهد. کوچک یا بزرگ بودن حروف نام سطوح، اهمیتی ندارد.
جدول 2-5: سطوح ثبت وقایع
سطح
نام
توضیح
0
emerg یا panic
چیزی به طور غیرقابل قبولی اشتباه است. احتمال دارد که سیستم، دچار فروپاشی (crash) شود.
1
alert (اعلام خطر)
توجه فوری مورد نیاز است.
2
crit
خرابی بحرانی سخت افزاری یا نرم افزاری
3
err یا error
معمولاً برای گزارش مشکلات سخت افزاری، توسط راه اندازها (drivers) استفاده می شود.
4
warn یا warning (هشدار)
یک چیز درست نیست ولی مشکل، جدی نیست.
5
notice (اطلاع)
هیچ مشکلی وجود ندارد.
6
info
اطلاعات کلی از قبیل گزارش های راه انداز در مورد سخت افزار
7
debug
اشکال زدایی
2-11-4: عملیات روی یک زنجیر کامل
یک ویژگی مفید iptables قابلیت گروه بندی کردن قوانین مرتبط با یکدیگر در زنجیرها می باشد. نام زنجیرها حداکثر می تواند 31 حرف طول داشته باشد.
2-11-4-1 : ایجاد یک زنجیر جدید
با استفاده از گزینه های '-N' یا '–new-chain' می توان یک زنجیر جدید ایجاد نمود. به عنوان مثال، دستور زیر زنجیری به نام test ایجاد می کند:
iptables -N test
2-11-4-2 : حذف یک زنجیر
با استفاده از گزینه های '-X' یا '–delete-chain' می توان یک زنجیر را حذف نمود. به عنوان مثال، دستور زیر زنجیر test را حذف می کند:
iptables -X test
محدودیتهایی برای حذف زنجیرها وجود دارد که عبارتند از:
* زنجیر باید خالی باشد.
* زنجیر، نباید هدف قانون دیگری باشد.
* زنجیرهای پیش فرض را نمی توان حذف نمود.
اگر نام زنجیری را مشخص نکنیم، تمام زنجیرهای تعریف شده توسط کاربر، در صورت امکان، حذف خواهند شد.
2-11-4-3 : خالی کردن (Flushing) یک زنجیر
با استفاده از گزینه های '-F' یا '–flush' میتوان تمام قوانین یک زنجیر را پاک نمود، به عنوان مثال، دستور زیر تمام قوانین زنجیر FORWARD را پاک می کند:
iptables -F FORWARD
اگر نام زنجیری را مشخص نکنیم، تمام زنجیرها خالی خواهند شد.
2-11-4-4 : فهرست گیری از یک زنجیر
با استفاده از گزینه های '-L' یا '–list' میتوان از تمام قوانین یک زنجیر، فهرست گیری کرد. اگر نام زنجیری را مشخص نکنیم، تمام زنجیرها (حتی زنجیرهای خالی) فهرست خواهند شد.
2-11-4-5 : صفر کردن شمارنده ها
با استفاده از گزینه های '-Z' یا '–zero' میتوان شمارنده های بایت و بسته زنجیر مشخص شده را صفر نمود. اگر نام زنجیری مشخص نشود، شمارنده های بایت و بسته تمام زنجیرها صفر میشود.
2-11-4-6 : تنظیم نمودن سیاست (policy)
با استفاده از گزینه های '-P' یا '–policy' میتوان سیاست یک زنجیر پیش فرض را تعیین نمود. تنها زنجیرها پیش فرض، سیاست دارند زیرا اگر یک بسته به انتهای یک زنجیر تعریف شده توسط کاربر برسد، پیمایش در زنجیر پیشین ادامه می یابد. تنها هدف های پیش فرض را میتوان به کار برد. به عنوان مثال، دستور زیر سیاست پیش فرض زنجیر FORWARD را روی DROP تنظیم می کند:
iptables -P FORWARD DROP
2-11-4-7 : تغییر دادن نام یک زنجیر
با استفاده از گزینه های '-E' یا '–rename-chain' میتوان نام یک زنجیر را تغییر داد. شکل کلی این گزینه به صورت زیر است:
-E chain newchain
2-12: ترکیب NAT با فیلترسازی بسته
2-12-1 : ترجمه آدرس شبکه (NAT)
NAT، تغییر آدرس ها و یا پورت های بسته های شبکه، در هنگام عبور آن از یک کامپیوتر است. کامپیوتر اجرا کننده NAT روی بسته ها می تواند مبدا یا مقصد بسته ها باشد و یا می تواند یکی از کامپیوترهای مابین مسیر مبدا تا مقصد باشد.
جدول پیش فرض nat به منظور استفاده در برنامه های کاربردی NAT بنا نهاده شده است. منطق NAT در iptables این امکان را به ماجولهای افزودنی (plug-in) می دهد تا به پروتکل هایی که آدرس ها را در داخل داده های در حال تغییر، جا می دهند در مدیریت بسته ها کمک کند. بدون ماجول کمکی (helper module)، بسته ها تغییر داده می شوند تا به طرف میزبان های متفاوت حرکت کنند، اما هنوز داده های در حال تغییر برنامه کاربردی از آدرس های قبل از اجرای NAT (Pre-NAT) استفاده می کنند و همین امر، برنامه کاربردی را از کارکردن باز می دارد. برای استفاده از این ماجول های کمکی باید از گزینه modprobe به منظور نصب ماجول هسته استفاده نماییم. شکل کلی این گزینه به یکی از دو صورت زیر است:
* -M cmd
* –modprobe = cmd
دستور modprobe یک دستور همه منظوره است که دستور insmod را برای بارکردن (load) ماجول ها به داخل هسته و دستور rmmod را برای تخلیه کردن (unload) ماجول ها از هسته فراخوانی می کند.
جدول 2-6، ماجول های کمکی NAT را نشان می دهد.
جدول 2-6: ماجول های کمکی NAT
ماجول کمکی
پروتکل
ip_nat_amanda
Amanda backup Protocol
ip_nat_ftp
File Transfer Protocol
ip_nat_irc
Internet Relay Chat
ip_nat_snmp_basic
Simple Network Management Protocol
ip_nat_tftp
Trivial File Transfer Protocol
2-12-2: NAT مبدا و Masquerading
SNAT برای به اشتراک گذاشتن یک ارتباط اینترنتی واحد در بین کامپیوترهای یک شبکه به کار می رود. کامپیوتر متصل به اینترنت، به عنوان یک دروازه (gateway) عمل می کند و برای بازنویسی بسته ها جهت ارتباط های مابین اینترنت و شبکه داخلی، از SNAT استفاده می کند. آدرس مبدا بسته های خروجی، با آدرس IP ایستای (static) ارتباط اینترنتی دروازه جایگزین می شود. زمانیکه کامپیوترهای خارجی پاسخ می دهند، آنها آدرس مقصد را روی آدرس IP ارتباط اینترنتی تنظیم می کنند و دروازه، آن بسته ها را قطع خواهد نمود و آدرس های مقصد آنها را به کامپیوتر صحیح داخلی تغییر می دهد و آنها را به سمت شبکه داخلی حرکت خواهد داد.
از آنجاییکه SNAT مستلزم تغییر آدرس های مبدا و یا پورت های مبدا بسته ها درست قبل از ترک نمودن هسته می باشد، لذا این عمل از طریق زنجیر POSTROUTING از جدول nat انجام می شود.
دو روش برای انجام دادن SNAT به کمک iptables وجود دارد.
هدف تعمیمی SNAT در مواقعی به کار می رود که کامپیوتر دروازه، یک آدرس IP ایستا دارد و هدف تعمیمی MASQUERADE در مواقعی به کار می رود که کامپیوتر دروازه، یک آدرس IP پویا (dynamic) دارد.
می توان برای برقراری SNAT روی رابط eth1، قانون ساده زیر را در زنجیر POSTROUTING از جدول nat قرار داد:
iptables -t nat -A POSTROUTING -O eth1 -j SNAT
دستور مشابه برای masquerading به صورت زیر است:
iptables -t nat -A POSTROUTING -O eth1 -j MASQUERADE
لازم به توضیح است که هدف SNAT تنها یک گزینه دارد که شکل کلی آنرا در زیر مشاهده می کنید:
–to-Source a1[-a2][:p1-p2]
علامت کروشه، نشان دهنده اختیاری بودن است. a1 و a2 برای مشخص کردن یک محدوده از آدرس های مبدا و p1 و p2 برای مشخص کردن یک محدوده از پورت ها به کار می رود. در واقع این گزینه، فیلد آدرس IP مبدا درون بسته را به آدرس داده شده تغییر می دهد (برای پروتکل های TCP یا UDP).
همچنین هدف MASQUERADE نیز تنها یک گزینه دارد که شکل کلی آنرا در زیر مشاهده می کنید:
–to-ports p1[-p2]
علامت کروشه، نشان دهنده اختیاری بودن است. این گزینه، پورت های مبدا بسته ها را به پورت یا محدوده ای از پورت های داده شده تغییر می دهد.
2-12-3 : NAT مقصد
DNAT، سرویس های مشخصی از یک شبکه داخلی را بدون پیوند مستقیم دادن کامپیوتر های داخلی با اینترنت در معرض دنیای خارج قرار می دهد، و از آنجاییکه در هر پورتی، بیش از یک سرویس را نمی توان در معرض قرار داد لذا تنها یک ارتباط اینترنتی (آدرس IP عمومی) مورد نیاز است. کامپیوتر دروازه، ارتباط با پورت های مشخص را به پورت ها و کامپیوترهای داخلی اختصاص داده شده، تغییر جهت (redirect) می دهد و آنها را برای ترافیک برگشتی مرتب می کند تا به آدرس اصلی در خارج شبکه برگردند.
از آنجایی که DNAT مستلزم تغییر آدرس های مقصد و یا پورت های مقصد بسته ها درست قبل از مسیردهی شدن به سمت پردازش محلی یا حرکت رو به جلو (forward) به سمت کامپیوترهای دیگر می باشد، لذا این عمل از طریق زنجیر PREROUTING از جدول nat انجام می شود.
به عنوان نمونه، برای به جلو راندن (forward) ارتباطات وارد شونده (inbound) روی پورت 80 (HTTP) یک دروازه، به سمت یک سرویس دهنده وب داخلی در حال اجرا بر روی پورت 8080 از آدرس 192.168.1.3 می توان از قانون زیر استفاده نمود:
iptables -t nat -A PREROUTING -i eth1 -p tcp –dport 80 -j DNAT
–to-destination 192.168.1.3:8080
همانطوریکه مشاهده می شود، هدف DNAT گزینه ای دارد که شکل کلی آن به صورت زیر است:
— to-destination a1[-a2][:p1-p2]
علامت کروشه، نشان دهنده اختیاری بودن است. a1 و a2 برای مشخص کردن یک محدوده از آدرس های مقصد به کار می روند و p1 و p2 برای مشخص کردن یک محدوده از پورت ها به کار می روند ( برای پروتکل های TCP یا UDP).
اگر چندین آدرس مقصد، مشخص شود آنگاه ارتباط ها در بین این آدرس ها توزیع می شوند. اطلاعات مربوط به ردیابی ارتباط (Connection tracking)، تضمین می کند که بسته های هر ارتباط به میزبان و پورت یکسانی خواهند رفت.
2-13: ذخیره نمودن و برگرداندن قوانین
بعد از آنکه قوانین را ایجاد نمودیم، می توانیم با استفاده از دستور زیر آنها را ذخیره نماییم:
/sbin/iptables-save
برای ذخیره نمودن اطلاعات iptables در یک فایل متنی می توان به عنوان نمونه از دستور زیر استفاده نمود:
/sbin/iptables-save > iptables.txt
برای برگرداندن اطلاعات پشتیبان، می توان از دستور زیر استفاده نمود:
/sbin/iptables-restore
برای برگرداندن قوانین iptables از یک فایل متنی می توان به عنوان نمونه از دستور زیر استفاده نمود:
/sbin/iptables-restore < iptables.txt
لازم به ذکر است که iptables-restore ، قوانین را به قوانین فعلی iptables اضافه می کند. معمولاً قبل از آنکه قوانین به داخل جداول برگردانده شوند، جداول باید خالی شوند (flush)، اما می توان با استفاده از گزینه '-n' یا '–noflush' قوانین جدید را به قوانین فعلی اضافه نمود.
2-14 : خلاصه
سیستم زیر مجموعه هسته لینوکس که پردازش بسته های شبکه را بر عهده دارد، "Netfilter" نام دارد و "iptables"، دستوراتی برای پیکربندی آن است که در نسخه های جدیدتر از 2/2 وجود دارد. بسته نرم افزاری "iptables" از "masquerading" و فیلترسازی که در هسته 3/2 و بعد از آن وجود دارند، پشتیبانی می کند. "masquerading" عبارت است از تغییر آدرس IP مبدا یا مقصد یک بسته برای آنکه قابل مسیردهی به سمت اینترنت باشد. به عنوان مثال بیان شد که اگر بخواهیم ترافیک را از شبکه های اختصاصی به سمت اینترنت مسیردهی کنیم باید از "masquerading" یا "ترجمه آدرس شبکه/ پورت" استفاده نماییم. "mangling" عبارت است از تغییر در فیلدهای سرآیند بسته یا فیلد بار کاری. masquerading ، نوعی "Source Nat" است زیرا سیستم، بسته ها را بازنویسی می کند تا وانمود کند که بسته ها از خودش ناشی شده اند. "IP forwarding" عبارت است از توانایی یک سیستم مبتنی بر لینوکس در عمل کردن به عنوان یک مسیریاب.
حسابداری بسته، عبارت است از خلاصه کردن میزان استفاده از پروتکل در یک شبکه IP.
Iptable از سه جدول پیش فرض به نامهای Filter ، Nat و Mangle استفاده می کند که هر جدول، تعدادی زنجیر پیش فرض دارد. زنجیر، مجموعه ای از اقدامات است که باید روی یک بسته صورت گیرند. سیاست زنجیر، سرنوشت بسته هایی را که به انتهای آن زنجیر می رسند تعیین می کند. هر قانون موجود در زنجیر، از یک یا چند معیار تطبیق و یا مشخصات هدف تشکیل میشود. معیارهای تطبیق تعیین می کنند که کدام بسته های شبکه تحت تاثیر قرار خواهند گرفت و مشخصات هدف تعیین می کند که چگونه این بسته ها، تحت تاثیر قرار خواهند گرفت.
هدف های پیش فرض در iptables عبارتند از ACCEPT ، DROP ، QUEUE و RETURN.
تمام زنجیرهای تعریف شده توسط کاربر، به طور ضمنی سیاست RETURN دارند. برای فعال نمودن iptables باید سطوح اجرایی را روی 3 ، 4 و 5 تنظیم کنیم. نحوه به کارگیری iptables با استفاده از فلگ ها و گزینه های متنوع آن بیان شد. همچنین بیان شد که iptables، "قابل تعمیم" است؛ بدین معنی که هر دوی هسته و ابزار iptables میتوانند تعمیم یابند تا ویژگیهای جدیدی را فراهم سازند و در این راستا تعمیم های سه پروتکل TCP ، UDP و ICMP توضیح داده شد. همچنین بیان شد که تعمیم های دیگری هم وجود دارند که اگر نصب شوند، با گزینه '-m' میتوان آنها را فراخوانی نمود. در مبحث "ترکیب NAT با فیلترسازی بسته" بیان شد که دو روش برای انجام دادن SNAT در iptables وجود دارد: هدف تعمیمی "SNAT" در مواقعی به کار می رود که کامپیوتر "gateway"، یک آدرس IP ایستا دارد و هدف تعمیمی "MASQUERADE" در مواقعی به کار می رود که این کامپیوتر، یک آدرس IP پویا دارد. در انتهای فصل نیز نحوه ذخیره و بازیابی قوانین iptables بررسی شد.
نتیجه گیری:
یک دیوار آتش نمی تواند و تضمین هم نمی کند که شبکه یک سازمان، صددرصد امن است؛ بلکه برای حفاظت بیشتر، بهتر است که دیوار آتش به همراه دیگر معیارهای امنیت استفاده شود. حتی در آن صورت نیز، هیچ تضمینی وجود ندارد که شبکه، صددرصد امن باشد. موثرترین راه حل های دیوار آتش به گونه ای پیاده سازی میشوند که تمام ترافیک شبکه از میان آنها عبور کند. اگر یک دیوار آتش به طور فیزیکی یا منطقی قابل دور زدن باشد، آنگاه تضمینی وجود ندارد که شبکه سازمان، امن باشد. پیاده سازی موفق دیوار آتش، ارتباط مستقیمی با سیاست امنیتی خوب اندیشیده شده سازمان دارد. به کمک ابزار "iptables" که در سیستم عامل لینوکس به منظور پیکربندی قوانین یک دیوار آتش از نوع "فیلتر کننده بسته" تعبیه شده است، می توانیم از امکاناتی نظیر "masquerading"، "mangling"، "accounting"، "logging"، "forwarding" و "NAT" استفاده نماییم.
پیشنهادات:
پیشنهاد می کنم که به منظور مطالعه و آشنایی بیشتر در مورد پیاده سازی دیوار آتش، از اسکریپت های دیوار آتش موجود استفاده شود. یکی از این اسکریپت ها، اسکریپت پروژه "MonMatha" است. برای اطلاعات بیشتر ، میتوان به URL زیر مراجعه نمود:
http://monmotha.mplug.org/firewall/index.php
1
7