تاریخ امروز۱۴۰۳-۰۲-۲۰

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

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

Iptables یک نرم‌افزار فایروال بسیار قدرتمند و پرکاربرد در سیستم‌عامل‌ لینوکس است. این ابزار به مدیران IT اجازه می‌دهد تا قوانین و سیاست‌های امنیتی از جمله فیلتر کردن براساس آدرس IP و پورت، مسدود کردن حملات DDoS، تنظیم قوانین NAT (Network Address Translation) و مدیریت ترافیک شبکه را در سطح بستر IP تعریف کنند.

با استفاده از Iptables، می‌توانید ترافیک شبکه را کنترل کرده، بسته‌های مورد نظر را مسدود کنید و به صورت دقیق تصمیم‌گیری کنید که کدام بسته‌ها به سیستم شما دسترسی داشته باشند و کدام بسته‌ها را رد کنید.

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

هر قانون می‌تواند شرایطی را برای بسته‌های مختلف تعیین کند و عملیاتی مانند رد کردن یا اجازه عبور بسته‌ها را انجام دهد. با استفاده از Iptables، می‌توانید قوانین خود را بر اساس نوع بسته (مثلاً TCP یا UDP)، آدرس منبع و مقصد، پورت‌ ها و سایر ویژگی‌های بسته‌ها تعریف کنید.

استفاده از Iptables به مدیران IT امکان می‌دهد تا امنیت شبکه خود را بهبود دهند، از حملات مخرب پیشگیری کنند و ترافیک شبکه را بهینه‌سازی نمایند.

در این آموزش، نحوه انجام وظایف iptables زیر را توضیح خواهیم داد.

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

با ما همراه باشید تا نحوه فهرست کردن و حذف قوانین فایروال Iptables و دیگر قابلیت‌ها و کاربردهای آن را بررسی نماییم.

پیش نیازهای حذف قوانین فایروال Iptables و فهرست کردن آنها

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

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

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

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

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

هر دو روش تقریباً اطلاعات یکسانی را در قالب‌های مختلف ارائه می‌دهند.

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

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-persistent یا iptables save استفاده کرده باشید، این نیز شبیه فایل‌های پیکربندی قوانین iptables خواهد بود.

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

اگر می‌خواهید خروجی را به یک زنجیره خاص (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 را با دستور – L، به شکل زیر اجرا کنید.

sudo iptables -L

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

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

در ادامه، به یک مثال از زنجیره INPUT خواهیم پرداخت.

sudo iptables -L 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) را نشان می‌دهد.

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

موضوعات هدر IPtables در هر ستون

در ادامه شما را با موضوعات هر هدر در ستون آشنا خواهیم کرد.

target

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

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

prot

پروتکل‌هایی، مانند tcp، udp، icmp و… است

opt

این ستون گزینه‌های IP را نشان می‌دهد و به ندرت استفاده می‌شود.

source

این هدر شامل آدرس آی پی منبع یا زیرشبکه ترافیک و… است.

destination

آدرس IP مقصد یا زیرشبکه ترافیک و…

آخرین ستونی که برچسب گذاری نشده است، گزینه‌های یک قانون را نشان می‌دهد. این بخشی از قانون است که توسط ستون‌های قبلی نشان داده نمی‌شود و می‌تواند شامل هر چیزی از پورت‌های مبدا و مقصد تا وضعیت اتصال بسته‌‍‌ها باشد.

نمایش تعداد بسته‌ها و اندازه کل

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

بیشتر بدانید : نصب و استفاده از Docker Compose در اوبونتو

این کار زمانی موثر و مفید است که سعی در بدست آوردن یک ایده کلی از اینکه کدام قوانین با بسته‌ها مطابقت دارند. برای این کار از دو دستور -L و -v با هم استفاده کنید.

در ادامه، به یک مثال از زنجیره INPUT با دستور -v خواهیم پرداخت.

sudo iptables -L INPUT -v

خروجی مشابه دریافت خواهید کرد.

Output
Chain INPUT (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
 ۲۸۴K   42M ACCEPT     all  --  any    any     anywhere             anywhere             ctstate RELATED,ESTABLISHED
    ۰     ۰ ACCEPT     all  --  lo     any     anywhere             anywhere
    ۰     ۰ DROP       all  --  any    any     anywhere             anywhere             ctstate INVALID
  ۳۹۶ ۶۳۲۷۵ UDP        udp  --  any    any     anywhere             anywhere             ctstate NEW
۱۷۰۶۷ ۱۰۰۵K TCP        tcp  --  any    any     anywhere             anywhere             tcp flags:FIN,SYN,RST,ACK/SYN ctstate NEW
 ۲۴۱۰  ۱۵۴K ICMP       icmp --  any    any     anywhere             anywhere             ctstate NEW
  ۳۹۶ ۶۳۲۷۵ REJECT     udp  --  any    any     anywhere             anywhere             reject-with icmp-port-unreachable
 ۲۹۱۶  ۱۷۹K REJECT     all  --  any    any     anywhere             anywhere             reject-with icmp-proto-unreachable
    ۰     ۰ 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، تعیین قوانین است. برای انجام این کار می‌توانید دستور iptables را با دستور -D و پس از آن با مشخص کردن قانون اجرا کنید.

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

بیشتر بدانید : آموزش ساخت سرور تست وردپرس

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

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

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

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

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

sudo iptables -L --line-numbers

خروجی مشابه دریافت خواهید کرد.

Output
Chain INPUT (policy DROP)
num  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
۱۰   ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh ctstate NEW,ESTABLISHED

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

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

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

sudo iptables -D INPUT 3
آشنایی Flushing زنجیره
آشنایی Flushing زنجیره

در ادامه مطلب حذف قوانین فایروال Iptables، شما را با نحوه پاک کردن زنجیره‌های قوانین آشنا خواهیم کرد.

Flushing زنجیره قوانین IPtables

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

Flushing یک زنجیره

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

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

sudo iptables -F INPUT

Flushing تمام زنجیره‌ها

برای Flushing تمام زنجیره‌ها که تمام قوانین فایروال را حذف می‌کند، می‌توانید از دستور -F یا معادل آن -flush استفاده کنید.

sudo iptables -F

Flushing تمامی قوانین، حذف تمام زنجیره‌ها و پذیرش همه آنها

در این بخش به شما نشان داده می‌شود که چگونه تمام قوانین، جداول و زنجیره‌های فایروال خود را پاک کنید و اجازه دسترسی به تمام ترافیک شبکه را ارائه دهید.

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

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

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

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

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

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

جمع بندی

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

اشتراک‌گذاری

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

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