• ایرانشل
  • وبلاگ
    • مفاهیم امنیت شبکه
    • معرفی راهکارها و سرویس‌های امنیتی
    • آموزش‌‌ راهکارهای امنیت شبکه
    • تهدیدات امنیتی
  • اخبار
  • دوره‌های امنیت
    • مسیرهای شغلی امنیت سایبری

ورود

رمز عبور را فراموش کرده اید؟

هنوز عضو نشده اید؟ عضویت در سایت
ایرانشل
  • ایرانشل
  • وبلاگ
    • مفاهیم امنیت شبکه
    • معرفی راهکارها و سرویس‌های امنیتی
    • آموزش‌‌ راهکارهای امنیت شبکه
    • تهدیدات امنیتی
  • اخبار
  • دوره‌های امنیت
    • مسیرهای شغلی امنیت سایبری
ورود و ثبت نام

وبلاگ

وبلاگ > آموزش‌‌ راهکارهای امنیت شبکه > نحوه نوشتن قانون در iptables

نحوه نوشتن قانون در iptables

آموزش‌‌ راهکارهای امنیت شبکه
ارسال شده توسط پریسا کشاورزی
24 نوامبر 2020
1.58k بازدید

تاریخچه iptables

در واقع تاریخ برای iptables از آنجایی شروع می‌شود که در نسخه1.1 کرنل لینوکس از ابزار ipfilter برای فیلتر کردن بسته‌ها و از ابزار ipfwadm برای اعمال قوانین استفاده شد. بعدها در کرنل‌ 2.2 لینوکس ابزاری دیگری به اسم IPChains  معرفی شد که در کرنل 2.4 جای خود را به iptables داد. این فایروال که توسط تیم  netfilter ارایه شده است، در حال حاضر به صورت گسترده‌ای استفاده می‌شود و از هر دو پروتکل ipv4 و ipv6 پشتیبانی می‌کند .

با توجه به اینکه iptables از لحاظ عملکردی یک فایروال عالی برای سیستم های لینوکسی محسوب می شود. به همین دلیل در بیشتر توزیع‌های لینوکسی به صورت پیش فرض نصب شده و قابل استفاده می‌باشد. این نرم افزار در اصل رابط اصلی برای ارتباط با قلاب‌ها یا hookهای اصلی netfilter در سطح کرنل لینوکس می‌باشد. می‌توان گفت قانون‌هایی (Rules) که ایجاد می‌شوند در واقع از hookهای netfilter برای بررسی پکت‌ها و تطبیق آن‌ها با این قوانین استفاده می‌کنند. iptables در واقع یه نرم افزار userspace می‌باشد که با فریم ورک netfilter برای بررسی بسته‌های شبکه کار می‌کند. این نرم افزار زمانی که بسته‌ای وارد شبکه می‌شود وارد عمل شده و با استفاده از hookهای netfilter بسته را با قوانین نوشته شده تطبیق می‌دهد و با توجه به قانون منطبق شده با آن بسته برخورد می‌کند.

قلاب‌های Netfilter

  1. NF_IP_PRE_ROUTING
  2. NF_IP_LOCAL_IN
  3. NF_IP_FORWARD
  4. NF_IP_POST_ROUTING
  5. NF_IP_LOCAL_OUT

جدول‌های iptables

  • Filter
  • NAT
  • Mangle
  • RAW
  • Security

iptables از جدول‌های مختلفی برای کنترل ترافیک‌های ورودی و خروجی از طریق ارتباط با هوک‌های Netfilter استفاده می‌کند. در واقع جدول‌ها از مجموعه‌ای از chain‌های پیش فرض و تعریف شده توسط کاربر تشکیل می‌شوند. chainها نیز شامل مجموعه‌ای از قوانین می‌باشند. زمانی که بسته‌ای دریافت می‌شود، ابتدا جدول مربوط به بسته پیدا و با توجه به جریان بسته، قوانین موجود در chain با بسته تطابق داده می‌شود. در واقع این chainها هستند که تعیین می‌کنند قوانین چه زمانی برای ارزیابی بسته‌ها استفاده شوند و قوانین نیز تعیین کننده نوع رفتار با بسته‌های دریافتی می‌باشند(reject, drop , accept وغیره).

iptables filter chains

جدول Filter

جدول فیلتر صرفا برای اعطا و یا عدم اعطای مجوز به ترافیک‌های TCP/IP ورودی و خروجی سیستم استفاده می‌شود. این جدول به صورت پیشفرض شامل سه Chain اصلی INPUT برای ترافیک ورودی سیستم، OUTPUT برای ترافیک خروجی از سیستم و FORWARD برای ترافیک forward شده از سیستم می‌باشد.

جدول NAT

در این جدول قوانین مرتبط با تغییرات آدرس‌های IP یا پورت‌های بسته‌ها ورودی و خروجی به سیستم قرار می‌گیرد. این جدول نیز همانند جدول Filter به صورت پیشفرض شامل سه Chain اصلی PREROUTING برای اعمال تغییرات در بسته‌های ورودی به سیستم، POSTROUTING برای بسته خروجی از سیستم و OUTPUT می‌باشد.

جدول Mangle

ازاین جدول معمولا برای انجام عملیات بررسی بسته‌ها قبل از ورود به سایر جداول استفاده و تغییراتی مورد نظر از طریق آن بر روی هدر بسته‌های ip اعمال می‌شود. این جدول عمدتا برای انجام سه هدف TOS و TTL و Mark استفاده می‌شود. Chainهای جدول Mangel.

  • INPUT
  • OUTPUT
  • FORWARD
  • PREROUTING
  • POSTROUTING

جدول RAW

از جدول RAW برای ایجاد معافیت برای بسته‌ها ازاعمال Connection tracking بر روی آنها استفاده می‌شود. این کار موجب آفزایش کارایی سیستم می‌شود.برای استفاده از قوانین این جدول از تارگت NOTRACK استفاده می‌شود.

نحوه‌ی کار با قوانین iptables

نکته‌ی مهم در مورد کار با قوانین iptables این است که حتما بایستی از مجوز کاربر root یا کابران Sudoer استفاده شود.

نحوه نمایش قوانین جداول

[email protected]:~$ [ iptables -L ]  [ chain ] [ rule-number ] [ -t table]
[email protected]:~$ iptabeles -L -t nat
[email protected]:~$ iptabeles -L INPUT -t nat
[email protected]:~$ iptabeles -L INPUT 10 -t nat

اگر داخل دستوری نام جدول را مشخص نکنیم، به صورت پیش فرض برای آن مقدار فیلتر در نظر گرفته می‌شود و مقادیر داخل جدول فیلتر نمایش داده خواهد شد.به همراه دستور iptables پارامترهای زیادی استفاده شود که در زیر تعدادی از آنها را توضیح می‌دهیم.

پارامترهای پایه‌ای

-j, –jump

با استفاده از این پارامتر در واقع هدف سیاست و عملی که قرار است بر روی بسته انجام شود را مشخص می‌کنیم.

  • ACCEPT (برای صدور اجازه عبور به ترافیک ورودی یا خروجی از این پارامتر استفاده می‌شود.)
  • DROP (برای صدور عدم اجازه عبور به ترافیک ورودی با خروجی از این مقدار استفاده می‌شود)
  • LOG ( فقط برای لاگ گیری از ترافیک استفاده می‌شود و هیچ عملی دیگری انجام نمی‌دهد.)
  • REDIRECT ( برای تغییر مسیر ترافیک ازمبدای مشخص به مقصدی مشخص استفاده می‌شود.)
  • REJECT ( برای مسدود کردن ترافیک با ارسال کد خطا به مبدا ترافیک استفاده می‌شود.)
  • RETURN ()
  • QUEUE (برای واگذار کردن ترافیک به یک پردازش دیگر استفاده می‌شود.)
  • MARK
    SNAT (برای تغییر آدرس مبدا به آدرسی مشخص استفاده می‌شود.)
  • DNAT (برای تغییر آدرس مقصد بسته استفاده می‌شود.)
  • MASQUERADE (برای تغییر آدرس مبدا به آدرس اینترفیس خروجی استفاده می‌شود.)

فرمت Rule

-A, –Append

از این پارمتر برای اضافه کردن قانون مورد نظر به انتهای قوانین موجود در Chain مورد نظر استفاده می‌کنیم.

 [email protected]:~$ iptables -A [ chain ] [ rule ]
 [email protected]:~$ iptables -A INPUT -j DROP

–line-numbers

از پارامتر line-numbers برای نمایش عدد مربوط به هر قانون در لیست قوانین یک Chain استفاده می‌کنیم.

[email protected]:~$ iptables -L --line-numbers
[email protected]:~$ iptables -L OUTPUT -t nat --line-numbers

-D, -delete

از این فلگ برای حذف یک قانون در chain مورد نظرمان استفاده می‌کنیم.

[email protected]:~$ iptables -D INPUT 1

-I, –insert

از این پارامتر برای اضافه کردن یک قانون در سطر اول قوانین یک Chain استفاده می‌کنیم.

[email protected]:~$ iptables -I INPUT -p TCP --dport 8091  -j DROP

-F, –Flush

از این پارامتر برای پاک کردن تمام قوانین اعمال شده در جداول و Chainهای مختلف iptables استفاده می‌کنیم.

[email protected]:~$ iptables -F
[email protected]:~$ iptables -F INPUT
[email protected]:~$ iptables -F -t nat
[email protected]:~$ iptables -F INPUT -t nat

-R, –replace

برای تغییر پارامترها یا جایگزین کردن یک قانون در جدول از فلگ R استفاده می‌کنیم.

[email protected]:~$ iptables -R INPUT 1 -j ACCEPT

-S, –list-rules

از این فلگ جهت نمایش لیست کردن کل قوانین موجود استفاده می‌کنیم. همچنین می‌توانیم از آن برای نمایش یک قانون درChain یک جدول نیز استفاده کنیم.

[email protected]:~$ iptables -S
[email protected]:~$ iptables -t nat -S
[email protected]:~$ iptables -t nat -S INPUT 4

-p, –protocol

از پارامتر p برای مشخص کردن نوع پروتکل در داخل قانون استفاده می‌کنیم که مقدار آن می تواند نام یا شماره پروتکل باشد. برای استثنا کردن نیز از علامت ! به همراه پارامتر p استفاده می‌کنیم.

[email protected]:~$ iptables -A INPUT -p icmp -j ACCEPT
[email protected]:~$ iptables -A INPUT !p icmp -j ACCEPT

-s, –source

از پارامتر s برای مشخص کردن مبدا بسته‌های ورودی و خروجی استفاده می‌کنیم. در این قسمت می‌توانیم از آدرس ip یا hostname برای مقدار این پارامتر استفاده کنیم. همچنین برای استثنا کردن نیز از علامت ! به همراه پارامتر s استفاده می‌کنیم.

نحوه نوشتن Rule

برای مسدود کردن ترافیک icmp از یک مبدا (یک هاست یا یک رنج آی پی) خاص از دستورات زیر می‌توانیم استفاده کنیم.

[email protected]:~$ iptables -A INPUT -p icmp -s 192.168.3.10 -j DROP
[email protected]:~$ iptables -A INPUT -p icmp -s 192.168.3.0/24 -j DROP
[email protected]:~$ iptables -A INPUT -p icmp -s 192.168.3.10/255.255.255.0 -j DROP
[email protected]:~$ iptables -A INPUT -p icmp -s Iranshell -j DROP

-d, –Distination

در نوشتن قوانین از پارامتر d برای مشخص کردن مقصد بسته‌ها استفاده می‌کنیم.

-i , –in-interface

با استفاده از این پارامتر می‌توانیم کارت شبکه ورودی را مشخص کنیم. نکته مهم در خصوص این پارامتر این است که این پارامتر فقط در Chain‌های INPUT ،FORWARD ،PREROUTING قابل استفاده می‌باشد.

[email protected]:~$ iptables -A INPUT -i eth0 -p icmp -j ACCEPT

-o , –out-interface

این پارامتر مشابه پارامتر قبلی عمل می‌کند با این تفاوت از آن برای مشخص کردن اینترفیس خروجی استفاده می‌کنیم. این فلگ در Chainهای OUTPUT ،FORWARD ،POSTROUTING قابل استفاده می‌باشد.

-m, –match match

در نوشتن سیاست از این پارامتر برای تعریف ماژول‌های iptable استفاده می‌کنیم. برای نوشتن یک Rule می‌توانیم از ماژول های tcp, udp, udplite, icmp, esp, ah, sct یا از پارامتر all استفاده کنیم.

[email protected]:~$ iptables -A OUTPUT -m --ttl 60 -j ACCEPT

-v , –verbose

این پارامتر در هنگام لیست کردن سیاست‌های یک جدول یه یک Chain باعث می‌شود خروجی با جزییات بیشتری برایمان نمایش داده شود.

[email protected]:~$ iptables -L -t nat -v

چند مثال از قوانین iptables

ایجاد دسترسی به سرویس‌های خود فایروال

1- از قانون زیر برای باز کردن پورت SSH سیستم برای دسترسی کاربران راه دور استفاده می‌کنیم.

[email protected]:~$ iptables -A INPUT -p tcp --dport 22 -j ACCEPT
[email protected]:~$ iptables -A OUTPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED  -j ACCEPT

2- از قانون زیر برای باز کردن icmp سیستم از سمت بیرون به سمت سیستم استفاده می‌کنیم.

[email protected]:~$ iptables -A OUTPUT -p --icmp-type echo-request -j ACCEPT
[email protected]:~$ iptables -A INPUT -p --icmp-type echo-reply -j ACCEPT

3- از قانون زیر برای باز کردن icmp سیستم از سمت سیستم به سمت بیرون استفاده می‌کنیم.

[email protected]:~$ iptables -A OUTPUT -p --icmp-type echo-reply -j ACCEPT
[email protected]:~$ iptables -A INPUT -p --icmp-type echo-request -j ACCEPT

ایجاد اجازه دسترسی به وب سرور داخلی از اینترنت

4- برای قرار دادن وب سرور داخلی با آدرس 192.168.3.10 در بستر اینترنت، می توانیم از دستورات زیر استفاده و از طریق IP سمت اینترنت فایروال (1.1.1.1) به کاربران اجازه دسترسی به سرور داخلی را فراهم کنیم (NAT ،Publish).

[email protected]:~$ iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -d 1.1.1.1 -j DNAT --to 192.168.3.10

برای اینکه به Route برگشت از سمت سرور نیاز نباشد می‌توانیم با استفاده از rule زیر آدرس مبدا بسته را به آدرس داخلی فایروال ترجمه کنیم.

[email protected]:~$ iptables -t nat -A POSTROUTING -o eth1 -p tcp --dport 80 -d 192.168.3.10 -j SNAT --to-source 192.168.3.1

برای اینکه بسته‌های مربوط به درخواست‌های سرور وب از فایروال عبور کند به Ruleهای زیر نیاز داریم.

[email protected]:~$ iptables -A FORWARD -i eth0 -o eth1 -p tcp --syn --dport 80 -m conntrack --ctstate  NEW -j ACCEPT
[email protected]:~$ iptables -A FORWARD -o eth0 -i eth1 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
[email protected]:~$iptables -A FORWARD -i eth0 -o eth1 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

برای مسدود کردن باقی ترافیک از دستور زیر استفاده می‌کنیم.

[email protected]:~$ iptables -P FORWARD DROP

ایجاد اجازه دسترسی کاربران داخلی به اینترنت

5- برای اینکه کاربران شبکه داخلی بتوانند به اینترنت دسترسی داشته باشند باید از یکی از قانون‌های زیر استفاده کنیم.

[email protected]:~$ iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to 1.1.1.1

یا

[email protected]:~$ iptables -t nat -A POSTROUTING -o eth1 -j masquerade

در سیستم‌های لینوکسی باید برای فعا سازی مسیریابی باید با استفاده یکی از دو راهکار زیر مقدار ip-forward به 1 تغییر دهیم.

راهکار اول

[email protected]:~$ echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward

راهکار دوم

[email protected]:~$ sudo nano /etc/sysctl.conf
net.ipv4.ip_forward=1
[email protected]:~$ sudo sysctl -p
[email protected]:~$ sudo sysctl --system
اشتراک گذاری:
برچسب ها: iptablesnetfilterفایرواللینوکس

دیدگاهتان را بنویسید لغو پاسخ

درباره ایرانشل

تیم ایرانشل با این هدف تشکیل شده است‌ تا بتوانند با کمک شما همراهان عزیز اقدامات مثبتی در جهت شفاف‌سازی نیازمندی‌های امنیتی، معرفی سرویس‌ها و راهکارهای امنیتی انجام دهد.

عضویت در خبرنامه

اطلاعات تماس
  • تهران - خیابان شریعتی - بالاتر از پل سیدخندان
  • 09125162976
  • [email protected]
شبکه‌های اجتماعی
کلیه حقوق این وب سایت متعلق به ایرانشل می‌باشد.
جستجو

جستجو با زدن Enter و بستن با زدن ESC