در پست های قبل از فایروال ها بسیار گفتیم و IPTables یکی از معروف و محبوبترین فایروال ها در لینوکس است را معرفی کردیم. در این پست با تعدادی مثال، بیشتر و کاربردیتر با آن آشنا خواهید شد.
نمایش وضعیت فایروال
دستور زیر وضعیت فایروالتان را به شما نشان خواهد داد:
1 |
# iptables -L -n -v |
نمونه خروجی:
1 2 3 4 5 6 |
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 |
اگر خروجی بالا را در سیستم خود دریافت کردید یعنی فایروالتان غیر فعال است یا اگر بخواهیم درست تر بگوییم، فایروالتان کار خاصی انجام نمی دهد. اگر فعال باشد و کار خاصی کند خروجی خاص تری را نشان خواهد داد، مثل خروجی زیر:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
Chain INPUT (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 state INVALID 394 43586 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 93 17292 ACCEPT all -- br0 * 0.0.0.0/0 0.0.0.0/0 1 142 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 0 0 ACCEPT all -- br0 br0 0.0.0.0/0 0.0.0.0/0 0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 state INVALID 0 0 TCPMSS tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp flags:0x06/0x02 TCPMSS clamp to PMTU 0 0 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 0 0 wanin all -- vlan2 * 0.0.0.0/0 0.0.0.0/0 0 0 wanout all -- * vlan2 0.0.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 را اضافه کنید.
1 2 |
# iptables -L INPUT -n -v # iptables -L OUTPUT -n -v –line-numbers |
برای کنترل IPTables و انجام عملیات های شروع، شروع مجدد و از کار اننداختن آن دستورات زیر را میتوانید اجرا کنید:
1 2 3 |
# service iptables stop # service iptables start # service iptables restart |
آپشن F- برای حذف rule ها، آپشن -X برای حذف Chain و آپشن t- برای انتخاب جدول(nat یا mangle) بکار می روند. آپشن P- هم در اینجا مقدار policy (رفتار IPTables در برابر یک پکیج) را مشخص می کند.
1 2 3 4 5 6 7 8 9 |
# 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 را در مقابل آن بنویسید.
1 2 |
# iptables -D INPUT 4 # iptables -D INPUT -s 202.54.1.1 -j DROP |
برای اضافه کردن یک rule باید از I- استفاده کنید. دستور زیر یک rule را بین rule های شماره ۱ و ۲ قرار می دهد:
1 |
# iptables -I INPUT 2 -s 202.54.1.2 -j DROP |
میتوانید از rule هایی که نوشتهاید بکاپ تهیه کنید، دستور زیر از آنها بکاپ می گید و در فایل مشخص شده ذخیره می کند:
1 |
# iptables-save > /root/my.active.firewall.rules |
برای باز گردانی(restore) فایل بکاپ اینگونه عمل کنید:
1 |
# iptables-restore < /root/my.active.firewall.rules |
اگر میخواهید یک آی پی خاص یا یک رنج آی پی را بلاک کنید راه حل این است:
1 2 |
# 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 استفاده شده که میتواند یکی اینترفیس را مشخص کند تا این بسته شدن پورت فقط روی آن اتفاق بیفتد.
1 2 |
# iptables -A INPUT -p tcp --dport 80 -j DROP # iptables -A INPUT -i eth1 -p tcp --dport 80 -j DROP |
1 |
# iptables -A INPUT -p tcp -s 1.2.3.4 --dport 80 -j DROP |