آشنایی با 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
|