[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$f9QYRQysvFDFYkuhG9QsRMsHhSXXyxGVHanVFK6CSgIc":3},{"data":4,"related":95},{"id":5,"title":6,"slug":7,"excerpt":8,"cover":9,"category":11,"author":14,"track":20,"level":23,"reading_minutes":26,"is_featured":27,"published_at":28,"updated_at":28,"body":29,"toc":30,"tags":66,"faqs":79,"related_services":89,"comments_enabled":93,"meta_title":19,"meta_description":94,"canonical_url":19,"noindex":27,"is_live":93},13,"رفع خطای no SASL authentication mechanisms در Postfix","postfix-dovecot-sasl-auth-socket-chroot","وقتی smtpd پورت ۵۸۷ با خطای «no SASL authentication mechanisms» بالا نمی‌آید، ریشه معمولاً سوکت Dovecot است که داخل chroot پست‌فیکس ساخته نشده. این مقاله علت و راه‌حل کامل را قدم‌به‌قدم بررسی می‌کند.",{"url":10,"alt":6},"https:\u002F\u002Fapi.cloudicap.com\u002Fmedia\u002Fposts\u002Ffb649a07-b046-4b39-a1f9-84734bc4883e.webp",{"name":12,"slug":13},"ابزارهای Self-Hosted","self-hosted",{"name":15,"slug":16,"role":17,"bio":18,"linkedin_url":19,"avatar_url":19},"تحریریه کلودیکپ","cloudicap-editorial","تیم محتوای کلودیکپ","تیم فنی و محتوای کلودیکپ؛ مهندسانی که هر روز با DevOps، Kubernetes و زیرساخت ابری کار می‌کنند و تجربه‌هایشان را اینجا می‌نویسند.",null,{"value":21,"label":22},"engineers","مهندسان",{"value":24,"label":25},"intermediate","متوسط",6,false,"2026-10-15T13:00:17+00:00","\u003Ch2 id=\"شرح-مسئله\">شرح مسئله\u003C\u002Fh2>\n\u003Cp>سرور میل روی Debian\u002FUbuntu بالا می‌آید، پورت ۲۵ کار می‌کند و ایمیل‌های ورودی هم تحویل داده می‌شوند، اما هیچ‌کدام از کاربران نمی‌توانند از Thunderbird یا Outlook ارسال کنند. کلاینت روی پورت ۵۸۷ وصل می‌شود، هندشیک STARTTLS را انجام می‌دهد، ولی یا لیست \u003Ccode>AUTH\u003C\u002Fcode> در پاسخ \u003Ccode>EHLO\u003C\u002Fcode> وجود ندارد، یا بعد از تلاش برای احراز هویت اتصال بی‌دلیل قطع می‌شود.\u003C\u002Fp>\n\u003Cp>در \u003Ccode>\u002Fvar\u002Flog\u002Fmail.log\u003C\u002Fcode> چیزی شبیه این می‌بینید:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">postfix\u002Fsubmission\u002Fsmtpd[24112]: connect from unknown[203.0.113.45]\npostfix\u002Fsubmission\u002Fsmtpd[24112]: Anonymous TLS connection established from unknown[203.0.113.45]: TLSv1.3 with cipher TLS_AES_256_GCM_SHA384\npostfix\u002Fsubmission\u002Fsmtpd[24112]: warning: SASL: Connect to private\u002Fauth failed: No such file or directory\npostfix\u002Fsubmission\u002Fsmtpd[24112]: fatal: no SASL authentication mechanisms\npostfix\u002Fmaster[2310]: warning: process \u002Fusr\u002Flib\u002Fpostfix\u002Fsbin\u002Fsmtpd pid 24112 exit status 1\npostfix\u002Fmaster[2310]: warning: \u002Fusr\u002Flib\u002Fpostfix\u002Fsbin\u002Fsmtpd: bad command startup -- throttling\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>سه نشانه کلیدی اینجاست: نبود مسیر \u003Ccode>private\u002Fauth\u003C\u002Fcode>، خطای \u003Ccode>fatal: no SASL authentication mechanisms\u003C\u002Fcode> و در نهایت \u003Ccode>throttling\u003C\u002Fcode> که باعث می‌شود master پست‌فیکس سرویس را حدود یک دقیقه خفه کند و کلاینت‌ها فقط تایم‌اوت ببینند. چون این خطا در سطح پروسه \u003Ccode>smtpd\u003C\u002Fcode> رخ می‌دهد، حتی ارسال داخلی از وب‌اپلیکیشن‌ها روی پورت ۲۵ هم اگر \u003Ccode>smtpd_sasl_auth_enable\u003C\u002Fcode> روشن باشد متأثر می‌شود.\u003C\u002Fp>\n\n\u003Ch2 id=\"علت-ریشه‌ای\">علت ریشه‌ای\u003C\u002Fh2>\n\u003Cp>پست‌فیکس روی توزیع‌های خانواده Debian به‌صورت پیش‌فرض سرویس \u003Ccode>smtpd\u003C\u002Fcode> را در حالت \u003Cstrong>chroot\u003C\u002Fstrong> اجرا می‌کند؛ یعنی ریشه فایل‌سیستم این پروسه \u003Ccode>\u002Fvar\u002Fspool\u002Fpostfix\u003C\u002Fcode> است، نه \u003Ccode>\u002F\u003C\u002Fcode>. بنابراین هر مسیری که در پست‌فیکس می‌نویسید نسبت به همان دایرکتوری تفسیر می‌شود.\u003C\u002Fp>\n\u003Cp>از طرف دیگر Dovecot سوکت احراز هویت خودش را در مسیر پیش‌فرض \u003Ccode>\u002Frun\u002Fdovecot\u002Fauth-client\u003C\u002Fcode> می‌سازد. نتیجه این است که وقتی پست‌فیکس می‌خواهد به \u003Ccode>private\u002Fauth\u003C\u002Fcode> وصل شود، به‌دنبال \u003Ccode>\u002Fvar\u002Fspool\u002Fpostfix\u002Fprivate\u002Fauth\u003C\u002Fcode> می‌گردد و چیزی پیدا نمی‌کند.\u003C\u002Fp>\n\u003Cp>سه خطای رایج در همین سناریو وجود دارد و هرکدام ریشه متفاوتی دارد:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>No such file or directory\u003C\u002Fcode>: سوکت اصلاً داخل chroot ساخته نشده است.\u003C\u002Fli>\n\u003Cli>\u003Ccode>Permission denied\u003C\u002Fcode>: سوکت ساخته شده، ولی مالک یا مجوز آن طوری نیست که کاربر \u003Ccode>postfix\u003C\u002Fcode> بتواند بنویسد.\u003C\u002Fli>\n\u003Cli>\u003Ccode>no SASL authentication mechanisms\u003C\u002Fcode>: پست‌فیکس پشتیبانی SASL را کامپایل\u002Fنصب ندارد یا \u003Ccode>smtpd_sasl_type\u003C\u002Fcode> اشتباه تنظیم شده است.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>یک نکته ظریف هم این است که این خطا در زمان \u003Cstrong>راه‌اندازی پروسه smtpd\u003C\u002Fstrong> رخ می‌دهد، نه در زمان ریستارت Dovecot. پس اگر بعد از رفع مشکل، master همچنان در حالت throttling باشد، ممکن است چند ده ثانیه طول بکشد تا سرویس دوباره سالم شود.\u003C\u002Fp>\n\n\u003Ch2 id=\"راه‌حل-گام‌به‌گام\">راه‌حل گام‌به‌گام\u003C\u002Fh2>\n\u003Ch3 id=\"گام-۱-تشخیص-وضعیت-فعلی\">گام ۱: تشخیص وضعیت فعلی\u003C\u002Fh3>\n\u003Cp>اول ببینید پست‌فیکس چه چیزی پشتیبانی می‌کند و مسیر فعلی چیست:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">postconf -a\npostconf smtpd_sasl_type smtpd_sasl_path smtpd_sasl_auth_enable\npostconf -M submission\u002Finet\nls -l \u002Fvar\u002Fspool\u002Fpostfix\u002Fprivate\u002F\ndoveconf -n | grep -A8 'service auth'\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>خروجی \u003Ccode>postconf -a\u003C\u002Fcode> باید شامل \u003Ccode>dovecot\u003C\u002Fcode> باشد. اگر خالی بود، یعنی ماژول SASL نصب نیست و باید بسته \u003Ccode>postfix\u003C\u002Fcode> با پشتیبانی SASL نصب شود.\u003C\u002Fp>\n\n\u003Ch3 id=\"گام-۲-ساخت-سوکت-داخل-chroot\">گام ۲: ساخت سوکت داخل chroot\u003C\u002Fh3>\n\u003Cp>در فایل \u003Ccode>\u002Fetc\u002Fdovecot\u002Fconf.d\u002F10-master.conf\u003C\u002Fcode> بلوک \u003Ccode>service auth\u003C\u002Fcode> را به این شکل تغییر دهید تا Dovecot سوکت را مستقیماً داخل مسیر chroot پست‌فیکس بسازد:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-ini\">service auth {\n  unix_listener \u002Fvar\u002Fspool\u002Fpostfix\u002Fprivate\u002Fauth {\n    mode = 0660\n    user = postfix\n    group = postfix\n  }\n\n  unix_listener auth-userdb {\n    mode = 0600\n    user = dovecot\n  }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>دقت کنید که \u003Ccode>mode = 0660\u003C\u002Fcode> و مالک \u003Ccode>postfix:postfix\u003C\u002Fcode> باشد؛ در غیر این صورت دوباره به \u003Ccode>Permission denied\u003C\u002Fcode> می‌خورید. همچنین در \u003Ccode>\u002Fetc\u002Fdovecot\u002Fconf.d\u002F10-auth.conf\u003C\u002Fcode> مطمئن شوید مکانیزم‌های لازم فعال‌اند:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-ini\">auth_mechanisms = plain login\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>اگر \u003Ccode>disable_plaintext_auth = yes\u003C\u002Fcode> باشد (که پیش‌فرض درست و امنی است)، احراز هویت فقط روی اتصال TLS انجام می‌شود؛ پس حتماً سرویس submission را با \u003Ccode>smtpd_tls_security_level=encrypt\u003C\u002Fcode> تنظیم کنید.\u003C\u002Fp>\n\n\u003Ch3 id=\"گام-۳-تنظیم-main-cf\">گام ۳: تنظیم main.cf\u003C\u002Fh3>\n\u003Cpre>\u003Ccode class=\"language-ini\">smtpd_sasl_type = dovecot\nsmtpd_sasl_path = private\u002Fauth\nsmtpd_sasl_auth_enable = no\nsmtpd_sasl_security_options = noanonymous\nsmtpd_sasl_tls_security_options = noanonymous\nsmtpd_sasl_local_domain = $myhostname\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cblockquote>مقدار \u003Ccode>smtpd_sasl_auth_enable\u003C\u002Fcode> را در \u003Ccode>main.cf\u003C\u002Fcode> روی \u003Ccode>no\u003C\u002Fcode> بگذارید و فقط در سرویس submission آن را روشن کنید. این کار جلوی افشای AUTH روی پورت ۲۵ در بستر بدون رمزنگاری را می‌گیرد.\u003C\u002Fblockquote>\n\n\u003Ch3 id=\"گام-۴-پیکربندی-سرویس-submission-در-master-cf\">گام ۴: پیکربندی سرویس submission در master.cf\u003C\u002Fh3>\n\u003Cp>بلوک \u003Ccode>submission\u003C\u002Fcode> را در \u003Ccode>\u002Fetc\u002Fpostfix\u002Fmaster.cf\u003C\u002Fcode> به این شکل کامل کنید (ستون chroot همان \u003Ccode>y\u003C\u002Fcode> است و مشکلی ندارد، چون سوکت داخل chroot ساخته شده):\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-ini\">submission inet n       -       y       -       -       smtpd\n  -o syslog_name=postfix\u002Fsubmission\n  -o smtpd_tls_security_level=encrypt\n  -o smtpd_tls_auth_only=yes\n  -o smtpd_sasl_auth_enable=yes\n  -o smtpd_sasl_path=private\u002Fauth\n  -o smtpd_reject_unlisted_recipient=no\n  -o smtpd_client_restrictions=$mua_client_restrictions\n  -o smtpd_helo_restrictions=$mua_helo_restrictions\n  -o smtpd_sender_restrictions=$mua_sender_restrictions\n  -o smtpd_relay_restrictions=permit_sasl_authenticated,reject\n  -o milter_macro_daemon_name=ORIGINATING\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>استفاده از متغیرهای \u003Ccode>$mua_*_restrictions\u003C\u002Fcode> باعث می‌شود قوانین پیش‌فرض کانال MUA حفظ شوند و لازم نباشد برای هر سرویس، لیست قوانین را دستی تکرار کنید.\u003C\u002Fp>\n\n\u003Ch3 id=\"گام-۵-اعمال-تغییرات-و-بررسی-سوکت\">گام ۵: اعمال تغییرات و بررسی سوکت\u003C\u002Fh3>\n\u003Cpre>\u003Ccode class=\"language-bash\">systemctl restart dovecot\nsystemctl restart postfix\nls -l \u002Fvar\u002Fspool\u002Fpostfix\u002Fprivate\u002Fauth\npostfix check\npostfix status\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>خروجی \u003Ccode>ls\u003C\u002Fcode> باید چیزی شبیه این باشد:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">srw-rw---- 1 postfix postfix 0 Aug 12 09:14 \u002Fvar\u002Fspool\u002Fpostfix\u002Fprivate\u002Fauth\n\u003C\u002Fcode>\u003C\u002Fpre>\n\n\u003Ch3 id=\"گام-۶-تست-دستی-احراز-هویت\">گام ۶: تست دستی احراز هویت\u003C\u002Fh3>\n\u003Cp>ابتدا فقط چک کنید مکانیزم‌ها در پاسخ \u003Ccode>EHLO\u003C\u002Fcode> ظاهر می‌شوند:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">openssl s_client -starttls smtp -crlf -connect 127.0.0.1:587\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>بعد از اتصال، دستور \u003Ccode>EHLO test.local\u003C\u002Fcode> را تایپ کنید. باید خط \u003Ccode>250-AUTH PLAIN LOGIN\u003C\u002Fcode> را ببینید. سپس واقعاً یک \u003Ca href=\"\u002Fservices\u002Fmail-server-self-hosted\">ایمیل\u003C\u002Fa> تستی بفرستید:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">swaks --to me@example.org --from user@example.com \\\n  --server 127.0.0.1:587 --tls --auth PLAIN \\\n  --auth-user user@example.com --auth-password 'secret'\n\u003C\u002Fcode>\u003C\u002Fpre>\n\n\u003Ch2 id=\"روش-بررسی-اینکه-مشکل-واقعا-حل-شده-است\">روش بررسی اینکه مشکل واقعاً حل شده است\u003C\u002Fh2>\n\u003Cp>سه سطح تأیید را با هم چک کنید، نه فقط یکی:\u003C\u002Fp>\n\u003Col>\n\u003Cli>\u003Cstrong>لاگ:\u003C\u002Fstrong> در \u003Ccode>\u002Fvar\u002Flog\u002Fmail.log\u003C\u002Fcode> دیگر نباید \u003Ccode>no SASL authentication mechanisms\u003C\u002Fcode> یا \u003Ccode>bad command startup\u003C\u002Fcode> ببینید. در عوض باید خطوطی مثل \u003Ccode>sasl_method=PLAIN, sasl_username=user@example.com\u003C\u002Fcode> و \u003Ccode>SASL PLAIN authentication successful\u003C\u002Fcode> ثبت شود.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>پروسه‌ها:\u003C\u002Fstrong> خروجی \u003Ccode>systemctl status postfix\u003C\u002Fcode> باید active باشد و \u003Ccode>postfix status\u003C\u002Fcode> هم بدون خطا برگردد. اگر master همچنان در حالت throttling بود، بعد از حدود ۶۰ ثانیه خودش رفع می‌شود؛ در غیر این صورت \u003Ccode>postfix reload\u003C\u002Fcode> بزنید.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>مسیر واقعی کاربر:\u003C\u002Fstrong> یک ایمیل از کلاینت واقعی (Thunderbird در ویندوز و یک موبایل) به یک دامنه بیرونی مثل Gmail بفرستید و در هدر پیام بررسی کنید که \u003Ccode>Received\u003C\u002Fcode> از \u003Ccode>postfix\u002Fsubmission\u003C\u002Fcode> عبور کرده باشد.\u003C\u002Fli>\n\u003C\u002Fol>\n\n\u003Ch2 id=\"پیشگیری-و-بهترین-روش‌ها\">پیشگیری و بهترین روش‌ها\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>\u003Cstrong>فایل‌های پیکربندی را در IaC نگه دارید.\u003C\u002Fstrong> بلوک سوکت Dovecot و بلوک submission در master.cf باید از یک مخزن نسخه‌بندی‌شده بیایند؛ چون هر آپدیت بسته ممکن است master.cf را بازنویسی کند.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>\u003Ca href=\"\u002Fservices\u002Fmonitoring\">مانیتورینگ\u003C\u002Fa> سینتتیک بگذارید.\u003C\u002Fstrong> یک چک دوره‌ای با \u003Ccode>swaks\u003C\u002Fcode> روی پورت ۵۸۷ که احراز هویت را واقعاً تست کند، این خطا را قبل از کاربران می‌گیرد. برای لاگ‌ها هم روی الگوی \u003Ccode>no SASL authentication mechanisms\u003C\u002Fcode> هشدار بگذارید.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>وابستگی سرویس را صریح کنید.\u003C\u002Fstrong> با \u003Ccode>systemctl edit postfix\u003C\u002Fcode> می‌توانید \u003Ccode>After=dovecot.service\u003C\u002Fcode> اضافه کنید تا ترتیب بوت قابل پیش‌بینی‌تر شود.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>روی RHEL و مشتقاتش SELinux را چک کنید.\u003C\u002Fstrong> اگر بعد از ساخت سوکت همچنان \u003Ccode>Permission denied\u003C\u002Fcode> می‌گیرید، با \u003Ccode>ausearch -m avc -ts recent\u003C\u002Fcode> دنبال denial بگردید و context دایرکتوری \u003Ccode>private\u003C\u002Fcode> را با \u003Ccode>restorecon -Rv \u002Fvar\u002Fspool\u002Fpostfix\u002Fprivate\u003C\u002Fcode> اصلاح کنید.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>پورت‌ها را تفکیک کنید.\u003C\u002Fstrong> احراز هویت را فقط روی submission (۵۸۷) و در صورت نیاز smtps (۴۶۵) فعال کنید؛ پورت ۲۵ باید بدون AUTH و فقط برای تبادل سرور‌به‌سرور بماند.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>بعد از هر تغییر، \u003Ccode>postfix check\u003C\u002Fcode> را فراموش نکنید.\u003C\u002Fstrong> این دستور خطاهای نگارشی پیکربندی را قبل از ریستارت نشان می‌دهد و از downtime جلوگیری می‌کند.\u003C\u002Fli>\n\u003C\u002Ful>",[31,35,38,41,45,48,51,54,57,60,63],{"id":32,"text":33,"level":34},"شرح-مسئله","شرح مسئله",2,{"id":36,"text":37,"level":34},"علت-ریشه‌ای","علت ریشه‌ای",{"id":39,"text":40,"level":34},"راه‌حل-گام‌به‌گام","راه‌حل گام‌به‌گام",{"id":42,"text":43,"level":44},"گام-۱-تشخیص-وضعیت-فعلی","گام ۱: تشخیص وضعیت فعلی",3,{"id":46,"text":47,"level":44},"گام-۲-ساخت-سوکت-داخل-chroot","گام ۲: ساخت سوکت داخل chroot",{"id":49,"text":50,"level":44},"گام-۳-تنظیم-main-cf","گام ۳: تنظیم main.cf",{"id":52,"text":53,"level":44},"گام-۴-پیکربندی-سرویس-submission-در-master-cf","گام ۴: پیکربندی سرویس submission در master.cf",{"id":55,"text":56,"level":44},"گام-۵-اعمال-تغییرات-و-بررسی-سوکت","گام ۵: اعمال تغییرات و بررسی سوکت",{"id":58,"text":59,"level":44},"گام-۶-تست-دستی-احراز-هویت","گام ۶: تست دستی احراز هویت",{"id":61,"text":62,"level":34},"روش-بررسی-اینکه-مشکل-واقعا-حل-شده-است","روش بررسی اینکه مشکل واقعاً حل شده است",{"id":64,"text":65,"level":34},"پیشگیری-و-بهترین-روش‌ها","پیشگیری و بهترین روش‌ها",[67,70,72,74,77],{"name":68,"slug":69},"Postfix","postfix",{"name":71,"slug":71},"dovecot",{"name":73,"slug":73},"sasl",{"name":75,"slug":76},"mail-server","mail-server-2",{"name":78,"slug":78},"smtp-auth",[80,83,86],{"question":81,"answer":82},"چرا با وجود روشن بودن smtpd_sasl_auth_enable، پست‌فیکس می‌گوید no SASL authentication mechanisms؟","این پیام یعنی پست‌فیکس نتوانسته هیچ مکانیزم SASL را بارگذاری کند. دو علت اصلی دارد: یا ماژول SASL (خروجی postconf -a) خالی است، یا مسیر smtpd_sasl_path مانند private\u002Fauth پیدا نمی‌شود. در حالت دوم بعد از ساخت سوکت داخل chroot و ریستارت سرویس، مشکل رفع می‌شود.",{"question":84,"answer":85},"آیا می‌توانم به‌جای انتقال سوکت، chroot را برای smtpd غیرفعال کنم؟","بله. اگر ستون chroot را در master.cf برای سرویس‌های smtpd و submission روی n بگذارید، پست‌فیکس می‌تواند به مسیرهای عادی مثل \u002Frun\u002Fdovecot\u002Fauth-client دسترسی داشته باشد. اما این کار سطح امنیت را پایین می‌آورد؛ روش توصیه‌شده همان ساخت سوکت داخل \u002Fvar\u002Fspool\u002Fpostfix\u002Fprivate\u002Fauth است.",{"question":87,"answer":88},"تفاوت saslauthd و Dovecot SASL چیست و کدام بهتر است؟","saslauthd بخشی از بسته Cyrus SASL است و برای احراز هویت باید با سوکت یا PAM جداگانه کار کند. Dovecot SASL سوکت خودش را در اختیار Postfix می‌گذارد و چون Dovecot از قبل در حال اجراست، سرویس اضافه‌ای لازم نیست. در اکثر نصب‌های مدرن Postfix + Dovecot، گزینه دوم ساده‌تر و کم‌دردسرتر است.",[90,91,92],"devsecops","linux-administration","mail-server-self-hosted",true,"رفع خطای no SASL authentication mechanisms در Postfix با انتقال سوکت Dovecot به chroot و پیکربندی درست submission و SASL.",[96,108,123],{"id":97,"title":98,"slug":99,"excerpt":100,"cover":101,"category":103,"author":104,"track":105,"level":106,"reading_minutes":26,"is_featured":27,"published_at":107,"updated_at":107},8,"رفع dkim=none در Postfix با راه‌اندازی OpenDKIM","postfix-opendkim-dkim-signing-fix","اگر ایمیل‌های سرور Postfix شما در Gmail به اسپم می‌روند و هدر پیام dkim=none نشان می‌دهد، یعنی هیچ امضای DKIM روی پیام‌ها درج نمی‌شود. در این مقاله OpenDKIM را نصب، پیکربندی و به Postfix وصل می‌کنیم و رکورد DNS را منتشر می‌کنیم.",{"url":102,"alt":98},"https:\u002F\u002Fapi.cloudicap.com\u002Fmedia\u002Fposts\u002F1b1288db-c0ed-41f3-8ee5-01f7b997c11d.webp",{"name":12,"slug":13},{"name":15,"slug":16,"role":17,"avatar_url":19},{"value":21,"label":22},{"value":24,"label":25},"2026-10-09T13:30:31+00:00",{"id":109,"title":110,"slug":111,"excerpt":112,"cover":113,"category":115,"author":118,"track":119,"level":120,"reading_minutes":121,"is_featured":27,"published_at":122,"updated_at":122},12,"خطای fsnotify watcher در Kubernetes؛ سقف inotify نود","kubernetes-fsnotify-watcher-inotify-limit","اگر پادهای Grafana، Prometheus یا هر اپلیکیشنی که از inotify استفاده می‌کند با خطای «failed to create fsnotify watcher: too many open files» کرش می‌کنند، مقصر سقف پیش‌فرض هسته لینوکس روی نود است.",{"url":114,"alt":110},"https:\u002F\u002Fapi.cloudicap.com\u002Fmedia\u002Fposts\u002F4781a89b-ab2c-4250-9677-521b30f6f643.webp",{"name":116,"slug":117},"Kubernetes و کانتینر","kubernetes",{"name":15,"slug":16,"role":17,"avatar_url":19},{"value":21,"label":22},{"value":24,"label":25},7,"2026-10-13T09:37:29+00:00",{"id":124,"title":125,"slug":126,"excerpt":127,"cover":128,"category":130,"author":131,"track":132,"level":133,"reading_minutes":121,"is_featured":27,"published_at":134,"updated_at":134},11,"تأخیر ۵ ثانیه‌ای DNS در Kubernetes؛ پای ndots:5 در میان است","kubernetes-dns-ndots5-latency","هرچند وقت یک‌بار یک درخواست خروجی دقیقاً ۵ ثانیه طول می‌کشد و بعد موفق می‌شود؟ ریشه معمولاً گزینه ndots:5 در resolv.conf پادها و لیست search است. این مقاله علت، تشخیص و راه‌حل کامل را بررسی می‌کند.",{"url":129,"alt":125},"https:\u002F\u002Fapi.cloudicap.com\u002Fmedia\u002Fposts\u002F79a6c679-300c-4c45-b692-9edb968f1d49.webp",{"name":116,"slug":117},{"name":15,"slug":16,"role":17,"avatar_url":19},{"value":21,"label":22},{"value":24,"label":25},"2026-10-12T09:53:03+00:00"]