لینوکس

فهرست‌کردن و حذف قوانین فایروال iptables در لینوکس

مقدمه

Iptables فایروالی است که نقشی اساسی در امنیت شبکه بیشتر سیستم‌های لینوکسی بازی می‌کند. در حالی که بسیاری از آموزش‌های iptables به شما یاد می‌دهند چگونه قوانین فایروال برای امن کردن سرورتان بسازید، این آموزش روی جنبه متفاوتی از مدیریت فایروال تمرکز دارد: فهرست‌کردن و حذف قوانین.

در این آموزش، نحوه انجام وظایف زیر iptables را پوشش می‌دهیم:

  • فهرست‌کردن قوانین
  • صفر کردن شمارنده‌های بسته و بایت
  • حذف قوانین
  • Flush کردن زنجیرها (حذف همه قوانین در یک زنجیر)
  • Flush کردن همه زنجیرها و جدول‌ها، حذف همه زنجیرها و مجاز دانستن همه ترافیک

نکته: هنگام کار با فایروال‌ها، مراقب باشید خودتان را از سرور خودتان قفل نکنید با بلاک کردن ترافیک SSH (پورت ۲۲، به‌طور پیش‌فرض). اگر به‌دلیل تنظیمات فایروال‌تان دسترسی را از دست بدهید، ممکن است لازم باشد از طریق کنسول خارج از باند به آن وصل شوید تا دسترسی‌تان را تعمیر کنید.

نکات کلیدی

  • iptables روش‌های متعددی برای بازرسی قوانین فعال فایروال فراهم می‌کند؛ شامل فهرست‌کردن قوانین بر اساس مشخصات با iptables -S و دیدن آن‌ها در قالب جدولی با iptables -L.
  • استفاده از گزینه پرحرف -v هنگام فهرست‌کردن قوانین، کمک می‌کند با نمایش شمارنده‌های بسته و بایت، مشخص کنید کدام قوانین فعالانه با ترافیک تطبیق می‌یابند.
  • شمارنده‌های بسته و بایت را می‌توان به‌صورت سراسری، به ازای زنجیر یا به ازای قانون با گزینه iptables -Z ریست کرد؛ که برای تحلیل ترافیک و عیب‌یابی مفید است.
  • قوانین منفرد iptables را می‌توان یا با تعیین تعریف کامل قانون یا با ارجاع به نام زنجیر و شماره قانون حذف کرد.
  • Flush کردن یک زنجیر با iptables -F همه قوانین آن زنجیر را حذف می‌کند؛ در حالی که Flush کردن همه زنجیرها کل پیکربندی فایروال را پاک می‌کند.
  • قبل از Flush کردن قوانین یا زنجیرها، مهم است سیاست‌های پیش‌فرض را روی ACCEPT تنظیم کنید تا از قفل شدن تصادفی خودتان از سرور جلوگیری شود.
  • دستور iptables -D قوانین خاص را حذف می‌کند؛ در حالی که iptables -F برای حذف انبوه قوانین درون یک زنجیر در نظر گرفته شده است.
  • تغییرات داده‌شده با دستور iptables موقتی‌اند و باید صریحاً ذخیره شوند اگر لازم است بعد از ریبوت سیستم باقی بمانند.

پیش‌نیازها

این آموزش فرض می‌کند از سرور لینوکسی با دستور iptables نصب‌شده استفاده می‌کنید و کاربر شما دسترسی sudo دارد.

اگر به کمک برای این راه‌اندازی اولیه نیاز دارید، لطفاً به راهنمای راه‌اندازی اولیه سرور با اوبونتو در پارمین کلود مراجعه کنید. برای دبیان و CentOS هم موجود است.

نکته: دستورات این آموزش فقط برای ترافیک IPv4 اعمال می‌شوند. اگر سیستم شما از IPv6 استفاده می‌کند، قوانین فایروال جداگانه با ip6tables مدیریت می‌شوند.

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

اول ببینیم چطور قوانین را فهرست کنیم. دو روش مختلف برای دیدن قوانین فعال iptables وجود دارد: در جدول یا به‌عنوان فهرستی از مشخصات قوانین. هر دو روش تقریباً همان اطلاعات را در قالب‌های متفاوتی ارائه می‌دهند.

برای فهرست‌کردن همه قوانین فعال iptables بر اساس مشخصات، دستور iptables را با گزینه -S اجرا کنید:

sudo iptables -S
Output
-P INPUT DROP
-P FORWARD DROP
-P OUTPUT ACCEPT
-N ICMP
-N TCP
-N UDP
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate INVALID -j DROP
-A INPUT -p udp -m conntrack --ctstate NEW -j UDP
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j TCP
-A INPUT -p icmp -m conntrack --ctstate NEW -j ICMP
-A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable
-A INPUT -p tcp -j REJECT --reject-with tcp-reset
-A INPUT -j REJECT --reject-with icmp-proto-unreachable
-A TCP -p tcp -m tcp --dport 22 -j ACCEPT
...

همان‌طور که می‌بینید، خروجی دقیقاً شبیه دستوراتی است که برای ساخت آن‌ها استفاده شده؛ بدون دستور iptables قبلی. این شبیه فایل‌های پیکربندی قوانین iptables هم خواهد بود؛ اگر تا حالا از iptables-persistent یا iptables save استفاده کرده باشید.

فهرست‌کردن یک زنجیر خاص

اگر می‌خواهید خروجی را به زنجیر خاصی محدود کنید (INPUT، OUTPUT، TCP و…)، می‌توانید نام زنجیر را مستقیماً بعد از گزینه -S تعیین کنید. مثلاً برای نمایش همه مشخصات قوانین در زنجیر TCP، این دستور را اجرا می‌کردید:

sudo iptables -S TCP
Output
-N TCP
-A TCP -p tcp -m tcp --dport 22 -j ACCEPT

حالا ببینیم روش جایگزین برای دیدن قوانین فعال iptables: به‌عنوان جدولی از قوانین.

فهرست‌کردن قوانین به‌صورت جدول

فهرست‌کردن قوانین iptables در نمای جدولی می‌تواند برای مقایسه قوانین مختلف با هم مفید باشد. برای خروجی گرفتن همه قوانین فعال iptables در جدول، دستور iptables را با گزینه -L اجرا کنید (ترکیب‌شده با -n برای سرعت بخشیدن به پردازش):

sudo iptables -nL

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

نکته: گزینه -n جستجوهای DNS را هنگام فهرست‌کردن قوانین غیرفعال می‌کند؛ که دستور را سریع‌تر کرده و از تأخیرها روی سیستم‌های با DNS کند یا بدپیکربندی جلوگیری می‌نماید.

اگر می‌خواهید خروجی را به زنجیر خاصی محدود کنید (INPUT، OUTPUT، TCP و…)، می‌توانید نام زنجیر را مستقیماً بعد از گزینه -L تعیین کنید.

ببینیم مثالی از زنجیر INPUT:

sudo iptables -nL INPUT
Output
Chain INPUT (policy DROP)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
ACCEPT     all  --  anywhere             anywhere
DROP       all  --  anywhere             anywhere             ctstate INVALID
UDP        udp  --  anywhere             anywhere             ctstate NEW
TCP        tcp  --  anywhere             anywhere             tcp flags:FIN,SYN,RST,ACK/SYN ctstate NEW
ICMP       icmp --  anywhere             anywhere             ctstate NEW
REJECT     udp  --  anywhere             anywhere             reject-with icmp-port-unreachable
REJECT     tcp  --  anywhere             anywhere             reject-with tcp-reset
REJECT     all  --  anywhere             anywhere             reject-with icmp-proto-unreachable

خط اول خروجی نام زنجیر (INPUT در این مورد) و به‌دنبالش سیاست پیش‌فرضش (DROP) را نشان می‌دهد. خط بعدی شامل هدرهای هر ستون در جدول است و به‌دنبالش قوانین زنجیر می‌آیند. مرور کنیم هر هدر چه چیزی را نشان می‌دهد:

  • target: اگر بسته‌ای با قانون مطابقت یابد، target تعیین می‌کند با آن چه باید کرد. مثلاً یک بسته می‌تواند پذیرفته، حذف، لاگ یا به زنجیر دیگری فرستاده شود تا با قوانین بیشتری مقایسه شود
  • prot: پروتکل؛ مانند tcp، udp، icmp یا all
  • opt: به‌ندرت استفاده می‌شود؛ این ستون گزینه‌های IP را نشان می‌دهد
  • source: آدرس IP یا زیرشبکه مبدأ ترافیک، یا anywhere
  • destination: آدرس IP یا زیرشبکه مقصد ترافیک، یا anywhere

آخرین ستون—which برچسب ندارد—گزینه‌های یک قانون را نشان می‌دهد. این هر بخشی از قانون است که با ستون‌های قبلی نشان داده نشده. می‌تواند هر چیزی باشد؛ از پورت‌های مبدأ و مقصد تا وضعیت اتصال بسته.

نمایش تعداد بسته‌ها و حجم تجمعی

هنگام فهرست‌کردن قوانین iptables، امکان نمایش تعداد بسته‌ها و حجم تجمعی بسته‌ها به بایت، که با هر قانون خاص مطابقت یافته‌اند هم وجود دارد. این اغلب برای گرفتن تصویری تقریبی از اینکه کدام قوانین با بسته‌ها تطبیق می‌یابند مفید است. برای این کار، از گزینه‌های -L و -v با هم استفاده کنید.

مثلاً، زنجیر INPUT را دوباره با گزینه -v ببینیم:

sudo iptables -nvL INPUT
Output
Chain INPUT (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
 284K   42M ACCEPT     all  --  any    any     anywhere             anywhere             ctstate RELATED,ESTABLISHED
    0     0 ACCEPT     all  --  lo     any     anywhere             anywhere
    0     0 DROP       all  --  any    any     anywhere             anywhere             ctstate INVALID
  396 63275 UDP        udp  --  any    any     anywhere             anywhere             ctstate NEW
17067 1005K TCP        tcp  --  any    any     anywhere             anywhere             tcp flags:FIN,SYN,RST,ACK/SYN ctstate NEW
 2410  154K ICMP       icmp --  any    any     anywhere             anywhere             ctstate NEW
  396 63275 REJECT     udp  --  any    any     anywhere             anywhere             reject-with icmp-port-unreachable
 2916  179K REJECT     all  --  any    any     anywhere             anywhere             reject-with icmp-proto-unreachable
    0     0 ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp dpt:ssh ctstate NEW,ESTABLISHED

دقت کنید که فهرست حالا دو ستون اضافه دارد: pkts و bytes.

حالا که می‌دانید چطور قوانین فایروال فعال را به روش‌های متنوعی فهرست کنید، ببینیم چطور شمارنده‌های بسته و بایت را ریست می‌کنید.

ریست کردن تعداد بسته‌ها و حجم تجمعی

اگر می‌خواهید شمارنده‌های بسته و بایت قوانین‌تان را پاک یا صفر کنید، از گزینه -Z استفاده کنید. اگر ریبوتی رخ دهد هم ریست می‌شوند. این مفید است اگر بخواهید ببینید آیا سرورتان ترافیک جدیدی که با قوانین موجودتان مطابقت دارد دریافت می‌کند.

برای پاک کردن شمارنده‌های همه زنجیرها و قوانین، از گزینه -Z به‌تنهایی استفاده کنید:

sudo iptables -Z

برای پاک کردن شمارنده‌های همه قوانین در زنجیر خاصی، از گزینه -Z استفاده و زنجیر را تعیین کنید. مثلاً برای پاک کردن شمارنده‌های زنجیر INPUT این دستور را اجرا کنید:

sudo iptables -Z INPUT

اگر می‌خواهید شمارنده‌های قانون خاصی را پاک کنید، نام زنجیر و شماره قانون را تعیین کنید. مثلاً برای صفر کردن شمارنده‌های اولین قانون در زنجیر INPUT، این را اجرا کنید:

sudo iptables -Z INPUT 1

حالا که می‌دانید چطور شمارنده‌های بسته و بایت iptables را ریست کنید، ببینیم دو روشی که می‌توان برای حذف قوانین استفاده کرد.

حذف قوانین بر اساس مشخصات

یکی از راه‌های حذف قوانین iptables، بر اساس مشخصات قانون است. برای این کار، می‌توانید دستور iptables را با گزینه -D و به‌دنبالش مشخصات قانون اجرا کنید. اگر می‌خواهید قوانین را با این روش حذف کنید، می‌توانید از خروجی فهرست قوانین iptables -S کمک بگیرید.

مثلاً اگر می‌خواهید قانونی را حذف کنید که بسته‌های ورودی نامعتبر را حذف می‌کند (-A INPUT -m conntrack --ctstate INVALID -j DROP)، می‌توانستید این دستور را اجرا کنید:

sudo iptables -D INPUT -m conntrack --ctstate INVALID -j DROP

دقت کنید که گزینه -A—که برای تعیین موقعیت قانون هنگام ساخت استفاده می‌شود—باید اینجا حذف شود.

هنگام حذف قانون بر اساس مشخصات، قانون باید دقیقاً همان‌طور که ساخته شده مطابقت یابد. تفاوت‌هایی مثل /32 در مقابل آدرس IP منفرد، ترتیب پروتکل یا گزینه‌های تطبیق حذف‌شده می‌توانند باعث شکست حذف شوند.

حذف قوانین بر اساس زنجیر و شماره

راه دیگر حذف قوانین iptables، بر اساس زنجیر و شماره خط آن است. برای تعیین شماره خط یک قانون، قوانین را در قالب جدول فهرست و گزینه --line-numbers را اضافه کنید:

sudo iptables -nL --line-numbers
Output
Chain INPUT (policy DROP)
num  target     prot opt source               destination
1    ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
2    ACCEPT     all  --  anywhere             anywhere
3    DROP       all  --  anywhere             anywhere             ctstate INVALID
4    UDP        udp  --  anywhere             anywhere             ctstate NEW
5    TCP        tcp  --  anywhere             anywhere             tcp flags:FIN,SYN,RST,ACK/SYN ctstate NEW
6    ICMP       icmp --  anywhere             anywhere             ctstate NEW
7    REJECT     udp  --  anywhere             anywhere             reject-with icmp-port-unreachable
8    REJECT     tcp  --  anywhere             anywhere             reject-with tcp-reset
9    REJECT     all  --  anywhere             anywhere             reject-with icmp-proto-unreachable
10   ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh ctstate NEW,ESTABLISHED
...

این شماره خط را به هر ردیف قانون اضافه می‌کند؛ که با هدر num نشان داده شده.

وقتی دانستید کدام قانون را می‌خواهید حذف کنید، زنجیر و شماره خط قانون را یادداشت کنید. سپس دستور iptables -D را به‌دنبالش زنجیر و شماره قانون اجرا کنید.

مثلاً اگر بخواهیم قانون ورودیِ حذف‌کننده بسته‌های نامعتبر را حذف کنیم، می‌بینیم قانون شماره ۳ از زنجیر INPUT است. پس باید این دستور را اجرا کنیم:

sudo iptables -D INPUT 3

حالا که می‌دانید چطور قوانین منفرد فایروال را حذف کنید، مرور کنیم چطور زنجیرهای قوانین را Flush کنید.

Flush کردن زنجیرها

iptables راهی برای حذف همه قوانین در یک زنجیر یا Flush کردن یک زنجیر ارائه می‌دهد. این بخش روش‌های متنوع انجام این کار را پوشش می‌دهد.

هشدار: مراقب باشید خودتان را از سرورتان از طریق SSH قفل نکنید با Flush کردن زنجیری با سیاست پیش‌فرض DROP یا REJECT. اگر این کار را بکنید، ممکن است لازم باشد از طریق کنسول به آن وصل شوید تا دسترسی‌تان را تعمیر کنید.

Flush کردن یک زنجیر منفرد

برای Flush کردن زنجیر خاصی—which همه قوانین در زنجیر را حذف می‌کند—می‌توانید از گزینه -F یا معادلش --flush همراه نام زنجیر استفاده کنید.

مثلاً برای حذف همه قوانین در زنجیر INPUT، این دستور را اجرا کنید:

sudo iptables -F INPUT

Flush کردن همه زنجیرها

برای Flush کردن همه زنجیرها—which همه قوانین فایروال را حذف می‌کند—می‌توانید از گزینه -F یا معادلش --flush به‌تنهایی استفاده کنید:

sudo iptables -F

Flush کردن همه قوانین، حذف همه زنجیرها و مجاز دانستن همه

این بخش نشان می‌دهد چطور همه قوانین، جدول‌ها و زنجیرهای فایروال‌تان را Flush کرده و همه ترافیک شبکه را مجاز بدانید.

هشدار: این عملاً فایروالتان را غیرفعال می‌کند. فقط باید این بخش را دنبال کنید اگر می‌خواهید پیکربندی فایروالتان را از نو شروع کنید.

اول، سیاست‌های پیش‌فرض هر کدام از زنجیرهای داخلی را روی ACCEPT تنظیم کنید. دلیل اصلی انجام این کار، تضمین اینکه از سرورتان از طریق SSH قفل نمی‌شوید است.

گزینه -F بدون فلگ -t فقط جدول پیش‌فرض filter را Flush می‌کند؛ پس جدول‌های اضافی باید صریحاً Flush شوند.

sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPT

سپس جدول‌های nat و mangle را Flush کنید، همه زنجیرها را Flush کنید (-F) و همه زنجیرهای غیرپیش‌فرض را حذف کنید (-X):

sudo iptables -t nat -F
sudo iptables -t mangle -F
sudo iptables -F
sudo iptables -X

فایروالتان حالا همه ترافیک شبکه را مجاز خواهد دانست. اگر الان قوانین‌تان را فهرست کنید، می‌بینید هیچ‌کدام وجود ندارند و فقط سه زنجیر پیش‌فرض (INPUT، FORWARD و OUTPUT) باقی مانده‌اند.

تفاوت‌های iptables -D و iptables -F

گزینهتوضیحهدفمثال
-Dقانون خاصی را از زنجیر حذف می‌کندبرای حذف یک قانون منفرد از زنجیر استفاده می‌شودsudo iptables -D INPUT 1
-Fهمه قوانین را از زنجیر Flush می‌کندبرای حذف همه قوانین یک زنجیر استفاده می‌شودsudo iptables -F INPUT

iptables -D برای حذف قانون خاصی از زنجیر استفاده می‌شود. مثلاً برای حذف اولین قانون از زنجیر INPUT، sudo iptables -D INPUT 1 را اجرا می‌کردید.

iptables -F برای Flush کردن همه قوانین از زنجیر استفاده می‌شود. مثلاً برای حذف همه قوانین زنجیر INPUT، sudo iptables -F INPUT را اجرا می‌کردید.

حذف قوانین در زنجیرهای سفارشی

هنگام مدیریت قوانین فایروالتان، ممکن است لازم باشد قوانین خاصی را از زنجیرهای سفارشی حذف کنید. زنجیرهای سفارشی، زنجیرهای تعریف‌شده توسط کاربر هستند که پیکربندی‌های قوانین فایروال پیچیده‌تر و سازمان‌یافته‌تری را ممکن می‌کنند. برای حذف قوانین از این زنجیرهای سفارشی، می‌توانید از گزینه -D همراه نام زنجیر سفارشی و شماره قانونی که می‌خواهید حذف کنید استفاده کنید.

مثلاً فرض کنید زنجیر سفارشی‌ای به نام custom_chain دارید و می‌خواهید اولین قانون را از این زنجیر حذف کنید. برای این کار، دستور زیر را اجرا می‌کردید:

sudo iptables -D custom_chain 1

این دستور اولین قانون را از زنجیر custom_chain حذف می‌کند. مطمئن شوید custom_chain را با نام واقعی زنجیر سفارشی‌تان و ۱ را با شماره واقعی قانونی که می‌خواهید حذف کنید جایگزین کنید.

نکته: قبل از حذف زنجیر سفارشی با iptables -X، مطمئن شوید زنجیر خالی است و هیچ قانون دیگری به آن ارجاع نمی‌دهد؛ وگرنه حذف شکست می‌خورد.

یادتان باشد هنگام حذف قوانین از پیکربندی فایروالتان احتیاط به خرج بدهید؛ چون می‌تواند بر امنیت سیستم‌تان اثر بگذارد. همیشه قانونی که می‌خواهید حذف کنید را تأیید کنید تا مطمئن شوید درستش است.

خطاهای رایج و دیباگ

«iptables: No chain/target/match by that name»

این خطا وقتی رخ می‌دهد که زنجیر، target یا نام تطبیقی که تعیین کردید وجود ندارد. برای رفع این خطا، مطمئن شوید زنجیر، target یا تطبیقی که سعی در استفاده‌اش دارید درست spell شده و در پیکربندی iptables شما وجود دارد. می‌توانید همه زنجیرهای موجود را با دستور زیر فهرست کنید:

sudo iptables -nL

این همه زنجیرها—including زنجیرهای پیش‌فرض (INPUT، FORWARD و OUTPUT)—را نمایش می‌دهد. اگر زنجیری که سعی در استفاده‌اش دارید وجود ندارد، می‌توانید با گزینه -N بسازید‌اش:

sudo iptables -N <chain_name>

<chain_name> را با نام زنجیری که می‌خواهید بسازید جایگزین کنید.

حذف نشدن قانون به‌دلیل عدم تطابق

این خطا وقتی رخ می‌دهد که قانونی که سعی در حذفش دارید با قانونی که می‌خواهید حذف کنید مطابقت ندارد. برای رفع این خطا، مطمئن شوید قانونی که سعی در حذفش دارید دقیقاً با قانون موردنظر مطابقت دارد. می‌توانید همه قوانین در زنجیر خاصی را با گزینه -S فهرست کنید:

sudo iptables -S <chain_name>

این همه قوانین در زنجیر مشخص‌شده را نمایش می‌دهد. خروجی را با قانونی که سعی در حذفش دارید مقایسه کنید تا مطمئن شوید دقیقاً مطابقت دارند. اگر مطابقت ندارند، قانونی که سعی در حذفش دارید را تنظیم کنید تا با قانون موردنظر مطابقت یابد.

حذف قوانین اشتباه بر اساس شماره خط

هنگام حذف قوانین بر اساس شماره خط، حذف اشتباه قانون اشتباه آسان است. برای اجتناب از این، از گزینه --line-numbers برای فهرست قوانین با شماره‌های خط استفاده کنید:

sudo iptables -nL <chain_name> --line-numbers

این قوانین را با شماره‌های خط نمایش می‌دهد. از گزینه -D برای حذف قانون بر اساس شماره خطش استفاده کنید:

sudo iptables -D <chain_name> <line_number>

<chain_name> را با نام زنجیر و <line_number> را با شماره خط قانونی که می‌خواهید حذف کنید جایگزین کنید.

سوالات متداول

۱. چطور قوانین فعال iptables را ببینم؟

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

sudo iptables -nL

این همه زنجیرها و قوانین‌شان را نمایش می‌دهد. اگر می‌خواهید قوانین را در قالب تفصیلی‌تری ببینید، می‌توانید از گزینه -S استفاده کنید:

sudo iptables -S

این قوانین را در قالب تفصیلی‌تری—including دستورات دقیق استفاده‌شده برای ساختشان—نمایش می‌دهد.

۲. چطور قانون خاص iptables را حذف کنم؟

برای حذف قانون خاص iptables، می‌توانید از دستور iptables -D استفاده کنید. این دستور قانونی را از زنجیر خاصی حذف می‌کند. مثلاً برای حذف قانونی از زنجیر INPUT، استفاده می‌کردید:

sudo iptables -D INPUT <rule_number>

<rule_number> را با شماره واقعی قانونی که می‌خواهید حذف کنید جایگزین کنید. می‌توانید از گزینه --line-numbers برای دیدن قوانین با شماره‌های خط استفاده کنید:

sudo iptables -nL INPUT

این قوانین را در زنجیر INPUT با شماره‌های خط نمایش می‌دهد؛ که شناسایی قانون موردنظر برای حذف را آسان‌تر می‌کند.

۳. تفاوت Flush کردن و حذف قوانین چیست؟

Flush کردن یک زنجیر، همه قوانین آن زنجیر را حذف می‌کند. حذف یک قانون، قانون خاصی را از زنجیر حذف می‌کند. مثلاً برای Flush کردن همه قوانین از زنجیر INPUT، استفاده می‌کردید:

sudo iptables -F INPUT

این همه قوانین را از زنجیر INPUT حذف می‌کند. از طرف دیگر، حذف قانون خاصی از زنجیر INPUT نیازمند استفاده از گزینه -D طبق توضیح سوال ۲ بود.

۴. چطور همه قوانین در یک زنجیر را حذف کنم؟

برای حذف همه قوانین در یک زنجیر، می‌توانید از دستور iptables -F استفاده کنید. این دستور همه قوانین را از یک زنجیر Flush می‌کند. مثلاً برای Flush کردن همه قوانین از زنجیر INPUT، استفاده می‌کردید:

sudo iptables -F INPUT

این همه قوانین را از زنجیر INPUT حذف می‌کند. همچنین می‌توانید قبل از Flush کردن، از خروجی شماره‌دار استفاده کنید:

sudo iptables -nL INPUT

این قوانین را در زنجیر INPUT نمایش می‌دهد؛ که تأیید قوانین قبل از Flush کردن را آسان‌تر می‌کند.

۵. آیا می‌توانم قانون حذف‌شده iptables را برگردانم؟

نه. تغییرات iptables فوراً اثر می‌گذارند و هیچ دستور Undo نیتیوی وجود ندارد. اگر قانونی را اشتباهی حذف کردید، باید آن را دستی با iptables -A (افزودن) یا iptables -I (درج) با همان مشخصات دقیق قانون دوباره اضافه کنید. به همین دلیل، توصیه می‌شود قبل از اعمال تغییرات از قوانین‌تان بکاپ بگیرید؛ مثلاً:

sudo iptables-save > rules.v4

نتیجه‌گیری

بعد از مرور این آموزش، دیدید چطور قوانین فایروال iptables خود را فهرست و حذف کنید. علاوه بر این، آموختید چطور زنجیرها را Flush کنید، همه قوانین در یک زنجیر را حذف کنید و تفاوت‌های iptables -D و iptables -F را بفهمید.

یادتان باشد هر تغییری در iptables از طریق دستور iptables گذرا (Ephemeral) است و باید ذخیره شود تا از ریبوت‌های سرور جان سالم به در ببرد.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا