منبع اصلی نوشتار زیر در این لینک قرار دارد

بستن پروتکل ICMP (دستور ping) در لینوکس

ICMP (مخفف Internet Control Message Protocol) یکی از اصلی ترین پروتکل های TCP/IP برای ارسال و دریافت پیام هاست. ICMP تنها جهت ارسال پیام هایی (بسته های IP) از یک ماشین (سیستم PC یا Router یا Mobile Device و هر آنچه که درون شبکه LAN یا اینترنت باشد و از TCP/IP استفاده کند) به ماشین دیگر استفاده می کنیم. دستور ping اصلی ترین دستور (برنامه) ای که از این پروتکل استفاده می کند. دو پیام echo request و echo reply در این پروتکل وجود دارند. ping توسط پیام های echo request پیامی به ماشین دیگر فرستاده و سمت دیگر با echo reply پاسخ می دهد. شکل زیر اطلاعات بیشتری نشان می دهد.

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

iptables -P INPUT DROP

iptables -P OUTPUT DROP

iptables -P FORWARD DROP

مشکل اصلی این است که با این سه قانون همه چیز فیلتر می شود ولی می خواهیم تنها بسته های ICMP را فیلتر کنیم. باید توجه داشت که دفیلتر کردن 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 استفاده شده که در جدول بالا نشان داده شده اند و می توانید بجای عدد از معادل حروفی آنها استفاده کنید. 0/0 یعنی از هر آدرسی درون شبکه. دستور زیر در موردپیام های 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

4 خط بالا در ماشینی که بعنوان فایروال در نظر گرفته شده است اجرا می شود (ماشین های مبدا و مقصد مشخص هستند).فرض کنید در شبکه ای می خواهید ماشین 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 را انجام و پاسخ راددریافت کنیم. برای اینکار باید 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



برچسب ها : , , , , , ,