جهت عضویت در گروه فنی ویپ کلیک کنید

آموزش iptable

SIP

پروتکل sip

به نام خدا

خیلی مهمه برای همین این مطلب رو از اینترنت در آوردم گذاشتم به دوستان تقدیم کنم که دنبال نگردن سایتش هم هست
http://blog.shafagh.com
خیلی هم سایته قوییه
در ضمن iptable توی الستیکس توی قسمت security بصورت گرافیکی همین فرامین اومده
ورژن های مختلفی از IPTables وجود داره برای مثال:
IPTables این ورژن مختص IPv4 هستش.
IP6Tables همونطور که از اسمش پیداست برای IPv6 طراحی شده.
arptables برای مدیریت بسته های ARP
ebtables برای مدریت فریم های Ethernet بوجود آمده.
دستورات IPTables بسته به نوع کاربردشون در جداولی (Table) ذخیره می شن که این جداول خود شامل زنجیره ای ( Chain ) از فرامین هستند.
یکی از مهمترین این جداول جدول Filtering هستش که وظیفه اون سیاست گذاری و دادن مجوز برای ورود و خروج بسته های TCP/IP به سیستم است. این جدول شامل سه زنجیر INPUT برای ترافیک ورودی به سیستم ، OUTPUT برای ترافیک خروجی از سیستم و FORWARD برای ترافیک فوروارد شده از سیستم است.
از دیگر جداول IPTABLES می شه به موارد زیذ اشاره کرد:
filter table
nat table
mangling table
که بصورت مختصر جدول Filter رو معرفی کردیم و موارد دیگه رو در زمان شروع مباحث اون جدول معرفی می کنیم.
به عنوان اولین گام مایل هستیم که اجازه ندیم به هیچ کامپیوتری که سرور ما رو PING کنه یعنی اصطلاحا می خوایم PING رو ببندیم…
برای این کار باید به ترافیک پروتکل ICMP اجازه ورود ندهیم… برای این منظور باید به صورت زیر عمل کنیم:
با مجوز کاربر ROOT وارد سیستم شوید.
فرمان زیر رو اجرا کنید:
iptables -A INPUT -p ICMP -j DROP
فرمان زیر میگه که در انتهای ( بخاطر استفاده از سویچ A یعنی Append ) زنجیر INPUT ( یعنی ترافیک ورودی) پروتکل ICMP را DROP کن.
نوع پروتکل رو با سویچ p- مشخص می کنیم که در جلوی این سویچ می تونیم موارد TCP ، UDP ، ICMP و all رو بنویسیم.
برای مشخص کردن نحوه برخورد با ترافیک مورد نظر از سویچ j- استفاده می کنیم به معنی jump به موارد DROP ، LOG ، ACCEPT ، REJECT هستش. در اینجا تفاوتی که بین DROP و REJECT هست و اون هم این هستش که در DROP برای کاربر پیامی مبنی بر حذف بسته اش ارصال نمی شه ولی در REJECT به فرستنده پیام یک بسته عدم قبول ترافیک ارسال میشه.

در این قسمت با دو سویچ مهم از IPTABLES آشنا می شویم:
سویچ s- و d- برای مشخص کردن source و destination در یک بسته TCP/IP به ترتیب از سویچ های معرفی شده استفاده می کنیم.
فرض کنید تصمیم داریم که به کاربران شبکه ۱۹۲٫۱۶۸٫۱٫۰/۲۴ اجازه دهیم شبکه ۱۹۲٫۱۶۸٫۲٫۰/۲۴ رو PING کنن برای این کار باید یک rule در chain مربوط به خروج ( OUTPUT ) بسته ها در جدول Filter اضافه کنیم:
iptables -A INPUT -p ICMP -s 192.168.1.0/24 -d 192.168.2.0/24 -j ACCEPT
به همین سادگی می توانید منبع و مقصد یک بسته TCP/IP رو در فرامین خود مشخص کنید. بدیهی است که برای مشخص کردن یک آدرس خاص نیز می توان به همین روش استفاده کرد. مثلا می خواهیم به ماشین admin شبکه اجازه دهیم که کل شبکه رو PING کنه و بقیه ماشین ها این اجازه رو در شبکه ۱۹۲٫۱۶۸٫۱٫۰/۲۴ نداشته باشن ٍ آدرس ماشین Admin برابر ۱۹۲٫۱۶۸٫۱٫۲ می باشد:
برای این منظور از دو عدد rule به صورت زیر استفاده می کنیم:

iptables -A INPUT -p ICMP -s 192.168.1.0 -d 192.168.1.0/24 -j ACCEPT
iptables -A INPUT -p ICMP -s 192.168.1.0/24 -j REJECT

برای پاک کردن محتویات جداول IPTables می توانید از فرمان iptables -F یعنی FLUSH استفاده کنید.

برای دیدن محتویات جداول IPTables می توانید از فرمان iptables -L استفاده کنید:

خروجی:

root@yunix-LT:~# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT icmp — ۱۹۲٫۱۶۸٫۱٫۰/۲۴ ۱۹۲٫۱۶۸٫۲٫۰/۲۴
ACCEPT icmp — ۱۹۲٫۱۶۸٫۱٫۰ ۱۹۲٫۱۶۸٫۱٫۰/۲۴
REJECT icmp — ۱۹۲٫۱۶۸٫۱٫۰/۲۴ anywhere reject-with icmp-port-unreachable

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)

target prot opt source destination

حال به بررسی خروجی دستور iptables -L می پردازیم:
در خروجی فرمان فوق ستون هایی به شرح زیر نمایش داده شده است:
target prot opt source destination
در target ما می تواین هدف پرش (jump) قانون مورد نظر را ببینیم که از بین گزینه های ACCEPT, REJECT,DROP,LOG می تواند باشد.
در ستون prot می توانیم پروتکل مورد استفاده در این قانون را مشاهده کنیم یعنی udp,tcp و …
در ستون opt تنظیمات و جزئیات مربوط به هر rule نمایش داده می شود.
ستون های source و destination نیز که منبع و مقصد بسته های را مشخص می کند.
در iptables ما می تواینم به جای استفاده از سویچ های کوتاه شده نظیر j- از کلمات کامل شده استفاده کنیم مانند jump– برای j- یا source– بجای s- بدین ترتیب خوانایی فرمانهای iptables بیشتر شده و بخاطر آوری آنها نیز راحتر می گردد.
یک سناریو کوچک :
فرض کنید از یک ip آدرس به شماره ۱۱٫۱۲٫۱۳٫۱۴ یکی از سرویس دهنده های شما مورد حمله DOS قرار گرفته و شما مایل به Block کردن ترافیک ارسالی از این آدرس IP هستید برای این کار به صورت زیر عمل کنید:
iptables –Append INPUT –protocol all –source 11.12.13.14 –jump DROP
تا بدین جا با تنظیمات ساده از iptables آشنا شدیم حال می خواهیم بدانیم که چطور می توان بر روی ترافیک لایه ۴ یعنی لایه transport یا به زبان ساده تر کنترل ترافیک پورت ها سیاست امنیتی اعمال کرد:
برای این منظور از سویچ dport– استفاده می شود.
مثال۱: فرض کنید می خواهیم ترافیک ورودی به شبکه از پورت ۵۰۵۰ را Block کنیم:
iptables -A INPUT -p TCP –dport 5050 -j DROP
مثال۲: در این مثال می خواهیم ترافیک پورت telnet یعنی ۲۳ را برای شبکه ۱۹۲٫۱۶۸٫۱٫۰/۲۴ بسته و به جای آن ترافیک ssh یعنی پورت ۲۲ را باز کنیم:
iptables -A OUTPUT -p tcp –dport 23 -s 192.168.1.0/24 -j DROP
iptables -A OUTPUT -p tcp –dport 22 -s 192.168.1.0/24 -j ACCEPT
لازم به ذکر است که بجای سویچ dport– می تواین از سویچ destination-port–نیز استفاده کرد.

در ادامه مباحث مطرح شده :
اولویت بازبینی قوانین مربوط به IPTables بر طبق مکان درج آنها در هر Chain مشخص می شود. به عنوان مثال در دو قانون زیر:
iptables -A OUTPUT -p all -j DROP
iptables -A OUTPUT -p all -j ACCEPT
دسترسی کل شبکه قطع خواهد شد به دلیل اینکه قانون iptables -A OUTPUT -p all -j DROP بالاتر از قانون دسترسی به کل پروتکل های شبکه است ( قانون دوم ).
در سویچ A- هر گاه ما قانون جدیدی بنویسیم در پایین زنجیر مربوطه درج خواهد شده برای اینکه یک قانون را در موقعیت خاصی در زنجیر ها درج کنیم باید از سویچ I- به معنی INSERT استفاده کنیم. به مثال زیر دقت کنید در این مثال ما می خواهیم قانون خود را در مکان دوم زنجیر مربوط به OUTPUT درج کنیم:
iptables -I OUTPUT 2 -p tcp –dport 21 -s 192.168.2.1 -j ACCEPT
همانطور که ملاحظه می فرمایید برای مشخص کردن مکان درج Rule محل درج را به صورت عددی با شروع از یک بعد از اسم Chain ( زنجیر ) می نویسیم در اینجا بعد از زنجیر OUTPUT محل درج را نوشته ایم.
به همین ترتیب برای حذف یک قانون خاص از مجموعه قوانین یک زنجیر از سویچ D- به معنی DELETE استفاده می کنیم. به مثال زیر دقت کنید.
در این مثال می خواهیم قانون شماره سوم را از زنجیر INPUT حذف کنیم.
iptables -D INPUT 3
دستور فوق باعث حذف قانون شماره سوم زنجیر INPUT می شود.
حال به معرفی دو ویژگی مدیریت بسته های TCP/IP*می پردازیم:
سویچ sport– خواهر سویچ dport– محسوب می شود و برای مشخص کردن شماره پورت منبع بسته های TCP/IP است. با یک مثال کاربرد سویچ sport–را نشان می دهیم:
فرض کنید مایل هستیم که ترافیک ورودی به سمت پورت ۴۴۴۴ را مسدود کنیم برای این کار از قانون زیر استفاده می کنیم:
iptables -A INPUT -p tcp –sport 4444 -j DROP
با استفاده از سویچ های sport– و dport– می توانید قوانین خود را بر روی *پروتکل های ارتباطی مورد نظر خود اعمال کنید.

در ادامه مباحث مطرح شده در مورد بررسی پورت های ورودی بسته ها و خروجی بسته ها بحث می کنیم و در ادامه شیوه سیاست گذاری برای مک آدرس ماشین خاص رو نیز با هم کار می کنیم:
برای اینکه ما ترافیک ورودی به یک اینترفیس خاص رو سیاست گذاری کنیم باید با استفاده از سویچ i- به معنی in interfaceو در حالت سویچ کامل in-interface– استفاده می کنیم.با یک مثال نحوه استفاده از این سویچ رو شرح می دهیم:
فرض کنید مایل هستیم که کلیه ترافیک پورت ۸۰ را که از طریق اینترفیس شماره eth0 وارد سیستم می شود رو block کنیم:
iptables -A INPUT -p tcp –dport 80 -i eth0 -j DROP
و برای سیاست گذاری بر روی اینترفیس خروجی بسته های شبکه ، از سویچ o- به مفهمو output interface و سویچ کامل out-interface– استفاده می شود.
در مثال زیر خروجی بسته هایی که از شبکه ۱۹۲٫۱۶۸٫۰۱٫۰/۲۴ تولید می شود و به سمت کارت شبکه با شماره یک می روند را مسدود کرده ایم.
iptables -A INPUT -o eth1 -s 192.168.1.0/24 -j DROP
در مثال زیر اجازه ورود به بسته هایی صادر شده است که از کارت شبکه lo وارد می شوند:
iptables -A INPUT -i lo -j ACCEPT
برای تعیین سیاست با استفاده از مک آدرس ما باید یک ماژول به iptables اضافه کنیم برای اضافه کردن ماژول از سویچ m- استفاده می کنیم. و برای اضافه کردن ماژول مک از سویچ m mac- استفاده می کنم. دقت کنید که آنالیز بسته ها بر اساس مک فقط در زنجیر های INPUT ، FORWARD،PREROUTING f به مثال زیر دقیت کنید:
در مثال زیر می خواهیم یک مک را فیلتر کنیم.
iptables -A INPUT -m mac –mac-source 00:CB:AB:46:56:12 -j DROP
در مثال زیر می خواهیم فقط یک کامپیوتر توانایی استفاده از ssh را داشته باشد:
iptables -A INPUT -i eth1 -p tcp –destination-port 22 -m mac –mac-source 00:0A:BA:91:05:18 -j ACCEPT

حال می خواهیم در مورد اتصال ناحیه DMZ به فایروالمون صحبت کنیم…
حتما می دونید DMZ چی هست ولی برای شروع مطلب می گیم که فایروال ها در نهایت به چهار قسمت تقسیم می شوند که هر کدام از این بخش ها با یک رنگ مشخص می شوند:
سبز: ناحیه امن شبکه داخلی ، جایی که شما به کاربران و کامپیوتر هاش اعتماد دارید.
قرمز: شبکه public جایی که شما به کامپیوتر ها و کاربرانش اعتماد ندارید مثل اینترت.
آبی: ناحیه شبکه های وایرلس و شبکه هایی که تکنولوژیشون به صورتی هست که احتمال دریافت اطلاعات توسط شخص دیگری وجود دارد.
نارنجی: این ناحیه به DMZ مشهور است یعنی Demilitarized Zone جایی بین دو خط مقدم در جبهه ها یعنی مکانی که شما لازم دارید به کابران شبکه قرمز اجازه دهید از منابع شبکه سبز استفاده کنن. مثلا یک سرویس دهنده وب در شبکه محلی دارید که مایل هستید در اینترنت دیده شود و کابران که از طریق اینترنت به شبکه دسترسی دارند بتوانند از این سرویس وب استفاده کنن. یا مثلا یک سرویس دهنده voipکه قادره کابران خارج از شبکه داخلی رو هم سرویس دهی کند…
برای راه اندازی DMZ در IPTables از تکنیک های مختلفی استفاده می شود. یکی از این تکنیک ها DNAT هستش. یعنی ما یک IP Private به سرور اختصاص می دهیم و در فایروال تعریف می کنیم هرگاه بسته هایی با مقصد IP Public خاصی وارد فایروال شد اون بسته ها رو به سمت یک IP Private داخلی ارسال کن.
در مثال زیر ما در شبکه محلی خود یک سرویس دهنده وب داریم که IP به شماره ۱۹۲٫۱۶۸٫۲٫۲ دارد و در اینترت قرار است با IP 78.39.10.1 دیده شود:
iptables -A PREROUTING -t nat -i eth1 -p tcp –dport 80 -d 78.39.10.1 -j DNAT –to 192.168.2.2:80
iptables -A INPUT -p tcp -m state –state NEW –dport 80 -i eth1 -j ACCEPT
در قانون بالا با سویچ t- که به معنی table است جدول nat رو از مجموعه جداول iptables انتخاب کرده ایم و در این جدول از زنجیر PREROUTING یعنی بسته هایی که وارد فایروال شده اند ولی مسیر یابی نشده اند استفاده شده. و همچنین برای امنیت شماره پورت ورودی بسته و همینطور پورت فیزیکی بسته نیز مشخص شده است که کاربران دیگر محل های فایروال ( پورت های دیکر فایروال) نتوانند با استفاده از این rule به منابع دسترسی داشته باشند.
و در rule دوم مشخص کرده ایم که تمام کانکشن های جدید که وارد می شوند را قبول کند و کانکشن هایی که بسته شده است یا در حالت های دیکر قرار داشته باشند را رد کند.این کار با ماژول state انجام شده است و در جلوی
state– گزینه NEW به معنی کانکشن جدید ذکر شده است. در صورت ننوشتن این قانون فایروال اجازه ورود هیچ بسته ای را به شبکه داخلی نمی دهد.
در پایان این پست نظر شما را به تصویر اولویت و حرکت بسته های شبکه بین جداول و زنجیر های مختلف iptables جلب می کنم. با درک این نحوه حرکت و اولویت هر بسته راحتر با مفاهیم NAT و Routing در IPTABLES آشنا می شوید:

در قسمت های قبلی تا حدودی با کار با iptables و تنظیمات ابتدایی آن آشنا شدیم.
در این قسمت قصد داریم تا با روند حرکت بسته ها از و به Iptables آشنا شویم. با درک این جریان بهتر می توان بر روی بسته های شبکه با iptables مدیریت داشت و بسته ها رو به target های مناسب فرستاد.
همانطور که در عکس های پست قبلی مشخص است بسته ها در زمان ورود به یک باکس لینوکس یا یونیکس که در هسته آنها قابلیت iptables فعال گشته است وارد جدول raw می شوند ، خصوصیت این بسته این است که می توان در سطح خیلی پایین بر روی بسته مدیریت کرد منظور از سطح خیلی پایین این است که مثلا می توان فیلد های بسته های ip یا tcp را خواند و تصمیم گرفت که با این بسته چه کاری انجام شود مثلا اگر بسته ای فیلد ttl آن یا tos یا هر چیز دیگر نظیر flag را می توانید مدیریت کنید و در مورد هر حالتی تصمیم گیری کنید… جدول بعدی جدول mangle هستش که این نسبت به raw در سطح بالاتری قرار دارد و می توان از ان برای مارک دار کردن بسته های و عملیات بررسی بسته ها قبل از ورود به جداول بالاتر بررسی کنیم و در مورد آنها تصمیم گیری کنیم ( کاربرد این جدول خیلی زیاد نیست و به ندرت از آن استفاده می شود) بعد از mangle نوبت به جدول nat می رسد که می توان در این جدول آدرس ها یا پورت های یک بسته ip یا tcp را به دلخواه تعویض و یا تفسیر نمود و حاصل را به هدف خاصی ارسال کرد. و در نهایت بعد از این جدول در بالاترین سطح نوبت به جدول filter می رسد که وظیفه معمول یک فایروال در این جا انجام می شود یعنی اعمال فیلتر و سیاست گذاری بسته ها…
در پست های بعدی در مورد کاربرد های متنوع iptables بیشتر صحبت می کنیم.

حال می خوایم د رمورد ذخیره کردن قوانین IPTables ای که نوشتیم صحبت کنیم…
وقتی شما یک قانون یا یک زنجیر جدید اضافه می کنید در راه اندازی مجدد کامپیوتر اون قانون حذف میشه و نیاز مجددا تنظیم بشه برای اینکه با هر بار راه اندازی کامپیوتر مجبور نشیم که قوانین رو مجددا تایپ کنیم باید محتویات iptables رو ذخیره کنیم و با شروع مجدد کامپیوتر اونا رو بازیابی کنیم.
برای دیدن لیست دستورات Iptables می تونید از فرمان iptables -L استفاده کنید یعنی list دستورات رو در خروجی نشون بده…
برای دیدن لیست دستورات به فرمت مناسب جهت ذخیره سازی در یک فایل متنی از دستور iptables-save استفاده می کنیم. خروجی این دستور را می توانیم به روش زیر در یک فایل متنی ذخیره کنیم:
iptables-save > iptables.rule
با گذاشتن علامت < خروجی دستور را به یک فایل متنی ریدایرکت کردیم و در اونجا ذخیره شده بهتره که این فایل رو در زیر شاخه /etc/ ذخیره کنیم.
برای باز نشانی اطلاعات از فایل متنی به iptables از فرمان iptables-restore استفاده می شه. برای اینکه این فرایند رو خودکار کنیم در سیستم عامل خانواده debian مثل ubuntu به طریقه زیر عمل می کنیم:
وارد فایل تنظیمات کارت شبکه می شیم:
# vi /etc/network/interfaces
و خطوط زیر رو در انتهای فایل اضافه می کنیم:
pre-up iptables-restore < /etc/iptables.rules
و برای خانواده fedora مثل centos یا redhat به طریقه زیر عمل می کنیم:
/sbin/service iptables save
در این خانواده به راحتی با دستور بالا کل فرایند ذخیره دستورات و بازنشانی خودکار انجام میشه و شما نیاز به هیچ کار اضافه دیگری ندارید.

ترفند شماره یک:
برای اینکه یک کامپیوتر رو محدود کنیم به یک حجم مشخص از استفاده از یک پروتکل ( سرویس حجمی) از فرمان زیر استفاده کنید:
# iptables -A INPUT -p tcp -s 192.168.1.10 –dport 80 -m quota –quota 500000000 -j ACCEPT
# iptables -A INPUT -p tcp –dport 80 -j DROP
در فرامین بالا کسی که با IP به شماره ۱۹۲٫۱۶۸٫۱٫۱۰ وصل میشه بیشتر از ۵۰۰ مگ نمیتونه روی پورت ۸۰ ترافیک داشته باشه… همنطور که در پست های قبلی آموزش داده شد شما می توانید این محدودیت رو هم بر اساس آدرس مک اعمال کنید.

ترفند شماره دو:
احتمالا شما هم مایلید که یک سری کلمات کلیدی رو فیلتر کنید مثلا کلمات مربوط به عبارات مستهجن یا چیز هایی که دوست ندارید کاربران شبکه تون از اون کلمات کلیدی برای جستجو استفاده کنن…
برای فیلتر کردن یک پکت با محتویات یک رشته خاص در Iptables از قانون زیر استفاده کنید:
# iptables -A INPUT -m string –string ‘xyz’ -j DROP
# iptables -A OUTPUT -m string –string ‘xyz’ -j DROP
بدیهی که هر کجا از فرامین iptables که نیاز به معکوس اون عبارت باشه می توایند خیلی ساده از علامت ! استفاده کنید…
مثال:
iptables -A INPUT -p tcp –dport 80 -s !192.168.1.0/24 -j ACCEPT
در قانون فوق به همه شبکه ها بجز شبکه ۱۹۲٫۱۶۸٫۱٫۰ اجازه استفاده از پورت ۸۰ داده شده.

اگر مایلید یک قانون iptable رو به یک زمان خاص در طول هفته محدود کنید می توانید از الگوی زیر استفاده کنید:
iptables -A INPUT -p tcp –dport 80 -s 192.168.1.10 -m time –timestart 07:30 –timestop 14:00 –days Sat,Sun,Mon,Tue,Wed,Thu -j ACCEPT
در مثال بالا به ip به شماره ۱۹۲٫۱۶۸٫۱٫۱۰ اجازه دسترسی به اینترنت از ساعت ۷:۳۰ صبح تا ۲ بعد از ظهر از روز های شنبه تا ۵شنبه داده می شود.

دسته: آموزش

3 پاسخ به آموزش iptable

  1. arash

    سلام خسته نباشید ؛

    امکانش هست از محیط ip table فیلم برداری یا توضیحاتی و اعمالاتی رو فیلم برداری کنید ؟ و لینک دانلود یا ایمیل کنید ؟ برای پروژه دانشگاه میخوام سپاس گذارم . ممنونم از سایت عالیتون. arash.reckless@gmail.com

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد.