در این مقاله نحوه کارکرد فایروال در سیستم عامل لینوکس را بررسی خواهیم کرد، همچنین خواهیم فهمید که iptable در لینوکس چیست؟ فایروال تصمیم گیرنده سرنوشت packet های ورودی و خروجی به سیستم است. iptables در حقیقت یک rule براساس firewall است و به صورت پیش فرض روی اکثر سیستم عامل های لینوکس نصب شده میباشد و به صورت پیش فرض بدون هیچ rule در حال اجراست. iptable در کرنل 2.4 موجود بود و قبل از آن با نام های ipchains یا ipfwadm وجود داشت. iptables یک ابزار front-end میباشد که با کرنل صحبت کرده و تصمیم میگیرد که پکت ها را فیلتر کند.
این مطلب ممکن است شما را با دستورهای ابتدایی iptable آشنا کند همچنین با rule های عملی iptable که ممکن است شما به آنها نیاز داشته باشید.
سرویس های متفاوتی برای پروتکل های متفاوت مورد استفاده قرار میگیرند، همانند :
فایل های اصلی iptable به قرار زیر میباشد :
/etc/init.d/iptables : فایل اسکریپت init برای start ،stop ،restart و save کردن مجموعه قوانین (ruleset)
/etc/sysconfig/iptables : مکانی برای ذخیره مجموعه قوانین
/sbin/iptables : فایل binary
در حال حاضر 3 جدول زیر موجود میباشند :
همچنین 4 تا chain کلی وجود دارند :
INPUT :
chain پیش فرض وارد شده به سیستم
OUTPUT :
chain پیش فرض خارج شده از سیستم
FORWARD :
chain پیش فرض برای پکت هایی که از طریق interface دیگر ارسال شده اند.
RH-Firewall-1-INPUT :
chain که به صورت custom توسط یوزر (user-defined custom chain) تعریف میشود.
توجه : فایل های اصلی که در بالا مطرح شدند ممکن است در linux ubuntu کمی متفاوت باشند. نحوه start ،stop و restart کردن firewall در iptable به شرح زیر میباشد :
برای start کردن iptables در هنگام بوت سیستم دستور زیر را اجرا میکنیم :
برای ذخیره کردن مجموعه قوانین iptables از دستور زیر استفاده میشود. زمانی که سیستم reboot شد و سرویس iptables ریستارت شد rule های موجود reset یا اصطلاحا (Flush Out) میشوند. دستور زیر مجموعه قوانین iptables را به صورت پیش فرض در فایل /etc/sysconfig /iptables ذخیره میکند و قوانین اعمال گشته یا به عبارتی دیگر بعد از flush out در iptables قوانین restor میشوند :
برای بررسی وضعیت iptables/firewall از دستور زیر استفاده میکنیم. آپشن -L (ال بزرگ) در حقیقت مجموعه قوانین را لیست میکند. -v برای verbose و آپشن -n برای نمایش به فرمت numeric (عددی) مورد استفاده قرار میگیرد :
برای نمایش rule های iptables با شمارنده خط (line numbers) از دستور زیر استفاده میکنیم. با کمک عبارت --line-numbers شما میتوانید rule ها را اضافه و یا حذف کنید :
برای پاک کردن قوانین iptables و یا اصطلاحا flush کردن از دستور زیر استفاده میکنیم. که این دستور تمامی قوانین را از iptables حذف میکند. دقت کنید قبل از اجرای این کامند حتما از مجموعه قوانین backup بگیرید :
برای حذف و یا افزودن قوانین ابتدا به قوانین موجود در chain ها را نگاهی می اندازیم. دستورات زیر به ترتیب مجموعه قوانین در chain های input و output را به همراه شمارنده rules (این که rule مورد نظر چندمین rule است) نمایش میدهند که به ما کمک میکند تا قوانین را اضافه و یا حذف کنید :
به طور مثال اگر شما بخواهید rule شماره 5 را از chain input حذف کنید باید از دستور زیر استفاده نمایید :
برای وارد کردن یا افزودن rule به chain در input بین مجموعه قوانین 4 و 5 باید دستور زیر را اجرا نمایید :
همچنین توصیه میشود مقالات زیر را مطالعه کنید :
دستورات مفید Firewalld برای تنظیم و مدیریت فایروال در لینوکس
تنظیمات FirewallD در لینوکس RHEL/CentOS 7 و Fedora 21
نحوه اضافه کردن یک Service یا Port به FirewallD
آموزش تنظیمات فایروال لینوکس (iptable)
نحوه بستن/مسدود کردن ping در فایروال لینوکس
نحوه ی نصب و راه اندازی فایروال CSF در RHEL/CentOs و Fedora
آموزش نصب و کانفیگ pfsense 2.3.2 firewall/router
در مقاله بالا تلاش کردیم تا استفاده اولیه و کاربردهای iptables را برای مبتدیان پوشش دهیم. شما ممکن از بعد از درک کامل TCP/IP و علم کافی از سایر تنظیمات خود بتوانید rule های پیچیده ای ایجاد کنید.
این مطلب ممکن است شما را با دستورهای ابتدایی iptable آشنا کند همچنین با rule های عملی iptable که ممکن است شما به آنها نیاز داشته باشید.
سرویس های متفاوتی برای پروتکل های متفاوت مورد استفاده قرار میگیرند، همانند :
- iptables applies to IPv4.
- ip6tables applies to IPv6.
- arptables applies to ARP.
- ebtables applies to Ethernet frames..
فایل های اصلی iptable به قرار زیر میباشد :
/etc/init.d/iptables : فایل اسکریپت init برای start ،stop ،restart و save کردن مجموعه قوانین (ruleset)
/etc/sysconfig/iptables : مکانی برای ذخیره مجموعه قوانین
/sbin/iptables : فایل binary
در حال حاضر 3 جدول زیر موجود میباشند :
- Filter
- NAT
- Mangle
همچنین 4 تا chain کلی وجود دارند :
INPUT :
chain پیش فرض وارد شده به سیستم
OUTPUT :
chain پیش فرض خارج شده از سیستم
FORWARD :
chain پیش فرض برای پکت هایی که از طریق interface دیگر ارسال شده اند.
RH-Firewall-1-INPUT :
chain که به صورت custom توسط یوزر (user-defined custom chain) تعریف میشود.
توجه : فایل های اصلی که در بالا مطرح شدند ممکن است در linux ubuntu کمی متفاوت باشند. نحوه start ،stop و restart کردن firewall در iptable به شرح زیر میباشد :
کد:
# /etc/init.d/iptables start # /etc/init.d/iptables stop # /etc/init.d/iptables restart
برای start کردن iptables در هنگام بوت سیستم دستور زیر را اجرا میکنیم :
کد:
#chkconfig --level 345 iptables on
برای ذخیره کردن مجموعه قوانین iptables از دستور زیر استفاده میشود. زمانی که سیستم reboot شد و سرویس iptables ریستارت شد rule های موجود reset یا اصطلاحا (Flush Out) میشوند. دستور زیر مجموعه قوانین iptables را به صورت پیش فرض در فایل /etc/sysconfig /iptables ذخیره میکند و قوانین اعمال گشته یا به عبارتی دیگر بعد از flush out در iptables قوانین restor میشوند :
کد:
#service iptables save
برای بررسی وضعیت iptables/firewall از دستور زیر استفاده میکنیم. آپشن -L (ال بزرگ) در حقیقت مجموعه قوانین را لیست میکند. -v برای verbose و آپشن -n برای نمایش به فرمت numeric (عددی) مورد استفاده قرار میگیرد :
کد:
[root@mohammad ~]# iptables -L -n -v Chain INPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 6 396 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22 0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT 5 packets, 588 bytes) pkts bytes target prot opt in out source destination
برای نمایش rule های iptables با شمارنده خط (line numbers) از دستور زیر استفاده میکنیم. با کمک عبارت --line-numbers شما میتوانید rule ها را اضافه و یا حذف کنید :
کد:
[root@mohammad ~]# iptables -n -L -v --line-numbers Chain INPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 51 4080 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 2 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 3 0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 4 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22 5 0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT 45 packets, 5384 bytes) num pkts bytes target prot opt in out source destination
برای پاک کردن قوانین iptables و یا اصطلاحا flush کردن از دستور زیر استفاده میکنیم. که این دستور تمامی قوانین را از iptables حذف میکند. دقت کنید قبل از اجرای این کامند حتما از مجموعه قوانین backup بگیرید :
کد:
[root@mohammad ~]# iptables -F
برای حذف و یا افزودن قوانین ابتدا به قوانین موجود در chain ها را نگاهی می اندازیم. دستورات زیر به ترتیب مجموعه قوانین در chain های input و output را به همراه شمارنده rules (این که rule مورد نظر چندمین rule است) نمایش میدهند که به ما کمک میکند تا قوانین را اضافه و یا حذف کنید :
کد:
[root@mohammad ~]# iptables -L INPUT -n --line-numbers Chain INPUT (policy ACCEPT) num target prot opt source destination 1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 2 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 3 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 4 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22 5 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
کد:
[root@mohammad ~]# iptables -L OUTPUT -n --line-numbers Chain OUTPUT (policy ACCEPT) num target prot opt source destination
کد:
[root@mohammad ~]# iptables -D INPUT 5
برای وارد کردن یا افزودن rule به chain در input بین مجموعه قوانین 4 و 5 باید دستور زیر را اجرا نمایید :
کد:
[root@mohammad ~]# iptables -I INPUT 5 -s ipaddress -j DROP
همچنین توصیه میشود مقالات زیر را مطالعه کنید :
دستورات مفید Firewalld برای تنظیم و مدیریت فایروال در لینوکس
تنظیمات FirewallD در لینوکس RHEL/CentOS 7 و Fedora 21
نحوه اضافه کردن یک Service یا Port به FirewallD
آموزش تنظیمات فایروال لینوکس (iptable)
نحوه بستن/مسدود کردن ping در فایروال لینوکس
نحوه ی نصب و راه اندازی فایروال CSF در RHEL/CentOs و Fedora
آموزش نصب و کانفیگ pfsense 2.3.2 firewall/router
در مقاله بالا تلاش کردیم تا استفاده اولیه و کاربردهای iptables را برای مبتدیان پوشش دهیم. شما ممکن از بعد از درک کامل TCP/IP و علم کافی از سایر تنظیمات خود بتوانید rule های پیچیده ای ایجاد کنید.
کامنت