Netfilter نام فایروال محلی سیستم عامل لینوکس می باشد که در لایه کرنل عمل می کند و از iptables برای کنترل آن جهت مدیریت و ***** کردن پکت ها بر روی IPv4 و IPv6 استفاده می گردد. با توجه به اهمیت مسئله امنیت سرور و بخصوص سرور های لینوکس ، در این مطلب تعدادی از رایج ترین دستورات فایروال لینوکس iptables تشریح می گردد که می تواند در خیلی از مواقع مشکلات مدیر سرور را مرتفع نماید. لازم به توضیح است که می بایست در استفاده از دستورات فایروال دقت لازم را مبذول فرمائید، چرا که یک اشتباه ساده، می تواند منجر به بسته شدن دسترسی شما به سرور گردد، البته در کلیه سرور های ارائه شده توسط پارس پک ، با مراجعه به پنل ابر سرور در بخش کاربری و امکان VNC می توانید اشکلات بوجود آمده در دسترسی به سرور را بررسی و مرتفع نمایید.
در این مطلب فرض بر این است که شما از دسترسی روت ( root ) برای وارد کردن دستورات استفاده می کنید.
1. نمایش وضعیت فایروال:
برای مشخص شدن رول هایی که در حال حاضر در iptables وجود دارند، می توانید از دستور زیر استفاده فرمائید:
خروجی دستور می تواند به شکل زیر باشد:
اگر در فایروال خود از قبل رول هایی اضافه کرده اید، احتمالا وضعیت به شکل زیر خواهد بود:
برای نمایش رول ها به همراه شماره خط هر رول از دستور زیر استفاده فرمائید:
احتمالا خروجی دستور، مشابه زیر خواهد بود:
توضیح دستور :
L- : لیست رول ها
v- : نمایش جزئیات
n- : نمایش ip و پورت بصورت عددی
2. تغییر وضعیت فایروال :
از دستورات زیر برای روشن ، خاموش و ریست فایروال می توان استفاده کرد:
اگر می خواهید فایروال را خاموش و پس از ریستارت سرور نیز وضعیت به همین منوال باقی بمانید ، دستور زیر را وارد نمائید:
3. حذف قوانین و رول های فایروال :
ابتدا به کمک دستورات زیر شماره خط رول را بدست آورید:
حال به عنوان مثال برای حذف رول موجود در خط شماره 4 می توانید از دستور زیر استفاده فرمائید:
و یا از دستور زیر برای حذف قوانین مروبطه به ای پی مورد نظر خود استفاده فرمایید:
توضیح:
D- : حذف یک یا چند رول از زنجیره انتخاب شده
3.1 حذف کلیه رول ها از فایروال ( Flush iptables ):
برای حذف کلیه رول ها می توانید از دستور زیر استفاده فرمائید:
و اگر در تیبل nat و mangle نیز رولی اضافه کردید ، دو دستور زیر را نیز لازم است وارد نمائید:
برای مشاهده وضعیت رول ها مجدد از دستور زیر استفاده فرمائید:
4. نحوه مسدود کردن ترافیک ورودی ، خروجی و یا فوروارد در فایروال :
برای مسدود کردن کل ترافیک می توانید از دستورات زیر استفاده فرمائید ( دقت نمائید که این دستورات می تواند مانع از دسترسی شما به سرور گردد.) :
برای ذخیره نمودن تغییرات اضافه شده در فایروال می توانید از دستور زیر استفاده فرمائید:
5. نحوه مسدود نمودن یک IP بر روی سرور :
به کمک دستورات اول شما می توانید ترافیک ورودی از سوی ای پی 1.2.3.4 و به وارد کردن دستور دوم کل ترافیک ورودی برای رنج ای پی مورد مثال مسدود می گردد.
6. نحوه مسدود کردن ترافیک ورودی بر روی یک پورت خاص :
به کمک دستورات زیر می توان ترافیک ورودی را بر روی پورت 80 مسدود نمائید. لازم به توضیح است که معمولا وب سرور از پورت 80 برای نمایش وب سایت استفاده می کند.
برای مسدود کردن ترافیک ورودی بر روی پورت 80 تنها برای یک IP و یا یک رنج IP می توانید از دستورات زیر استفاده فرمائید:
7. نحوه مسدود نمودن ترافیک خروجی:
برای مسدود نمودن ترافیک خروجی برای یک IP خاص و یا یک رنج IP می توانید از دستورات زیر استفاده فرمائید:
8. لاگ کردن فعالیت ها:
خیلی از مواقع نیاز استفا تا از ریز فعالیت هایی که بر روی شبکه سرور در حال وقوع است مطلع شوید برای مثال برای جلوگیری از IP spoofing بر روی اینترفیس eth1 می توانید از دستور زیر استفاده فرمائید. در این دستور در حالیکه ترافیک مربوطه مسدود می گردد ، تلاش های صورت گرفته نیز با پیشوند IP_SPOOF A در لاگ ذخیره می شود:معمولا لاگ ها در مسیر /var/log/messages قرار دارند که البته با توجه به ویرایش لینوکس مورد استفاده می تواند متفاوت باشد. برای مشاهده لاگ های مربوطه می توانید از دستورات زیر استفاده فرمائید:برای جلوگیری از حجیم شدن لاگ فایل می توان از قابلیت سوکت -m در دستور استفاده کرد که به کمک آن می توان تنظیم نمود که برای مثال در هر 5 دقیقه بیش از 7 مورد را در لاگ ذخیره ننماید:9. چگونه از باز یا بسته بودن یک پورت توسط فایروال بر روی شبکه آگاه شویم؟برای آگاهی از باز بودن و نبودن پورت می توانید از دستور زیر استفاده فرمایئد:
برای آشنایی بیشتر با iptables و مطالعه manual های آن می توانید از دستور زیر استفاده فرمائید:
برای مشاهده راهنمای آن دستور زیر قابل استفاده خواهد بود:
در این مطلب فرض بر این است که شما از دسترسی روت ( root ) برای وارد کردن دستورات استفاده می کنید.
1. نمایش وضعیت فایروال:
برای مشخص شدن رول هایی که در حال حاضر در 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 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
برای نمایش رول ها به همراه شماره خط هر رول از دستور زیر استفاده فرمائید:
iptables -n -L -v --line-numbers
کد:
Chain INPUT (policy DROP)
کد:
num target prot opt source destination 1 DROP all -- 0.0.0.0/0 0.0.0.0/0 state INVALID 2 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 3 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 4 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 Chain FORWARD (policy DROP) num target prot opt source destination 1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 2 DROP all -- 0.0.0.0/0 0.0.0.0/0 state INVALID 3 TCPMSS tcp -- 0.0.0.0/0 0.0.0.0/0 tcp flags:0x06/0x02 TCPMSS clamp to PMTU 4 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 5 wanin all -- 0.0.0.0/0 0.0.0.0/0 6 wanout all -- 0.0.0.0/0 0.0.0.0/0 7 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 Chain OUTPUT (policy ACCEPT) num target prot opt source destination Chain wanin (1 references) num target prot opt source destination Chain wanout (1 references)num target prot opt source destination
توضیح دستور :
L- : لیست رول ها
v- : نمایش جزئیات
n- : نمایش ip و پورت بصورت عددی
2. تغییر وضعیت فایروال :
از دستورات زیر برای روشن ، خاموش و ریست فایروال می توان استفاده کرد:
service iptables stop
service iptables start
service iptables restart
service iptables start
service iptables restart
اگر می خواهید فایروال را خاموش و پس از ریستارت سرور نیز وضعیت به همین منوال باقی بمانید ، دستور زیر را وارد نمائید:
service iptables stop
chkconfig iptables off
chkconfig iptables off
3. حذف قوانین و رول های فایروال :
ابتدا به کمک دستورات زیر شماره خط رول را بدست آورید:
iptables -L INPUT -n --line-numbersiptables -L OUTPUT -n --line-numbersiptables -L OUTPUT -n --line-numbers | lessiptables -L OUTPUT -n --line-numbers | grep 202.54.1.1
iptables -D INPUT 4
iptables -D INPUT -s 202.54.1.1 -j DROP
D- : حذف یک یا چند رول از زنجیره انتخاب شده
3.1 حذف کلیه رول ها از فایروال ( Flush iptables ):
برای حذف کلیه رول ها می توانید از دستور زیر استفاده فرمائید:
iptables -F
iptables -t nat -Fiptables -t mangle -F
iptables -L -v -n
برای مسدود کردن کل ترافیک می توانید از دستورات زیر استفاده فرمائید ( دقت نمائید که این دستورات می تواند مانع از دسترسی شما به سرور گردد.) :
iptables -P INPUT DROPiptables -P OUTPUT DROPiptables -P FORWARD DROP
service iptables save
به کمک دستورات اول شما می توانید ترافیک ورودی از سوی ای پی 1.2.3.4 و به وارد کردن دستور دوم کل ترافیک ورودی برای رنج ای پی مورد مثال مسدود می گردد.
iptables -A INPUT -s 1.2.3.4 -j DROPiptables -A INPUT -s 192.168.0.0/24 -j DROP
6. نحوه مسدود کردن ترافیک ورودی بر روی یک پورت خاص :
به کمک دستورات زیر می توان ترافیک ورودی را بر روی پورت 80 مسدود نمائید. لازم به توضیح است که معمولا وب سرور از پورت 80 برای نمایش وب سایت استفاده می کند.
iptables -A INPUT -p tcp --dport 80 -j DROPiptables -A INPUT -i eth1 -p tcp --dport 80 -j DROP
iptables -A INPUT -p tcp -s 1.2.3.4 --dport 80 -j DROPiptables -A INPUT -i eth1 -p tcp -s 192.168.1.0/24 --dport 80 -j DROP
7. نحوه مسدود نمودن ترافیک خروجی:
برای مسدود نمودن ترافیک خروجی برای یک IP خاص و یا یک رنج IP می توانید از دستورات زیر استفاده فرمائید:
iptables -A OUTPUT -d 1.2.3.4 -j DROPiptables -A OUTPUT -d 192.168.1.0/24 -j DROPiptables -A OUTPUT -o eth1 -d 192.168.1.0/24 -j DROP
خیلی از مواقع نیاز استفا تا از ریز فعالیت هایی که بر روی شبکه سرور در حال وقوع است مطلع شوید برای مثال برای جلوگیری از IP spoofing بر روی اینترفیس eth1 می توانید از دستور زیر استفاده فرمائید. در این دستور در حالیکه ترافیک مربوطه مسدود می گردد ، تلاش های صورت گرفته نیز با پیشوند IP_SPOOF A در لاگ ذخیره می شود:
iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j LOG --log-prefix "IP_SPOOF A: "iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP
tail -f /var/log/messagesgrep --color 'IP SPOOF' /var/log/messages
iptables -A INPUT -i eth1 -s 10.0.0.0/8 -m limit --limit 5/m --limit-burst 7 -j LOG --log-prefix "IP_SPOOF A: "iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP
netstat -tulpn
برای اطلاع از اینکه آیا پورت پورت tcp 80 باز است یا خیر از دستور زیر استفاده فرمایید:netstat -tulpn | grep :80
اگر پورت 80 باز نبود دستور زیر را وارد نمائید:service httpd start
به کمک دستور زیر اطمینان یابید که پورت 80 بر روی فایروال بسته نشده است:iptables -L INPUT -v -n | grep 80
در صورتیکه مسدود بود می توانید از دستور زیر استفاده فرمایئد:iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPTservice iptables save
10. غیر فعال کردن فایروال :اگر با مشکلی در دسترسی به فایروال روبرو هستید و یا فایروال مانع از کارکرد صحیح سرویس های اصلی سرور شما شده است می توانید به کمک دستورات زیر فایروال را خاموش نمائید. با استفاده از دستور دوم نیز پس از ریستارت سرور وضعیت به همین منوال باقی خواهد ماند و فایروال مجدد فعال نمی گردد، مگر آنکه شما از نرم افزار جانبی مانند csf استفاده کرده باشید که بدین ترتیب فایروال مجدد فعال می گردد و بدین شکل قابلیت غیرفعال شدن نخواهد داشت:service iptables stop
chkconfig iptables off
chkconfig iptables off
برای آشنایی بیشتر با iptables و مطالعه manual های آن می توانید از دستور زیر استفاده فرمائید:
man iptables
iptables -h
اگر بدنبال راهنمای فایروال تنها برای یک دستور خاص هستید نیز سینتکس زیر استفاده فرمائید:iptales -j DROP -h