آموزش دستورات IPtables در توزیع های لینوکس

IPtables یک فایروال یا دیواره آتش است که برای سیستم عامل های لینوکس طراحی شده است. این برنامه یک برنامه ی کاربردی است که کاربران لینوکس قادر به نصب و راه اندازی آن هستند و نیازی به دستکاری های سطح کرنل یا هسته سیستم عامل ندارد. کاربران و مدیران سیستم به صورت دستی قادر به تنظیم جداول، زنجیره و قوانین دیوار آتش هستند. IPtables به دو صورت حالتمند (Stateful) و بدون حالت (Stateless) قابل استفاده است. امروزه اکثر دیواره های آتش یه صوررت حالتمند عمل می کنند.ساختار کلی IPtables از سه قسمت اصلی به نام جدول، زنجیره و قوانین تشکیل شده است و بدین صورت عمل می شود که ابتدا یک جدول برای ذخیره زنجیرها که هر زنجیره  شامل چندین قوانین برای کنترل روی بسته ها است ایجاد می گردد. شکل زیر این ساختار را بهتر نشان می دهد.با توجه به شکل زیر جدول Filter شامل یک زنجیره Forward است که این زنجیره از دو قانون Rule تشکیل شده است.

شکل 1 – ساختار IPtables

IPtables از جداول اصلی زیر تشکیل شده است:

Filter Table

NAT Table

Mangle Table

Raw Table

Security Table

Filter Table برای ترافیک های ورودی و خروجی استفاده می شود که خود شامل سه زنجیره اصلی به نام های زیر است.

  • INPUT : قوانین را به ترافیک های ورودی IPtables اعمال می کند.
  • OUTPUT : قوانین را به ترافیک های خروجی IPtables اعمال می کند.
  • FORWARD : برای ترافیکی که دیواره آتش برای سایر سیستم های شبکه فراهم می کند، استفاده می شود. در واقع کنترل بسته ها از یک شبکه به شبکه دیگر در این زنجیره انجام می شود.

NAT Table برای بسته هایی که نیاز به ارتباط با شبکه جدید را دارند، استفاده می شود. به طور مثال تغییر یا ترجمه آدرس های IP در این جدول انجام می شود. این جدول خود شامل سه زنجیره زیر است.

  • PREROUTING : بسته های ورودی به IPtables را تغییر می دهد.
  • OUTPUT : بسته ها یی را که به صورت محلی ایجاد شده اند، قبل از ارسال تغییر می دهد.
  • POSTROUTING : بسته های خروجی از IPtables تغییر داده می شوند.

Mangle Table جهت تغییر و دستکاری سرایند یا هدر بسته ها مورد استفاده قرار می گیرد. به طور کلی این جدول برای پرادزش های خاص به کار گرفته می شود.

ساختار کلی دستورات در بسته IPtables بدین صورت است (در ادامه هر یک از این پارامترها تشریح خواهد شد):

Iptables [-t table-name] –options [chain] [rulenum] [rule-specification]

[t table-name-] : نام جدولی است که قرار است قوانین در زنجیره مربوط به این جدول اعمال شوند. اگر نام جدول مشخص نشود، IPtables به طور پیش فرض جدول Filter را در نظر می گیرد و قوانین روی این جدول اعمال می شود. table-name موجود در [-t table-name] شامل پنچ جدول اصلی IPtables می باشد.

options : شامل عملیاتی است که روی زنجیره هر جدول اعمال می شود. شایان ذکر است که این optionsها به عنوان سوئیچ (Switch) نیز شناخته می شوند. سوئیچ هایی که در options قابل استفاده است در پارامترهای زیر مشخص شده است.

iptables [-t table] -A chain rule-specification: پارامتر A- برای اضافه کردن قوانین به انتهای قوانین قبلی استفاده می شود.

iptables [-t table-I chain [rulenumrule-specification: پارامتر I- برای اضافه کردن قوانین به مکان خاصی از زنجیره قوانین مشخص شده.

iptables [-t table-R chain rulenum rule-specification: پارامتر R- برای جایگزین کردن قوانین جدید با قوانین قدیمی در مکان خاصی از زنجیره قوانین مشخص شده.

iptables [-t table-D chain rulenum: پارامتر D- برای حذف قوانین از زنجیره استفاده می شود.

iptables [-t table-D chain rule-specification: پارامتر D- برای حذف قوانین از زنجیره استفاده می شود.

[[iptables [-t table-S [chain [rulenum: پارامتر S- برای نمایش قوانین در زنجیره استفاده می شود.

[iptables [-t table] -F chain [rulenum: پارامتر F- برای حذف کلیه قوانین از زنجیره استفاده می شود. در صورتی که زنجیره مشخص نشود کلیه قوانین در جدول حذف می شود. علاوه براین اگر جدول تعیین نگردد کلیه قوانین در زنجیره تمام جداول حذف می شود.

iptables [-t table-N chain: پارامتر N- برای ایجاد یک زنجیره جدید استفاده می شود.

[iptables [-t table-X [chain: پارامتر X- برای حذف زنجیره استفاده می شود.

iptables [-t table-P chain target: پارامتر P- سیاست های مربوط به زنجیره را برای یک هدف تعریف می کند.

iptables [-t table-E old-chain-name new-chain-name: پارامتر E- برای تغییر نام زنجیره استفاده می شود.

chain : شامل زنجیره هایی مثل OUTPUT است که در جداول استفاده می شود، این زنجیره ها در قسمت های قبل تشریح شد.

rulenum : این پارامتر به شماره قوانین هر زنجیره اشاره می کند. زیرا زمانی که یک قانون در زنجیره ایجاد می گردد یک شماره به آن اختصاص داده می شود.

rule-specification : این پارامتر برای تعیین قوانین در IPtables استفاده می شود که خود از ساختار زیر تشکیل شده است:

Rule-specification = [protocol] [matches] [source] [destination] [target]

protocol= -p protocols (udp, tcp, icmp شامل هر پروتکلی مثل )

matches= -m matchname

(این پارامتر برای مقایسه ماژول ها استفاده می شود. سایر موارد مقایسه ای در iptables-exentsions قابل مشاهده است)

source= -s sourceaddr (آدرس مبدا را مشخص می کند)

destination= -d destinationaddr (آدرس مقصد را مشخص می کند)

target= -j targetname (DROP, REJECT, ACCEPT, LOG عملیاتی که روی هدف یا تارگت انجام می شودمشخص می گردد. به طور مثال)

ACCEPT : اگر بسته ای با قوانین مربوط به تارگت مشخص یا match شود، بسته یا درخواست توسط IPtables پذیرش یا accept می شود.

DROP : اگر بسته ای با قوانین مربوط به تارگت مشخص یا match شود، بسته یا درخواست توسط IPtables مسدود یا drop می شود.

REJECT : اگر بسته ای با قوانین مربوط به تارگت مشخص یا match شود، بسته یا درخواست توسط IPtables رد یا reject می شود.

LOG : اگر بسته ای با قوانین مربوط به تارگت مشخص یا match شود، بسته یا درخواست توسط IPtables صرفا log می شود و هیچ عمل دیگری صورت نمی گیرد.

به طور پیشفرض بسته IPtables در اکثر سیستم های عامل لینوکس نصب است اما در صورت نصب نبودن از دستورات زیر برای نصب روی توزیع های لینوکس که مرسوم هستند، اقدام می شود:

sudo apt install iptables (Debian and Ubuntu Base)

sudo zypper in iptables (Opensuse Base)

sudo pacman -S iptables (Arch Base)

sudo dnf (or yum) install iptables (Red Hat and Fedora Base)

شایان ذکر است که بسته IPtables باید در حالت root یا با دستور sudo در ترمینال سیستم عامل اجرا شود.

مثالهای عملیاتی از IPtables :

  • مسدود کردن بسته ای با آدرس و مقصد مشخص روی کارت شبکه eth0 که از پروتکل tcp که فلگ آن به syn تنظیم شده است:

iptables -t filter -A INPUT -i eth0 -p tcp -m tcp –syn -s 1.1.1.1 -d 2.2.2.2 -j DROP

  • پذیرش echorequest و echoreply جهت انجام ping از شبکه داخلی به شبکه خارجی:
iptables A INPUT p icmp icmptype echorequest j ACCEPT
iptables A OUTPUT p icmp icmptype echoreply j ACCEPT
  • پذیرش فقط دو اتصال telnet برای هر کلاینت:

iptables -A INPUT -p tcp –syn –dport 23 -m connlimit –connlimit-above 2 -j REJECT

در پایان بحث IPtables این نکته حائز اهمیت است که IPtables برای IPv4 و IPv6 قابل استفاده است. مثال هایی که در قسمت قبل تشریح شد مربوط به IPv4 است. اگر  شبکه از IPv6 پشتیبانی کند برای انجام قوانین IPv6 کافی است بجای iptables از ip6tables در دستورات استفاده شود.

مثالی از ip6tables:

ip6tables -p tcp –syn –dport 80 -s fe80::/64 -m connlimit –connlimit-above 16 –connlimit-mask 64 -j REJECT

نظر بدهید

آدرس ایمیل تان منتشر نخواهد شد.