در پست های قبل از فایروال ها بسیار گفتیم و IPTables یکی از معروف و محبوبترین فایروال ها در لینوکس است را معرفی کردیم. در این پست با تعدادی مثال، بیشتر و کاربردیتر با آن آشنا خواهید شد.
نمایش وضعیت فایروال
دستور زیر وضعیت فایروالتان را به شما نشان خواهد داد:
# iptables -L -n -v
نمونه خروجی:
Chain INPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination
اگر خروجی بالا را در سیستم خود دریافت کردید یعنی فایروالتان غیر فعال است یا اگر بخواهیم درست تر بگوییم، فایروالتان کار خاصی انجام نمی دهد. اگر فعال باشد و کار خاصی کند خروجی خاص تری را نشان خواهد داد، مثل خروجی زیر:
Chain INPUT (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination ۰ ۰ DROP all -- * * 0.0.0.0/0 0.0.0.0/0 state INVALID ۳۹۴ ۴۳۵۸۶ ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED ۹۳ ۱۷۲۹۲ ACCEPT all -- br0 * 0.0.0.0/0 0.0.0.0/0 ۱ ۱۴۲ ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 Chain FORWARD (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination ۰ ۰ ACCEPT all -- br0 br0 0.0.0.0/0 0.0.0.0/0 ۰ ۰ DROP all -- * * 0.0.0.0/0 0.0.0.0/0 state INVALID ۰ ۰ TCPMSS tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp flags:0x06/0x02 TCPMSS clamp to PMTU ۰ ۰ ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED ۰ ۰ wanin all -- vlan2 * 0.0.0.0/0 0.0.0.0/0 ۰ ۰ wanout all -- * vlan2 0.0.0.0/0 0.0.0.0/0 ۰ ۰ ACCEPT all -- br0 * 0.0.0.0/0 0.0.0.0/0 Chain OUTPUT (policy ACCEPT 425 packets, 113K bytes) pkts bytes target prot opt in out source destination Chain wanin (1 references) pkts bytes target prot opt in out source destination Chain wanout (1 references) pkts bytes target prot opt in out source destination
در دستوری که وارد کردیم از سه آپشن استفاده شده است.
L : نمایش لیست rule ها
v- : نمایش اطلاعات و جزئیات بیشتر
-n : این آپشن با عدم استفاده از DNS باعث افزایش سرعت اجرای دستور میشود و همچنین پورت و ip ها را به صورت عددی نشان می دهد.
اگر میخواهید جزئیات را فقط برای یک chain خاص ببینید نام آن را در دستور بنویسید و برای نمایش شماره خطوط آپشن –line-numbers را اضافه کنید.
# iptables -L INPUT -n -v # iptables -L OUTPUT -n -v –line-numbers
برای کنترل IPTables و انجام عملیات های شروع، شروع مجدد و از کار اننداختن آن دستورات زیر را میتوانید اجرا کنید:
# service iptables stop # service iptables start # service iptables restart
آپشن F- برای حذف rule ها، آپشن -X برای حذف Chain و آپشن t- برای انتخاب جدول(nat یا mangle) بکار می روند. آپشن P- هم در اینجا مقدار policy (رفتار IPTables در برابر یک پکیج) را مشخص می کند.
# iptables -F # iptables -X # iptables -t nat -F # iptables -t nat -X # iptables -t mangle -F # iptables -t mangle -X # iptables -P INPUT ACCEPT # iptables -P OUTPUT ACCEPT # iptables -P FORWARD ACCEPT
از آپشن D- میتوانید برای حذف یک rule استفاده کنید. Rule مورد نظر را میتوانید با شماره ای که –line-numbers در کنار آن نشان میدهد، مشخص کنید. یا اینکه کل rule را در مقابل آن بنویسید.
# iptables -D INPUT 4 # iptables -D INPUT -s 202.54.1.1 -j DROP
برای اضافه کردن یک rule باید از I- استفاده کنید. دستور زیر یک rule را بین rule های شماره ۱ و ۲ قرار می دهد:
# iptables -I INPUT 2 -s 202.54.1.2 -j DROP
میتوانید از rule هایی که نوشتهاید بکاپ تهیه کنید، دستور زیر از آنها بکاپ می گید و در فایل مشخص شده ذخیره می کند:
# iptables-save > /root/my.active.firewall.rules
برای باز گردانی(restore) فایل بکاپ اینگونه عمل کنید:
# iptables-restore < /root/my.active.firewall.rules
اگر میخواهید یک آی پی خاص یا یک رنج آی پی را بلاک کنید راه حل این است:
# iptables -A INPUT -s 1.2.3.4 -j DROP # iptables -A INPUT -s 192.168.0.0/24 -j DROP
آپشن s- آی پی مورد نظر و j- رفتاری که باید با آن شود را مشخص می کند. DROP باعث بلاک شدن آن می شود. ( در این مثال شما میتوانید به آن آی پی اطلاعات بفرستید ولی قادر به دریافت اطلاعات از آن نیستید چون فقط روی INPUT کار کرده ایم.)
با دستورات زیر پورت هشتاد TCP سیستم خود را بسته ایم و هیچ سرویسی نمیتواند روی آن کار کند. دقت کنید که در مثال دوم از آپشن -i استفاده شده که میتواند یکی اینترفیس را مشخص کند تا این بسته شدن پورت فقط روی آن اتفاق بیفتد.
# iptables -A INPUT -p tcp --dport 80 -j DROP # iptables -A INPUT -i eth1 -p tcp --dport 80 -j DROP
حال پورت و آی پی را با هم ادغام می کنیم. دستور زیر پورت ۸۰ را به روی آی پی ۱٫۲٫۳٫۴ می بندد.
# iptables -A INPUT -p tcp -s 1.2.3.4 --dport 80 -j DROP