ورود/ایجاد حساب کاربری
   منوی اصلی
· خانه
· لیست کاربران
· جستجو
· آمار مشاهدات
· آرشیو مقالات


- شرح
· راهنمای نویسندگان
· درباره ما

   همکاری با نشریه
در صورتی که مایل به همکاری با نشریه هستید، می‌توانید در لیست پستی نشریه عضو شده و در جریان امور قرار گیرید. برای اطلاعات بیشتر، اینجا کلیک کنید.

   کاربران
سردبیر
هیچ مدیر کمکی حاضر
همکاران
هیچ مدیر کمکی حاضر
اعضا:
جدیدترین:جدید امروز:0
جدیدترین:جدید دیروز:0
جدیدترین:مجموع:2471
جدیدترین:جدیدترین:
ufumenarayu
اعضا:حاضر
اعضا:اعضا:0
مهمان‌ها:مهمان‌ها:4
مجموع:مجموع:4
کاربران حاضر
هیچ کاربر حاضری وجود ندارد

   ورود کاربران




 


 برای ورود مشکل دارید؟
 ثبت نام کاربران جدید

آشنایی با IPTABLES بخش سوم

(1169 مجموع کلمات موجود در متن)
(9533 بار مطالعه شده است)  نسخه چاپی

آشنایی با iptables بخش سوم

اتصالات UDP

اتصالات UDP حالت پذیر نیستند. دلایل زیادی برای این امر وجود دارد. اساسا آنها هیچ برقراری اتصال یا بستن اتصالی را شامل نمی‌شوند؛ بیشتر آنها فاقد ترتیب گذاری(sequencing) هستند. البته هنوز امکان این وجود دارد که در داخل کرنل به اتصالات UDP هم حالات خاصــی داده شــود. اجـــازه بدهیــد نـگـاهــی بیندازیم بر چگونگی پیگردی یک اتصال و اینکه conntrack با چه دیدی به آن نگاه می‌کند.
اتـصــال UDP تقــریبا مشابه TCP شروع می‌شود. این دیدی است که کاربر دارد. نگاه conntrack کمی‌متفاوت است، اما فی نـفـسه جـزئـیـات مشـابه هستنـد. ابتدا اجازه دهید نگاهی به ورودی conntrack بعد از اینکه اولین بسته ی UDP ارسال شده است، بیندازیم.

udp      17 20 src=192.168.1.2 dst=192.168.1.5 sport=137 dport=1025 \
     [UNREPLIED] src=192.168.1.5 dst=192.168.1.2 sport=1025 \
     dport=137 use=1

همــانـطور کــه می‌بیـنـید، بسـته ی مــورد نظر یک بسته ی UDP است. مقادیر بالا مشابه با اتصالات TCP است که قبلا توضیح داده ایم.

udp      17 170 src=192.168.1.2 dst=192.168.1.5 sport=137 \
     dport=1025 src=192.168.1.5 dst=192.168.1.2 sport=1025 \
     dport=137 use=1

در این لحظه سرور بــه بسته ی اولــی کــه فرستاده شده پاسخ داه است و اتصال ESTABLISHED  به نظر می‌آید. البته این مورد در پیگردی اتصال نشان داده نشده است. تفاوت اصلی این است که پرچم  [UNREPLIED] رفته است.

اتصالات ICMP

از آنجاکه بستــه‌های ICMP، بستــه‌های کنـتـرلی هستنـد و هیچ اتصالی را ایجاد نمی‌کنند، برایشان نمی‌توان حالتی در نظر گرفت. چهار نوع بسته ی HCMP وجود دارد که در کل در دو حالت مختلف می‌توانند قرار بگیرند. این پیغام های ICMP می‌توانند حالت  ESTABLISHED یا NEW را بگیرند. انواع ICMP که ما در مورد آنها صحبت می‌کنیم عبارتند از درخواست و پاسخ Echo، درخواست و پاسخ Timestamp، درخواست و پاسـخ Information و در نـهایت در خواست و پاسخ Address mask. خارج از اینها، تقاضای Timestamp و Information منسوخ می‌باشند و باید رهــا شــونـد. بـرای فهم بهتر نحوه ی عملکرد ICMP به شکل زیر نگاه کنید.
همانطور که در شکل می‌بینید، میزبان یـــک درخواســت echo بــه هدف ارسال می‌کند که firewall آن را به عنوان NEW تشخیص می‌دهد. هدف نیز با یک پاسخ echo که firewall آن را بـــه عنـــوان ESTABLISHED  در نــظــر می‌گیـرد، پاسخ می‌دهد. هنگامیکه اولین درخواست echo دیده می‌شود، ورودی حالت زیر در ip_conntrack می‌رود:

icmp     1 25 src=192.168.1.6 dst=192.168.1.10 type=8 code=0 \
     id=33029 [UNREPLIED] src=192.168.1.10 dst=192.168.1.6 \
     type=0 code=0 id=33029 use=1



   حالات اتصال ICMP از دید firewall

این ورودی نسبت به ورودی های TCP و UDP که قبلا شما دیده اید، کمی‌متفاوت به نظر می‌آید. در این ورودی سه فیلد جدید داریم با نام های type، code و id. فیلد type حاوی نوع ICMP و فیلد code حاوی کد ICMP است. انواع ICMP را در پیوست آورده ایم. و فیلد آخر با نام id نیز شامل ICMP ID می‌باشد. هر تقاضای  ICMP دارای یک شناسه است و پاسخ آن نیز همان شنایه را در بر دارد تا فرستنده بـــداند که بسته ی ICMP پاسخی است به تقاضای او نه یک تقاضا از میزبان دیگر. سایر فیلدها مشابه فیلدهای TCPو UDP است.

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

ذخیره و بازیابی مجموعه قوانین(rule-set) بزرگ

iptables دارای دو ابزار بسیار مـفیــد بــرای زمـانـی است که شما از مجموعه قوانین بزرگ استفاده می‌کنید. این دو ابزار عیارتند از iptables-save و iptables-restore و برای ذخیره و بازیابی مجموعه قوانین از فایل ها استفاده می‌شوند.

ملاحظات سرعت

یکی از بزرگترین فـواید استفاده از iptables-save و  iptables-resotre بالا بردن سرعت بارگذاری و ذخیره مجموعه قوانین است. یکی از مشکــلات بــزرگ استـفـاده از اسکــریپت‌های شامــل قــوانـین iptables ایـن است که هر بار احضار کردن iptables در داخل اسکریپت، ابتدا rule-set اصلی را از داخل  هسته ی Netfilter بیرون خــواهـد کشید و بعد از آن قوانین را وارد کرده یا اضافه می‌کند. سپس rule-set جدید را از حافظه ی خود به داخل هسته وارد می‌کنـد. این سلسله مراتب برای کلیه ی قوانین اجرا می‌شود و این عمل خود زمان زیادی را می‌طلبد.
بــرای حــل ایــن مشکـل، از دستورات iptables-save و iptables-store استفاده می‌کنـیـم. iptables-save بــرای ذخیــره مجموعه قوانیندر یک فـایــل متـنـی بــا فـرمـت خـاص استـــفاده می‌شود و iptables-restore نیز برای بازیابی از این فایل مـخـصــوص، بــه  داخــل کــرنــل استــفاده می‌شود. بهترین خصیصه ی این دستورات این است که rule-set ها را در یک درخواست تنها ذخیره و بازیابی می‌کنند. iptables-save مجموعــه قــوانین را در یک جا به جایی به یک باره از درون کرنل ربوده و آنها را در فایل ذخیره می‌کند. Iptables-resotre نیز به همین ترتیب عمل می‌کند.

همانطور که متوجه شدید، این دستورات برای کار با سیستم های بزرگ ضروری می‌باشند.

 iptables-save

همانطور که برایتان گفتم،  دستور iptables-save ابزاری برای ذخیره ی rule-set جاری در یک فایلی که iptables-restore می‌تواند از آن استفاده کند. این دستور تنها دو آرگومان را شامل می‌شود. ترکیب این دستور را در زیر مشاهده می‌کنید:

iptables-save [-c] [-t table]

آرگومان -c به iptables-save می‌گوید کـــه مقــادیر مشخص شده در شمارنده های بسته و بایت را نگهدارد. این آرگومان زمانی استفاده می‌شود که ما می‌خواهیم firewall اصـــلی خـــود را مجـــددا راه انــدازی کنیم، همچنین می‌خواهیم که شمارنده های بایت و بسته ی خود را نیز برای اهداف آماری حفظ کنیم.

آرگــومــان -t بـه iptables می‌گوید که کدام جدول قرار است ذخیره شود. بدون این آرگومان دستور مربوطه تمام جداول را ذخیره خواهد کرد. مثال زیر نشان می‌دهد کـــه خـــروجـــی دستـور iptables-save در صورتیکه هیچ مجموعه قوانینی بار نشده باشد، چه خواهد بود:

# Generated by iptables-save v1.2.6a on Wed Apr 24 10:19:17 2002
*filter
:INPUT ACCEPT [404:19766]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [530:43376]
COMMIT
# Completed on Wed Apr 24 10:19:17 2002
# Generated by iptables-save v1.2.6a on Wed Apr 24 10:19:17 2002
*mangle
:PREROUTING ACCEPT [451:22060]
:INPUT ACCEPT [451:22060]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [594:47151]
:POSTROUTING ACCEPT [594:47151]
COMMIT
# Completed on Wed Apr 24 10:19:17 2002
# Generated by iptables-save v1.2.6a on Wed Apr 24 10:19:17 2002
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [3:450]
:OUTPUT ACCEPT [3:450]
COMMIT
# Completed on Wed Apr 24 10:19:17 2002

مثال بالا شامل یک سری توضیحات است کـــه بـا علامت # شروع می‌شوند. هر جدول نیز با علامت * نشان داده شده است. داخل هر جدول خصوصیات زنجیره و ruleها را داریـم. یک ورودی مشخصات زنجیره چیزی شبیه: :<chain-name> <chain-policy> [<packet-counter>:<byte-counter>] اســـت. در نـهایت کلمه ی کلیدی COMMIT را داریم که به ما می‌گوید که باید تمام ruleها را در pipeline به کرنل بسپاریم.

مثال بالا یک مثال پایه ای بود. در زیر مثالــی از اجرای iptables-save را که شامل تعدادی rule-set است، بع شما نشان می‌دهیم.

# Generated by iptables-save v1.2.6a on Wed Apr 24 10:19:55 2002
*filter
:INPUT DROP [1:229]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i eth1 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
COMMIT
# Completed on Wed Apr 24 10:19:55 2002
# Generated by iptables-save v1.2.6a on Wed Apr 24 10:19:55 2002
*mangle
:PREROUTING ACCEPT [658:32445]
:INPUT ACCEPT [658:32445]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [891:68234]
:POSTROUTING ACCEPT [891:68234]
COMMIT
# Completed on Wed Apr 24 10:19:55 2002
# Generated by iptables-save v1.2.6a on Wed Apr 24 10:19:55 2002
*nat
:PREROUTING ACCEPT [1:229]
:POSTROUTING ACCEPT [3:450]
:OUTPUT ACCEPT [3:450]
-A POSTROUTING -o eth0 -j SNAT --to-source 195.233.192.1
COMMIT
# Completed on Wed Apr 24 10:19:55 2002

اکنون لازم است تا خروجی بالا را در فایلی ذخیره کنیم. برای این کار از عمل piping استفاده می‌کنیم:

$ iptables-save -c > /etc/iptables-save

دستور بالا rule-setهای ما را به همراه شمارنده های بایت و بسته در فایل /etc/iptables-save ذخیره می‌کند.

iptables-restore

دستور iptables-resotre برای بازیابی مجمــوعــه قــوانـیـن iptables کــه توسط iptables-save ذخیره شده اند، استفاده می‌شود. البته این دستور ورودی اش را از ورودی استاندارد می‌گیرد و متاســفــانه نمــی‌تواند اطلاعاتش را از فایل ها بار کند. دستور به شکل زیر نوشته می‌شود:

iptables-restore [-c] [-n]

آرگومان -c شمارنده های بایت و بسته را بازیابی می‌کنــد و اگـــر از ایـن آرگومان در دستور iptables-save استفاده کرده اید، در اینجا نیز باید از آن استفاده کنید.

آرگومان -n  به iptables-resotre می‌گوید که دستوراتی را کـــه قـبـلا نوشته شده در جداول و یا rule ها بازنویسی نکند. Iptables-restore به طور پیش فرض تمام  دستورات را پاک کرده و قوانین جدید را وارد می‌کند.

برای بار کردن یک rule-set می‌توانیم از همان piping استفاده کنیم:

$ cat /etc/iptables-save | iptables-restore -c

این دستور اطلاعات داخل فایل /etc/iptables-save را در iptables-restore بار می‌کند و iptables-restore آنها را به همراه شمارنده ها بازیابی می‌کند.

اکنون rule-set بازیابی شده است و شما می‌توانید از آنها استفاده کنید.

تـا بدین جا مفاهیم پایه ای را در مورد iptables و نحوه ی عملکرد آن آموختیم. در شماره های بعدی نحوه ی تنظیم rule-set ها را نیز خواهید آموخت تا بتوانید یک سرور مستحکم و پایدار برای خود داشته باشید.

 

PDF Version

مترجم: ایرج هدایتی shotorbaan@yahoo.co.uk
منبع : http://iptables-tutorial.frozentux.net/iptables-tutorial.html

تمامی مطالب و مقالات این سایت تحت مجوز GNU FDL قرار دارند. بنابراین کپی و ایجاد تغییر در آنها مطابق شرایط این مجوز آزاد می‌باشد.