Iptables یک فایروال است که نقش اساسی در امنیت شبکه برای اکثر سیستمهای لینوکسی ایفا میکند. در این راهنما، نحوهی فهرست کردن و حذف قوانین iptables را بررسی خواهیم کرد.
توجه: هنگام کار با فایروالها، دقت کنید که با مسدود کردن ترافیک SSH (به طور پیش فرض پورت 22) ابرک خود را قفل نکنید. اگر به دلیل تنظیمات فایروال، دسترسیتان را از دست دادید، باید از طریق کنسول به آن متصل شوید تا مشکل دسترسی خود را برطرف کنید.
در این راهنما، دستورها روی یک ابرک لینوکسی که Iptables روی آن نصب شده است و با یک کاربر با دسترسی sudo اجرا میشود. اگر هنوز Iptables را روی ابرکتان نصب نکردهاید، از راهنمای فایروال Iptables چیست و چگونه کار میکند کمک بگیرید.
مشاهده لیست قوانین بر اساس مشخصات
ابتدا نحوهی فهرست کردن قوانین را بررسی میکنیم. دو روش مختلف برای مشاهدهی قوانین فعال Iptables وجود دارد: در یک جدول یا به شکل لیستی از مشخصات قوانین. هر دو روش تقریبن اطلاعات یکسانی را در قالبهای مختلف ارایه میدهند.
برای فهرست کردن همهی قوانین فعال Iptables بر اساس مشخصات، دستور Iptables را با فلگ S- اجرا کنید:
sudo iptables -S
فهرست کردن یک زنجیره خاص
اگر میخواهید خروجی را به یک زنجیرهی خاص (INPUT، OUTPUT، TCP و غیره) محدود کنید، میتوانید نام زنجیره را بعد از S- تعیین کنید. به عنوان مثال، برای نشان دادن تمام مشخصات قوانین در زنجیرهی TCP، این دستور را اجرا کنید:
sudo iptables -S TCP
فهرست کردن قوانین به شکل جدول
فهرست کردن قوانین Iptables در نمای جدول میتواند برای مقایسهی قوانین مختلف با یکدیگر مفید باشد. برای خروجی تمام قوانین Iptables فعال در یک جدول، دستور Iptables را با L- اجرا کنید:
sudo iptables -L
با این کار تمام قوانین فعلی به ترتیب زنجیره در خروجی نمایش داده میشود.
اگر میخواهید خروجی را به یک زنجیرهی خاص (INPUT،OUTPUT ،TCP و غیره) محدود کنید، میتوانید نام زنجیره را بعد از گزینهی L- وارد کنید.
sudo iptables -L INPUT
خط اول خروجی نام زنجیره (در این مورد INPUT) و به دنبال آن، سیاست پیشفرض آن (DROP) را نشان میدهد. خط بعدی شامل نام هر ستون در جدول است و با قوانین زنجیره دنبال میشود:
target: اگر بستهای با قانون مطابقت داشته باشد، target مشخص میکند که با آن چه کاری باید انجام شود. برای مثال، یک بسته را میتوان پذیرفت، رد کرد، ثبت یا لاگ کرد یا به زنجیرهی دیگری فرستاد تا با قوانین بیشتری مقایسه شود.
prot: پروتکل، مانند tcp ،udp ،icmp، یا all
opt: به ندرت استفاده میشود، این ستون گزینههای IP را نشان میدهد.
source: آدرس IP مبدا یا subnet ترافیک یا anywhere
destination: آدرس IP مقصد یا subnet ترافیک یا anywhere
آخرین ستون که نامی ندارد، گزینههای یک قانون را نشان میدهد که هر بخشی از قانون است که در ستونهای قبلی نشان داده نشده است. مقدار این ستون میتواند هر چیزی از پورتهای مبدا و مقصد گرفته تا وضعیت اتصال پکت باشد.
نمایش تعداد بستهها و اندازه کل
هنگام فهرست کردن قوانین Iptables، میتوان تعداد بستهها و اندازهی کل بستهها را که با هر قانون خاص مطابقت دارد، در قالب بایت نشان داد. این کار زمانی مفید است که بخواهید یک دید کلی از اینکه کدام قوانین با بستهها مطابقت دارند به دست آورید. برای این کار باید از گزینههای L- و v- با هم استفاده کنید. برای مثال، دوباره به زنجیرهی INPUT با فلگ v- نگاه کنیم:
sudo iptables -L INPUT -v
فهرست، اکنون دارای دو ستون اضافی، pkts و bytes است.
تنظیم مجدد تعداد بستهها و اندازه کل
اگر میخواهید شمارندههای بسته و بایت را برای قوانین خود پاک یا صفر کنید، از فلگ Z- استفاده کنید. همچنین با راه اندازی مجدد، آنها ریست میشوند. اگر میخواهید ببینید آیا ابرک شما ترافیک جدیدی دریافت میکند که با قوانین موجود مطابقت دارد، این کار مفید است.
برای پاک کردن شمارندهها برای تمام زنجیرهها و قوانین، از گزینهی Z- به تنهایی استفاده کنید:
sudo iptables -Z
برای پاک کردن شمارندهها برای همهی قوانین در یک زنجیرهی خاص، از Z- استفاده کنید و زنجیره را مشخص کنید. به عنوان مثال، برای پاک کردن شمارندههای زنجیرهای INPUT این دستور را اجرا کنید:
sudo iptables -Z INPUT
اگر میخواهید شمارندههای یک قانون خاص را پاک کنید، نام زنجیره و شمارهی قانون را مشخص کنید. به عنوان مثال، برای صفر کردن شمارندههای قانون اول در زنجیرهی INPUT، این دستور را اجرا کنید:
sudo iptables -Z INPUT 1
حذف قوانین بر اساس مشخصات
یکی از راههای حذف قوانین 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
این دستور شمارهی خط را به هر سطر قانون اضافه میکند که با هدر num نشان داده شده است.
هنگامی که میدانید کدام قانون را میخواهید حذف کنید، شمارهی زنجیره و خط قانون را یادداشت کنید. دستور iptables -D و سپس شمارهی زنجیره و قانون را اجرا کنید.
به عنوان مثال، اگر بخواهیم قانون ورودی را حذف کنیم که بستههای نامعتبر را حذف میکند، میبینیم که قانون ۳ زنجیرهی INPUT است. بنابراین باید این دستور را اجرا کنیم:
sudo iptables -D INPUT 3
حذف تمام قوانین زنجیرهها
Iptables راهی را برای حذف همهی قوانین در یک زنجیره ارایه میدهد.
توجه داشته باشید که با استفاده از یک سیاست پیشفرض drop یا deny، ارتباط SSH خود را از ابرکتان قفل نکنید. اگر این کار را انجام دهید، باید از طریق کنسول به آن متصل شوید تا مشکل عدم دسترسی خود را برطرف کنید.
حذف تمام قوانین یک زنجیره
برای flush کردن یک زنجیرهی خاص، که تمام قوانین موجود در زنجیره را حذف میکند، میتوانید از F- یا معادل آن flush– و نام زنجیره استفاده کنید.
به عنوان مثال، برای حذف تمام قوانین موجود در زنجیرهی INPUT، این دستور را اجرا کنید:
sudo iptables -F INPUT
حذف قوانین تمام زنجیرهها
برای flush کردن تمام زنجیرهها، که تمام قوانین فایروال را حذف میکند، میتوانید از F- یا معادل آن flush– به تنهایی استفاده کنید:
sudo iptables -F
حذف همه قوانین و همه زنجیرهها و پذیرش همه
در این بخش بررسی میکنیم که چگونه تمام قوانین، جداول و زنجیرههای فایروال خود را پاک کنید و تمام ترافیک شبکه را مجاز کنید.
توجه داشته باشید این کار فایروال شما را غیرفعال میکند. فقط زمانی باید این بخش را دنبال کنید که بخواهید پیکربندی فایروالتان را از اول شروع کنید.
ابتدا، سیاستهای پیش فرض را برای هر یک از زنجیرههای داخلی روی ACCEPT تنظیم کنید. دلیل اصلی انجام این کار این است که اطمینان حاصل شود که ارتباط SSH به ابرکتان را از دست نمیدهید.
sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPT
سپس جداول nat و mangle را flush کنید، همهی زنجیرهها (F-) را پاک کنید و تمام زنجیرههای غیر پیش فرض (X-) را حذف کنید:
sudo iptables -t nat -F
sudo iptables -t mangle -F
sudo iptables -F
sudo iptables -X
فایروال شما اکنون به تمام ترافیک شبکه اجازهی ورود و خروج میدهد. اگر قوانین خود را فهرست کنید، خواهید دید که هیچ کدام وجود ندارد و تنها سه زنجیرهی پیش فرض (INPUT، FORWARD و OUTPUT) باقی میمانند.
توجه داشته باشید که هر تغییری از طریق دستور iptables میرا است و باید ذخیره شود تا از طریق راه اندازی مجدد ابرک ادامه یابد.