معرفی
Iptables یک فایروال است که نقش اساسی در امنیت شبکه برای اکثر سیستم های لینوکس ایفا می کند. در حالی که بسیاری از آموزشهای iptables به شما یاد میدهند که چگونه قوانین فایروال را ایجاد کنید تا سرور خود را ایمن کنید، این یکی بر جنبهای متفاوت از مدیریت فایروال تمرکز دارد: فهرست کردن و حذف قوانین.
در این آموزش، نحوه انجام وظایف iptables زیر را توضیح خواهیم داد:
- قوانین را فهرست کنید
- پاک کردن شمارشگر بسته و بایت
- قوانین را حذف کنید
- زنجیرهای فلاش (حذف تمام قوانین در یک زنجیره)
- همه زنجیرهها و جداول را پاک کنید، همه زنجیرهها را حذف کنید و تمام ترافیک را بپذیرید
پیش نیازها
این آموزش فرض می کند که شما از یک سرور لینوکس با دستور iptables نصب شده استفاده می کنید و کاربر شما دارای امتیازات sudo است.
قوانین فهرست بندی بر اساس مشخصات
بیایید ابتدا نحوه فهرست کردن قوانین را بررسی کنیم. دو روش مختلف برای مشاهده قوانین iptables فعال وجود دارد: در یک جدول یا به عنوان لیستی از مشخصات قوانین. هر دو روش تقریباً اطلاعات یکسانی را در قالب های مختلف ارائه می دهند.
برای فهرست کردن همه قوانین فعال iptables بر اساس مشخصات، دستور iptables را با گزینه -S اجرا کنید:
sudo iptables -S
-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
-N TCP
-A TCP -p tcp -m tcp --dport 22 -j ACCEPT
حال بیایید نگاهی به راه جایگزین برای مشاهده قوانین فعال iptables بیاندازیم: به عنوان جدول قوانین.
فهرست کردن قوانین به صورت جداول
فهرست کردن قوانین iptables در نمای جدول می تواند برای مقایسه قوانین مختلف با یکدیگر مفید باشد. برای خروجی تمام قوانین iptables فعال در یک جدول، دستور iptables را با گزینه -L اجرا کنید:
sudo iptables -L
با این کار تمام قوانین فعلی مرتب شده بر اساس زنجیره تولید می شود.
اگر می خواهید خروجی را به یک زنجیره خاص (INPUT، OUTPUT، TCP و غیره) محدود کنید، می توانید نام زنجیره را مستقیماً بعد از گزینه -L تعیین کنید.
بیایید به یک مثال زنجیره ورودی نگاهی بیندازیم:
sudo iptables -L INPUT
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: اگر بسته ای با قانون مطابقت داشته باشد، هدف مشخص می کند که با آن چه کاری باید انجام شود. به عنوان مثال، یک بسته را می توان پذیرفت، رها کرد، ثبت کرد یا به زنجیره دیگری فرستاد تا با قوانین بیشتری مقایسه شود.
- prot: پروتکل، مانند tcp، udp، icmp یا همه
- opt: به ندرت استفاده می شود، این ستون گزینه های IP را نشان می دهد
- منبع: آدرس IP منبع یا زیرشبکه ترافیک یا هر جایی
- مقصد: آدرس IP مقصد یا زیرشبکه ترافیک یا هر جایی
آخرین ستون که برچسب گذاری نشده است، گزینه های یک قانون را نشان می دهد. این هر بخشی از قانون است که توسط ستون های قبلی نشان داده نشده است. این می تواند هر چیزی از پورت مبدا و مقصد گرفته تا وضعیت اتصال بسته باشد.
نمایش تعداد بسته ها و اندازه کل
هنگام فهرست کردن قوانین iptables، میتوان تعداد بستهها و اندازه کل بستهها را در بایت نشان داد که با هر قانون خاص مطابقت دارد. این اغلب هنگام تلاش برای بدست آوردن یک ایده کلی از اینکه کدام قوانین با بسته ها مطابقت دارند مفید است. برای این کار از گزینه های -L و -v با هم استفاده کنید.
به عنوان مثال، بیایید دوباره به زنجیره INPUT با گزینه -v نگاه کنیم:
sudo iptables -L INPUT -v
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 و بایت است.
اکنون که میدانید چگونه قوانین فایروال فعال را به روشهای مختلف فهرست کنید، بیایید ببینیم چگونه میتوان شمارنده بسته و بایت را بازنشانی کرد.
تنظیم مجدد تعداد بسته ها و اندازه کل
اگر می خواهید شمارنده بسته و بایت را برای قوانین خود پاک کنید یا صفر کنید، از گزینه -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 که برای نشان دادن موقعیت قانون در زمان ایجاد استفاده می شود، در اینجا باید حذف شود.
حذف قوانین بر اساس زنجیره و شماره
راه دیگر برای حذف قوانین iptables توسط زنجیره و شماره خط آن است. برای تعیین شماره خط یک قانون، قوانین را در قالب جدول فهرست کنید و گزینه –line-numbers را اضافه کنید:
sudo iptables -L –line-numbers
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 و سپس شماره زنجیره و قانون را اجرا کنید.
به عنوان مثال، اگر بخواهیم قانون ورودی را حذف کنیم که بسته های نامعتبر را حذف می کند، می بینیم که قانون 3 از زنجیره INPUT است. بنابراین باید این دستور را اجرا کنیم:
sudo iptables -D INPUT 3
اکنون که میدانید چگونه قوانین دیوار آتش را حذف کنید، بیایید به نحوه پاک کردن زنجیرههای قوانین بپردازیم.
Flushing یک زنجیر
Iptables راهی را برای حذف تمام قوانین در یک زنجیره، یا flush کردن یک زنجیره ارائه می دهد. در این بخش به انواع روش های انجام این کار پرداخته می شود.
Flushing کردن یک زنجیره خاص
برای flush کردن یک زنجیره خاص، که تمام قوانین موجود در زنجیره را حذف می کند، می توانید از -F یا معادل آن –flush، گزینه و نام زنجیره برای flush استفاده کنید.
به عنوان مثال، برای حذف تمام قوانین موجود در زنجیره INPUT، این دستور را اجرا کنید:
sudo iptables -F INPUT
Flushing کردن تمام زنجیرها
برای flush کردن تمام زنجیرهها، که تمام قوانین فایروال را حذف میکند، میتوانید از گزینه -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 زودگذر است و باید ذخیره شود تا از طریق راه اندازی مجدد سرور ادامه یابد. این در بخش قوانین ذخیره سازی در آموزش قوانین و دستورات دیوار آتش مشترک پوشش داده شده است.
https://vpsgol.net/product/vps-germany/
https://vpsgol.net/product/vps-usa/
https://vpsgol.net/product/vps-france/
https://vpsgol.net/product/vps-canada/
https://vpsgol.net/product/vps-poland/
https://vpsgol.net/product/vps-netherlands/
https://vpsgol.net/product/vps-england/