آموزش فایروال قدرت مند IPTABLES :) قسمت دوم

IPTABLESخب تا الان با خود iptables و نحوه کارکردش آشنا شدید(..,tables, chain, rules, target)تو این اموزش میخوایم راجب کامند های iptables صحبت کنیم... فایروال iptables یه سری کامند داره که میتونید برای نوشتن قوانین مورد نظر از اونها استفاده کنید، برای هر کامند هم یه مثال به همراه سینتکسش نوشته شده .نکته : وقتی دارید با iptables کار میکنید باید با دست رسی root کامند ها رو اجرا کنید. (sudo)-L, --listاز این کامند برای نشون دادن تمام قوانین موجود در همه زنجیرها یا فقط زنجیره داده شده یا فقط قانون مشخص شده در یک زنجیره استفاده میشود( لیست قوانین رو نشون میده از کل به جز نوشتم ).Syntax : iptables -L [ chain ] [ rule-number ] [ table ] Example : iptables -L iptables -L -t nat iptables -L INPUT -t nat iptables -L INPUT 10 -t nat-T, --tableاز این کامند برای انتخاب کردن جدول مورد نظر استفاده میشود. ( البته به تنهایی استفاده نمیشه معمولا برای نمایش قانون های موجود در جدول و یا نوشتن یه قانون جدید و... استفاده میشه )Syntax : iptables [ ... ] -t [ table ] [ ... ] Example : iptables -L -t nat-j, --jumpاین هدف پکت رو مشخص میکنه ، اگه پکت با قانون نوشته شده مطابقت داشت اون هدف اعمال میشه. میتونید از این تارگت ها استفاد کنیدACCEPT ( پذیرفتن پکت های مچ شده با قانون نوشته شده )DROP ( رد کردن پکت های مچ شده با قانون نوشته شده )LOG ‌ ( برای لاگ گرفتن استفاده میشود )REDIRECT( برای ریدایرکت کردن پکت مورد نظر استفاده میشه مثلا میتونیم بگیم همه پکت هایی .که از فلان جا میاد رو بفرست فلان جا!! تو مثال ها باهاش کار میکنیم ‌)REJECT ( REJECT )RETURN ( RETURN )QUEUE ‌( QUEUE )MARK ( MARK )SNATآدرس ip پکت رو تغیر میده . همچنین میتونه پورت منبع رو هم تو هدر tcp/udp تغیر بده. کاربرد اصلیش ترجمه ip/port پرایویت به ip/port پابلیک هستش برای پکت هایی که از شبکه ما خارج میشن. تو جدول nat و در زنجیره POSTROUTING استفاده میشود.MASQUERADEدقیقا مثل SNAT هستش با این تفاوت که سیستم بصورت خودکار دنبال ip پابلیک برای ترجمه می گرده. MASQUERADE بار و عملیات اضافی به سیستم تحمیل می کنه، هر چند امتیاز بزرگی نسبت به SNAT داره و اون هم اینه که با هر بار تغییر ip پابلیک، تغییری در عملکرد سیستم به وجود نمیاد.(بعضی از سرویس دهند ها از طریق DHCP ،PPPoE و … اینترنت رو در اختیار شما قرار میدن که با هربار خاموش روشن کردن نت ip پابلیک تون عوض میشه پس برای همین میتونید از MASQUERADE استفاده کنید .... ). مثلا داخل یه شبکه هستید و یکی از سیستم ها نت داره ولی بقیه ندارن، میتونید داخل اون سیستمی که نت داره بگید اگر پکتی از سمت فلانی اومد، بفرستش به بیرون به جایی که میخواد بره فقط بگو که من هستم یعنی ایپی مبدا پکت رو بکن ایپی من، اینشکلی دوتا سیستم دارن از طریق یه نتورک درخواستشون رو به بیرون میفرستن.DNAT ( برای ترجمه آدرس مقصد بسته استفاده می شود )TOS ( TOS )ECNبرای حذف کردن بیت های ECN در هدر ipv4 استفاده میشود و فقط ارگمان ecn-tcp-remove-- رو قبول میکنه.DSCP ( DSCP )اصولاً DSCP راهی است برای تمایز سرویس های مختلف به دسته های جداگانه و بر این اساس ، از طریق روترها به آنها اولویت متفاوتی می دهد.TCPMSSاز این تارگت میتوان برای تغیر مقدار MSS ( Maximum Segment Size ) پکت های tcp syn استفاده کرد. مقدار MSS برای کنترل حداکثر اندازه بسته ها هستش ( تو شرایط عادی به معنای MTU منهای 40 بایت است)ULOG ( در فضای کاربر برای گرفتن لاگ پکت ها استفاده میشود )Syntax : iptables [ ... ] -j [ Target ] Example : iptables -A INPUT -p icmp -j DROPنکته :‌ اگر از این پارامتر و همینطور پارامتر g- استفاده نشود هیچ تاثیری بر روی پکت دریافتی نخواهد داشت.فقط شمارنده اون قانون زیاد میشه همین.-A, --appendبرای اضافه کردن یک قانون به انتهای زنجیره قوانین موجود .Syntax : iptables -A [ chain ] [ rule ] Example : iptables -A INPUT -j DROP-C, --checkقبل از اضافه کردن یه قانون جدید میتونید با این کامند چک کنید که قانون از قبل وجود داره یا نه .Syntax: iptables -C [ chain ] [ rule ] Example: iptables -C INPUT -j DROPبعد از اجرا اگه خروجیی نداد پس وجود داره اگه خروجی داد تو خروجی میگه که وجود نداره میتونید با دستور زیر هم چک کنید .( exit status دستور قبل رو میده )‌echo $?در صورت وجود 0 برمیگردونه در غیر اینصورت 1.--line-numbersبرای نمایش عدد(شمارنده*) مربوط به هر قانون استفاده میشود( اگه قانونی وجود نداشته باشه داخل خروجی تو اولین قسمت یه num مینویسه ولی اگه قانونی وجود داشته باشه بجای اون num شماره مربوط به اون قانون رو مینویسه )‌Syntax : iptables -L --line-numbers Example : iptables -L --line-numbers iptables -L OUTPUT -t nat --line-numbers-D, --deleteاز این کامند میتونید برای حذف کردن قوانین موجود در chain مورد نظر استفاده کنید.syntax: iptables -D [ Chain ] [ rule-number ] example: iptables -D INPUT 1-I, --insertبرای اضافه کردن یه قانون به یه زنجیره با یه موقعیت مشخص هستش. مثلا میتونیم بگیم یه قانون به زنجیره input اضافه کن و تو لیست قانون ها بزارش اولین قانون. 3 مقدار رو میگیره اولی اسم زنجیره دومی اون شماره ای که میخواید تولیست قرار بگیره مثلا اولین قانون باشه یا هرچیز دیگه ای... و خود قانونی که میخواید بزارید.Syntax: iptables -I [ chain ] [ rule-number ] [rule] Example: iptables -I INPUT 1 -j DROP-R, --replaceبرای جایگزین کردن یه قانون در زنجیره استفاده میشود .Sytax : iptables -R [ chain ] [ rule-number ] [ rule ] Example: iptables -R INPUT 1 -j ACCEPT-S, --list-rulesاز این کامند میشه برای نمایش قانون های موجود داخل یه زنجیره استفاده کرد هم میتونید لیست قانون های موجود رو مشاهد کنید هم میتونید فقط یه قانون خاص رو مشاهد کنید .Sytax : iptables [ table ] -S [ chain ] [rulenum] Example: iptables -S iptables -t nat -S iptables -t nat -S INPUT iptables -t nat -S INPUT 4-F, --flushاز این کامند برای حذف کردن تمام قوانین موجود در [ زنجیره ای از جدول یا جدول ] مورد نظر استفاده میشود.Syntax : iptables -F [ chain ] [ table] Example : iptables -F iptables -F -t nat iptables -F INPUT iptables -F INPUT -t nat-N, --new-chainاین کامند برای ایجاد یک chain جدید توسط کاربر هستش. قابلیتش اینه که مثلا شما یه قانون دارید داخل جدول filter که میاد داخل زنجیره input و پکت های یه ip رو drop میکنه خب حالا ممکن این قانون تو زنجیره input شماره 200 باشه حالا میاد دونه دونه 200 تارو چک میکنه بعد که رسید به این قانون اعمالش میکنه، مشکل اینه که زمان بیشتری میبره شما میتونید با این کامند یه زنجیره جدید بسازید که مثلا بیاد روی پکت های یه ip قوانین رو اعمال کنه اینجوری دیگه نمیره اون 200 تا رو چک کنه مستقیم میره تو زنجیره مربوطه و اون قانون ها رو اعمال میکنه.Syntax : iptables -N [ name-chain ] -t [ table ] Example : iptables -N new_chain -t filter-X, --delete-chainاین کامند برای حذف chain به وجود اماده توسط کاربر هستش.Syntax : iptables -X [ chain ] -t [ table ] Example : iptables -X test iptables -X test -t nat-P, --policyاز این کامند میتونیم برای ست کردن یه پالیسی روی یه chain خاص استفاده کنیم.میتونیم از تارگت های DROP, ACCEPT استفاده کنیم ( اگه یادتون باشه تو قسمت قبل اون اخرها گفتیم که یه تارگت دیفالت داره هر زنجیره اینجا میتونیم ست کنیم که اون دیفالت چی باشه ).Syntax : iptables -P [ Chain ] [ Target ] Example : iptables -P INPUT ACCEPTنکته : بر روی Chain هایی که کاربر ایجاد کرده نمیتوان پالیسی تعریف کرد.-Z, --zeroاین کامند برای صفر کردن شمارنده پکت ها و بایت های دریافتی همه زنجیرها یا فقط زنجیره داده شده یا فقط قانون مشخص شده در یک زنجیره استفاده میشود.همچنین میتونید از کامند زیر برای دقیق تر نشون دادن اتفاقی که داره میفته استفاده کنید ( v- رو تو قسمت بعد توضیح میدیم (برای نشون دادن اطلاعت بیشتر هستش( verbose) ))iptables -Z OUTPUT 10 -t nat -L -v --line-number-E, --rename-chainاگه بخوایم اسم chain خودمون رو تغیر بدیم از این کامند استفاده میکنیم.Syntax : iptables -E [ old-chain ] [ new-chain ] Example : iptables -E test my_chainنکته : فقط chain هایی که توسط کاربر ایجاد شده اند قابلیت تغیر اسم را دارند.قسمت سوم: https://virgool.io/@zankoAn/iptables-p3-inqpkuavdkre