Netfilter, iptables

Netfileter , iptables

Netfilter

مقاله ای از آقای مهندس مهدی رضایی کارشناس ارشد امنیت 

 Netfilter ،نام فایروال محلی سیستم عامل لینوکس می باشد که در لایه کرنل عمل می کند و

از iptables برای کنترل آن جهت مدیریت و فیلتر کردن پکت ها بر روی IPv4 و IPv6

استفاده می گردد. با توجه به اهمیت مسئله امنیت سرور و بخصوص سرور های

لینوکس ، در این مطلب تعدادی از رایج ترین دستورات فایروال لینوکس iptables

تشریح می گردد که می تواند در خیلی از مواقع مشکلات مدیر سرور را مرتفع نماید.

لازم به توضیح است که می بایست در استفاده از دستورات فایروال دقت لازم را مبذول

فرمائید، چرا که یک اشتباه ساده، می تواند منجر به بسته شدن دسترسی شما

به سرور گردد. در این مطلب فرض بر این است که شما از دسترسی روت ( root )

برای وارد کردن دستورات استفاده می کنید.در این مقاله به صورت مختصر با

دستورات این فایروال آشنا می شوید.

۱- نمایش وضعیت فایروال :

برای مشخص شدن رول هایی که در حال حاضر در 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  —  *      *       ۰٫۰٫۰٫۰/۰            ۰٫۰٫۰٫۰/۰           state INVALID

  ۳۹۴ ۴۳۵۸۶ ACCEPT     all  —  *      *       ۰٫۰٫۰٫۰/۰            ۰٫۰٫۰٫۰/۰           state RELATED,ESTABLISHED

   ۹۳ ۱۷۲۹۲ ACCEPT     all  —  br0    *       ۰٫۰٫۰٫۰/۰            ۰٫۰٫۰٫۰/۰

    ۱   ۱۴۲ ACCEPT     all  —  lo     *       ۰٫۰٫۰٫۰/۰            ۰٫۰٫۰٫۰/۰

Chain FORWARD (policy DROP 0 packets, 0 bytes)

 pkts bytes target     prot opt in     out     source               destination

    ۰     ۰ ACCEPT     all  —  br0    br0     ۰٫۰٫۰٫۰/۰            ۰٫۰٫۰٫۰/۰

    ۰     ۰ DROP       all  —  *      *       ۰٫۰٫۰٫۰/۰            ۰٫۰٫۰٫۰/۰           state INVALID

    ۰     ۰ TCPMSS     tcp  —  *      *       ۰٫۰٫۰٫۰/۰            ۰٫۰٫۰٫۰/۰           tcp flags:0x06/0x02 TCPMSS clamp to PMTU

    ۰     ۰ ACCEPT     all  —  *      *       ۰٫۰٫۰٫۰/۰            ۰٫۰٫۰٫۰/۰           state RELATED,ESTABLISHED

    ۰     ۰ wanin      all  —  vlan2  *       ۰٫۰٫۰٫۰/۰            ۰٫۰٫۰٫۰/۰

    ۰     ۰ wanout     all  —  *      vlan2   ۰٫۰٫۰٫۰/۰            ۰٫۰٫۰٫۰/۰

    ۰     ۰ ACCEPT     all  —  br0    *       ۰٫۰٫۰٫۰/۰            ۰٫۰٫۰٫۰/۰

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

۱    DROP       all  —  ۰٫۰٫۰٫۰/۰            ۰٫۰٫۰٫۰/۰           state INVALID

۲    ACCEPT     all  —  ۰٫۰٫۰٫۰/۰            ۰٫۰٫۰٫۰/۰           state RELATED,ESTABLISHED

۳    ACCEPT     all  —  ۰٫۰٫۰٫۰/۰            ۰٫۰٫۰٫۰/۰

۴    ACCEPT     all  —  ۰٫۰٫۰٫۰/۰            ۰٫۰٫۰٫۰/۰

Chain FORWARD (policy DROP)

num  target     prot opt source               destination

۱    ACCEPT     all  —  ۰٫۰٫۰٫۰/۰            ۰٫۰٫۰٫۰/۰

۲    DROP       all  —  ۰٫۰٫۰٫۰/۰            ۰٫۰٫۰٫۰/۰           state INVALID

۳    TCPMSS     tcp  —  ۰٫۰٫۰٫۰/۰            ۰٫۰٫۰٫۰/۰           tcp flags:0x06/0x02 TCPMSS clamp to PMTU

۴    ACCEPT     all  —  ۰٫۰٫۰٫۰/۰            ۰٫۰٫۰٫۰/۰           state RELATED,ESTABLISHED

۵    wanin      all  —  ۰٫۰٫۰٫۰/۰            ۰٫۰٫۰٫۰/۰

۶    wanout     all  —  ۰٫۰٫۰٫۰/۰            ۰٫۰٫۰٫۰/۰

۷    ACCEPT     all  —  ۰٫۰٫۰٫۰/۰            ۰٫۰٫۰٫۰/۰

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 و پورت بصورت عددی 

۲- تغییر وضعیت فایروال:

از دستورات زیر برای روشن ، خاموش و ریست فایروال می توان استفاده کرد:

service iptables stop

service iptables start

service iptables restart

اگر می خواهید فایروال را خاموش و پس از ریستارت سرور نیز وضعیت

به همین منوال باقی بمانید ، دستور زیر را وارد نمائید:

service iptables stop

chkconfig iptables off

۳- حذف قوانین و رول های فایروال :

ابتدا به کمک دستورات زیر شماره خط رول را بدست آورید:

iptables -L INPUT -n –line-numbers

iptables -L OUTPUT -n –line-numbers

iptables -L OUTPUT -n –line-numbers | less

iptables -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– : حذف یک یا چند رول از زنجیره انتخاب شده

۳٫۱ حذف کلیه رول ها از فایروال ( Flush iptables ):

برای حذف کلیه رول ها می توانید از دستور زیر استفاده فرمائید:

iptables -F

و اگر در تیبل nat و mangle نیز رولی اضافه کردید ، دو دستور زیر را نیز لازم است وارد نمائید:

iptables -t nat -F

iptables -t mangle -F

برای مشاهده وضعیت رول ها مجدد از دستور زیر استفاده فرمائید:

iptables -L -v -n

۴- نحوه مسدود کردن ترافیک ورودی ؛ خروجی و یا فوروارد در فایروال :

برای مسدود کردن کل ترافیک می توانید از دستورات زیر استفاده فرمائید

( دقت نمائید که این دستورات می تواند مانع از دسترسی شما به سرور گردد.) :

iptables -P INPUT DROP

iptables -P OUTPUT DROP

iptables -P FORWARD DROP

برای ذخیره نمودن تغییرات اضافه شده در فایروال می توانید از دستور زیر استفاده فرمائید:

service iptables save

۵- نحوه مسدود نمودن یک IP بر روی سرور

به کمک دستورات اول شما می توانید ترافیک ورودی از سوی ای پی ۱٫۲٫۳٫۴ و با وارد کردن

دستور دوم کل ترافیک ورودی برای رنج ای پی مورد مثال مسدود می گردد.

iptables -A INPUT -s 1.2.3.4 -j DROP

iptables -A INPUT -s 192.168.0.0/24 -j DROP

۶- نحوه مسدود کردن ترافیک ورودی بر روی یک پورت خاص :

به کمک دستورات زیر می توان ترافیک ورودی را بر روی پورت ۸۰ مسدود نمائید.

لازم به توضیح است که معمولا وب سرور از پورت ۸۰ برای نمایش وب سایت

استفاده می کند.

iptables -A INPUT -p tcp –dport 80 -j DROP

iptables -A INPUT -i eth1 -p tcp –dport 80 -j DROP

برای مسدود کردن ترافیک ورودی بر روی پورت ۸۰ تنها برای یک IP و

یا یک رنج IP می توانید از دستورات زیر استفاده فرمائید:

iptables -A INPUT -p tcp -s 1.2.3.4 –dport 80 -j DROP

iptables -A INPUT -i eth1 -p tcp -s 192.168.1.0/24 –dport 80 -j DROP

۷- نحوه مسدود کردن ترافیک خروجی:

برای مسدود نمودن ترافیک خروجی برای یک IP خاص و یا یک رنج

IP می توانید از دستورات زیر استفاده فرمائید:

iptables -A OUTPUT -d 1.2.3.4 -j DROP

iptables -A OUTPUT -d 192.168.1.0/24 -j DROP

iptables -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

معمولا لاگ ها در مسیر /var/log/messages قرار دارند که البته با توجه به ویرایش

لینوکس مورد استفاده می تواند متفاوت باشد. برای مشاهده لاگ های

مربوطه می توانید از دستورات زیر استفاده فرمائید:

tail -f /var/log/messages

grep –color ‘IP SPOOF’ /var/log/messages

برای جلوگیری از حجیم شدن لاگ فایل می توان از قابلیت سوکت –m در دستور

استفاده کرد که به کمک آن می توان تنظیم نمود که برای مثال در هر ۵ دقیقه

بیش از ۷ مورد را در  لاگ ذخیره ننماید:

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

اگر پورت ۸۰ باز نبود دستور زیر را وارد نمائید:

service httpd start

به کمک دستور زیر اطمینان یابید که پورت ۸۰ بر روی فایروال بسته نشده است:

iptables -L INPUT -v -n | grep 80

در صورتیکه مسدود بود می توانید از دستور زیر استفاده فرمایئد:

iptables -A INPUT -m state –state NEW -p tcp –dport 80 -j ACCEPT

service iptables save

 ۱۰- غیر فعال کردن فایروال:

اگر با مشکلی در دسترسی به فایروال روبرو هستید و یا فایروال مانع از کارکرد

صحیح سرویس های اصلی سرور شما شده است می توانید به کمک دستورات

زیر فایروال را خاموش نمائید. با استفاده از دستور دوم نیز پس از ریستارت سرور

وضعیت به همین منوال باقی خواهد ماند و فایروال مجدد فعال نمی گردد،

مگر آنکه شما از نرم افزار جانبی مانند csf استفاده کرده باشید که بدین

ترتیب فایروال مجدد فعال می گردد و بدین شکل قابلیت غیرفعال شدن نخواهد داشت:

service iptables stop

chkconfig iptables off


برای آشنایی بیشتر با
iptables و مطالعه manual های آن می توانید از دستور زیر استفاده فرمائید:

man iptables

برای مشاهده راهنمای آن دستور زیر قابل استفاده خواهد بود:

iptables -h

اگر بدنبال راهنمای فایروال تنها برای یک دستور خاص هستید نیز سینتکس زیر استفاده فرمائید:

iptales -j DROP -h

 

این مقاله توسط آقای مهندس مهدی رضایی کارشناس ارشد امنیت نوشته شده است .

0 پاسخ

دیدگاه خود را ثبت کنید

تمایل دارید در گفتگوها شرکت کنید؟
در گفتگو ها شرکت کنید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *