November 27, 2003

Fedora و بدبختی ما با مخابرات !!!

حتما فهمیدید که نسخه 1 لینوکس Fedora که از پس بجای Redhat مجانی که تا حالا بیرون میومده ، بیرون اومده . دست بر قضا ما هم گفتیم نصفه شبی بگذاریم یه جایی Download بشه که ببینیم چیه و اینا !
آقا یه 2 ساعتی سر کار بودم . حالا چرا ؟! من همش Mirror پیدا می کردم برای اینکه با wget بزنم از FTP بیاد . هر چی Mirror براش پیدا می کردم می زدم که بیاد تا دم RETR میومد وای میستاد . اینطوری :


[root@berelian Fedora]# wget -c ftp://fr.rpmfind.net/linux/fedora/core/1/i386/iso/yarrow-i386-disc1.iso
--03:14:36-- ftp://fr.rpmfind.net/linux/fedora/core/1/i386/iso/yarrow-i386-disc1.iso
=> `yarrow-i386-disc1.iso'
Resolving fr.rpmfind.net... done.
Connecting to fr.rpmfind.net[194.199.20.114]:21... connected.
Logging in as anonymous ... Logged in!
==> SYST ... done. ==> PWD ... done.
==> TYPE I ... done. ==> CWD /linux/fedora/core/1/i386/iso ... done.
==> SIZE yarrow-i386-disc1.iso ... done.
==> PORT ... done. ==> REST 23111656 ... done.
==> RETR yarrow-i386-disc1.iso ...


مام گفتیم لابد جدیده همه Mirror ها شلوغه و اینا !! خلاصه هی Mirror عوض کردیم دیدیم نخیر ! مساله چیز دیگری هستش . اول گفتم نکنه Port مربوط به FTP رو جایی بستم ! اما اینم خود بخود منتفیه برای اینکه پس چرا Login میشه ! خلاصه گفتم بگذار همینجوری بدون wget وصل شم ببینم چه مرگشه :


[root@berelian Fedora]# ftp fr.rpmfind.net
Connected to fr.rpmfind.net (194.199.20.114).
220 (vsFTPd 1.2.0)
Name (fr.rpmfind.net:root): anonymous
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> dir
227 Entering Passive Mode (217,218,127,72,143,29)


تا همینجا میومد و گیر میکرد ! یعنی یه Directory هم نمیشه از هیچ FTP سایتی گرفت ! فکر کنم از رو خط آخر گرفتید . همونطور که در خط آخر می بینید FTP سایت من رو به عنوان 217.218.127.72 میشناسه !!! می دونید یعنی چی ؟! یعنی FTP هم داره یه طورای Filter میشه ! آخه من نمی فهمم FTP دیگه چیکاره بوده ! خلاصه گفتم اگر NAT هم باشه باید با Switch ای بنام passive-ftp-- در wget درست بشه ! اما با اونم میزنم نمیشه ! شما به جایی می تونید FTP کنید بی مشکل از خطوط مخابرات ؟!
در ضمن بعدش زدم از یک خط غیر مخابراتی همون FTP اول مثل گربه شروع شد به Download شدن !

November 25, 2003

ITIran هک شد !

موقعی که داشتم مطلب قبلی در مورد سیستم جدید فیلترینگ مخابرات رو می نوشتم ، به دلیل اینکه یه لینک هم به سایت ITIran داده بودم رفتم به سایت ITIran و با این مواجه شدم !!! فکر کنم همون موقع Hacker داشت کاراش رو می کرد برای اینکه من 2 دقیقه پیشش زده بودم درست می اومد ! چقدر بده این دنیای Cyber ، بدونی که همین الان یه نفر داره اینجا خلاف می کنه اما هیچ کاری از دستت بر نیاد :) فکرشو بکنید !!

[ 03:39 AM ]

ایرادات فنی سیستم فیلترینگ جدید مخابرات

به نظر میاد که مخابرات سیستم فیلترینگ جدیدش رو نصب کرده به طوری که می تواند از این پس بر اساس URL و DOMAIN فیلتر کند و نه مانند قبل بر اساس IP Address . خوب این پیشرفت خوبی هستش . اما در این راستا یک سری ایراد فنی در سیستم فعلی به نظرم میرسه که واقعا ایرادهای بزرگی هستش که باید رفع کنند چرا که اینطوری مشکلاتی به بار می آورد که در ذیل بیشتر توضیح دادم :
مهمترین ایرادی که به نظر من خیلی هم بزرگ است و یکمی که بگذره صدای همه وب سایت داران را در خواهد آورد این است که همه کسانی که از خطوط مخابرات برای بازدید صفحات وب استفاده می کنند از دید log فایلهای مربوط به access این سایتها و سایتهای تولید کنند آمارهای بازدید به عنوان چند IP مانند :
217.218.127.70
217.218.127.71
217.218.127.72
217.218.127.73
217.218.127.74
217.218.127.75
شناخته می شوند !!!!! فکر می کنم فهمیدید چه مشکل وحشتناکی است !!! شوخی که نیست 300 مگابیت پهنای باند با بیش از 2 کلاس B آدرس معتبر در اینترنت به عنوان چندین آدرس خاص در log فایلها و تولید کنندگان آمارهای مختلف شناخته می شود که کمی که بگذرد صدای همه در می آید که آقا آمارهای ما همه به هم ریخته است . حالا در حد یک ISP شاید چنان محسوس نباشد ، اما در سطح 300 مگابیت فکر کنم خیلی محسوس باشد . البته راه حل هم دارد ! علت این موضوع استفاده از squid است که در اصل یک proxy و web cache هستش و بنده خدا تقصیری هم ندارد برای اینکه اصلا کارش چیز دیگری است و برای filtering ساخته نشده ! حالا بعدا یه بنده خدایی پیدا شده و squidGuard رو براش نوشته که کار filtering رو هم در کنارش انجام بده و الا در حقیقت ایراد از squid نیست . برای رفع این مشکل باید سیستم filtering ای تهیه کنند که با استفاده از IP Spoofing بتواند درخواستهای web رو فیلتر کند . به این معنا که هنگامی که درخواستی برای یک صفحه وب به این سیستم filtering ارجاع داده شد ، آن درخواست را باز کند و بر اساس تعاریفی که در آن شده است تشخیص دهد که آیا این درخواست مجاز است یا خیر . در صورتی که این درخواست مجاز بود باید این درخواست را برای سایت میزبان آن صفحه با آدرس خود Clinet و نه با آدرس خودش ( یعنی دستگاه filtering ) ارسال کند . این کار را همان IP Spoofing می گویند . در حال حاضر این سیستم غلط که پیاده شده است اینگونه نیست ! یعنی درخواست وقتی به filter ارجاع شد نگاه می کند اگر مجاز بود آنرا با آدرس خودش ( یعنی IP دستگاه filtering ) برای سایت میزبان ارسال می کند . تنها کاری که می کند این است که یک Header به درخواست با عنوان X-Forwarded-For اضافه می کند که در آن آدرس اصلی Client درخواست کننده را قرار می دهد ( آن هم برای اینکه جوابش که برگشت بداند باید آنرا به چه کسی تحویل دهد ) . با این کار در حقیقت از دید وب سرور میزبان درخواست کننده همان دستگاه filtering است و نه IP آدرس client ای که دارد از خطوط مخابرات استفاده می کند . پس از دید نرم افزارهای تولید کننده آمار بینندگان وب ، بازدیدکنندگان وب ایرانی یعنی چند IP محدود !!! :)
روش رفع مشکل را که گفتم ، همانا استفاده از IP Spoofing هستش . فکر می کنم در PIX محصول شرکت Cisco می توان این کار را کرد ( یعنی شنیده ام ) . اما من خودم بر روی Squid این کار کرده ام :) البته نه همینطوری !! برای اینکه نه Squid آنرا پشتیبانی می کند و Netfilter و نه Kernel محترم Linux که در حالت عادی ضد IP Spoofing هم هست ( Router های Cisco هم ضد آن هستند در حالت عادی ، برای اینکه یکی از روش های شناخته شده Hacker های اینترنتی برای DoS و ... می باشد ) . اما استفاده از آن در یک VLAN که شما خودتان می خواهید از خاصیت آن به صورت کنترل شده استفاده کنید مشکلی را ایجاد نمی کند . برای این منظور یک سری Patch برای Squid و Iptabes و Kernel لازم است . من خودم این رو بر روی Linux با همین قضیه IP Spoofing راه انداختم و خوب هم کار می کرد . چون از اینجا شنیدم که مخابرات هم از Linux و Squid و SquidGuard و احتمالا هم Iptables برای filter کردن درخواستها استفاده می کند ، آنها هم می توانند با همینها این مشکل را حل کنند . البته ابزارهای تخصصی Content Filtering فکر می کنم به صورت آماده وجود دارند که این کار می کنند . در ضمن مشکل دیگر این روش این است که در صورتیکه چندین مسیر دریافت جداگانه داشته باشند که به صورت Load Balance از آنها استفاده نکنند و هر کدام مخصوص یک سری لینک باشد ( که نمی دانم اینطوری هستش یا نه ) آنوقت فقط همان مسیری که IP فیلترینگ آنها از آن range است برای receive استفاده می شود ! ( قابل توجه ICP هایی که خطوط send می فروشند و می خواهند بر روی آنها نیز filter بگذارند . solution مشترک است )
نکته دیگری که فکر کنم این را دیگر اشتباه نکرده باشند ( که اگر کرده باشند دیگر هیچ !!! ) این است که باید سیستم Caching مربوط به Squid را غیر فعال کنند . چرا که اگر اینکار را نکنند هم Load وحشتناکی بر روی سیستم های filtering اضافه می شود و هم اینکه هیچ موقع و نه در هیچ کجای دنیا بر روی 300 مگابیت لینک اینترنت Cache نمی گذارند . Cache فقط برای End User است ( یعنی در سطح ISP ، گویی که filter هم هینطور اما در ایران به دلیل مسائل قانونی انگار مخابرات باید filter بگذارد ، اما Cache را که دیگر مجبور نیست ) .
در مورد نکاتی هم که ITIran در اینجا گفته است چند توضیح می دهم :
1- چرا فکر می کنند برای آن Load بالا نمی توان از Linux استفاده کرد ؟! مگر قرار است که همه Load را بر روی یک دستگاه Linux بریزند . توسط Protocol هایی مانند WCCP می توانند Load Balance کنند ( کاری که همین الان به نظر میاد که کردند ) و در صورت ایراد در یکی از این سیستمها مشکلی به وجود نمی آید و بقیه جبران می کنند . نکته ای که باید اشاره کنند این است که کسی در این پهنای باند عظیم Filter نمی گذارد که جواب آن هم در کشور ما مشخص است :)
2- حرفشان درست است ! filtering در هسته مرکزی باعث می شود که یک خرج گنده برای یک Load بالا بشود و در صورت بروز مشکل همه Link های مخابرات صدمه ببینند . می توانستند لااقل این را در مراکز خود تقسیم کنند .
3- نمی دانم چگونه فهمیده اند که سرور ها به درستی Configure نشده ! اما اونی که مسلمه Spoofing و Request Attack همیشه وجود دارد و خیلی راحت می توان جلوی آنها را گرفت . ( گویی که در router های Cisco که مخابرات هم از آنها استفاده می کند به صورت پیش فرض خیلی از این مشکلات مانند Spoofing را ندارد )
4- این مشکل squidGuard نیست !! در squidGuard خیلی راحت می توان با یک config درست این مشکل را حل کرد . البته من تست نکردم ! اما بعید بدونم الان اینطوری باشه ! چون اگه می خواستند IP را ببندند دیگر نیازی به squid و squidGuard نبود !! یک Access List در Cisco کار را تمام می کرد :)
در آخر هم گفته که Squid ها به صورت Parent کار می کنند که احتمالا منظورش Sibling بوده ! چون Parent اصلا در اینجا معنی نمی دهد و فکر کنم منظورش از Traffic Shaping همان Load Balancing بوده است !

وبلاگ cat ~/.minds

عجب ! انگار من خیلی عقبم . امروز فهمیدم که مسعود ( مدیر فعلی سایت iranphp ) یک وبلاگ با استفاده از همون پروژه وبلاگ فارسی که خودش در سایت IranPHP راه انداخته و مدیریت می کند درست کرده . انگار یه دو ماهی هم هستش که داره توش مطلب می نویسه . اما من تازه فهمیدم . اونم از لینکی که در Comment مطلب قبلی من گذاشته بود . اسم وبلاگش هم یه طورای Unix ای هستش : cat ~/.minds
این دستور یعنی فایلی به نام minds. ( که احتمالا در اینجا منظور نویسنده نظرات خودش بوده است و البته از نوع hidden هم هستش ) که در شاخه home دایرکتوری user شما در Unix می باشد را محتویاتش را نمایش می دهد :) اسم قشنگی هستش .
به هر صورت این وبلاگ رو هم در لیست وبلاگ های مورد علاقم اضافه می کنم . انگار ping رو هم راه انداخته و وقتی وبلاگش update می شه blogrolling هم می فهمه .

November 24, 2003

انتقال Linux نصب شده به کامپیوتر دیگر

یکی از مسائلی که همیشه در سیستم عاملهای ویندوز 95 به بعد ( یعنی تا همین الان که ویندوز 2003 هم آمده ) وجود داشته ، این بوده است که شما در صورتیکه کامپیوتر جدیدی تهیه می کردید و می خواستید از هارد دیسک قدیمی خودتان در دستگاه جدید استفاده کنید ، مجبور بودید که ویندوز قبلی را در دستگاه جدید پاک کنید و از اول ویندوز جدیدی برای این کامپیوتر جدید نصب کنید . حالا شاید خیلی ها بگویند که نه لازم نیست و ... ! اما همگی خوب می دانند که ویندوز در سیستم جدید بسیار مشکلات زیادی پیدا می کنند که اکثرا ترجیح می دهند که ویندوز را از اول برای کامپیوتر جدید نصب کنند .
یکی از عمده دلایل این قضیه شناساندن Hardware های جدید و درایور ها آنها در ویندوز است . یعنی باید Hardware های قبلی از بین برود و Hardware های جدید شناسانده شود تا سیستم بتواند راحت کار کند .
در Linux این قضیه بسیار ساده و راحت است . چرا ؟! به دلیل اینکه در Linux موقعی که Kernel در ابتدای کار Load می شود از اول همه Hardware ها را شروع به شناختن می کند و اطلاعاتی مانند نوع IDE Controller ، کارت شبکه ، CD-ROM ها و ... را در همان ابتدا از سیستم خارج می کند . اینکه در جای خاصی این اطلاعات را نگه نمی دارد و هر زمان که سیستم Boot می شود در همان ابتدا بسیار سریع همه این اطلاعات را پیدا می کند ( یعنی دقیقا کاری که ویندوز نمی کند و اگر قرار باشد که چنین کاری انجام دهد باید برای هر بار Restart ویندوز حداقل نیم ساعت وقت صرف کنیم ) باعث شده است که شما بدون هیچ نگرانی Linux ای را که بر روی کامپیوتر دیگر نصب شده است با خیالی آسوده بر روی کامپیوتری دیگر منتقل کنید .
در اینجا قصد دارم مراحلی را که در انتقال یک دیسک سخت حاوی سیستم عامل Linux نصب شده و اطلاعات داخل آن ، به یک کامپیوتر جدید با قطعات جدید باید طی کنید شرح دهم .
1- ابتدا Case های دو کامپیوترتان ( قدیمی و جدید ) را باز کنید و Harddisk سیستم قدیمیتان را بر روی سیستم جدید نصب کنید .
2- در صورتیکه سیستم جدید شما دارای Harddisk جدیدی می باشد و می خواهید که این دیسک جدید را بعدا استفاده کنید و در حال حاضر به صورت Master بر روی دستگاه نصب شده است ، هارد دیسک قدیمی را به صورت Slave ( با تنظیم Jumper های مربوط به هر دو دیسک ) بر روی سیستم جدید نصب کنید و مطمئن شوید که BIOS کامپیوتر هر دو دیسک را به درستی شناسایی کند .
3- در صورتیکه از همان Harddisk قدیمی به عنوان تنها دیسک در سیستم جدید استفاده می کنید باید Linux شما مانند قبل با اجرا شدن Boot Loader مربوطه ( مانند Lilo و یا Grub ) اجرا شده و بدون هیچ مشکلی سیستم شما بالا بیاید . اما اگر هارد دیسک سیستم قبلی خود را به سیستم جدید اضافه کرده اید ( یعنی هارد جدیدی در Master سیستم جدید قبلا وجود داشته و شما هارد دیسک سیستم قبلی را به صورت Slave به آن اضافه کرده اید ) باید CD مربوط به Linux خود را داخل درایو دستگاه جدید قرار دهید و در BIOS بخواهید که ابتدا از روی CD-ROM سیستم را راه اندازی نماید .
4- پس از Boot شدن از روی CD-ROM مربوطه منوی مربوط به Boot ظاهر می شود که شما باید گزینه Rescue را با پارامتر شبیه به زیر صدا کنید : ( در اینجا Boot Loader مربوط به Debian استفاده شده است ، اما Boot Loader های دیگر مانند RedHat هم به همین شکل می باشند )

linux:# rescue /dev/hdb1 /


این دستور به Boot Loader می گوید که در حالت Resuce ( نجات ) سیستم رو شروع کند طوری که Root دایرکتوری آن Partition اول هارد دیسک دوم ( یعنی همان هارد دیسک قدیمی ) باشد . این کار باعث می شود که سیستم Linux قبلی شما Load شود ، ولی تنها نکته این است که / آن که همان Partition مورد نظر ماست به صورت Read Only در دسترس شما قرار گیرد .
5- برای اینکه بتوانید تغییرات دائمی بر روی Boot Loader اصلی سیستم که در بر روی دیسک سخت قرار دارد اعمال کنید که به صورت عادی بر روی کامپیوتر جدید شما بالا بیاید ، لازم است که / را به صورت Read/Write در آن Mount کنید که بتوانید تغییرات را بر روی فایل تنظیم Boot Loader ( مثلا Lilo.conf ) ثبت کنید . برای این منظور از دستور

mount -o remount rw /


6- باید تنظیمات مربوط به Boot Loader را تغییر دهید که از دیسک دوم سیستم به جای دیسک اول سیستم برای خواندن Kernel و Load کردن آن استفاده کنید . من در اینجا در مورد Boot Loader رایج Lilo توضیح می دهم . شما می توانید بر اساس این توضیحات تنظیمات Boot Loader های دیگر مانند Grub را خودتان تغییر دهید .
در Lilo شما باید فایل etc/lilo.conf/ را تغییر دهید . این فایل را ویرایش کنید و مکانی را که به dev/hda1/ برای Load کردن kernel از این مکان اشاره می کند به مکان جدید آن که dev/hdb1/ می باشد تغییر دهید . خطی مانند این :

root = /dev/hda1


باید به خطی شبیه به این تبدیل شود :

root = /dev/hdb1


پس از انجام این تغییر ، آنرا save کنید و در محیط shell یک باز lilo را با زدن دستور زیر اجرا کنید :

# /sbin/lilo


7- تغییر دیگری که باید بدهید در فایل etc/fstab/ می باشد که در آن باید آدرس جدید partition ها را مشخص کنید که در ابتدای کار بر اساس آدرسهای جدید آنها mount شود . همانند lilo.conf باید آدرسهای اشاره کننده به dev/hdaX/ به صورت dev/hdbX/ در آورید و فایل fstab را ذخیره کنید .
8- دستور reboot را بزنید تا کامپیوتر با تغییرات جدید مجددا راه اندازی گردد . در راه اندازی جدید شما Linux قبلی شما بدون هیچ مشکلی باید شروع به Load شدن کند .

در اینجا ذکر چند نکته ضروری می باشد :
1- در صورتیکه می خواهید از Harddisk جدید خود که در dev/hda/ نصب شده است استفاده کنید باید توسط fdisk /dev/hda ابتدا آنرا partition بندی کنید و سپس توسط mkfs آنرا format کنید و سپس partition های ایجاد شده را در جاهایی که می خواهید mount کنید .
2- در صورتیکه kernel قبلی شما مشخصا برای سیستم قبلی شما compile شده بوده است ، شاید از hardware های جدیدی که در سیستم جدید دارید پشتیبانی نکند . برای این منظور باید source های kernel را در اختیار داشته باشید تا بتوانید برای سیستم جدید خود kernel جدیدی با مشخصات آن ایجاد کنید . ( kernel پیش فرض RedHat و یا Debian معمولا از اکثر Hardware ها به صورت پیش فرض پشتیبانی می کند )
3- دقت که کنید که CPU جدید شما باید سازگار با CPU قبلی شما باشد تا Kernel سیستم قبلی بر روی آن Load شود . معمولا در i386 ها سیستم های جدیدتر قبلی ها را پشتیبانی می کنند ، اما بالعکس آن صادق نیست .

November 16, 2003

شبکه محلی مجازی ( VLAN )

جدیدا یک نوعی از شبکه های محلی به نام Virtual LAN یا همون VLAN خیلی مورد استفاده قرار میگره . VLAN در حقیقت گروهی از Station ها هستند که بر اساس یک شرط خاصی در یک شبکه محلی قرار می گیرند . از نظر فیزیکی یک VLAN می تواند قسمتی یا حلقه ای ( RING ) از یک شبکه محلی بزرگ باشد و یا حتی تعداد خاصی از Station های یک شبکه محلی معمولی باشد . دلایلی که باعث محبوب شدن و استفاده روزافزون از VLAN ها میشه به شرح زیر هستند :

1- به وسیله VLAN به راحتی می توان نیازهای شبکه ای یک سازمان مجازی را برطرف کرد . استفاده از Switch هایی که قابلیت تعریف VLAN را دارند باعث می شود که مدیریت شبکه های مختلف توسط یک Switch به راحتی انجام شود و تغییرات و تحرکات به راحتی قابل کنترل باشد .
2- با استفاده از VLAN پهنای باند به صورت بهینه مصرف می شود ، به این معنا که Frame ها و یا Packet هایی که توسط یک Station در یک VLAN خاص ، فقط برای Station های اعضای آن VLAN ارسال می شوند و دیگر VLAN های دیگر ، مشغول به دریافت Packet های مربوط به آن VLAN نمی شوند . همچنین روشهایی برای محدود سازی پهنای باند برای هر VLAN پس از تعریف VLAN وجود دارد .
3- به وسیله VLAN امنیت شبکه بالا می رود . به این معنا که افرادی که در یک VLAN خاص قرار دارند مطمئن خواهند بود که افراد دیگری که به VLAN های دیگر در آن شبکه متصل هستند نمی توانند از آدرسهای آنها و منابع آن VLAN برای دسترسی به اطلاعات آنها استفاده کنند . همچنین ابزاری مانند Sniffer ها و امثال آنها دیگر مورد استفاده ای در VLAN های دیگر برای دسترسی به اطلاعات بقیه Station ها نخواهند داشت.

روشهایی که سازندگان Switch برای تعریف VLAN از آنها استفاده می کنند از قرار زیر است :

1- PORT-BASED VLANs
2- MAC-BASED VLANs
3- LAYER 3-BASED VLANs
4- RULES BASED VLANs

برای استفاده از Port Based ها باید Switch قایل مدیریت داشته باشید تا بتوانید برای هر Port تعریف خاصی داشته باشید و باید دقت کنید که هر Station به Port مناسبی که برای آن برنامه ریزی کرده اید متصل شود . این یکی از نقطه ضعفهای این روش است که برای تغییر محل Port یک Station باید تنظیمات Switch را نیز عوض کنید .
در Mac Based دیگر مشکل عوض شدن محل Port وجود ندارد و در ضمن نیازی به Switch های قابل برنامه ریزی نیز نمی باشد . همه تنظیمات بر روی Router بر اساس آدرس سخت افزاری Device های اتصال به شبکه انجام می شود . مشکل این روش این است که در تعداد بالایی Station در یک VLAN شرط بسیار بزرگی برای یک VLAN باید توسط Router بررسی شود که خود این محدودیت ایجاد می کند .
در Layer 3-Based باید از Switch ها و Router های گران قیمت Layer 3 استفاده کنید و بر اساس VLAN ها می توانید Routing و ... انجام دهید .
در Rule Based شما می توانید بر اسال آدرسها و Subnet ها تصمیم بگیرید که هر Station در کدام VLAN باید قرار داشته باشد. این روش استفاده های خاص خود را دارد و در همه جا نمی توان از آن استفاده کرد .
در زمینه VLAN ها یک استانداردی توسط IEEE تهیه شده است به نام IEEE 802.1q که در آن روشی برای ایجاد VLAN و تشخیص آنها برای Switch ها و Router ها پیشنهاد شده است که امروزه اکثر Switch ها و Router های استاندارد از آن به عنوان استاندارد VLAN پشتیبانی می کنند .

November 14, 2003

Dual Play خوب چیزیه ها !

من روز تولدم که خیلی وقته گذشته از یکی از دوستای خیلی خوبم یه هدیه ای گرفتم که هر چی که می گذره می فهمم عجب چیز توپی هستش . خوب خیلی وقت بود که دوست داشتم از این Digital Player/Recorder ها داشته باشم که خیلی جاها به دردم می خوره . دوستم هم از همین موضوع خبر داشته و برای روز تولدم یه همچین چیزی برام گرفته بود . اما یه مقداری با اون چیزی که من خودم مد نظرم بود فرق داشت و من حالیم نبود اولش که انتخاب اون بهتر بوده . حالا که خیلی گذشته دارم کم کم می فهمم که من مو میدیدم و اون پیچش مو :)
اینی که دوستم برای من خریدن DualPlay نام داره که در حقیقت یک Digital Player/Recorder هستش که علاوه بر اینکه شما می تونید اون رو از طریق USB به کامپیوتر متصل کنید و آهنگهای مورد علاقتون رو به صورت MP3 روش بریزید و با کیفیت خیلی عالی بهشون گوش بدید ، امکانات خوب دیگری نیز دارد .
مثلا این دستگاه از نظر شمایل همانند یک نوار کاست است ( همونطوری که در این شکل هم می بینید ) و این شبیه نوار کاست بودنش هم دلیل دارد . دلیل آن این است که شما هنگامی که مثلا آهنگهای مورد علاقتون رو بر روی آن انتقال دادید در حالت عادی می توانید آنرا توسط Headphone که به همراه آن هست و به آن متصل می شود گوش کنید . در حالت دوم ممکن است شما بخواهید محتویات آنرا به صورت بلند توسط یک دستگاه پخش صوت مثل ضبط ماشین گوش کنید . کافیست که این دستگاه رو درون ضبط ماشین قرار دهید ( البته حتما شیشه های ماشین رو بالا بکشید ، چون شنیدم صداش بیرون بره ماشینتونو می خوابونن :) ) و بعد دکمه پخش ضبط ماشین را بزنید . آهان شاهکارش اینجاست که همان MP3 را همانند یک نوار ( اما با کیفیت خیلی بهتر ) از ضبط ماشین خواهید شنید . تازه با دکمه های عقب جلو می توانید آهنگها رو عقب جلو هم ببرید .
دیگه اینکه این دستگاه می تونه به صورت مستقیم MP3 بر روی حافظه خودش ضبط کنه . یعنی علاوه بر Format خاص خودش که برای ضبط صدا داره و شما می توانید ساعتها صدا بر روی آن توسط Mic ای که بر روی خودش قرار دارد ضبط کنید می توانید آنرا در حالتی قرار دهید که بجای Format خودش به صورت MP3 ضبط کند ، اما خوب زمان کمتری می تواند MP3 را بر روی خود جای دهد . همچنین قابلیت ضبط در ضبط صوت را نیز داراست ، یعنی می توانید آنرا در ضبط صوت قرار دهید و مثلا صدای رادیو رو بر روی آن توسط دکمه ضبط خود ضبط صوت ، ضبط کنید .
دیگه اینکه می تونید ازش به عنوان یک Diskette هم استفاده کنید . به این معنا که بسته به مقدار حافظه ای که برایش تهیه می کنید ( در حالت عادی در سه اندازه 64, 128 و 256 مگابایتی عرضه می شود که توسط حافظه کارتی از نوع Memory Card هایی که در اغلب این نوع دستگاهها دیگر استاندارد شده ، قابل افزایش می باشد ) می توانید علاوه بر فایلهای MP3 که بر روی آن میریزید و بهشون گوش می کنید ، فایلهایی با Format های دیگر را نیز بر رویش بریزید و آنها را روی کامپیوتر های دیگر انتقال دهید و از آنها استفاده کنید . این خاصیتش هم خیلی به درد من خورد . اولا حالیم نبود :)
دیگه اینکه باطری هاش به صورت شارژی هستش که مدت طولانی ای هم کار می کنه ( اندازه نگرفتم اما زیاده ) و در حالت عادی هم دوتا باطری داره که در صورتی که شارژ یکی تموم بشه میتونید اون یکی روبگذارید و اینی که تموم شده رو بگذارید شارژ که اینطوری هیچ موقع بدون Digital Recorder نمونید :) البته یک شارژر که به برق شهر متصل می شود نیز به همراه آن هست ، اما می توانید به صورت دلبخواهی شارژر ماشینی آنرا نیز تهیه کنید . علاوه بر این Remote کنترل داخل ماشین را هم می توانید به صورت انتخابی تهیه کنید که در این صورت عین یک دستگاه CD-Changer که بر روی ماشین سوار می کنید می توانید از آن استفاده کنید .
دیگه فعلا چیز جدیدی کشف نکردم ، اما خدائیش خیلی چیز بدرد بخور و کار درستی هستش . در ضمن ساخت کشور کره می باشد و قیمتش هم نسبت به خیلی Digital Recorder هایی که توی بازار هستش کمتره . ( البته دوستم قیمتش رو بهم نگفت خودم تحقیق کردم :) )
حالا شب قدری زده به سر ما در مورد چی داریم می نویسیم . به هر حال شهادت حضرت علی (ع) رو هم پیشاپیش تسلیت عرض می کنم و امیدوارم که نماز و روزه هاتون هم قبول باشه .

November 09, 2003

ایندفعه Sun و PHP

خوب ! به نظر میاد که Sun هم با تکنولوژی تمام نشدنی ای به نام جاوا بازهم به این نتیجه رسیده که نمی تواند از محبوبیت PHP صرف نظر کند . درسته که Java خودش نیز بسیار محبوب و کاراست ، اما محبوبیت PHP از نوع دیگری است و کارایی اون هم طعم دیگری دارد . برنامه نویسان هیچ موقع طعم و مزه برنامه نویسی با PHP از زیر زبانشان نمی رود و وقتی هم که سراغ زبانهای دیگر می روند ( هرچند مانند این جاوا اینقدر قدرتمند ) هوس دستورات بامزه و کار راه بنداز PHP را می کنند . OpenSource بودنش هم که مزید بر علت شده که این زبان زیبا ، ساده و قدرتمند بسیار فراگیر بشه .
حالا در اینجا بخونید که Sun برای اینکه کاربرانش در Solaris و Application Server های محصول شرکت Sun بتوانند از مزیت برنامه نویسی PHP در صفحات وب خود بهره مند شوند ، قراردادی را با Zend امضا کرده اند که PHP Enabler را برای آنها طراحی کند و برای کاربران Sun به رایگان در اختیار قرار دهد .
هم چنین بر اساس همین مطلب شرکت Adobe هم دست به ایجاد محیطی تخصصی برای برنامه نویسان PHP زده و می خواهد Zend Studio رو به مجموعه نرم افزارهای خودش اضافه کند . فکرش را بکنید که Apache و Application Server های Sun از PHP به نحو احسن پشتیبانی کنند و PHP5 هم بزودی از راه برسه :) حالا میکروسافت میمونه با .Net ش :)

November 06, 2003

بازم حضرت Netfilter ( س )

این یکی دیگه خیلی نوبره به خدا ! یعنی من تا حالا ندیده بودم برای اینکه خیلی جدید هم نیست . اما ایده بسیار باحالی هستش . یه Module برای Netfilter هستش که شما به راحتی می تونید دسترسی رو بر اساس نوع سیستم عامل محدود کنید . به عنوان مثال می خواهید به فلان Port فقط Windows ای ها دسترسی داشته باشند و یا به دیگری ویندوزی ها دسترسی نداشته باشند و فقط Linux ای ها و یا FreeBSD ای ها دسترسی داشته باشند . با استفاده از این Module به راحتی می تونید با rule ای شبیه به rule زیر دسترسی ویندوزی ها به ICMP را محدود کنید ( برای جلوگیری از Nachi مثلا ) :

iptables -A INPUT -p icmp -m osf --genre Windows -j REJECT

واقعا ابزار به درد بخوری هستش برای مدیران شبکه که می خوان با این ویروس ها و Worm های ویندوز مقابله کنند . مثلا شما باید Port مربوط به TFTP رو برای ویندوز ببندید چون بعضی از همین Worm ها بر روی آن کار می کنند ، اما اگه این کار را برای همه بکنید دیگر کسی هم که واقعا می خواهد از TFTP استفاده کند نمی تواند از آن استفاده کند . با این کار لااقل فقط ویندوز ها رو که در این Port مشکل دارند می بندید و بقیه را باز می گذارید . سیستم عامل هایی را که بر اساس آنها می توانید Rule تعریف کنید فعلا 5 تا هستند :
Linux, FreeBSD, NetBSD, OpenBSD, Windows
حالا شاید بعدا بیشتر هم اضافه بشه . اما همیناشم خیلی خوبه ! به درد من که خیلی خورد :)

November 05, 2003

خرید Google توسط Micro$oft ؟!

لابد این روزا خبر پیشنهاد به هوس اندازه میکروسافت برای خرید گوگل رو شنیدید . اگه نشنیدید اینجا رو بخونید . اینطور که معلومه گوگل هم خیلی بدش نیومده و رفتند نشستند سر میز مذاکره ! البته حالا که معلوم نیست مذاکرات به کجا برسه . اما با یکی از دوستام که همون طرفای گوگل هستش و باهاشون خیلی رفت و آمد داره صحبت می کردم نظرش این بود که بعید نیست گوگل این کار رو بکنه !! حالا چرا ؟!
برای اینکه اعتقاد داشت که مدیران گوگل با این پولی که گیرشون میاد به راحتی می تونند ده ها شرکت دیگر را تاسیس کنند و دست به کارهای نوی دیگری بزنند و دوباره گوگلهایی دیگر درست کنند واونا رو داخل پاچه شرکت های پولداری مثل Micro$oft کنند . البته مدیران گوگل نشون دادند که عرضه این کار رو دارند ، اما یک مساله این هستش که مگه فقط منافع مدیران گوگل مطرح هستش ؟ مگر نه اینکه همین hotmail تا قبل از اینکه MS بخرتش بزرگترین سرویس دهنده EMail رایگان بود که بسیار محبوب بود ، اما حالا توی خود همین ایران کسایی که از Hotmail استفاده می کنند چند نفر هستند و کسانی که از Yahoo Mail استفاده می کنند چند نفرند ؟!
بحث R&D یه بحثی هستش که در گوگل فقط با بودن همچین مدیرانی قابل پیشرفت هستش و با آمدن مدیران بازرگانی میکروسافت دیگه گوگل تبدیل به یک منبع درآمد میشه تا توسعه دهنده یک تکنولوژی !!
به هر حال گوگل تا وقتی اینقدر محبوب هستش که مرتب سرویس های جدید ارائه میده و همیشه یک پله جلو هستش که من مطمئنم با آمدن مدیران میکروسافت بالای سر گوگل این شرایط باقی نمی مونه .
حرف از سرویسهای جدید گوگل شد ، خدا می داند دیگر چه سرویسی می خواهد راه بندازد که این کار را می خواهد بکند ! بر اساس این خبر که از وبلاگ خود گوگل منتشر شده ، گوگل اقدام به جاسازی کردن یک سری Robot در کانالهای IRC کرده و گویا می خواهد سرویس جستجویی در زمینه IRC هم راه اندازی کند . حالا جزئیاتش چیست منم نمی دانم ! اما خدائیش اگه میکروسافت باشه این ایده های اتمی اصلا به ذهنشون خطور می کنه ؟!
این لینکی که JraNil در وبلاگش معرفی کرده در مورد تغییرات احتمالی که بعد از خریدن گوگل توسط میکروسافت ، پیش خواهد آمد هم خیلی جالبه :)

[ 02:24 AM ]

November 02, 2003

مفاهیم و تئوری Netfilter در Linux

هوس کردم در مورد حضرت Netfilter ( س ) در لینوکس کمی توضیح بدم . البته بی دلیل هم نیست ! به خاطر اینکه خیلی ها اون رو با access-list های در Cisco مقایسه می کنند که این یک توهین بزرگ به Netfilter محسوب میشه :) برای همین تصمیم گرفتم کمی در مورد مفاهیم و تئوریش توضیح بدم شایدم بعدا در مورد ریز کاراش و نحوه استفاده ازش بیشتر توضیح دادم .
ببینید Netfilter در Linux بر پایه سه چیز استواره :

1- Rules
2- Chains
3- Tables

البته همه اینا ترجمه فارسی داره، اما یکم بی خود می شه اگه اسم های فارسی به کار ببریم . برای همین همین اسمهای انگلیسیش رو به کار می برم .
اول از همه در مورد Rules :
پائینترین مرحله در Netfilter همین Rule ها هستند . شما با مشخص کردن Rule در حقیقت مشخص می کنید که می خواهید عمل Filtering یا Manipulation ( همون دستکاری packet ها ) انجام بشه . که البته خود دستکاری packet ها انواع و مراتبی داره . اصولا یک Rule از 4 بخش تولید شده :
1- table ای که این rule به آن تعلق دارد . در صورتیکه هیچ نام table ای ذکر نشود netfilter به صورت خودکار آنرا عضو table ای به نام filter که کارش از نامش پیداست قرار می دهد .
2- Chain ای که این rule به آن تعلق دارد . مثلا این rule در هنگام ورود packet باید اعمال شود ( INPUT ) یا در هنگاهی که تصمیم به فرستان packet به جای دیگری گرفته می شود ( FORWARD ) و یا هنگامیکه می خواهد از Device خروجی شبکه خارج شود ( OUTPUT ) . البته در table های مختلف مراتب مختلفی وجود داره . اینایی که من گفتم مربوط به filter هستش .
3- ساختار filter کردن یا دستکاری در packet . مثلا اینکه چه قوانینی برای تصمیم گیری در مورد اینکه آیا یک packet باید filter بشود یا نه . این قوانین بر اساس خصوصیات متعددی می تواند باشد که از جمله آنها به source address و destination address و شماره درگاه ورودی یا خروجی و ... می توان اشاره کرد که این خودش کلی بحثه .
4- نتیجه rule . به این معنی که در صورتیکه در بخش ساختار مشخص شد که باید عملی بر روی این packet انجام شود این عمل چیست . مثلا در بحش filter مهمترین عمل DROP می باشد یا مثلا ACCEPT . در بعضی مواقع شما نمی خواهید هیچ عملی بر روی packet انجام شود و صرفا می خواهید آنها را LOG کنید . بسیار اعمال متفاوتی شما در این قسمت می توانید برای rule خود بسته به موقعیت ، table ای که در آن هستید و همچینین Chain ای که استفاده می کنید ، تعریف کنید که خود این باز بحث داره .
دوم در مورد Chain ها :
rule های ساده و ابتدایی به راحتی می توانند در Chain های پیش فرض موجود قرار گیرند . تعدادی chain هستند به صورت پیش فرض همیشه در اختیار مدیر شبکه قرار دارند مثل INPUT و OUTPUT و ... . این chain های پیش فرض می توانند دارای یک نتیجه عمل پیش فرض نیز باشند، که در صورتیکه در هیچ یک از rule های آن chain صدق نکردند ، سیستم بداند در حالت عادی باید چه عملی را بر روی این packet های انجام دهد .
همچنین برای مدیریت filter ها و firewall ها و در بعضی موارد route های حجیم و زیاد شما می توانید برای آسانتر شدن کار خود chain های خودتان را به سیستم علاوه بر آن chain های default اضافه کنید . این chain ها می توانند خودشان شامل یک سری rule باشند که نتیجه عمل یک یا چند rule در chain های default قرار می گیرند . ( کمی پیچیده شد، می دونم ، اما سعی می کنم در مورد این user defined chains بعدا بیشتر بنویسم . اما بدون اینها هم فعلا کار شما با همون default ها راه میفته )
و آخر در مورد table ها :
به خاطر اینکه شما اعمال مختلفی رو می تونید بر روی packet ها انجام دهید و بر اساس اون کاری که می خواهید انجام دهید قاعدتا rule های مختلفی باید تعریف کنید ، آمده اند و table های مختلف ایجادکرده اند که شما برای انجام اعمال مختلف بتوانید rule مربوطه را در table مربوطه نیز تعریف کنید . این کار بیشتر برای ساده تر کردن مدیریت rule ها و منطقی کردن عمل filtering و manipulating انجام می شود . اصولا 3 عدد table بیشتر در netfilter در حالت عادی وجود ندارد :
1- table ای به نام filter که برای packet filtering استفاده می شود . همان قسمتی است که برای درست کردن یک firewall شما به آن احتیاج دارید . این table در حقیقت همان table پیش فرض است که در صورت ذکر نکردن نام هیچ table ای rule های شما در این table قرار می گیرند .
2- table ای به نام nat که وظیفه اش ترجمه packet ها است . به این معنی که شما در این table می توانید مقصد و یا منبع packet را به آدرسهای دیگری تغییر دهید و آنها را مدیریت کنید . IP Masquerading که بسیار مشهور و به درد بخوراست برای ایجاد دسترسی IP های Invalid به شبکه در این قسمت قرار دارد .
3- table ای به نام mangle که شامل rule ها و chain هایی می شود که می خواهند خواص دیگری از packet را تغییر دهند یا اینکه آنها علامت گذاری کنند که توسط برنامه دیگری بعدا استفاده شوند . این table کاربرد کمتری برای تازه کارها و یا کسانی که از سیستم های دیگری وارد این سیستم شده اند دارد ، اما فوق العاده مفهوم زیبا و قشنگی دارد و برای application layer filtering بسیار کاربر دارد .
سعی کردم خیلی ساده و ابتدایی در مورد تئوری و مفهوم netfilter توضیح بدهم و برای همین خیلی مسائل که شاید در ابتدا ضروری نباشد رو توضیح ندادم . اگر علاقمندید می تونید برید و از سایتش HOWTO هاش رو بخونید . منم اگر بیشتر فرصت کردم در مورد syntax دستورات و نحوه استفاده از اونها بعدا می نویسم .