خب تا اینجا با iptables و کامند هاش اشنا شدید. الان وقتشه بریم سراغ پارامتر هاش رو در اخر هم مثال های عملی و کاربردی رو با هم برسی میکنیم.
نکته : برای هر پارامتر یا کامند تو سینتکسشون یه [ ... ] گذاشتم به این معنی هستش که میتونید بجاش یک الا چند کامند بزارید.
این پارامتر بر خلاف jump که پردازش در همون chain انجام میشد، میاد پردازش رو میفرسته به chain که ما مشخص میکنیم.
Syntax : iptables [ ... ] -g [ Chain ] Example : iptables -A INPUT -p icmp -g my_chain
نکته : زنجیره ای که مشخص میکنید باید توسط کاربر ایجاد شده باشد درغیر این صورت با ارور مواجه میشوید.
از این پارامتر میتوان برای ست کردن نوع پروتکل استفاده کرد .( هم میتونید عدد مربوت به اون پروتکل رو قرار بدید هم اسمش رو ) میتونید فایل etc/protocols/ رو هم مشاهد کنید خالی از لطف نیست.
Syntax : iptables [ ... ] -p [ protocol ] [ ... ] Example : iptables -A INPUT -p icmp -j REJECT iptables -A INPUT ! -p icmp -j REJECT
نکته : اگر از علمات ( ! ) قبل از اسم پروتکل استفاده کنید باعث معکوس شدن اون چیزی که تعین کردید میشود . اگر بر روی 0 ست شود به معنای تمام پروتکل های موجود میباشد.
از این پارامتر برای مشخص کردن مبدا استفاده میشود. میتوان خود ip یا که هاست نیم رو قرار داد ولی پیشنهاد نمیشه Hostname بزارید بهتر که از ip استفاده کنید. میتوان سابنت مسک را به دو شکل برای ip مشخص کرد (192.168.1.1/24 و یا 192.168.1.1/255.255.255.0). و مثل قبل علامت ( ! ) باعث not شدن اون شرط میشه یعنی معکوس میشه. مثلا وقتی مشخص میکنید اون ip باشه اگه ! بزارید یعنی اون ip نباشه.
Syntax : iptables [ ... ] -s [ address[/mask] ] [ ... ] Example : iptables -A INPUT -p icmp -s 192.168.1.1 -j DROP iptables -A INPUT -p icmp -s 192.168.1.1/24 -j DROP iptables -A INPUT -p icmp -s 192.168.1.1/255.255.255.0 -j DROP iptables -A INPUT -p icmp -s hostname -j DROP
این پارامتر دقیقا مثل source هستش با این تفاوت که اون برای مبدا بود این برای مقصد هستش .
میتونید با استفاده از این پارامتر اینترفیس تون رو مشخص کنید. میتونید از + در ادرس دهی استفاده کنید مثل رجکس ، در اینجا +enp کارت شبکه ای که اولش با enp شروع شده باشه رو ست میکنه. مثل قبل علامت ! باعث معکوس شدن این جریان میشه.
Syntax : iptables [ ... ] [ interface ] [ ... ] Example : iptables -A INPUT -i enpX -p icmp -j ACCEPT iptables -A INPUT -i enp2+ -p icmp -j ACCEPT iptables -A INPUT ! -i lo -p icmp -j ACCEPT
نکته : از این پارامتر فقط در chain های INPUT, FORWARD, PREROUTING استفاده میشود.
پارامتر out-interface هم دقیقا مثل پارامتر in-interface هستش با این تفاوت که شبکه خارجی رو مشخص میکنه(پکت هایی که از این کارت شبکه خارج میشن) .
نکته : از این پارامتر فقط در chain های OUTPUT, FORWARD, POSTROUTING استفاده میشود.
این پارامتر به این معنی هستش که اون rules فقط به پکت های که به 2 یا چند فریم تقسیم شدن اشاره داره .و علامت ! هم مثل همیشه معکوس میکنه این جریان رو. ( بیشتر این فلگ رو میزارن برای اینکه تارگت drop شه و..) .
وقتی پکتی وارد شبکه ما میشه اگه MTU اون پکت بیشتر از MTU شبکه ما باشه در مورد این پکت (link_0, link_1)fragmentation اتفاق میفته و اون پکت به فریم های کوچیک تری تقسیم میشه تا به سایز MTU ما بخوره و این عملیات تو ip-v4 هست وفرستند و گیرنده میتونن فرگمنتیشن رو انجام بدن ولی در ip-v6 اینجوری نیستش و سمت فرستند فرگمنتیشن انجام میشه . وقتی پکتی ارسال میشه روی پروتکل tcp ip-v4 یه فلگ به اسم DF که مخفف Don't Fragment هستش میتونه ست بشه ، اگه ست شده باشه روتر اون پکت رو به فریم های کوچیک تری تبدیل نمیکنه در عوض یه روتر که MTU کوچیک تری داره میتونه پیام icmp رو به فرستنده بفرسته و بهش بگه که MTU رو کاهش بده البته میتونیم از پروتکل های دیگه ای هم استفاده کنیم ولی icmp بهینه تره (تو پکت های بزرگ..) اگه ست نشه این فلگ روتر های میانی میتونن به فریم های کوچیک تری تبدیل کنن دیتا رو... تو حملات حتی ممکن از این فرگمنتیشن استفاده کنن تا ips .. فایروال و ..رو دور بزنن و پکت های زیادی رو به سمت شما ارسال کنن و همچنین باعث میشه منابع بیشتری از سیستم استفاده شه و...
Syntax : iptables [ ... ] -f [ ... ] Example : iptables -A INPUT -f -j DROP
از این پارامتر برای ست کردن ماژول استفاده میشود ، میتوانید از ماژول های (tcp, udp, udplite, icmp, esp, ah, sct) استفاده کنید یا all بزنید برای همه پروتکل های موجود و همچنین میتونید فایل زیر رو مشاهد کنید
cat /proc/net/ip_tables_matches Syntax : iptables [ ... ] -m [ module ] [ ... ] Example : iptables -A OUTPUT -m ttl --ttl 60 -j ACCEPT
این پارا متر برای تنظیم کردن شمارنده پکت و بایت هستش ؛ میتونید براش ست کنید که مثلا پکت های جدید که با اون قانون مچ شدن رو از 400 بشماره یا هر عدد دیگه ای!
Syntax : iptables [ ... ] -c [ packet counter ] [ bytes counter ] [ ... ] Example : iptables -A INPUT -c 10 400 -i enp2+ -j ACCEPT iptables -A INPUT -c 10 -i enp2+ -j ACCEPT
برای ست کردن ipv4.
برای ست کردن ipv6.
Syntax : iptables [ ... ] [ -4 | -6 ] [ ... ] Example: iptables -A INPUT -4 -j ACCEPT iptables -A INPUT -6 -j ACCEPT
تو بیشتر دستورات در لینوکس v- برای پر سر وصدا بودن خروجی هستش (اطلاعات بیشتری رو درخورجی چاپ میکنه).
Syntax : iptables -L -v [ ... ] Example : iptables -L -v iptables -L -t nat -v
اگر فرآیند دیگری در حال تغییر قوانین iptables باشد در زمانی که یک برنامه دیگر سعی میکند قوانین iptables را اضافه کند با locking error مواجه میشود این فلگ ( w- ) باعث میشود که iptables به جای برگرداندن ارور منتظر قفل xtables بماند، از این اپشن برای جلوگیری از اجرا های همزمان استفاده میشود، میتوان یک مقداری رو بهش اختصاص داد (بر حسب ثانیه ) که این مقدار رو صبر میکنه تا به مشکل نخوره.
Syntax : iptables -w [ seconds ] [ .. ] Examole : iptables -w 100 -A FORWARD -j ACCEPT
فاصله برای هرتکرار. وقتی برنامه حساسی اجرا میشود نباید مدت زمان طولانیی رو برای قفل xtables صبر کنیم.دیفالت 1 ثانیه هستش میتونی عدد دلخواه مون رو قرار بدیم ( بر حسب میکرو ثانیه).
نکته: این اپشن فقط با اپشن بالا یعنی w- کار میکند.باید اول اون w- باشه بعدش میتونید از این اپشن هم استفاده کنید .
از این اپشن برای نمایش ادرس های ip به شکل نامریک استفاده میشه دیگه هاست نیم رو نمینویسه بجاش ip رو مینویسه .
Syntax : iptables -L -n [ ... ] Example : iptables -L INPUT -t nat -n -v
از این اپشن برای نمایش دقیق سایز پکت استفاده میشه دیگه رندش نمیکنه مثلا بنویسه 100M و...
Syntax : iptables -L - v -x [ ... ] Example : iptables -L OUTPUT -t nat -v -x -n
خب این قسمت رو چون در اینجا به اندازه کافی نوشتیم و اگه مثال ها رو هم همینجا بنویسیم خیلی زیاد میشه تو یه پست دیگه منتشر کردم که میتونید در این لینک مشاهد کنید.