;...z@nko!#
;...z@nko!#
خواندن ۷ دقیقه·۵ سال پیش

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

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






securityiptablesfirewallnetworklinux
یه بک اند دولوپر پایتون، علاقمه مند به DevOps و دیپ شدن در مباحث مرتبط "-) https://mastodon.social/@zankoAN
شاید از این پست‌ها خوشتان بیاید