Action disabled: source

مقدمه

فهرست مندرجات

تصمیم‌گیری دربارهٔ سیستم‌عامل و نسخهٔ زیمبرا

زیمبرا برای سیستم‌عامل‌های Red Hat Enterprise و Ubuntu و CentOS و Oracle Linux و Rocky Linux در نسخه‌های مختلفی Build شده که می‌شود دانلود کرد و نصب کرد. بهتر است نسخهٔ مربوط به سیستم‌عاملی را نصب کنیم که هم شمارهٔ ورژن زیمبرا آخرین نسخهٔ آن باشد و هم آن نسخه برای آخرین ورژن سیستم‌عامل میزبان موجود باشد؛ مثلاً اگر نسخهٔ زیمبرایی که برای اوبونتو موجود است قدیمیست و نسخه‌ای از اوبونتو که روی آن نصب می‌شود هم قدیمی است بهتر است که از نسخهٔ مربوط به اوبونتو را استفاده نکرد. البته می‌شود نسخهٔ موجود برای نسخهٔ قدیمی‌تر یک سیستم‌عامل را روی نسخهٔ جدیدتر آن سیستم‌عامل هم نصب کرد ولی این‌کار را توصیه نمی‌کنم چون موقع نصب فرایند کمی پیچیده‌تر می‌شود. مستند فوق برای نصب آخرین نسخه زیمبرا روی CentOS 8 Minimal و همچنین Ubuntu 20.04 کامل تست شده‌است. البته CentOS از نسخهٔ ۸ به بعد با نام Stream منتشر می‌شود به این معنی که بر اساس نسخهٔ جدیدتر ولی ناپایدارتر ردهت منتشر می‌شود و برای همین خیلی‌ها دیگر از آن استفاده نمی‌کنند. Rocky Linux توسط کامیونیتی توسعه یافته و چون توزیع جوان‌تری است زیر توسعهٔ سنگین از طرف کامیونیتی است. برای همین احتمالاً یکی از بهترین گزینه‌های در حال حاضر همان اوبونتو است.

زیمبرا دو نسخهٔ پولی و community edition دارد. یکی از تفاوت‌های نسخهٔ community edition با پولی آن در این است که در نسخهٔ پولی به شما این اجازه را می‌دهد که لوگوی zimbra را با لوگوی خودتان عوض کنید. البته در نسخهٔ رایگان هم این کار امکان‌پذیر است ولی هم پیدا کردن محل قرارگیری لوگو و لینک‌های zimbra قدری دردسر دارد هم شرکت سازنده درخواست کرده که اینکار را نکنید. بسیاری از دستوراتی که در فروم‌ها، وبلاگ‌ها، ویکی‌ها و … در اینترنت ممکن است پیدا کنید برای نسخه‌های قدیمی‌تر زیمبرا یا پستفیکس نوشته شده. در نسخه‌های جدیدتر تغییرات بسیاری صورت گرفته و در مواردی حتی متغیرهای جدیدی به فایل‌های کانفیگ اضافه شده. همچنین برخی دستورات و تنظیمات برای نسخهٔ رایگان و پولی با هم فرق دارند. برای همین موقع مطالعه مستندات همیشه به ورژن پستفیکس یا زیمبرایی که آن مستند برایش نوشته شده دقت کنید. اگر می‌خواهید لینک دانلود نسخهٔ رایگان زیمبرا برای سیستم‌عامل‌های مختلف را ببینید صفحهٔ دانلود زیمبرا را باز کنید.

فرایند نصب

نصب زیمبرا و استفاده از امکانات مدیریت آن ساده است. قسمت مشکل تنظیم پستفیکس و فایروال برای جلوگیری از ارسال اسپم از طریق relay باز سرور و تنظیم درست DNS طوریکه ایمیل‌های ارسالی به پوشهٔ اسپم فرستاده نشود و سمت مقصد معتبر شناخته شود است. همچنین باید تمام این موارد را پس از نصب تست کنید. همچنین دقت کنید محیط پروداکشن جای آزمون و خطا نیست. پیشنهاد می‌شود تمام آزمون و خطاهایتان را در یک محیط تست اما با تنظیمات شبکهٔ واقعی و IP ولید روی اینترنت (چون قسمت اصلی کار مربوط به همین تنظیمات است) انجام دهید و وقتی با موفقیت انجام شد در محیط پروداکشن و سروری که می‌خواهید دامنهٔ اصلی را روی آن تنظیم کنید انجام دهید. چون تغییر دادن تنظیمات نادرستی که انجام می‌دهید معمولاً با قدری side effects یا عوارض جانبی همراه است.

برنامه‌های استفاده شده در زیمبرا

ایمیل‌سرور مجموعهٔ بسیار پراکنده‌ای از چندین ابزار مختلف است که در کنار هم کار می‌کنند؛ مثلاً zimbra برای چک کردن ویروس اتچمنت ایمیل‌ها از clamd استفاده می‌کند یا برای چک کردن اسپم ایمیل‌های دریافتی از spamassassin و برای چک کردن ایمیل‌های ارسالی از amavisd استفاده می‌کند. کور سیستم که ایمیل‌ها را دریافت یا ارسال می‌کند postfix است برای همین آشنایی قبلی با تنظیمات postfix به شما کمک زیادی می‌کند. همچنین تعداد زیادی ابزارهای مختلف دیگر مشابه google drive یا google docs یا تقویم و ابزارهای مدیریت تسک و چت و … به کاربر می‌دهد که هرکدام به تنهایی واقعاً ابزارهای کاملی هستند. بعضی از این سرویس‌ها مانند amavisd رم بسیار زیادی اشغال می‌کنند. می‌نیمم ۸ گیگ رم و ۴ کور سی‌پی‌یو در حالتی که روی اوبونتو نصب می‌کنید و زیر ده نفر کاربر فعال داشته باشید احتمالاً کافیست. وب‌سروری که برای کلاینت وب ایمیل استفاده می‌کند Jetty است و وب‌سروری که برای برخی صفحات مدیریتی استفاده می‌کند نسخهٔ خلاصه‌شده‌ای از Apache است. همچنین برای دیتابیسش از Mysql استفاده می‌کند.

نیازمندی‌های نصب

پیشنهاد می‌شود که ایمیل‌سرور را روی یک ماشین مجازی مجزا نصب کنید چون برخی سرویس‌های مورد نیاز برای ایمیل با سرویس وب کانفیلیکت دارند و نصب هر دوی آن‌ها روی یک سیستم‌عامل با این‌که ممکن است اما کار بسیار غلطیست و هیچوقت توصیه نمی‌شود. البته سرویس ایمیل با DNS کانفیلیکت ندارد و اتفاقاً در بیشتر مواقع توصیه می‌شود این دو سرویس روی یک سرور یا دو سرور در یک شبکه باشند چون در این‌صورت می‌شود محدودیت‌های بهتری روی ترافیک ورودی و خروجی سرور اعمال نمود. متأسفانه فایل داکر مناسبی برای زیمبرا که نسخهٔ جدید رایگان آن را روی یک سیستم‌عامل نسبتاً جدید نصب کند یا به‌طور رسمی تأیید شده باشد وجود ندارد. برای همین امکان ایزوله کردن آن در کانتینر به راحتی وجود ندارد.

مدیریت ایمیل‌سرور

بعد از نصب ایمیل‌سرور می‌توانید به هر تعداد دامنه روی آن تعریف کنید. مشابه virtual host که برای وب‌سرور کانفیگ می‌کنید و از چندین دامنه روی یک وب‌سرور میزبانی می‌کنید برای ایمیل‌سرور هم چنین امکانی وجود دارد. موقع تعریف حساب‌های کاربری دقت کنید که حتماً برای تمام کاربرها حتی خودتان یا مدیر سازمان qouta در نظر بگیرید. همچنین کاربرها را طبقه‌بندی کنید. زیمبرا یک سری zimlet دارد که درواقع افزونه‌های زیمبرا هستند و فیچرهای بسیاری مانند چت یا یکپارچه شدن با linkedin یا امکاناتی نظیر گوگل داک را می‌شود به وسیلهٔ آن‌ها به زیمبرا اضافه کرد.

نکات مهم فنی زیمبرا

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

ورود به user مخصوص زیمبرا

برخی دستورات باید با user زیمبرا اجرا شوند در غیراینصورت با پیغام این دستور وجود ندارد مواجه می‌شوید. در این موارد به user زیمبرا لاگین کنید و بعد دستورات را اجرا کنید:

su - zimbra

به جز مواردی که دستور فقط در یوزر زیمبرا معنی دارد تمام موارد نوشته شده در این مستند باید با سطح دسترسی یوزر root اجرا شوند.

تنظیمات اصلی postfix

مهم‌ترین تنظیمات پستفیکسی که انجام می‌دهید در این فایل نگه‌داری می‌شوند:

nano /opt/zimbra/postfix-VERSION_NUMBER/conf/main.cf

حتی بسیاری از دستوراتی که برای تغییر تنظیمات اجرا می‌کنید در نهایت محتوای این فایل را ویرایش می‌کنند. بررسی تنظیمات این فایل برای ترابلشوتینگ و پیدا کردن مشکل کمک بسیاری می‌کند چون می‌شود همهٔ تنظیمات اصلی کور سیستم را یک‌جا در آن دید.

ریست کردن خود زیمبرا و سرویس‌های زیمبرا

بعد از هر تغییر اساسی نیاز دارید کل زیمبرا یا سرویس مربوط به آن را ریست کنید. در دستورات مربوط به ریست کردن، متوقف کردن یا استارت کردن هر سرویس به ترتیب کلمات restart یا stop یا start استفاده شده. برای ریست کردن کل زیمبرا:

zmcontrol restart

اگر روی زیمبرا policyd نصب کردید و می‌خواهید آن را فعلاً متوقف کنید از این دستور استفاده کنید:

zmcbpolicydctl stop

برای ریست کردن سرویس MTA:

zmmtactl restart

برای ریست کردن سرویس Amavisd:

zmamavisdctl restart

برای ریست کردن سرویس LDAP:

ldap restart

برای ریست کردن سرویس ضد اسپم:

zmantispamctl restart

برای ریست کردن سرویس ضد ویروس:

zmantivirusctl restart

برای ریست کردن سرویس آپاچی زیمبرا:

zmapachectl restart

برای سرویس پراکسی زیمبرا:

zmproxyctl restart

راهنمای نصب

آماده‌سازی سیستم‌عامل

نصب سیستم‌عامل

اگر سنت را نصب می‌کنید موقع نصب گزینه Minimal را انتخاب کنید ولی هیچ‌کدام از سرویس‌های روبروی آن مانند Infrustructure یا Basic را تیک نزنید. ممکن است برای سهولت کار ترجیح بدهید موارد خیلی بیسیک را تیک بزنید چون اگر هیچ‌کدام را تیک نزنید خیلی از برنامه‌هایی که احتمالاً به آن‌ها عادت دارید مثل vim یا nano را نخواهید داشت. اما باز هم توصیه می‌کنم تیک نزنید چون وقتی تیک نمی‌زنید سیستم‌عامل در cleanترین و کم‌حجم‌ترین حالت ممکن نصب می‌شود و آنوقت می‌دانید چه چیزهایی روی آن نصب است و چه چیزهایی نصب نیست.

اوبونتوی سرور هم از نسخهٔ ۲۲.۰۴ به بعد یک آپشن minimal به مراحل نصبش اضافه کرده‌است که اگر آن را تیک بزنید اوبونتو در حالت مینیمال نصب می‌شود ولی نسخه‌های قبل‌تر سرور این آپشن را نداشتند و نصب اوبونتوی مینیمال نیازمند نصب یک ایمیج غیررسمی بود که استفاده از آن هم نیازمند داشتن اطلاعاتی دربارهٔ نحوه استفاده از فایل ایمیج در مجازی‌ساز میزبانش بود. البته در حال حاضر زیمبرا برای اوبونتو ۲۰.۰۴ عرضه شده‌است.

تنظیمات شبکه

فایل مربوط به اینترفیس را ادیت کنید. آدرس این فایل معمولاً بعد از نصب روی vmware در سنت این‌جاست:

vi /etc/sysconfig/network-scripts/ifcfg-ensXXX

دقت کنید نام اینترفیس‌های شبکه در سنت‌اواس معمولاً به صورت ens است نه eth و عدد آن‌هم از صفر شروع نمی‌شود. محتویات این فایل بعد از ادیت چیزی شبیه این خواهد بود:

TYPE=Ethernet
HWADDR=00:0C:29:E2:06:E9
BOOTPROTO=none
DEFROUTE=yes
IPADDR=192.168.100.150
NETMASK=255.255.255.248
GATEWAY=192.168.100.147
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=ens32
UUID=87c6ba20-4ec1-4282-a1cf-23e99ce50848
DEVICE=ens32
ONBOOT=yes
DNS1=8.8.8.8

اگر از اوبونتو استفاده می‌کنید باید فایل netplan را باز و تنظیم کنید:

nano /etc/netplan/01-network-manager-all.yaml

محتویات این فایل چیزی شبیه زیر باشد:

network:
  ethernets:
    ens160:
      addresses:
      - 10.10.10.91/24
      gateway4: 10.10.10.1
      nameservers:
        addresses:
        - 8.8.8.8
        search: []
  version: 2

بعد دستور زیر را برای اعمال تنظیمات جدید بزنید:

netplan apply

بعد از تنظیم شبکه و ریست کردن نتورک، آی پی بیرونی یا public یا external سرور را با این دستور پیدا کنید:

wget -qO- http://ipecho.net/plain ; echo

آپدیت سیستم‌عامل

در سنت برخلاف دبیان دستور آپدیت و آپگرید از هم جدا نیست و وقتی آپگرید می‌کنید خودش به صورت اتوماتیک قبلش آپدیت می‌کند. سیستم را آپدیت کنید:

yum upgrade
yum -y install epel-release

اگر از اوبونتو استفاده می‌کنید لیست پکیج‌ها را آپدیت و بعد خودشان را آپگرید کنید و سیستم را ریبوت کنید:

apt update && apt upgrade -y
apt autoremove -y
reboot

نصب پکیج‌های اضافه و کلاینت

یک‌سری ابزارهای شبکه مورد نیاز که به صورت پیشفرض نصب نیستند را نصب خواهیم کرد. ابزارهای ضروری را نصب کنید:

yum -y install htop nano bash-completion bind-utils net-tools wget curl lsof telnet openssh-server openssh-clients wget screen unzip nmap sed nc rsync

این پکیج‌ها هم قبلا جزو دیپندنسی‌های زیمبرا بودند و احتمالا باید نصب شوند:

yum -y install perl perl-core sysstat libaio aspell

برنامه nano یک ابزار بسیار راحت برای ویرایش فایل‌هاست. سنت ۸ بعد از نصب به صورت دیفالت امکان اتوکامپیلیت (استفاده از کلید تب برای کامل کردن دستور) در محیط بش را ندارد برای این منظور bash-completion را نصب کردیم. net-tools هم شامل یک سری ابزارهای خیلی بیسیک شبکه مانند nmap و netstat است. bind-utils شامل ابزارهای دیگر شبکه که در رابطه با DNS استفاده می‌شوند مانند dig و nslookup هست. wget برای دانلود فایل از اینترنت و curl برای ارسال انواع ریکوئست‌ها استفاده می‌شود. lsof برای بررسی لیست فایل‌ها و سوکت‌های باز استفاده می‌شود. openssh-server به احتمال زیاد به صورت پیشفرض نصب بوده ولی برای حصول اطمینان از نصب بودن آن نوشتیم. openssh-client هم که برنامه‌ایست که با آن ssh می‌زنیم.

اگر از اوبونتو سرور استفاده می‌کنید می‌توانید این پکیج را نصب کنید:

apt install telnet -y

حذف برنامه‌هایی که دچار کانفیلیکت می‌شوند

اگر پستفیکسی به صورت پیشفرض نصب هست که پورت ۲۵ را درگیر می‌کند آن را غیرفعال و حذف کنید:

systemctl stop postfix
yum remove postfix

سرویس ذخیره لاگ‌ها توسط زیمبرا

برای اینکه زیمبرا بتواند لاگ‌ها را درست تولید کند rsyslog را نصب و راه‌اندازی کنید:

yum install rsyslog -y

سپس تنظیمات آن را باز کنید:

nano /etc/rsyslog.conf

خط‌های زیر را از کامنت خارج کنید تا از پروتوکل udp برای ارتباط با سرور لاگر استفاده کند:

module(load="imudp") # needs to be done just once
input(type="imudp" port="514")

روی فایروال دسترسی rsyslog را باز کنید:

sudo firewall-cmd  --add-port=514/tcp  --zone=public  --permanent
sudo firewall-cmd --reload

سرویس را ریست کنید و آن را برای اجرا هنگام بوت فعال کنید:

sudo systemctl restart rsyslog
sudo systemctl enable rsyslog

غیرفعال کردن پورت ۲۲

برای افزایش امنیت می‌توانیم پورت پیشفرض ssh یعنی ۲۲ را به یک پورت غیراستاندارد تغییر دهیم. هرچند معمولا این‌کار پیشنهاد نمی‌شود چون لینوکس پروتکشن‌های سطح پایین بسیاری روی پورت ۲۲ دارد که در صورت تغییر این پورت از کار می‌افتند.

اگر پورت ssh را از ۲۲ تغییر دهیم و sshd را ریست کنیم مشاهده می‌کنیم که ارور می‌دهد و سرویس بالا نمی‌آید. برای اینکه در این رابطه به مشکل نخوریم باید firewalld و selinux و iptables را ابتدا غیرفعال کنیم (بعد از نصب زیمبرا مجدد فعال و سپس کانفیگ می‌کنیم):

setenforce 0
service firewalld stop
service iptables stop
service ip6tables stop
systemctl disable firewalld
systemctl disable iptables
systemctl disable ip6tables

حالا فایل /etc/sysconfig/selinux را باز کنید و این خط را داخل آن پیدا کنید:

SELINUX=enforcing

به این تغییر دهید:

SELINUX=disabled

برای عوض کردن پورت پیشفرض sshd فایل /etc/ssh/sshd_config را باز کنید و خط زیر را پیدا کنید:

#Port 22

به این تغییر دهید:

Port 2233

سرویس را ریست کنید:

service sshd restart

همچنین دقت کنید زیمبرا برای برخی از ارتباطات داخلی خود از ssh و پورت پیشفرض آن استفاده می‌کند برای تغییر آن به پورت جدید ssh از این دستور استفاده کنید:

zmprov ms mail.example.com zimbraRemoteManagementPort 2233

تنظیم تایم‌زون

سرویس به‌روزرسانی زمان سرور از طریق تایم‌زون در سنت‌او‌اس که chrony نام دارد را نصب و تنظیم کنید:

dnf install chrony -y
timedatectl set-timezone Asia/Tehran
systemctl start chronyd
systemctl enable chronyd
systemctl status chronyd

اگر از اوبونتو استفاده می‌کنید:

dpkg-reconfigure tzdata

تاریخ و ساعت روی سرور را چک کنید درست باشد:

date

آماده‌سازی نیازمندی‌های نصب زیمبرا

دانلود فایل زیمبرا

لینک مستقیم دانلود آخرین نسخه زیمبرا برای centos یا ubuntu را از صفحهٔ دانلود زیمبرا دریافت کنید. سپس لینک مستقیم را روی سرور با wget دانلود کنید یا از هر طریقی که می‌دانید فایل فشرده zimbra را به سرور انتقال دهید. مثلا ممکن است امکان وصل کردن فلش به سرور به صورت فیزیکی را داشته باشید یا مثلا فایل را به وسیلهٔ برنامهٔ مجازی‌ساز انتقال دهید. برای این منظور مثلا می‌توانید فایل نصب را iso کنید و به استوریج inventory سرور منتقل کنید و در تنظیمات ماشین مجازی فایل iso را درون سی‌دی رام قرار دهید و سپس آن را مانت کنید و سپس فایل نصب زیمبرا را از محل مانت شدن آن کپی کنید.

اگر می‌خواهید پکیج نسخه اوبونتو را دانلود و از حالت فشرده خارج کنید می‌توانید دستورات زیر را وارد کنید:

cd /tmp
wget https://files.zimbra.com/downloads/8.8.15_GA/zcs-8.8.15_GA_4179.UBUNTU20_64.20211118033954.tgz
tar xvfz zcs-8.8.15_GA_4179.UBUNTU20_64.20211118033954.tgz

تنظیمات دی‌ان‌اس داخلی سرور

سرور شما باید یک آی‌پی استاتیک داشته باشد. این آی‌پی استاتیک می‌تواند آی‌پی پابلیک سرور یا آی‌پی پرایوت سرور باشد. فایل /etc/hosts را باز کنید و این خط را به آن اضافه کنید: (فرض کردم آی‌پی استاتیک سرور شما 192.168.100.150 است.):

192.168.100.150 mail.example.com mail

اگر در سنت هستید دستورهای زیر را اجرای کنید:

hostname mail.example.com
echo "HOSTNAME=mail.example.com" >> /etc/sysconfig/network

اگر در اوبونتو هستید دستور زیر را اجرا کنید:

hostnamectl set-hostname mail.example.com

تنظیمات DNS

اگر از یک سرویس دی‌ان‌اس دیگر استفاده می‌کنید آن را تنظیم کنید ولی اگر دی‌ان‌اس را روی همین سرور راه می‌اندازید با دستور زیر نصب کنید:

yum -y install bind

برای تنظیم دی‌ان‌اس در ابتدایی‌ترین حالت خود به دو ریکورد نیاز خواهید داشت. یکی ریکورد نوع A از زیردامنهٔ سایتی که می‌خواهید محل کلاینت وب ایمیل‌سرورتان باشد به آی‌پی ایمیل‌سرور و دیگری یک ریکورد MX از خود دامنه (در واقع دامنه‌ای که بعد از @ در آدرس ایمیلتان نوشته خواهد شد) به آی‌پی ایمیل‌سرور. برای مثال فرض کنید آی‌پی ایمیل سرور شما 1.2.3.4 و نشانی سایت شما example.com و نشانی سایتی که کاربران به ایمیلشان لاگین خواهند کرد mail.example.com باشد. برای مثال فوق فایل zone دی‌ان‌اس برای bind9 به اینصورت خواهد بود:

$TTL 604800
@ IN SOA example.com. root (2013090503 ; Serial
7200 ; Refresh
120 ; Retry
2419200 ; Expire
10800) ; Negative Cache TTL
;
@ IN NS example.com.
mail IN A 1.2.3.4
example.com. IN MX 25 mail.example.com.

اگر روی یک دی‌ان‌اس سرور دیگر می‌خواهید ریکوردهایتان را تنظیم کنید در ساده‌ترین شکل ممکن به این‌ها نیاز خواهید داشت:

TypeNameValue/Priority
AmailPUBLIC_IP_ADDRESS
MXexample.commail.example.com 25

کانفیگ SPF و TXT ریکوردها

ایمیلهای ارسالی شما باید designated باشد. یک راه چک کردنش اینست که یک ایمیل برای یه آدرس جیمیل بفرستید و بعد از منوی show original هدر ایمیل را چک کنید. در این هدر باید عبارت spf pass را ببینید و این‌که آدرس ایمیلتان به آی‌پی پابلیک سرورتان designate شده است. اگر نبود یعنی ریکورد SPF ندارید. ریکوردهای SPF برحسب شرایط مختلف حالات مختلفی خواهند داشت که در آینده توضیح خواهم داد. حالت عمومی‌تر آن که من معمولا استفاده می‌کنم برای تنظیمات bind به اینصورت است:

mail                 IN      A       xx.xxx.xxx.xxx
example.com.         IN      MX 25   mail.example.com.
example.com.         IN      TXT     "v=spf1 mx -all"
@                    IN      TXT     "v=spf1 mx -all"
                     IN      TXT     "v=spf1 mx -all"
mail                 IN      TXT     "v=spf1 a -all"
example.com.         IN      SPF     "v=spf1 mx -all"

خود ریکوردها برای تنظیم روی DNS Server بیرونی به شرح زیر است:

TypeNameValue/Priority
SPFexample.comv=spf1 mx -all
MXmail«v=spf1 a -all»
MXexample.com«v=spf1 mx -all»

کانفیگ Reverse DNS

۱۱. برای اینکه بفهمید reverse dns را درست کانفیگ کردید یا نه می‌توانید از سایت intodns استفاده کنید. البته این ابزار مدتیست که گاهی درست کار نمی‌کند. به طور خاص برای چک کردن تنظیم reverse dns می‌توانید آی‌پی خود را در سایت mxtoolbox وارد کنید اگر چیزی پیدا نکرد یعنی تنظیم نشده. اگر تنظیم شده باشد جزئیات ریکورد تعریف شده را مشخص می‌کند.

برای حل این مشکل باید با ISP تماس بگیرید تا ریکورد نوع PTR مربوطه را تعریف کنند. اگر آی‌پی پابلیک ایمیل‌سرور شما 1.2.3.4 باشد ریکوردی که باید تعریف کنند برای آی‌پی‌های کلاس سی به صورت 4.3.2.in-addr.arpa باید تعریف شود و مقصد این ریکورد mail.example.com است. اگر کلاس سی نیست هم سابنت داخل ریکورد نوشته شده مشخص می‌شود. اگر این ریکورد تعریف نشود سرور مقصد نمی‌داند که ایمیلی که از آی‌پی سرور شما دریافت می‌کند متعلق به دامنهٔ example.com هست یا نه. پس تعریف این ریکورد الزامیست و درصورت عدم تعریف آن ممکن است ایمیل‌هایتان وارد پوشهٔ اسپم شود یا اصلا سمت مقصد دریافت نشود.

کانفیگ ریکوردهای DKIM

این بخش بعدا تکمیل خواهد شد.

کانفیگ ریکوردهای DMARC

برای این منظور یک رکورد نوع TXT از _dmarc.example.com تعریف کنید به مقصد متن زیر:

v=DMARC1; p=reject; rua=mailto:[email protected]

این متن به سرور مقصد می‌گوید اگر ایمیلی از سرور ما دریافت کرد که آدرس ارسال‌کنندهٔ آن معتبر نبود می‌خواهیم چه واکنشی نسبت به آن نشان دهد.

تست DNS

۱۲. درصورت تنظیم درست DNS و ریزالو شدن آی‌پی باید خروجی زیر را از nslookup بگیرید. در خروجی زیر Server و Address درواقع DNS سروری هستند که سیستم از آن دربارهٔ mail.example.com سوال می‌کند و Address دوم باید IP پابلیک سرورتان باشد.

>> nslookup mail.example.com
Server:		8.8.8.8
Address:	8.8.8.8#53
Non-authoritative answer:
Name:	mail.example.com
Address: xx.xxx.xxx.xxx

دستور قبل جزئیات کافی از تنظیمات DNS در اختیار ما نمی‌گذارد. برای به دست آوردن ریز ریکوردهای تنظیم شده، به خروجی دستور dig نگاه می‌کنیم که ریکوردهای DNS فعال خواهند بود. یعنی با این دستورها می‌توانید اطمینان حاصل کنید که ریکوردهایی که می‌خواستید در DNS سرور تنظیم شده‌اند. دقت کنید هیچ لزومی ندارد که DNS سرور روی همین سرور نصب باشد و اگر جای دیگری هم باشد دستور dig خروجی درست را نشان می‌دهد و اینکه این دستور ممکن است بعد از چند بار اجرا خروجی متفاوتی بدهد. (این به دلیل فرایند cache شدن dns هست.)

dig example.com mx
dig example.com all
dig mail.example.com all

میزان سلامت کانفیگ دی‌ان‌اس‌تان را با سایت intodns می‌توانید چک کنید.

نصب زیمبرا

۱۳. پکیج نصب را به شاخهٔ /opt منتقل کنید و اسکریپت نصب را اجرا کنید:

cd /tmp/zcs-8.8.15_GA_4179.UBUNTU20_64.20211118033954/
./install.sh

در مورد license agreement پاسخ مثبت دهید:

Do you agree with the terms of the software license agreement? [N] Y

در مورد استفاده از package repository زیمبرا پاسخ مثبت دهید:

Use Zimbra's package repository [Y] Y

پکیج‌های زیر را برای نصب انتخاب کنید. مواردی که Y می‌زنید نصب می‌شود و مواردی که N می‌زنید نصب نمی‌شوند.

Install zimbra-ldap [Y] Y
Install zimbra-logger [Y] Y
Install zimbra-mta [Y] Y
Install zimbra-dnscache [Y] N
Install zimbra-snmp [Y] Y
Install zimbra-store [Y] Y
Install zimbra-apache [Y] Y
Install zimbra-spell [Y] Y
Install zimbra-memcached [Y] Y
Install zimbra-proxy [Y] Y
Install zimbra-drive [Y] Y
Install zimbra-imapd (BETA - for evaluation only) [N] N
Install zimbra-chat [Y] Y

در پاسخ The system will be modified. Continue? بزنین Y

سیستم تمام پکیج‌هایی که Y زدید را یکی یکی نصب می‌کند. سپس سیستم خودش dig می‌کند و تنظیمات DNS را چک می‌کند و ممکن است ارور دهد. این ارور حالات متنوعی دارد که حالت مدنظر ما حالت زیر هست. در جواب سوال زیر بزنید Yes و دامنه را تغییر بدهید:

DNS ERROR resolving MX for mail.example.com
It is suggested that the domain name have an MX record configured in DNS
Change domain name? [Yes] Yes
Create domain: [mail.example.com] example.com

اگر در مرحله قبل دامنه را تغییر ندهید دامنهٔ سایتتان mail.example.com و ایمیل‌های شما به صورت [email protected] خواهد بود که مناسب نیست. در مرحلهٔ بعد عدد ۶ را تایپ کنید و اینتر بزنید تا پسورد ادمین را بعد از آن تغییر دهید:

   1) Common Configuration:                                                  
 2) zimbra-ldap:                             Enabled                       
 3) zimbra-logger:                           Enabled                       
 4) zimbra-mta:                              Enabled                       
 5) zimbra-snmp:                             Enabled                       
 6) zimbra-store:                            Enabled                       
      +Create Admin User:                    yes                           
      +Admin user to create:                 [email protected]            
******* +Admin Password                        UNSET                         
      +Anti-virus quarantine user:           [email protected]
......
......
Address unconfigured (**) items  (? - help) 6
Store configuration
 1) Status:                                  Enabled                       
 2) Create Admin User:                       yes                           
 3) Admin user to create:                    [email protected]            
** 4) Admin Password                           UNSET                         
 5) Anti-virus quarantine user:              [email protected]
......
......
Select, or 'r' for previous menu [r] 4
Password for [email protected] (min 6 characters): [s8eNUeOms] Verys3cr3t

بعد از وارد کردن پسورد با r به منوی قبل بروید. اگر همه چیز به درستی تنظیم شد تنظیمات را apply کنید و چند دقیقه صبر کنید تا زیمبرا کامل نصب شود:

CONFIGURATION COMPLETE - press 'a' to apply
Select from menu, or press 'a' to apply config (? - help) a
Save configuration data to a file? [Yes] Yes
Save config in file: [/opt/zimbra/config.24648] 
Saving config in /opt/zimbra/config.24648...done.
The system will be modified - continue? [No] Yes
Operations logged to /tmp/zmsetup10052014-214606.log

سوال Notify Zimbra of your installation? را با Y یا N پاسخ دهید و اگر پرسید Configuration complete – press return to exit, سپس مطمئن شوید که کل سرویس‌ها به درستی در حال اجرا هستند:

su -- zimbra -c “zmcontrol status”

بعد از نصب کامل زیمبرا دایرکتوری نصب آن را که قبلا ساخته شده بود را پاک کنید:

rm -rf /opt/zcs-8.5.0_GA_3042.RHEL7_64.20140828204420

نصب با موفقیت انجام شد. وارد کنسول وب شوید و مراحل تست را دنبال کنید:

https://mail.example.com:7071

تنظیمات iptables سنت

۱۴. اگر با SSH به سرور وصلید اول پورت‌های مورد نیاز را باز کنید بعد موارد باقی‌مانده را ببندید زیرا در غیراینصورت دسترسی‌تان به سرور قطع می‌شود.

فهرست پورت‌هایی که نیاز دارید روی اینترنت باز بگذارید و کاربرد هر کدام در جدول زیر نوشته شده:

PortUsage
22/tcpSSH
80/tcpHTTP
443/tcpHTTPS
7071/tcp(Admin Interface)
25/tcpSMTP
465/tcpSMTPS
110/tcpPOP3
995/tcpPOP3S
143/tcpIMAP
993/tcpIMAPS

اگر از iptables استفاده می‌کنید می‌توانید با دستور زیر فهرست ruleهای فایروال موجود روی سرور را ببینید:

iptables -S

اگر می‌خواهید فهرست chainهای موجود و پورت‌های باز در هر کدام را همراه با شمارهٔ خط ببینید:

iptables -L --line-numbers

می‌توانید ترافیک ورودی را به پورت‌های موجود در جدول بالا از طریق iptables باز کنید:

iptables -A INPUT -i ens32 -p tcp -m multiport --dport 22,80,443,7071,25,465,110,995,143,993 -m state --state NEW,ESTABLISHED -j ACCEPT

رول زیر را هم وارد کنید و بعد chain ها را ببندید:

iptables -A INPUT -i lo -j ACCEPT
iptables -P INPUT DROP
iptables -P FORWARD DROP

برای ذخیره کردن رول‌های iptables از دستور زیر استفاده کنید:

apt install iptables-persistent -y
invoke-rc.d netfilter-persistent save

اگر از سیستم‌عامل centos استفاده می‌کنید به احتمال قوی firewalld که یک اینترفیس برای iptables است در سیستم شما نصب و فعال است. برای بررسی وضعیت فعال بودن آن:

firewall-cmd --state

اگر نصب یا فعال نبود می‌توانید با دستورات زیر آن را نصب کنید و طوری فعال کنید که بعد از reboot هم فعال بماند:

yum install firewalld
systemctl enable firewalld

برای دیدن فهرست ruleهای موجود در firewalld:

firewall-cmd --list-all

همچنین می‌توانید پورت‌های مذکور را به کمک firewalld باز کنید:

firewall-cmd --permanent --zone=public --add-port=22/tcp
firewall-cmd --permanent --zone=public --add-port=80/tcp
firewall-cmd --permanent --zone=public --add-port=443/tcp
firewall-cmd --permanent --zone=public --add-port=7071/tcp
firewall-cmd --permanent --zone=public --add-port=25/tcp
firewall-cmd --permanent --zone=public --add-port=465/tcp
firewall-cmd --permanent --zone=public --add-port=110/tcp
firewall-cmd --permanent --zone=public --add-port=995/tcp
firewall-cmd --permanent --zone=public --add-port=143/tcp
firewall-cmd --permanent --zone=public --add-port=993/tcp

حالا فایروال را ریستارت کنید:

systemctl restart firewalld

زیمبرا بعد از دریافت ایمیل‌ها برای انتقال آن به inbox کاربر به پورت LMTP یا 7025 خودش متصل می‌شود پس این پورت باید روی سرور باز باشد ولی نیاز نیست روی اینترنت و آی‌پی پابلیک سرور هم باز باشد چون از بیرون به آن متصل نمی‌شوند. اگر زیمبرا از روی آی‌پی پابلیک سرور به این پورت وصل شود و این پورت روی اینترنت باز نباشد نمی‌تواند به آن متصل شود و در نتیجه سرور در دریافت ایمیل دچار مشکل می‌شود. این مشکل در لاگ‌های زیمبرا به این شکل دیده می‌شود که ایمیل وارد سرور می‌شود ولی به inbox کاربر منتقل نمی‌شود و هنگام انتقال به inbox ارور زیر را می‌بینید:

 postfix/lmtp ... deferred ... connection refused

در این‌صورت باید به زیمبرا بگویید که از آی‌پی داخلی یا localhost برای اتصال به این پورت استفاده کند. این تنظیم را اگر بخواهید برای یک سرور مشخص تنظیم کنید:

zmprov ms mail.example.com zimbraMtaLmtpHostLookup native

اما اگر می‌خواهید به صورت گلوبالی برای همهٔ سرورها اعمال کنید:

zmprov mcf zimbraMtaLmtpHostLookup native

برای اعمال تنظیمات فوق زیمبرا را ریستارت کنید:

zmmtactl restart

ممکن است درآینده مشابه همین وضعیت در مورد پورت 161 که برای SNMP استفاده می‌شود هم نیاز شود. در این‌صورت باید rule مربوطه را برای 161 هم وارد کنید. اگر می‌خواهید ترافیک ورودی به این پورت را برای کل شبکهٔ داخلی (در اینجا 192.168.100.X) باز کنید دستور زیر را وارد کنید:

iptables -A INPUT -i ens32 -p tcp -s 192.168.100.0/24 --dport 161 -m state --state NEW,ESTABLISHED -j ACCEPT

هر کانکشن دیگری را روی chainهای INPUT و FORWARD بلاک کنید: (دقت کنید ترافیک به بیرون را کلاً باز گذاشتیم)

iptables -P INPUT DROP
iptables -P FORWARD DROP

بعد از اجرای دستورات فوق باید تنظیمات iptables را بعد از ریبوت کنید:

yum install iptables-persistent
invoke-rc.d netfilter-persistent save

تنظیمات فایروال بیرونی

۱۵. شاید به جز iptable خود ایمیل‌سرور بخواهید از یک فایروال سخت‌افزاری هم استفاده کنید. برای اطلاع از تنظیمات مناسب فایروال برای زیمبرا راهنمای تنظیم فایروال برای زیمبرا را مطالعه کنید. در فهرست پورت‌های زیمبرا هم اطلاعات کاملی دربارهٔ پورت‌های زیمبرا و کاربرد هر کدام نوشته شده. همچنین برخی از فایروال‌های سخت‌افزاری امکانی به نام FortiGaurd دارند که اسپم‌ها را همانجا چک می‌کند و درصورت تشخیص ترافیک اسپم را همانجا بلاک می‌کند و ترافیک اصلاً سمت ایمیل‌سرور نمی‌آید.

ریدایرکت http به https

۱۶. چند حالت دارد. ممکن است بخواهید زیمبرا با http و https کار کند. ممکن است بخواهید زیمبرا http را به https ریدایرکت کند و حالات ممکن دیگر. در نسخه‌های جدیدتر زیمبرا یک وب‌سرور nginx وجود دارد که به عنوان پراکسی برای وب‌سرور jetty که زیمبرا از آن استفاده می‌کند کار می‌کند. شما باید این تنظیمات را برای آن انجام دهید:

su - zimbra
zmprov ms mail.example.com zimbraReverseProxyMailMode redirect
zmcontrol restart

بک‌آپ‌گیری از سرور قبلی و عمل مایگریت

۱۷. اگر قبلاً از سرور زیمبرا استفاده می‌کردید و می‌خواهید ایمیل‌های کاربرانش را به سرور جدید منتقل کنید لازم است که از ایمیل‌های سرور قبلی بک‌آپ بگیرید. فایل‌های بک‌آپ را به سرور جدید منتقل کرده و ریستور کنید. یکی از تفاوت‌های نسخه پولی زیمبرا با نسخه اوپن‌سورس آن در پشتیبانی built-in سیستم از بک‌آپ است. نسخه پولی پشتیبانی بهتری دارد و در شل آن می‌توانید به روش‌های بسیار متنوعی از سرورتان بک‌آپ تهیه کنید. اما نسخه اوپن‌سورس زیمبرا آن ابزارها را ندارد و برای همین فقط کمی کارمان سخت‌تر خواهد بود. برای به دست آوردن لیست کل اکانت‌های موجود روی ایمیل‌سرور از این دستور روی سرور قبلی استفاده کنید:

zmprov -l gaa example.com

یوزرها را با یک پسورد فرضی روی سرور جدید بسازید:

zmprov ca [email protected] newpassword

حالا باید ایمیل‌ها و هش شدهٔ پسورد آن‌ها را برای ساخت یوزرها روی سرور جدید داشته باشیم. برای این منظور اسکریپت زیر را بسازید و با یوزر zimbra آن را اجرا کنید:

for i in `zmprov -l gaa | egrep -v 'galsync|spam|ham|virus|stimpson'`;do 
  echo "$i,`zmprov -l ga $i userPassword | grep userPassword | 
  sed 's/userPassword: //'`";
done;

بعد اجرای اسکریپت شما یوزرنیم‌ها و پسوردهای هش‌شده را دارید پس با دستور زیر پسورد کاربرها را روی سرور جدید تغییر دهید:

zmprov ma [email protected] userPassword '{SSHA512}hashedpassword'

مهمترین بخش کار، بک‌آپ‌گیری از ایمیل‌های اکانت‌ها است. برای بک‌آپ گرفتن از ایمیل‌های [email protected] از این دستور استفاده می‌شود:

zmmailbox -z -m [email protected] getRestURL '/?fmt=tgz' > [email protected]

این روش بک‌آپ‌گیری شامل مهمترین اطلاعات مربوط به این یوزر می‌شود:

Mail
Contacts
Calendars
Briefcase
Tasks
Searches
Tags
Folders

اما شامل Junk و Trash نمی‌شود. شما می‌توانید این دو را به صورت جدا بک‌آپ بگیرید:

zmmailbox -z -m [email protected] getRestURL '/Junk?fmt=tgz' > [email protected]
zmmailbox -z -m [email protected] getRestURL '/Trash?fmt=tgz' > [email protected]

اگر فایل‌های فشرده خروجی دستورهای بالا را باز کنید تعدادی فایل با فرمت .eml و .meta در آن مشاهده خواهید کرد. فایل‌های eml با نرم‌افزارهایی مثل outlook یا thunderbird به راحتی باز می‌شوند و هدر ایمیل شامل عنوان، تاریخ، مشخصات فرستنده و گیرنده و … به علاوه متن ایمیل و اتچمنت‌های آن را شامل می‌شود. متن و هدر ایمیل به طور مستقیم داخل فایل ذخیره می‌شوند اما اتچمنت‌ها با فرمت base64 کد می‌شوند و ذخیره می‌شوند. استفاده از فرمت tgz به کاهش حجم ایمیل‌ها کمک زیادی می‌کند و برای همین فرایند انتقال آن‌ها راحت‌تر خواهد بود. اگر تعداد زیادی ایمیل دارید و می‌خواهید از تمام آن‌ها بک‌آپ بگیرید از این اسکریپت استفاده کنید.

۱۸. گام بعد انتقال فایل‌ها از سرور قدیمی به سرور جدید است:

scp -P 2233 dumps/* [email protected]:/root

۱۹. سمت مقصد با دستور ls -la مطمئن شوید که فایل‌ها کامل منتقل شدند. برای restore کردن بک‌آپ باید ابتدا برای تمام افراد در ایمیل سرور جدید اکانت بسازید و بعد ایمیل‌ها را داخل اکانتشان ریستور کنید. برای ریستور کردن سه حالت وجود دارد. یا می‌خواهید ایمیل‌ها ریستور شوند و ایمیل‌های موجود داخل اکانت کاربر ignore شوند. یا اینکه می‌خواهید ایمیل‌های موجود و تکراری در اکانت کاربر به‌روزرسانی شوند (فرایند replace شدن) یا می‌خواهید کل ایمیل‌های موجود پاک شوند و ایمیل‌های فایل dump جایگزین شوند. به حالت اول skip دومی modify و سومی reset گفته می‌شود. وقتی mode مورد نظر را انتخاب کردید با چنین دستوری ایمیل‌های داخل فایل را به اکانت متناظرش ایمپورت کنید:

zmmailbox -z -m [email protected] postRestURL "/?fmt=tgz&resolve=skip" [email protected]

نکات تکمیلی بک‌آپ و ریستور

در اینجا سه بحث تکمیلی مطرح است. اول اینکه اگر بخواهیم به جای کل فایل dump بخشی از آن را ریستور کنیم باید چکار کنیم. بحث بعد روش ریستور کردن prefrenceهای کاربران است و بحث از همه مهمتر بحث restore کردن LDAP است. در این روش به جز تنظیمات حساب کاربری پسورد کاربران نیز ریست می‌شود و باید از اول به هر کاربر به صورت جداگانه password حساب کاربریش را اطلاع دهیم. برای اجتناب از این موضوع دیتابیس LDAP که شامل اطلاعات حساب‌های کاربری است را اول منتقل می‌کنیم و بعد ایمیل‌ها را. همچنین ابزارهای دیگری هستند که به فرایند بک‌آپ‌گیری کمک می‌کنند. برخی از آن‌ها trial هستند و برای مدت محدودی می‌توان از آن‌ها استفاده کرد. یکی از این ابزارها zextras نام دارد. این ابزار بعد از پایان یافتن مهلت استفاده رایگانش روزانه تعداد زیادی ایمیل به admin ارسال می‌کند و در پنل admin مدام درخواست خرید برنامه می‌دهد. ضمن اینکه برای استفاده از آن باید هم در مبدأ و هم در مقصد نصب باشد. برای همین در مجموع توصیه نمی‌شود. برای اطلاعات تکمیلی درباره موضوعات گفته شده راهنمای اسکریپت و استراتژی‌های بک‌آپ را مطالعه کنید.

نصب پچ زیمبرا برای نسخهٔ ۸٫۶٫۰ خود

۲۰. برای این نسخه یک پچ منتشر شده که بعد نصب خود زیمبرا باید نصب شود. نصب آن بسیار آسان و straightforward است. کافیست به صفحهٔ دانلود آن بروید و پچ را دانلود کنید و مراحل نصب را طبق فایل README بروید.

مراحل نصب پچ به اینصورت است که ابتدا سرویس را متوقف می‌کنید بعد یک فایل sh را اجرا می‌کنید و مجددا اجرا می‌کنید. سپس با دستور زیر ورژن زیمبرا را چک می‌کنید تا مطمئن شوید پچ نصب شده:

su - zimbra
zmcontrol -v

تغییر بنر و تردمارک

۲۱. برای تنظیم بنر و تردمارک مجموعه‌ای که از ایمیل سرور استفاده می‌کنند به دو تصویر یکی در ابعاد ۱۲۰ در ۳۵ و دیگری در ابعاد ۱۶۳ در ۳۶ با فرمت PNG و زمینه سفید نیاز داریم. از هر کدام هم ۲ نسخه سفید سیاه لازم داریم. این فایل‌ها را باز کنید:

/opt/zimbra/jetty-distribution-9.1.5.v20140505/webapps/zimbra/public/login.jsp
/opt/zimbra/jetty-distribution-9.1.5.v20140505/webapps/zimbra/public/hostedlogin.jsp
/opt/zimbra/jetty-distribution-9.1.5.v20140505/webapps/zimbra/public/extuserprov.jsp

دنبال خط‌هایی که bannerLink دارند بگردید. کد Jquery مربوطه را پاک کنید. لینک را تغییر دهید. تایتل لینک و کپشن داخل span را عوض کنید. برای تغییر عکس‌ها هم این چهار تا فایل را عوض کنید:

/opt/zimbra/jetty-distribution-9.1.5.v20140505/webapps/zimbra/skins/_base/logos/AppBanner_white.png
/opt/zimbra/jetty-distribution-9.1.5.v20140505/webapps/zimbra/skins/_base/logos/AppBanner_black.png
/opt/zimbra/jetty-distribution-9.1.5.v20140505/webapps/zimbra/skins/_base/logos/LoginBanner_white.png
/opt/zimbra/jetty-distribution-9.1.5.v20140505/webapps/zimbra/skins/_base/logos/LoginBanner_black.png

تست rely سرور

۲۲. در فاز آخر باید تست کنیم همه چیز میزون باشد. اولین و مهمترین تست، تست مربوط به rely ایمیل سرور است که برای اینکار از telnet روی کامپیوتر شخصیمان استفاده می‌کنیم. به پورت ۲۵ تل‌نت بزنید:

telnet mail.example.com 25

ببینید وصل میشه یا نه. اگر وصل شه:

Trying your.public.ip.address...
Connected to mail.example.com.
Escape character is '^]'.
220 mail.example.com ESMTP Postfix

دستور HELO را ارسال کنید:

HELO mail.example.com

خروجی:

250 mail.example.com

فرام ایمیل را یکبار با ایمیل موجود روی سرور و یکبار با ایمیل ناموجود مشخص کنید:

mail from: [email protected]

خروجی:

250 2.1.0 Ok

مقصد را مشخص کنید:

rcpt to: [email protected]

خروجی مشکل‌دار:

250 2.1.5 Ok

خروجی که اگر rely بسته باشه انتظار میره نشون بده:

554 5.7.1 <[email protected]>: Sender address rejected: You're not me!

یا نشون بده:

554 5.7.1 <[email protected]>: Relay access denied

اگر rely سرور بسته نیست قبل از اینکه جدی شود آن را جدی بگیرید و به هر طریقی که ممکن است ببندید.

ترابلشوتینگ زیمبرا

منقضی شدن سرتیفیکیت https

ممکن است بعد چند وقت موقع استارت کردن زیمبرا هنگام بالا آمدن سرویس ldap با این پیغام ارور مواجه شوید:

Unable to start TLS: SSL connect attempt failed error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed when connecting to ldap master.

علت این پیغام این است که سرتیفیکیت شما renew نشده و در نتیجه ldap نمی‌تواند بالا بیاید. برای این‌که موقتا ldap بتواند بدون بررسی valid بودن سرتیفیکیت بالا بیاید دستورات زیر را با یوزر zimbra اجرا کنید:

zmlocalconfig -e ldap_starttls_required=false
zmlocalconfig -e ldap_starttls_supported=0

حالا می‌توانید زیمبرا را استارت کنید:

zmcontrol restart

حالا مشاهده خواهید کرد که زیمبرا بالا آمده ولی اگر نشانی آن را داخل بروزر وارد کنید با پیغام سرتیفیکیت ولید نیست مواجه می‌شوید. فرایند renew کردن سرتیفیکیت از دو گام تشکیل می‌شود. گام اول renew کردن خود سرتیفیکیت است و گام دوم deploy کردن سرتیفیکیت renew شده روی زیمبرا است. اگر از letsencrypt استفاده می‌کنید و قبلا سرتیفیکیت را به طور دستی نصب و تنظیم کردید باید این دو گام را به طور جداگانه انجام دهید ولی اگر از اسکریپت معرفی شده در بخش نصب سرتیفیکیت ssl در این مستند استفاده کردید دستور زیر را با یوزر روت اجرا کنید تا سرتیفیکیت renew و سپس deploy شود:

/usr/bin/certbot renew --pre-hook "/usr/local/bin/certbot_zimbra.sh -p" --renew-hook "/usr/local/bin/certbot_zimbra.sh -r "

همچنین کرون‌تب سرور را چک کنید. دستور بالا باید در کرون‌تب سرور باشد تا مشکل به وجود آمده دیگر پیش نیاید.

مصرف رم بالا

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

برای بررسی ده پروسسی که بیشترین مصرف رم را دارند:

ps aux | awk '{print $۲, $۴, $11}' | sort -k2rn | head -n ۱۰

چک کردن پورت‌های in use

چک کنید که سرویس postfix دیگری روی سرورتان بالا نباشد. ممکن است برنامهٔ دیگری مانند exim یا sendmail از پورت ۲۵ (پورت MTA) در حال استفاده باشند. اگر حدس میزنین چنین است، pid آن را پیدا کنید و کیل کنید و مطمئن شوید بار بعد که سرور ریست می‌شود این پروسس مجدد ران نمی‌شود. برای اینکه بفهمید چه پروسس‌هایی با چه PIDهایی روی این پورت لیسن می‌کنند:

lsof -i :25

دبیان به صورت پیشفرض exim نصب می‌کند و آن را اجرا می‌کند و این برنامه روی پورت ۲۵ سیستم شما listen می‌کند و این باعث می‌شود MTA نتواند اجرا شود. نشانه این مشکل اینست که می‌بینید که وقتی زیمبرا را استارت می‌کنید بدون ارور استارت می‌شود و می‌گوید همه چیز با موفقیت استارت شده ولی وقتی status آن را چک می‌کنید می‌بینید که MTA استارت نشده و چیزی شبیه این می‌نویسد:

mta Stopped
postfix is not running

در این شرایط شما MTA را اینبار به طور مستقل استارت می‌کنید و ارورهای بیشتری مشاهده می‌کنید. اگر چنین شرایطی رخ داد بررسی کنید چه برنامه‌هایی روی پورت ۲۵ لیسن می‌کنند و اگر exim نصب بود با این روش آن‌را به صورت clean پاک کنید تا بعد از ریبوت کردن سرور exim دوباره اجرا نشود:

apt-get purge --remove exim4 exim4-base exim4-config exim4-daemon-light

محدودیت‌های اعمال شده

دقت کنید یک smtpd_relay_restrictions و یک smtpd_recipient_restrictions و یک smtpd_sender_restrictions داریم و این سه تا با هم فرق دارند. با این دستور مقدار این متغیرها که معادل فهرست تمام محدودیت‌های اعمال شده روی SMTP برای ریلی سرور و دریافت و ارسال ایمیل هست را مشاهده خواهید کرد:

postconf smtpd_recipient_restrictions
postconf smtpd_relay_restrictions
postconf smtpd_sender_restrictions

محدودیت‌های ممکن برای موارد فوق به شرح زیر است:

smtpd_recipient_restrictions = check_policy_service inet:localhost:10031, reject_non_fqdn_recipient, permit_sasl_authenticated, permit_mynetworks, reject_unlisted_recipient, reject_invalid_helo_hostname, reject_non_fqdn_helo_hostname, reject_non_fqdn_sender, reject_unknown_client_hostname, reject_unknown_reverse_client_hostname, reject_unknown_helo_hostname, reject_unknown_sender_domain, reject_rbl_client bl.spamcop.net, reject_rbl_client relays.mail-abuse.org, reject_rbl_client zen.spamhaus.org, reject_rbl_client dnsbl.sorbs.net, reject_rbl_client cbl.abuseat.org, permit
smtpd_relay_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination
smtpd_sender_restrictions = reject_authenticated_sender_login_mismatch, check_policy_service inet:localhost:10031, check_sender_access regexp:/opt/zimbra/postfix/conf/tag_as_originating.re, permit_mynetworks, permit_sasl_authenticated, permit_tls_clientcerts, check_sender_access regexp:/opt/zimbra/postfix/conf/tag_as_foreign.re

برای ادیت کردن مقادیر به دست آمده برای متغیرهای فوق این دستور را وارد کنید:

zmlocalconfig -e postfix_smtpd_sender_restrictions="reject_unknown_sender_domain, permit_mynetworks, permit_sasl_authenticated, permit"
zmlocalconfig -e postfix_smtpd_sender_restrictions="reject_unknown_sender_domain, permit_mynetworks, permit_sasl_authenticated, check_sender_access hash:/opt/zimbra/postfix/conf/access_table, permit"

به این نکته دقت کنید که در نسخه‌های قدیمی تر پستفیکس postconf smtpd_relay_restrictions وجود نداشت و برای همین رول‌های مربوط به آن در smtpd_recipient_restrictions نوشته می‌شد. شما اگر از نسخه جدیدتر آن استفاده می‌کنید رولی که در اولی نوشته شده را در دومی دوباره ننویسید.

تنظیمات نتورک‌های مجاز

با این دستور فهرست دیفالت نتورک‌های مجاز را مشاهده می‌کنید:

postconf -d mynetworks

با این دستور فهرست نتورک‌های مجاز را مشاهده می‌کنید:

postconf mynetworks

با این دستور فهرست آی‌پی نتورک‌های مجاز را ویرایش می‌کنید:

zmprov modifyServer mail.example.com zimbraMtaMyNetworks '127.0.0.1/32'

مقدار نوشته شده بعد از اسلش عدد سابنت است که می‌تواند مقدار ۳۲ یا ۲۴ یا ۱۶ یا ۸ را داشته باشد. ۳۲ برای حالتیست که آی‌پی شما x.x.x.x باشد، ۲۴ وقتی که x.x.x.0 و ۱۶ وقتی که x.x.0.0 و ۸ برای وقتیست که x.0.0.0 باشد. example.com هم دامنه شما می‌باشد که باید به مقدار واقعی آن تغییر دهید. مقدار این متغیر به این فرمت باشد:

127.0.0.0/8 y.y.y.y/32 x.x.x.x/32

در اینجا x.x.x.x آی‌پی بیرونی و y.y.y.y آی‌پی داخلی سرور است. در اینجا شاید لازم باشد آی‌پی گیت‌وی را هم وارد کنید. در حالت کلی برای اینکه بفهمید چه آی‌پی‌هایی را لازم است وارد کنید این مستند را مطالعه کنید.

سرویس policyd

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

zmprov mcf +zimbraMtaRestriction "check_policy_service inet:127.0.0.1:10031"

دقت کنید policyd روی پورت ۱۰۰۳۱ کار می‌کند و اگر فعال باشد و شما روی این پورت لیسن کنید پروسس آن را مشاهده خواهید کرد.

لاگ‌ها و trace کردن مشکل

تا حداقل یک ماه پس از نصب لاگ‌های زیمبرا را به صورت استیریم مشاهده کنید. هر وقت مشکلی پیش آمد یا ایمیلی ارسال یا دریافت نمی‌شد هم لاگ را باز کنید و بررسی کنید که هنگام ارسال یا دریافت ایمیل چه اتفاقی می‌افتد. این لاگ بهترین سرنخ‌ها را برای هر مشکلی می‌دهد.

tail -f /var/log/zimbra.log

در حالت پیشفرض سرور لاگ سرویس‌های ایمیل از جمله postfix را در اینجا می‌نویسد که زیمبرا مسیر دیفالت آن را تغییر داده است:

/var/log/mail.log

در این فایل لاگ‌های مربوط به MTA و system status log و postfix و amavisd ذخیره می‌شود. بقیه لاگ‌های زیمبرا در شاخهٔ /opt/zimbra/log/ است. مهمترین فایل در این شاخه mailbox.log است که تمام اعمال کاربران را اعم از ارسال ایمیل، اضافه کردن کانتکت، رفرش کردن ایمیل و … لاگ می‌کند:

tail -f /opt/zimbra/log/mailbox.log

ارورها و معنی هر کدام

لاگ را مانیتور کنید. ارورهای داخل آن بهترین سرنخ‌ها هستند. اگر در لاگ چنین چیزی مشاهده کردید:

Feb 12 07:35:18 mail amavis[26021]: (26021-01) Blocked SPAM {DiscardedInternal}, ORIGINATING_POST/MYNETS LOCAL [127.0.0.1]:52921 [127.0.0.1] <[email protected]> -> <[email protected]>, Queue-ID: 873FF1A4AFC, Message-ID: <[email protected]>, mail_id: PVCoVT9JsO-P, Hits: 40.592, size: 945, 307 ms
Feb 12 07:35:18 mail postfix/smtp[27963]: 873FF1A4AFC: to=<[email protected]>, relay=127.0.0.1[127.0.0.1]:10032, delay=0.36, delays=0.05/0.01/0.01/0.3, dsn=2.7.0, status=sent (250 2.7.0 Ok, discarded, id=26021-01 - spam)

یعنی یک نفر سعی کرده از روی سرور شما relay کند و ایمیل بفرستد ولی amavisd (سرویس تشخیص ایمیل‌های spam که می‌خواهند از سرور شما سوء استفاده کنند و روی پورت ۱۰۰۳۲ لیسن می‌کند) جلوی آن را گرفته و اسپم تشخیص داده. درواقع عبارت discarded و spam به این موضوع اشاره می‌کنند که ایمیل اسپم تشخیص داده شده و ارسال نشده. اگر این را در لاگ مشاهده کردید از این نظر خوشحال باشید که amavisd درست کار می‌کند و جلوی ایمیل‌های اسپم را می‌گیرد و از این نظر ناراحت که اسپمر می‌تواند به SMTP سرور متصل شود و فایروال جلوی آن را نمی‌گیرد و حتی خود اینکه می‌تواند relay کند باگ است. (حالا چه اسپم شود چه نشود)

یکی دیگر از ارورها می‌تواند این باشد که به صورت متناوب نوشته می‌شود:

Apr 19 09:56:06 mail postfix/postfix-script[24766]: fatal: the Postfix mail system is not running
Apr 19 09:56:06 mail postfix/postqueue[24782]: fatal: Queue report unavailable - mail system is down

این ارور یعنی MTA پایین است. کافیست MTA را start کنید. یکی از دلایل پایین آمدن MTA می‌تواند این باشد که از روی سرور شما relay کرده‌اند و به تعدادی ایمیل فرستادند که RAM یا CPU پر شدند و کرنل پروسس مربوطه را کیل کرده است. برای این موضوع dmesg را بخوانید.

اگر در لاگ‌ها با این پیغام مواجه شدید:

Apr 19 10:09:56 mail postfix/smtpd[10287]: NOQUEUE: reject: RCPT from unknown[YOUR_EXTERNAL_IP]: 554 5.7.1 <[email protected]>: Relay access denied; from=<[email protected]> to=<[email protected]> proto=SMTP helo=<YOUR_EXTERNAL_IP>

یعنی یک نفر به پورت SMTP سرور شما وصل شده و خواسته spam بفرسته ولی سرور اجازه relay از روی ایمیل‌سرور با آی‌پی آن شخص را نداده و ایمیل ارسال نشده. اگر ایمیلی که ارسال نشده و relay نشده اسپم نیست و ایمیل کاربران مجاز است باید بخش «تنظیمات نتورک‌های مجاز» همین مقاله را مطالعه کنید.

نحوه معرفی ایمیل‌ها یا دامنه‌های غیرمجاز از طریق فایل‌های متنی

نسخه‌های قدیمی‌تر زیمبرا از hash استفاده می‌کردند ولی نسخه‌های جدیدتر آن از دیتابیس‌های lmdb. پس فایل‌های restriction را هش نکنید. مثلاً برای مشخص کردن فهرست restricted_senderها یعنی استثنائاتی که می‌خواهید برای رول‌ها تعریف کنید باید از این فرمت استفاده کنید:

lmdb:/opt/zimbra/postfix/conf/restricted_senders

اگر جایی خط بالا با hash: شروع می‌شد بدانید اشتباه است.

کیو

مواقعی که می‌خواهند از روی سرور شما اسپم ارسال کنند و دریافت کننده تشخیص می‌دهد اسپم هست و ایمیل را دریافت نمی‌کند ایمیل در کیو deffered قرار می‌گیرد و ممکن است در مدت کوتاهی تعداد ایمیل‌های اسپم موجود در این queue بسیار زیاد شود و ایمیل‌سرور و لاگ‌ها را شلوغ کند. حتی ممکن است انقدر زیاد شود که دیسک شما را پر کند! در /var/log/zimbra.log ایمیل‌هایی که به این کیو فرستاده می‌شوند با status=deffered مشخص می‌شوند. برای خالی کردن تمام ایمیل‌های موجود در کیو deffered سرور:

/opt/zimbra/postfix/sbin/postsuper -d ALL deferred

نکات آی‌پی‌تیبل و فایروال سنت‌اواس

با این دستور لیست کل سرویس‌های موجود روی سرور (حتی مواردی که نمی‌شود با chkconfig فهمید) را مشاهده خواهید کرد:

service --status-all

اگر به هر دلیلی کامند service پاک شده بود یعنی در /sbin/service موجود نبود، پکیج مربوطه را نصب کنید:

yum install -y system-config-services

برای مشاهده وضعیت (بالا بودن یا پایین بودن) یک سرویس مثلاً سرویس iptables:

systemctl status iptables.service

نصب iptables به تنهایی کافی نیست. سنت یک firewalld دارد که آن iptable را مدیریت می‌کند. برای نصب firewalld:

yum install firewalld

برای ریست کردن فایروال و iptables در لینوکس باید قبل از استارت کردن یک سرویس باید آن را enable کنید:

systemctl disable firewalld.service
systemctl stop firewalld.service
systemctl enable iptables.service
systemctl enable ip6tables.service
systemctl start iptables.service
systemctl start ip6tables.service

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

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

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

مشکل DDOS اسپمرها

این فایل را باز کنید:

/etc/postfix/master.cf

این خط را پیدا کنید:

smtp  inet n - n - - smtpd

- آخر را به ۵ تغییر دهید.

همچنین راهکاری محدود کردن منابع تخصیص داده شده به پستفیکس در هنگام حمله DDOS را مطالعه کنید.

تیون‌کردن زمان باقی‌ماندن ایمیل‌ها در کیو

صفحهٔ تیون کردن تنظیمات کیو پستفیکس را مطالعه کنید.

مشکل پرمیشن فایل‌های زیمبرا

اگر هنگام ریستارت کردن زیمبرا، سرویس MTA استارت نمی‌شود و داخل ارور آن Permission denied می‌بینید احتمالا به این دلیل است که پرمیشن فایل‌های زیمبرا درست نیست. برای اصلاح پرمیشن‌ها با کاربر root دستور زیر را اجرا کنید:

/opt/zimbra/libexec/zmfixperms

سرتیفیکیت

هنگام لاگین به ایمیلتان با این ارور مواجه می‌شوید:

A network service error has occurred.

راه‌حل renew کردن سرتیفیکیت تولید شده توسط زیمبرا است:

/opt/zimbra/bin/zmcertmgr createca -new
/opt/zimbra/bin/zmcertmgr createcrt -new -days 1024
/opt/zimbra/bin/zmcertmgr deploycrt self
/opt/zimbra/bin/zmcertmgr deployca
/opt/zimbra/bin/zmcertmgr viewdeployedcrt

عوض کردن آدرس سرور در زیمبرا

اولین گام اینست که آدرس ایمیل سرور را در فایل hostname اصلاح کنید:

nano /etc/hostname

سپس به یوزر زیمبرا وارد شوید و دستور تغییر server name را وارد کنید:

su - zimbra
/opt/zimbra/libexec/zmsetservername -n <servername>

سپس مشاهده خواهید کرد که زیمبرا یکی یکی تنظیمات را از روی دامنه قبلی می‌خواند و برای دامنهٔ جدید set می‌کند.

ولید کردن سرتیفیکیت از طریق letsencrypt

راهکار دستی

هدف پروژهٔ letsencrypt ایجاد امکان استفاده از سرتیفیکیت‌های ولید SSL به صورت رایگان و آزاد است. ابتدا از طریق این سرویس یک سرتیفیکیت ولید SSL ایجاد کنیم و سپس چگونه این سرتیفیکیت را روی زیمبرا نصب کنیم و به زیمبرا بگوییم از این سرتیفیکیت استفاده کند.

مرحله اول اینست که وب سرور را در یوزر zimbra متوقف کنید:

zmproxyctl stop
zmmailboxdctl stop

برای انجام مرحله بعد لازم است git روی سرور نصب باشد. در Centos مینیمال گیت به صورت پیشفرض نصب نیست. برای نصب گیت در Centos باید EPEL را قبلا فعال کرده باشید. سپس با دستور زیر گیت نصب می‌شود:

yum install -y git

حالا با دستور زیر یک کلون از پروژه letsencrypt بگیرید و به داخل دایرکتوری آن بروید:

git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt

یکی از اهداف پروژهٔ letsencrypt ساده‌سازی مراحل نصب سرتیفیکیت روی سرویس‌ها و وب‌اپلیکیشن‌ها است. برای مثال letsencrypt در حال حاضر امکان نصب به صورت خودکار روی وب‌سرور apache و nginx را دارد و برای نصب و استفاده از سرتیفیکیت روی این وب‌سرورها کار خاصی لازم نیست انجام دهید. اما با توجه به اینکه از زیمبرا پشتیبانی نمی‌کند هنگام تولید سرتیفیکیت از گزینهٔ certonly استفاده می‌کنیم یعنی می‌گوییم فقط فایل‌های سرتیفیکیت را می‌خواهیم و لازم نیست خودش برایمان نصب کند. همچنین از آپشن –no-upgrade استفاده می‌کنیم چون در ابتدای اجرای اسکریپت ورژن letsencryptی که کلون گرفتیم را چک می‌کند و اگر آخرین ورژن نباشد خودش را آپدیت می‌کند ولی اینکار با توجه به محدودیت‌های پورت‌های SSL در داخل با مشکل مواجه می‌شود:

./letsencrypt-auto certonly --no-upgrade

در این مرحله تمام dependency های سیستمی را خودش نصب می‌کند و سپس وارد یک محیط CLI می‌شود که در آن ابتدا یک ایمیل می‌خواهد که ایمیل دلخواهتان را وارد می‌کنید. سپس دامنه‌هایی که برای آن‌ها certificate می‌خواهید را می‌پرسد که در اینجا شما باید دامنه mail.example.com را وارد کنید. مراحل ایجاد سرتیفیکیت با این پیغام تمام می‌شود:

 IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at
  /etc/letsencrypt/live/mail.example.com/fullchain.pem. Your cert
  will expire on 2016-03-04. To obtain a new version of the
  certificate in the future, simply run Let's Encrypt again.
 - If like Let's Encrypt, please consider supporting our work by:
  Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
  Donating to EFF:                    https://eff.org/donate-le

شما تمام فایل‌های سرتیفیکیت تولید شده را می‌توانید در /etc/letsencrypt/live/$domain پیدا کنید. در اینجا شما چهار تا فایل با نام‌های cert.pem و chain.pem و fullchain.pem و privkey.pem مشاهده می‌کنید. فراموش نکنید privkey همان کلید خصوصی شماست و نباید آن را به کسی بدهید. فایل chain.pem را باز کنید و به ابتدای آن این بلاک را اضافه کنید:

-----BEGIN CERTIFICATE-----
MIIEqDCCA5CgAwIBAgIRAJgT9HUT5XULQ+dDHpceRL0wDQYJKoZIhvcNAQELBQAw
PzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQD
Ew5EU1QgUm9vdCBDQSBYMzAeFw0xNTEwMTkyMjMzMzZaFw0yMDEwMTkyMjMzMzZa
MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD
ExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMTCCASIwDQYJKoZIhvcNAQEBBQAD
ggEPADCCAQoCggEBAJzTDPBa5S5Ht3JdN4OzaGMw6tc1Jhkl4b2+NfFwki+3uEtB
BaupnjUIWOyxKsRohwuj43Xk5vOnYnG6eYFgH9eRmp/z0HhncchpDpWRz/7mmelg
PEjMfspNdxIknUcbWuu57B43ABycrHunBerOSuu9QeU2mLnL/W08lmjfIypCkAyG
dGfIf6WauFJhFBM/ZemCh8vb+g5W9oaJ84U/l4avsNwa72sNlRZ9xCugZbKZBDZ1
gGusSvMbkEl4L6KWTyogJSkExnTA0DHNjzE4lRa6qDO4Q/GxH8Mwf6J5MRM9LTb4
4/zyM2q5OTHFr8SNDR1kFjOq+oQpttQLwNh9w5MCAwEAAaOCAZIwggGOMBIGA1Ud
EwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgGGMH8GCCsGAQUFBwEBBHMwcTAy
BggrBgEFBQcwAYYmaHR0cDovL2lzcmcudHJ1c3RpZC5vY3NwLmlkZW50cnVzdC5j
b20wOwYIKwYBBQUHMAKGL2h0dHA6Ly9hcHBzLmlkZW50cnVzdC5jb20vcm9vdHMv
ZHN0cm9vdGNheDMucDdjMB8GA1UdIwQYMBaAFMSnsaR7LHH62+FLkHX/xBVghYkQ
MFQGA1UdIARNMEswCAYGZ4EMAQIBMD8GCysGAQQBgt8TAQEBMDAwLgYIKwYBBQUH
AgEWImh0dHA6Ly9jcHMucm9vdC14MS5sZXRzZW5jcnlwdC5vcmcwPAYDVR0fBDUw
MzAxoC+gLYYraHR0cDovL2NybC5pZGVudHJ1c3QuY29tL0RTVFJPT1RDQVgzQ1JM
LmNybDATBgNVHR4EDDAKoQgwBoIELm1pbDAdBgNVHQ4EFgQUqEpqYwR93brm0Tm3
pkVl7/Oo7KEwDQYJKoZIhvcNAQELBQADggEBANHIIkus7+MJiZZQsY14cCoBG1hd
v0J20/FyWo5ppnfjL78S2k4s2GLRJ7iD9ZDKErndvbNFGcsW+9kKK/TnY21hp4Dd
ITv8S9ZYQ7oaoqs7HwhEMY9sibED4aXw09xrJZTC9zK1uIfW6t5dHQjuOWv+HHoW
ZnupyxpsEUlEaFb+/SCI4KCSBdAsYxAcsHYI5xxEI4LutHp6s3OT2FuO90WfdsIk
6q78OMSdn875bNjdBYAqxUp2/LEIHfDBkLoQz0hFJmwAbYahqKaLn73PAAm1X2kj
f1w8DdnkabOLGeOVcj9LQ+s67vBykx4anTjURkbqZslUEUsn2k5xeua2zUk=
-----END CERTIFICATE-----

حالا باید تست کنیم که سرتیفیکیت تولید شده صحیح است. برای این منظور به /etc/letsencrypt/live/$domain بروید و با کاربر root بزنید:

/opt/zimbra/bin/zmcertmgr verifycrt comm privkey.pem cert.pem chain.pem

در خروجی دستور باید چیزی شبیه این مشاهده کنید:

  ** Verifying cert.pem against privkey.pem
Certificate (cert.pem) and private key (privkey.pem) match.
Valid Certificate: cert.pem: OK

حالا سرتیفکیت را تولید کرده اید و نوبت به نصب آن رسیده. برای این منظور ابتدا یک بک‌آپ از سرتیفیکیت قبلی تهیه کنید:

cp -a /opt/zimbra/ssl/zimbra /opt/zimbra/ssl/zimbra.$(date "+%Y%m%d")

پیش از شروع نصب سرتیفیکیت باید فایل کلید خصوصی را به دایرکتوری سرتیفیکیت commercial زیمبرا منتقل کنید:

cp /etc/letsencrypt/live/mail.example.com/privkey.pem /opt/zimbra/ssl/zimbra/commercial/commercial.key

حالا سرتیفکیت را با دستور زیر نصب کنید:

/opt/zimbra/bin/zmcertmgr deploycrt comm cert.pem chain.pem

خروجی که می‌توانید انتظار دیدنش داشته باشید:

** Verifying cert.pem against /opt/zimbra/ssl/zimbra/commercial/commercial.key
Certificate (cert.pem) and private key (/opt/zimbra/ssl/zimbra/commercial/commercial.key) match.
Valid Certificate: cert.pem: OK
** Copying cert.pem to /opt/zimbra/ssl/zimbra/commercial/commercial.crt
** Appending ca chain chain.pem to /opt/zimbra/ssl/zimbra/commercial/commercial.crt
** Importing certificate /opt/zimbra/ssl/zimbra/commercial/commercial_ca.crt to CACERTS as zcs-user-commercial_ca...done.
** NOTE: mailboxd must be restarted in order to use the imported certificate.
** Saving server config key zimbraSSLCertificate...failed.
** Saving server config key zimbraSSLPrivateKey...failed.
** Installing mta certificate and key...done.
** Installing slapd certificate and key...done.
** Installing proxy certificate and key...done.
** Creating pkcs12 file /opt/zimbra/ssl/zimbra/jetty.pkcs12...done.
** Creating keystore file /opt/zimbra/mailboxd/etc/keystore...done.
** Installing CA to /opt/zimbra/conf/ca...done.

به یوزر zimbra بروید و زیمبرا را ریست کنید:

zmcontrol restart

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

استفاده از یک اسکریپت اتومیتد

ابتدا خود letsencrypt را روی سرور نصب کنید:

yum -y install certbot

اگر روی اوبونتو هستید به خاطر یک باگی که certbot داخل apt دارد موقع دیپلوی کردن سرتیفیکیت دچار ارور می‌شود برای همین با snap باید certbot را نصب کنید:

apt install snapd
sudo snap install core; sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot

اسکریپت نصب letsencrypt روی zimbra را دانلود و به آن پرمیشن اجرا دهید:

wget https://raw.githubusercontent.com/YetOpen/certbot-zimbra/master/certbot_zimbra.sh -P /usr/local/bin
chmod +x /usr/local/bin/certbot_zimbra.sh

سپس hostname زیمبرا را با یوزر خودش چک کنید:

zmhostname

دستور زیر را اجرا کنید تا سرتیفیکیت را بگیرد و روی همهٔ سرویس‌ها آن را اجرا کند. اگر می‌خواهید این سرتیفیکیت برای یک دامنهٔ دیگر به جز دامنهٔ اصلی که در hostname نوشته‌شده هم صادر شود آن را روبروی اکسترا دامین وارد کنید:

certbot_zimbra.sh --new --extra-domain mail.example.ir

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

certbot_zimbra.sh --new --extra-domain mail.example.ir
certbot --force-renewal --preferred-chain "ISRG Root X1" renew
certbot_zimbra.sh -d

کرون‌تب سرور را چک کنید که خود certbot سرتیفیکیت ایجاد شده را renew نکند. زیرا بعد هر بار renew شدن باید سرتیفیکیت جدید توسط زیمبرا deploy شود. سپس دستور به‌روزرسانی را به کرون‌تب کاربر root اضافه کنید.

crontab -e

دستور زیر یکبار در روز سرتیکفییت را renew می‌کند. EFF پیشنهاد می‌کند که این‌کار را دو بار در روز انجام دهیم ولی یکبار هم کافیست چون برای دیپلوی سرتیفیکیت باید هر بار زیمبرا ریست شود و در نتیجه همین تعداد هم کافیست.

12 5 * * * /usr/bin/certbot renew --pre-hook "/usr/local/bin/certbot_zimbra.sh -p" --renew-hook "/usr/local/bin/certbot_zimbra.sh -r "

اضافه کردن Domain Aliasها

اگر دامنه‌های دیگری به جز example.com مانند example.ir هم دارید که می‌خواهید کاملا رفتار مشابهی با دامنهٔ اصلی‌تان داشته باشند و مثلا اگر کاربر [email protected] را ساختید به طور مشابه همان کاربر همان دسترسی‌ها را به [email protected] را هم داشته باشد باید آن‌ها را به عنوان domain alias اضافه کنید. سپس تنظیمات DNS مربوط به آن دامنه را مشابه تنظیمات DNS دامنهٔ example.com انجام دهید.

اعطای اجازهٔ اتصال به سرور برای ارسال ایمیل

برای ارسال ایمیل از طریق سرور بسته به تنظیمات سمت کلاینتی که استفاده می‌کنید باید به پورت 25 که مربوط SMTP است یا 465 که مربوط به SMTPS وصل شوید. اتصال به این پورت به دلایل امنیتی به طور پیشفرض سمت زیمبرا محدود شده است. برای همین باید آی‌پی کلاینتتان را برای اتصال به این پورت whitelist کنید. برای وایت‌لیست کردن آی‌پی‌هایی که می‌خواهید بتوانند به این پورت وصل شوند باید در پنل ادمین لاگین کنید و وارد بخش Global Settings شوید و سپس وارد بخش MTA شوید سپس آی‌پی مورد نظر را به MTA Trusted Networks اضافه کنید.

تنظیمات سمت کلاینت

این تنظیمات برای اتصال جیمیل و سایر کلاینت‌ها برای دریافت به وسیلهٔ POP3 و ارسال به وسیلهٔ SMTP به شرح زیر است:

POP Server: mail.example.com
Port: 995
Always use a secure connection (SSL) when retrieving mail.
SMTP Server: mail.example.com
Port: 25
Secured connection using TLS

اضافه کردن پالیسی برای عدم دریافت ایمیل توسط no-reply

برای ایمیل no-reply چک کنید که quota حداقل مقدار ممکن مثلا 1 MB باشد و یک متن مناسب برای auto-reply بنویسید که اگر کسی به این آدرس ایمیل زد یک ایمیل برایش ریپلای شود و در آن بنویسد که این ایمیل در اختیار یک روبات است و نمی‌تواند ایمیل شما را دریافت کند. برای مشخص کردن مقدار quota باید از پنل ادمین به بخش Manage و سپس Accounts و سپس Advanced بروید. برای نوشتن متن auto-reply باید با حساب کاربری فوق لاگین کنید و به بخش preferences بروید و گزینهٔ out of office را انتخاب کنید و متن مورد نظرتان را وارد کنید.

تنظیمات مورد نیاز برای اضافه کردن external account

اگر می‌خواهید یک external account به صورت pop3 را به ایمیل خود متصل کنید تا محتوای آن را خالی کند ولی با پیغام ارور مواجه می‌شوید چون سرتیفیکیت آن تایید نشده از دستورات زیر استفاده کنید:

zmlocalconfig -e  ssl_allow_mismatched_certs=true
zmlocalconfig -e  ssl_allow_untrusted_certs=true
zmlocalconfig -e ssl_allow_accept_untrusted_certs=true
zmlocalconfig -e data_source_trust_self_signed_certs=true
zmcontrol restart

نصب سرویس fail2ban

سرویس fail2ban با استفاده از فایروال افرادی که برای انجام عمل مشخصی مانند ورود به سیستم در یک بازهٔ زمانی کوتاه چندین بار تلاش ناموفق داشته باشند را برای مدت موقتی ban می‌کند و اگر این موضوع باز هم تکرار شود برای مدت بیشتری یا به طور دائمی آی‌پی آن‌ها را ban می‌کند. این سرویس باید برای هر برنامه به طور جداگانه تنظیم شود. یعنی مثلا برای ssh، برای اتصال به پورت‌های smtp و … برای ارسال ایمیل و برای اتصال به رابط وب و ورود از طریق آن به طور جداگانه باید تنظیم شود.

پکیج fail2ban را نصب کنید:

yum install -y fail2ban

فایل تنظیمات jailهای تنظیم شده برای fail2ban را باز کنید:

nano /etc/fail2ban/jail.local

تنظیمات زیر را درون آن وارد کنید تا jail مربوط به sshd فعال شود. همچنین در تنظیمات زیر گفتیم که در ۶۰۰ ثانیهٔ اخیر اگر کسی سه بار تلاش ناموفق داشت ۳۶۰۰ ثانیه آی‌پی ایشان را ban کن. همچنین این قاعده برای ورود از طریق آی‌پی لوکال‌هاست صدق نمی‌کند. همچنین آدرس فایلی که لاگ مربوط به تلاش‌های ناموفق را باید از آن‌جا بخواند و تشخیص دهد را هم به آن دادیم و شمارهٔ پورت پیشفرض ssh که ۲۲ است را تنظیم کردیم. در مقابل ignoreip آی‌پی داخلی سرور و آی‌پی سروری که معمولا با SMTP به این ایمیل‌سرور متصل خواهد شد تا ایمیل ارسال کند را اضافه کنید تا این آی‌پی‌ها وایت‌لیست شوند. هر آی‌پی را با یک فاصله از هم جدا کنید. مقدار نوشته شده بعد از اسلش عدد سابنت است که می‌تواند مقدار ۳۲ یا ۲۴ یا ۱۶ یا ۸ را داشته باشد. ۳۲ برای حالتیست که آی‌پی شما x.x.x.x باشد، ۲۴ وقتی که x.x.x.0 و ۱۶ وقتی که x.x.0.0 و ۸ برای وقتیست که x.0.0.0 باشد.

[DEFAULT]
# Ban hosts for one hour:
bantime = 6000
findtime = 600
maxretry = 3
ignoreip = 127.0.0.1/8
# Override /etc/fail2ban/jail.d/00-firewalld.conf:
banaction = iptables-multiport
[sshd]
enabled = true
port    = ssh
logpath = %(sshd_log)s

سپس fail2ban را ریست کنید و آن را enable کنید تا موقع reboot هم اجرا شود:

systemctl restart fail2ban
systemctl enable fail2ban

حال چند بار تلاش پشت سر هم ناموفق برای اتصال ssh به سرور انجام دهید. بعد چند بار نباید سرور از شما پسورد بپرسد و باید شما را ban کند. fail2ban لیست آی‌پی‌های ban شده روی sshd را با دستور زیر به شما نشان می‌دهد:

fail2ban-client status sshd

همچنین می‌توانید وضعیت fail2ban را چک کنید تا مطمئن شوید که jailها فعال شده‌اند:

fail2ban-client status

در مرحلهٔ بعد تنظیمات fail2ban را برای حفاظت از ایمیل‌سرور انجام می‌دهیم. برای این منظور باید با استفاده از رگولار اکسپرشن مشخص کنیم که چه patternهایی اگر در لاگ ایمیل‌ها و لاگ زیمبرا رخ دهد به معنی تلاش ناموفق است و در این‌صورت انتظار داریم fail2ban چه actionای انجام دهد.

برای فعال کردن jailها کد موجود در این صفحه را به فایل تنظیمات jailها اضافه کنید:

nano /etc/fail2ban/jail.local

همچنین filter مربوط به رخداد failure در authentication با postfix را در محل فیلترهای fail2ban بسازید:

wget https://raw.githubusercontent.com/leogallego/fail2ban-zimbra/master/filter.d/postfix-sasl.conf -O /etc/fail2ban/filter.d/postfix-sasl.conf

و فیلتر مربوط به zimbra را در محل فیلترهای fail2ban بسازید:

wget https://raw.githubusercontent.com/leogallego/fail2ban-zimbra/master/filter.d/zimbra.conf -O /etc/fail2ban/filter.d/zimbra.conf

چند تا رگولار اکسپرشن هستند که در نسخه‌های جدیدتر زیمبرا می‌توانند در لاگ‌ها رخ دهند که نشان‌دهندهٔ fail شدن کاربر است ولی در این فایل وجود ندارد. این موارد را باید اضافه کنیم:

nano /etc/fail2ban/filter.d/zimbra.conf

در بخش failregex این فایل اضافه می‌کنیم:

INFO .*ip=<HOST>;.* authentication failed for \[.*\], account not found$
WARN .*ip=<HOST>;.* security - cmd=Auth;.*, invalid password;$

سپس fail2ban را ریست کنید تا تنظیمات اعمال شود:

systemctl restart fail2ban