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

آموزش بستن پینگ ( ICMP ) در لینوکس

همانطور که در مقاله قبلی در مورد هفت لایه OSI گفته شد یکی از لایه های مهم لایه شبکه یا NETWORK بود که متناظر این لایه لایه ای هست به نام لایه اينترنت یا INTERNET که در مورد پروتکل هاش در مقاله قبلی تقریباً صحبت شده.ICMP هم قبلاً گفتیم جهت ارسال پیام ها در قالب بسته های IP از یک سیستم یا روتر یا هر چیزی که به عنوان Device در شبکه کار میکنه به یه سیستم دیگه استفاده می شه که دستور ping اصلی ترین و پرکاربردترین دستور ای هست که همه ماها ازش بهره میگیریم این دستور دو پیام echo request و echo reply داره .ping توسط پیام های echo request پیامی به سیستم دیگر فرستاده و سمت دیگر با echo reply پاسخ می دهد. تصویر زیر جهت اطلاعات بیشتر .

دوره های شبکه، برنامه نویسی، مجازی سازی، امنیت، نفوذ و ... با برترین های ایران
وب سایت توسینسو

لازم به ذکر هست ICMP پروتکلی ست فاقد شماره Port و سه قانونی که در زیر اومده جالب هست بدونید که همه چیز باید DROP شه ، یعنی هر بسته که وارد می شه INPUT Chain و هر بسته ای که خارج می شه OUTPUT Chain و هر بسته ای که می خواهد Forward شود .FORWARD Chain باید DROP شوند به جز آنهایی که ما تعیین می کنیم.البته در همه جا اینطور مطرح میشه که سه قانون در iptables معرف هستند.

وب سایت توسینسو
iptables -P INPUT DROP

iptables -P OUTPUT DROP

iptables -P FORWARD DROP

حالا ما با این سه قانون به یه مشکل برمیخوریم اونم فیلتر شدن همه چیز هست ولی گاهی برای مدیران شبکه پیش میاد که تنها بسته های ICMP را فیلتر کنند .اما شاید سوال باشه اصلاً چرا مدیران بخوان دستور Ping رو غیر فعال کنن ، ببینید دستور ping یه سری پکت ارسال میکنه به مقصد و از اون جواب میگیره اما ما میتونیم حجم این پکت ها رو که به صورت دیفالت 32 بایت هست مثل تصویر زیر

وب سایت توسینسو

اما یه سری ها میان از این دستور سوء استفاده هایی میکنن و حجم این پکت ها رو می برن بالا تا ترافیک شبکه بالا بره اونوقت فقط کافیه با سوئیچ t- یه ping دائم رو از چند تا سیستم سمت سرور بفرسته و سرور رو درگیر این داشتان کنه و شبکه رو بخوابونه هرچند این داستان در سازمان هایی که اصولی کار میکنن صدق نمیکنه چون میشه کاری کرد به محض اینکه حجم پکت بالا رفت سریع Log بندازه و قطع اش کنه

ping 192.168.1.1 -t - l 50000

استفاده کنيد يه پکت بزرگ در حد اون عددي که داري بهش ميگي تو سيستم ارسال ميکني خب ترافيک شبکه ميره بالا و بعدش ممکنه دردسر هاي ديگه اي رو به دنبال داشته باشه

وب سایت توسینسو

پس اگر کسی این دانش رو داشته باشه و شما تمهیدات امنیتی رو رعایت نکرده باشی شک نکنید طرف رو چند سیستم این پکت های بزرگ رو ارسال کنه سرور شما میره برای استراحت(میخوابه) اما برای اینکه شما بدونید اصلاً کجا باید این دستورات رو تایپ کنید بهتره به مقاله آشنایی با برخی از دستورات مقدماتی و کلیدهای ترکیبی در لینوکس مراجعه کنید و اطلاعات خوبی رو کسب کنید ضمناً سری مقالات آموزش لینوس هم در سایت هست میتونید از این سری آموزش ها بهینه استفاده کنید.

  • نکته : فیلتر کردن ICMP به این صورته که پیام های echo request خروجی و echo reply ورودی و همچنین بسته های echo request ورودی و echo reply خروجی را باید فیلتر کنیم.

خب حالا ما میتونیم توسط دستور زیر پیام های echo request ورودی و پیام های echo reply خروجی را فیلتر کنیم.

    iptables -A INPUT -p icmp –icmp-type 8 -s 0/0 -d 192.168.1.4 -m state –state NEW,ESTABLISHED -j DROP

    iptables -A OUTPUT -p icmp –icmp-type 0 –s 192.168.1.3 -d 0/0 -m state –state ESTABLISHED -j DROP

کمی در مورد سوئیچ های این دستور ها باید توضیح داد :

سوئیچ p- که در بالا استفاده شده برای تعیین پروتکل در iptables استفاده می شود که یکی از مقادیر TCP UDP و ICMP را می تواند بگیرد. همچنین در جلوی سوئیچ icmp-type– از دو عدد 0 و 8 استفاده شده که در جدول بالا نشان داده شده اند و می توانید بجای عدد از معادل حروفی آنها استفاده کنید. 00 یعنی از هر آدرسی درون شبکه. دستور زیر در موردپیام های echo request و echo reply عکس دستور بالا می باشد.

    iptables -A OUTPUT -p icmp –icmp-type 8 -s 192.168.1.3 -d 0/0 -m state –state NEW,ESTABLISHED -j DROP

    iptables -A INPUT -p icmp –icmp-type 0 -s 0/0 -d 192.168.1.4 -m state –state ESTABLISHED -j DROP

چهار خطی که در بالا گفته شد در ماشینی که به عنوان Firewall در نظر گرفته شده است اجرا می شه یعنی سیستم هایی که در اون مبدا ما و همچنین مقصد کاملاً مشخص هست برای مثال و درک بهتر : در شبکه ای می خواهید سیستمی با آدرس آی پی 192.168.1.4 فقط از سیستم با آی پی 192.168.1.3 ping شود یعنی وقتی روی ماشینی به آدرس 192.168.1.5 دستور ping 192.168.1.4 را اجرا کنیم ping بسته باشد ولی در عین حال از سیستم 192.168.1.3 بتوانیم دستور ping 192.168.1.4 را انجام دهیم و پاسخهای مربوطه رو دریافت کنیم ، برای این منظور باید کد های زیر رو در سیستم با آی پی 192.168.1.4 بنویسیم.

    iptables -A INPUT -p icmp –icmp-type 8 -s 192.168.1.3 -m state –state NEW,ESTABLISHED -j ACCESS

    iptables -A OUTPUT -p icmp –icmp-type 0 –s 192.168.1.3 -m state –state ESTABLISHED -j ACCESS

    iptables -A OUTPUT -p icmp –icmp-type 8 -s 192.168.1.3 -m state –state NEW,ESTABLISHED -j ACCESS

    iptables -A INPUT -p icmp –icmp-type 0 -s 192.168.1.3 -m state –state ESTABLISHED -j ACCESS

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

http://teh-geek.com/?p=280
http://www.pc-freak.net/blog/tag/icmp-traffic/
http://forums.bgdev.org/index.php?act=Attach&type=post&id=113708

فرهاد خانلری
فرهاد خانلری

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

فرهاد خانلری ، مدرس شبکه و برنامه نویسی مبتنی بر زیرساخت های مایکروسافت ، سابقه فعالیت در موسسات و مراکز دولتی در قالب پروژه ، مشاوره و تدریس ، برنامه نویسی ++C ، سی شارپ و دات نت ، متخصص و مدرس شبکه های مبتنی بر سیستم عاملهای مایکروسافت و سرویس های مربوطه ، سخت افزار و ...

نظرات