هوس کردم در مورد حضرت Netfilter ( س ) در لینوکس کمی توضیح بدم . البته بی دلیل هم نیست ! به خاطر اینکه خیلی ها اون رو با access-list های در Cisco مقایسه می کنند که این یک توهین بزرگ به Netfilter محسوب میشه :) برای همین تصمیم گرفتم کمی در مورد مفاهیم و تئوریش توضیح بدم شایدم بعدا در مورد ریز کاراش و نحوه استفاده ازش بیشتر توضیح دادم .
ببینید Netfilter در Linux بر پایه سه چیز استواره :
1- Rules
2- Chains
3- Tables
البته همه اینا ترجمه فارسی داره، اما یکم بی خود می شه اگه اسم های فارسی به کار ببریم . برای همین همین اسمهای انگلیسیش رو به کار می برم .
اول از همه در مورد Rules :
پائینترین مرحله در Netfilter همین Rule ها هستند . شما با مشخص کردن Rule در حقیقت مشخص می کنید که می خواهید عمل Filtering یا Manipulation ( همون دستکاری packet ها ) انجام بشه . که البته خود دستکاری packet ها انواع و مراتبی داره . اصولا یک Rule از 4 بخش تولید شده :
1- table ای که این rule به آن تعلق دارد . در صورتیکه هیچ نام table ای ذکر نشود netfilter به صورت خودکار آنرا عضو table ای به نام filter که کارش از نامش پیداست قرار می دهد .
2- Chain ای که این rule به آن تعلق دارد . مثلا این rule در هنگام ورود packet باید اعمال شود ( INPUT ) یا در هنگاهی که تصمیم به فرستان packet به جای دیگری گرفته می شود ( FORWARD ) و یا هنگامیکه می خواهد از Device خروجی شبکه خارج شود ( OUTPUT ) . البته در table های مختلف مراتب مختلفی وجود داره . اینایی که من گفتم مربوط به filter هستش .
3- ساختار filter کردن یا دستکاری در packet . مثلا اینکه چه قوانینی برای تصمیم گیری در مورد اینکه آیا یک packet باید filter بشود یا نه . این قوانین بر اساس خصوصیات متعددی می تواند باشد که از جمله آنها به source address و destination address و شماره درگاه ورودی یا خروجی و ... می توان اشاره کرد که این خودش کلی بحثه .
4- نتیجه rule . به این معنی که در صورتیکه در بخش ساختار مشخص شد که باید عملی بر روی این packet انجام شود این عمل چیست . مثلا در بحش filter مهمترین عمل DROP می باشد یا مثلا ACCEPT . در بعضی مواقع شما نمی خواهید هیچ عملی بر روی packet انجام شود و صرفا می خواهید آنها را LOG کنید . بسیار اعمال متفاوتی شما در این قسمت می توانید برای rule خود بسته به موقعیت ، table ای که در آن هستید و همچینین Chain ای که استفاده می کنید ، تعریف کنید که خود این باز بحث داره .
دوم در مورد Chain ها :
rule های ساده و ابتدایی به راحتی می توانند در Chain های پیش فرض موجود قرار گیرند . تعدادی chain هستند به صورت پیش فرض همیشه در اختیار مدیر شبکه قرار دارند مثل INPUT و OUTPUT و ... . این chain های پیش فرض می توانند دارای یک نتیجه عمل پیش فرض نیز باشند، که در صورتیکه در هیچ یک از rule های آن chain صدق نکردند ، سیستم بداند در حالت عادی باید چه عملی را بر روی این packet های انجام دهد .
همچنین برای مدیریت filter ها و firewall ها و در بعضی موارد route های حجیم و زیاد شما می توانید برای آسانتر شدن کار خود chain های خودتان را به سیستم علاوه بر آن chain های default اضافه کنید . این chain ها می توانند خودشان شامل یک سری rule باشند که نتیجه عمل یک یا چند rule در chain های default قرار می گیرند . ( کمی پیچیده شد، می دونم ، اما سعی می کنم در مورد این user defined chains بعدا بیشتر بنویسم . اما بدون اینها هم فعلا کار شما با همون default ها راه میفته )
و آخر در مورد table ها :
به خاطر اینکه شما اعمال مختلفی رو می تونید بر روی packet ها انجام دهید و بر اساس اون کاری که می خواهید انجام دهید قاعدتا rule های مختلفی باید تعریف کنید ، آمده اند و table های مختلف ایجادکرده اند که شما برای انجام اعمال مختلف بتوانید rule مربوطه را در table مربوطه نیز تعریف کنید . این کار بیشتر برای ساده تر کردن مدیریت rule ها و منطقی کردن عمل filtering و manipulating انجام می شود . اصولا 3 عدد table بیشتر در netfilter در حالت عادی وجود ندارد :
1- table ای به نام filter که برای packet filtering استفاده می شود . همان قسمتی است که برای درست کردن یک firewall شما به آن احتیاج دارید . این table در حقیقت همان table پیش فرض است که در صورت ذکر نکردن نام هیچ table ای rule های شما در این table قرار می گیرند .
2- table ای به نام nat که وظیفه اش ترجمه packet ها است . به این معنی که شما در این table می توانید مقصد و یا منبع packet را به آدرسهای دیگری تغییر دهید و آنها را مدیریت کنید . IP Masquerading که بسیار مشهور و به درد بخوراست برای ایجاد دسترسی IP های Invalid به شبکه در این قسمت قرار دارد .
3- table ای به نام mangle که شامل rule ها و chain هایی می شود که می خواهند خواص دیگری از packet را تغییر دهند یا اینکه آنها علامت گذاری کنند که توسط برنامه دیگری بعدا استفاده شوند . این table کاربرد کمتری برای تازه کارها و یا کسانی که از سیستم های دیگری وارد این سیستم شده اند دارد ، اما فوق العاده مفهوم زیبا و قشنگی دارد و برای application layer filtering بسیار کاربر دارد .
سعی کردم خیلی ساده و ابتدایی در مورد تئوری و مفهوم netfilter توضیح بدهم و برای همین خیلی مسائل که شاید در ابتدا ضروری نباشد رو توضیح ندادم . اگر علاقمندید می تونید برید و از سایتش HOWTO هاش رو بخونید . منم اگر بیشتر فرصت کردم در مورد syntax دستورات و نحوه استفاده از اونها بعدا می نویسم .
متشكرم.
[ JraNil ] | [ یکشنبه، 11 آبانماه 1382، 7:18 بعدازظهر ]