حذف قوانین فایروال 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
در ادامه مطلب حذف قوانین فایروال 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 بهرهبرداری کرد. با آشنایی با قوانین و نحوه حذف آنها، میتوانید بهبود امنیت شبکه را تضمین کنید و خطرات احتمالی را کاهش دهید.
دیدگاهتان را بنویسید