swaks، چاقوی ارتش سوئیس برای تست smtp سرور

برای ارسال ایمیل به افراد دیگر، بایستی یک SMTP سرور راه‌اندازی کرد. بعد باید مطمئن شد امکان ارسال ایمیل از طریق سرور، جز با یوزر و پسورد تعریف شده وجود ندارد و بعد از احراز هویت نیز فقط با نام کاربری خود، قادر به ارسال ایمیل است و نباید با ایمیل دیگر افراد عضو در سیستم بتواند اقدام به ارسال ایمیل کند.
همینطور باید مطمئن بود که ایمیل‌های ارسالی از سروری غیر از آنها که در لیست سفید مشخص شده‌اند به دست کاربر نهایی نرسد.

در حالت عادی می‌توان هر ایمیلی را با هر فرستنده‌ای که دوست داشته باشید
به هر فردی ارسال کنید. اما mail server که درست تنظیم شده باشد همچون gmail و یاهو ip ایمیل دریافتی را با رکورد spf که صاحب دامین آن را تعریف کرده، تطبیق می‌دهند و در صورت ناهمخوانی ایمیل مستقیم به بخش اسپم می‌رود و غیر از آن یک نوشته را به کاربر نمایش می‌دهند که احتمال فیشینگ ایمیل وجود دارد.

 

برای تست همه این موارد نیاز به یک SMTP سرور (برای مثال smtp.novid.ir:587) و تعریف چند کاربر ([email protected] و [email protected]) و همینطور ایجاد پسورد برای آنها داریم. ایمیل‌های تست به آدرس [email protected]  ارسال می‌شود. برای تست حالت‌های مختلف از ابزار قدرتمند SWAKS استفاده خواهیم کرد.

 

ارسال ایمیل بدون احراز هویت

اگر SMTP سرور به درستی کانفیگ نشود، هر فردی بدون احراز هویت قادر به ارسال ایمیل از طریق آن خواهد بود. به اینگونه سرورها در اصطلاح open mail relay گفته می‌شود.

با استفاده از ابزار SWAKS و بدون وارد کردن یوزر و پسورد سعی در اسال ایمیل می‌کنیم.
در صورت موفقیت در ارسال ایمیل، انتظار این رو داشته باشید که سرور به زودی در لیست سیاه قرار خواهد گرفت و تا مدت‌ها دیگر نخواهید توانست میل بفرستید.

 

  • آپشن t یا همان to ایمیل فرد دریافت کننده است.
  • s یا همان server، آی‌پی یا آدرس smtp سرور مد نظر است که در اینجا از طریق پورت ۵۸۷ قصد وصل شدن به آن را داریم.
    پورت ۲۵ رو بسیاری از دیتاسنترها بسته‌اند و به دلیل امن نبودن، استفاده از آن توصیه نمی‌شود.
  • با استفاده از آپشن tls، کانکشن به smtp سرور به شکل STARTTLS برقرار می‌شود.
  • با آپشن from ایمیل فرستنده را مشخص می‌کنیم.

معمولا خط بالای QUIT مشکل اصلی در عدم ارسال ایمیل را می‌گوید.

<~* 530 5.7.1 Authentication required

تست باز یا بسته بودن پورت ۲۵ SMTP سرور

برای تست پورت ۲۵، کامند زیر را اجرا می‌کنیم.
به شکل پیشفرض swaks از پروتکل امن esmtp جهت اتصال به سرور استفاده می‌کند.

که نشان می‌دهد دسترسی به پورت ۲۵ عملا امکانپذیر نیست.

ارسال ایمیل با احراز هویت

برای ارسال ایمیل با یوزر و پسورد کافیست که آپشن a یا همون auth رو به کامند اضافه کنیم.
بعد از زدن اینتر،  یوزر و پسورد به شکل جداگانه پرسیده می‌شود.

 

ارسال ایمیل بدون فعال‌سازی tls

تست رو مجدد بدون tls انجام می‌دیم تا مطمئن شویم تنها راه اتصال به سرور از طریق امن امکان پذیر است.

 

ارسال ایمیل با پسورد اشتباه

کامند را با پسورد اشتباه اجرا و انتظار داریم که ایمیل ارسال نشود.

ارسال ایمیل با هویت یک فرد دیگر عضو سیستم

تست رو تغییر داده با یوزر و پسورد صحیح کاربر admin ایمیلی از طرف  info بفرستیم.
کافیست که from رو به info تغییر داده و یوزر و پسورد admin رو وارد به ترتیب صحبح وارد نماییم.

 

ارسال ایمیل با هویت فردی که عضو سیستم نیست

در آخر از طرف فردی که در سیستم وجود ندارد سعی در ارسال ایمیل می‌نماییم.

 

پی‌نوشت: خروجی swaks در این مثال‌ها بخاطر حفظ IP اصلی سرور دستکاری شده است.

استفاده از DNS بر بستر TLS با pfSense

دی‌ان‌اس‌های جدید کلودفلیر به مشخصات ۱٫۱٫۱٫۱ و ۱٫۰٫۰٫۱ به تازگی معرفی شدند. ویژگی خوب کلودفلیر غیر از سرعت بالای اون قابلیت پشتیبانی از TLS هست و به همین دلیل درخواست کلاینت به سرور رمزنگاری شده و دیگر امکان تغییر پاسخ در بین راه وجود نخواهد داشت.

از اونطرف در صورت استفاده از روتر pfSense این قابلیت خوب رو خواهید داشت که بدون نصب هیچ کلاینت و برنامه‌ی جانبی از این موهبت برخوردار شوید. برای اینکار باید مراحل زیر را در pfSense دنبال نمایید.

ابتدا مطمئن شوید که به شکل عادی pfSense از دی‌ان‌اس‌های کلودفلیر استفاده می‌کند.

برای اینکار در بخش System > General Settings و در بخش DNS Servers آدرس‌های کلودفلیر را وارد می‌کنیم.

 

برای اینکه به pfSense بگیم که از قابلیت TLS استفاده کند به بخش  Services > DNS Resolver رفته در بخش Display Custom Options متن زیر رو بگذارید.

 

در صورتیکه بخواهید از Quad9 DNS servers که متعلق به IBM استفاده نمایید یا اونها رو در کنار کلودفلیر داشته باشید کافیه این دو خط رو جایگزین خطوط بالا کنید یا زیر اون اضافه نمایید.

منبع

تغییر محتوای یک سایت از طریق nginx

تصور کنید یک وب‌سایت دارید که با php کار می‌کند و با استفاده از nginx سرو می‌شود. برای وب‌سایت سرتیفیکیت تهیه کردید اما لینک تصاویر و فایل‌های داخل سایت با پروتکل http جای https شروع میشود و در نتیجه هنگام لود سایت، مرورگرهای جدید محتوایی که با http شروع شوند را بلاک می‌کنند.

راه اول تغییر برنامه‌ست و اینکه کاری کنیم که همه‌ی لینک‌ها با https شروع بشود. اما این روش همیشه مقدور نیست و خیلی وقت‌ها تغییر کد مقدور نیست. اینجاست که nginx و ماژول زیبای nginx_substitutions_filter به کار آدم میاد. با استفاده از این ماجول می‌توانیم هر نوشته‌ای رو قبل از نمایش برای کلاینت تغییر بدهیم.

برای اینکار کافیست در بخش server دو خط زیر رو وارد کنیم. در صورت حذف خط دوم،‌ فقط اولین http  به https تبدیل می‌شود.

 

اما همین دو خط زمانیکه nginx پشت یک لودبالانس مانند haproxy باشد کار نخواهد کرد. برای حل این مشکل کافیست خط زیر رو به کانفیگ nginx در بخش location اضافه نمایید.

 

 

اضافه کردن یک نود جدید به glusterfs

وقتی سه سرور داشته باشید که هر کدام از آنها برای مثال سه ترابایت فضای ذخیره داشته باشند و بخواید همه این فضاها رو یکی کنید و به یک استوریج نه ترابایتی برسید یکی از گزینه‌های خوب  گلاستراف‌اس است. در سنت‌اواس به راحتی میشه ورژن‌های مختلف این برنامه رو نصب کرد. حالا فرض رو بگذارید که زمان گذشته و قصد کردیم سرور چهارم (s4) رو به کلاستر (s1,s2,s3) اضافه کنیم. برای اینکار باید در یکی از سرورهایی که از قبل عضو کلاستر بودند، کامند زیر رو اجرا کنید.

اما اگر مثل من بدشانس باشید همین دستور خیلی ساده مشکل ساز میشه و عضو جدید به درستی کار نخواهد کرد.

وقتی لاگ مربوط به گلاستر در سرور s4 رو ببینید همچین پیغامی خواهید دید.

که با زبون سربسته داره میگه نود جدید که قصد اضافه کردن اون رو به کلاستر داشتیم نتونسته اطلاعات لازم رو از نود s2 بگیرد! نود s2 همون نودی بوده که از قبل عضو کلاستر بوده و از داخل اون قصد داشتیم نود جدید رو عضو کلاستر کنیم.

دلیل این اتفاق این بود  که همه نودهای کلاستر ورژن ۳٫۱۲٫۵ بودند اما در زمانیکه قصد اضافه کردن عضو جدید به کلاستر رو داشتم، گلاستر centos به نسخه ۳٫۱۲٫۶ آپگرید شده و دقیقا همین موضوع باعث مشکل میشه. برای اضافه کردن نود جدید به کلاستر باید دقت کنید که ورژن گلاستر سرور جدید و قدیم دقیقا یکی باشد.

پروسه‌ی دانگرید در centos برخلاف اوبونتو می‌تونه آدمیزاد رو زخم کنه و اساسا بخاطر همین موضوع شروع به نوشتن این راهنما کردم.

کاری که  برای حل این مشکل انجام دادم این بود که پکیج‌های rpm  گلاستر رو از مسیر یکی از نودهایی که عضو کلاستر بود (s2) رو به سرور جدید انتقال دادم.

بعد در سرور جدید (s4) به شکل زیر یک مخزن لوکال ساختم.

و بعد مخزن رو باید به سنت‌او‌اس به شکل زیر معرفی کنیم.

قبل از نصب گلاستر ورژن قدیمی، بایستی اول اون رو از کلاستر حذف کنیم
برای اینکار کافیه از یکی از سرورها که عضو کلاستر هستند (s2) کامند زیر رو بزنید.

بعد در سرور s4 که قراره ورژن اون رو دانگرید کنیم بعد از استاپ سرویس گلاستر در مسیر زیر هر چی فایل هست رو پاک کنیم.

 

گلاستر برای نصب نیاز به یک پکیج به اسم userspace-rcu داره که ورژن اون  باید ۰٫۱۰ به بالا باشد. برای نصب این پکیج بهتره از همونی که داخل مخزن گلاستر ۳٫۱۲٫۶ موجوده بهره ببریم.

وقتی که میخوایم پکیج های گلاستر ۳٫۱۲٫۶ رو پاک کنیم یادمون نمیره که userspace-rcu رو نگه داریم وگرنه به مشکل خواهیم خورد.

حالا نوبت به نصب دوباره گلاستر می‌رسد. چون یک مخزن اضافه کردیم که  پکیج‌های گلاستر ۳٫۱۲٫۵ داخلش موجوده اینبار ورژن قدیمی نصب خواهد شد.

و دوباره نود رو به کلاستر جوین میکنیم.

و در آخر مطمئن میشیم که همه چیز خوب پیش رفته باشد.

 

 

 

فیلم سون seven

سلام

خیلی یکهوویی تصمیم گرفتم فیلم‌های خوبی رو که اکثرا در سینما پردیس قلهک باهاشون آشنا شدم و می‌شم و با اونها خیلی حال کردم رو با شما نیز به اشتراک بگذارم. نکته مهم اینه که اینها صرفا  نظر شخصی و منتقد فیلم نیستم و اصولا هم تخصصی در این زمینه ندارم :))‌ صرفا یک پیشنهاد برای اینکه شما هم اون رو ببینید، شاید مثل من از دیدنش لذت بردید.

برای شروع  هفت که ترجمه seven بهتون پیشنهاد میکنم حتما ببینید. این فیلم در لیستی هزارتایی قرار میگیره و اینطوری که میشه هزاربار این فیلم رو دید و هزاربار ناراحت شد و خسته هم نشد.

این فیلم در سال ۱۹۹۵ به کارگردانی دیوید فینچر با بازی بردپیت و مورگان فریمن ساخته شده.  اجازه ندید قدیمی بودن ساخت فیلم مانع از دیدن اون بشه! فیلم روایت فردی قاتل که آدم‌های بد رو به شکل فجیع می‌کشه. به تدریج و از قتل دوم سوم به بعد دو کارگاه اصلی متوجه میشن که قتل‌ها سریالی هستند و انتخاب اونها براساس هفت گناه کبیره‌ست. همین مورد باعث میشه ادم ناخودآگاه موردهای وطنی در ذهنش تداعی بشه. مواردی که قاتل، مجازات مقتول رو وظیفه‌ای الهی میدونه، شخصا تصمیم به مجازات فرد خاطی میگیره. برای  پنج عدد از این گناهان شامل شکم‌پرستی Gluttony، طمع Greed، کاهلی Sloth، شهوت Lust و تکبر Pride، قاتل، آدم‌های مورد دار رو انتخاب میکنه و به سزای عملشون می‌رسونه و همین باعث میشه آدم با قاتل در ابتدا خیلی همزادپنداری کنه.  در میانه قتل‌ها،‌ دو کارگاه اصلی تا دو قدمی قاتل نیز می‌رسن که همین نحوه رسیدنش هم در نوع خودش خیلی جالبه! اونها اول حدس میزنن که قاتل چه کتابی رو داخل کتابخونه میره میخونه و بعد با استفاده از اطلاعاتی که FBI به شکل غیرقانونی از کتابخونه ها جمع‌آوری میکنه، به موقعیت قاتل پی می‌برند! کتابخونه جایی که اطلاعات شخصی مثل تلفن و ادرس محل خونه رو مجبورید برای عضو شدن و گرفتن کتاب تحویل بدید اینطوری میشه از رو سلیقه فرد کتابخوان به فردی مظنون شد!

فیلم هفت
هفت

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

یکی از بهترین دیالوگ‌های فیلم جایی که کارگاه میلز به قاتل میگه تو مسیح نیستی، در بهترین حالت فیلم برتر هفته یا یک تی‌شرت هستی که یکی دو روز تن ملت می‌شی و بعدش تمام!

You’re no messiah. You’re a movie of the week. You’re a fucking t-shirt, at best.

 

کشتن همه‌ی پروسس های دیتابیس mysql

سلام

گاهی به دلیل یک اشتباه در برنامه و اجرای یک کوئری ناصحیح حجم انبوهی از کوئری‌ها که پاسخشون خیلی زمانبر به سمت دیتابیس سرازیر میشه. در این مواقع بهتر جای اینکه کل دیتابیس رو استاپ کنید، پروسس‌های داخلی اون رو فقط kill کنید. دلیل اینکار اینه که استاپ یک دیتابیس سنگین کار بسیار هزینه‌بری است.

اگر همچین دستوری رو روی یک دیتابیس slave بزنید، یادتون نره که باید مجدد وارد دیتابیس بشید و کاری کنید که کارش رو ادامه بده (START SLAVE) در غیر اینصورت دیتابیس از سینک خارج خواهد شد.

haproxy و ردیس کلاستر

ردیس یک محدودیت خیلی مهمی داره و اون اینکه single thread  و برای همین نمی‌تونه  بیشتر از  یک core از پردازشگر رو استفاده کنه. یکی از راه‌حل‌های روتین استفاده از کلاستر ردیس که عملا اطلاعات بین چند node ردیس پخش میشه(sharding)‌. نکته مهم اینه که در این مدل شما چند نود ردیس به شکل master  دارید که هر کدوم از اونها باید دست کم یک slave داشته باشند تا در صورتیکه یک نود به هر دلیل از دسترس خارج شد، نود slave به صورت خودکار وارد بازی بشه.

در این پروسه  هیچ تضمینی برای اینکه اطلاعات از دست نره (در زمان از دست رفتن نود master)‌ وجود نداره! دلیلش اینه که شما اطلاعات رو روی node مستر می‌نویسید، نود مستر به کلاینت میگه اوکی دیتا رو دارم و بعد تازه میره دنبال اینکه دیتا  روی نود slave هم ذخیره بشه. :)‌

این رو هم بگم که برای اینکه دیتا به شکل مساوی بین node های مستر پخش بشه، کلاستر ردیس از چیزی به اسم SLOT استفاده میکنه. در مجموع ۱۶۳۸۴ اسلات ردیس کلاستر داره که بسته به تعداد node هایی که داریم میاییم اسلات ها رو بین نودها تقسیم میکنیم.

کلاینت در صورتی که به یک node (مستر) درخواست بده واطلاعات روی اون  نباشه، بجای اینکه کلید درخواستی رو بده، اطلاعات nodeی رو  که کلید داره رو میده و دوباره کلاینت باید به اون دومی درخواست بده 🙂  و  این میشه همون سربار یا overhead که ردیس کلاستر به ردیس معمولی داره بعلاوه اینکه یک سری محدودیت ها رو هم خواهید داشت مثل اینکه نمیشه از قابلیت Geo location ردیس استفاه کنید .

حالا نکته اینجاس که اگر کلاینت به یک نود مستر وصل شه و اون نود به هر دلیل داون بشه، هر چند slave به شکل خودکار تبدیل به مستر میشه، اما دیگه کلاینت از اون نود اطلاعی نداره!‌ برای حل این مشکل از لودبالانس HAPROXY استفاده میکنیم.

خودم haproxy رو به دلایل خیلی زیادی با داکر همیشه بالا میارم که کار رو خیلی ساده میکنه و برای اینکار هم لازم نیست همه چی رو از اول بسازیم، از یک داکر اماده استفاده میکنیم.

و بعد باید اون رو build کنیم.

قبل از اجرای تنظیمات باید یک کانفیگ haproxy ایجاد کنیم که اون رو به خورد کانتینر بدیم.

بخش frontend باعث میشه haproxy روی پورت  ۶۳۷۹ لیستن کنه و هر ترافیکی هم که به سمتش بیاد رو به  backend پیشفرضی که تعریف کردیم، بفرسته.

در بخش backend که قلب اصلی سیستم، haproxy  به نودهای فقط master ترافیک رو می‌فرسته. نکته قشنگ کار اینه که در اینجا همه نود های redis چه مستر و چه slave رو میدیم و از haproxy میخوایم بره وضعیت نودها رو خوش در بیاره. haproxy هم هر یک ثانیه میره از نودهای ردیس میپرسه که شما مسترسی یا salve  و اونها هم اگر جواب بدند مستر، به رنگ سبز در میان و اگر slave باشند دیگه از دور خارج میشند و عملا ترافیکی به سمت اونها نمیره 🙂

در بخش stats هم که صرفا امار haproxy رو فعال کردیم و کار مهمی انجام نمیده، بخش اول nbproc هم نمایانگر تعداد core های سرور و اینجا با فرض اینکه سرور هفت core پردازشی داره، شش تا از اونها رو بدین شکل به خورد haproxy میدیم 🙂 haproxy هم مشابه nginx میاد به تعداد core هایی که مشخص کردیم child میسازه.

و در نهایت داکر ha رو با کامند زیر اجرا می‌کنیم.

یک قابلیت خوب این کانتینر اینه که میشه کانفیگ haproxy روی سرور اصلی رو ویرایش کرد، کانتینر به شکل خودکار متوجه این امر میشه و در صورتی که مشکلی در سینتکس وجود نداشته باشه، تغییر رو اعمال میکنه. برای اینکه از این قابلیت استفاده کنید باید تغییری در ادیتور vim بدیم.

 

و در نهایت اینکه اگر سرورتون زیر بار خیلی زیادی حتما تنظیمات زیر داخل sysctl فراموش نشه.

 

مقایسه‌ی سه هارد ssd

در این مطلب سه هارد ssd مدل اینتل VK0480GEYJR (تحت برند HPE)  و سامسونگ مدل MZ7KM480 و   SSD 960 PRO 512GB رو مقایسه می‌کنیم.

MZ7KM480

دو مدل اول به ریدکنترلر متصل هستند و برای دیدن نتایج واقعی  cahce ریدکنترلر خاموش است. مدل سوم روی pci express سرور سوار  است و فقط os اون رو می‌بینه.

دو  تست روی هاردهای ssd انجام می‌دیم.در تست اول برای کاری که تخصص دارند و اون نوشتن و خواندن Random هست و دیگری حالت Sequential که برای دیسک‌های معمولی هم کار راحتی و معمولا حیف برای اینجور کارها بخوایم از ssd استفاده کنیم.

هارد ssd اینتل

نکته اول اینکه با fio سعی کردیم حالت واقعی سرور رو شبیه‌سازی کنیم ۷۵ درصد read و ۲۵ درصد write. مهمترین بخش هم iops هست.

iops=48009 برای read و iops=16010 برای رایت.

برای تست دوم از dd استفاده میکنیم. نکته مهم اینه که oflag=dsync   به ازای هر تیکه‌ای که میخواد روی هارد بنویسه (۵۱۲ بار می‌پرسه) تاییدیه از os میگره. اما conv=fdatasync تنها یکبار در انتهای نوشتن و هنگام خروج از dd تاییدیه از os گرفته میشه.

 

هارد ssd سامسونگ مدل MZ7KM480

iops=67811 برای read و iops=22613 برای رایت. که نشون میده در میون هاردهای ssd سرور  سامسونگ از مدل اینتل پیشی گرفته.

در این تست هم سامسونگ برنده شده.

 

و اما مدل دیگه سامسونگ pro 960 که از پیش حدس می‌زنیم سرعت خیلی بالاتری داشته باشه.

سامسونگ pro 960

این هارد خوب iops=176350 برای read و iops=58808 رو برای نوشتن به ما میده که البته فاصله خیلی زیادی با اعدادی داره که سامسونگ ادعا میکنه :)‌

و در کمال تعجب میشه دید که این ssd  در حالت sequential خیلی هم خوب کار نمیکنه 🙂