Multiple Postfix Instance

گاهی اوقات بر روی یک سرور فیزیکی احتیاج داریم که تعداد زیادی ایمیل با استفاده از ip های مختلف بفرستیم. در این‌گونه موارد یا باید سرور postfix خود را به گونه‌ای تنظیم کنیم که  بتواند در هنگم ارسال ایمیل‌ها از چند ip استفاده کند و ایمیل‌ها را ارسال کند یا باید چند مولفه به صورت موازی روی سرورمان بالا بیاوریم.

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

برای راه اندازی این مدل از postfix شما باید ابتدا به تعداد مولفه هایی که می خواهید، در زیر شاخه /etc پوشه بسازید و سپس به ترتیب فایل‌های main.cf و master.cf را به صورت شخصی سازی شده برای آن مولفه در پوشه های ساخته شده قرار دهید.

برای مثال شما می خواهید ۴ مولفه postfix برای ارسال ایمیل داشته باشید به ترتیب زیر عمل می کنید:

۱ابتدا برای هر مولفه یک فوادر در زیر شاخه etc می سازیم

#mkdir /etc/postfix-out-XX

توجه داشته باشید که می توانید بجای XX از یک شماره یا یک نام که هر پوشه را نسبت به دیگرپوشه ها مجزا کند استفاده کنید.

۲در مرحله دوم شما باید در زیر شاخه /var/spool دقیقاً همان پوشه هایی که در زیر شاخه etc ساختیم را بسازید.

# mkdir /var/spool/postfix-out-XX

۳در مرحله سوم ما باید فایل‌های master.cf و main.cf را برای هر یک از مولفه های postfix خودمان در زیر شاخه etc بسازیم

در این مرحله پیشنهاد می‌شود که از فایل‌های پیش فرضی که در مسیر نصب postfix قرار دارد استفاده کنید و بسته به ip و تنظیمات هر مولفه نسبت به ویرایش فایل‌های آن اقدام کنید. (در زیر نمونه فایل های master.cf و main.cf آمده است.)

نمونه فایل master.cf:

XXX.XXX.XXX.XXX:smtp     inet    n   –    –    –   –    smtpd

pickup  fifo     n    –    –   ۶۰ ۱   pickup

cleanup unix    n   –     –    –   ۰  cleanup

qmgr fifo     n   –     n    ۳۰۰  ۱  qmgr

tlsmgr unix – – – 1000? 1 tlsmgr

rewrite unix – – – – – trivial-rewrite

bounce unix – – – – 0 bounce

defer unix – – – – 0 bounce

trace unix – – – – 0 bounce

verify unix – – – – 1 verify

flush unix n – – 1000? 0 flush

proxymap unix – – n – – proxymap

proxywrite unix – – n – 1 proxymap

smtp unix – – – – – smtp

relay unix – – – – – smtp

showq unix n – – – – showq

error unix – – – – – error

retry unix – – – – – error

discard unix – – – – – discard

local unix – n n – – local

virtual unix – n n – – virtual

lmtp unix – – – – – lmtp

anvil unix – – – – 1 anvil

scache unix – – – – 1 scache

maildrop unix – n n – – pipe

flags=DRhu user=vmail argv=/usr/bin/maildrop -d ${recipient}

uucp unix – n n – – pipe

flags=Fqhu user=uucp argv=uux -r -n -z -a$sender – $nexthop!rmail ($recipient)

ifmail unix – n n – – pipe

flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)

bsmtp unix – n n – – pipe

flags=Fq. user=bsmtp argv=/usr/lib/bsmtp/bsmtp -t$nexthop -f$sender $recipient

scalemail-backend unix – n n – 2 pipe

flags=R user=scalemail argv=/usr/lib/scalemail/bin/scalemail-store ${nexthop} ${user} ${extension}

mailman unix – n n – – pipe

flags=FR user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py

${nexthop} ${user}

نمونه فایل main.cf:

data_directory = /var/lib/postfix-out-xx

myhostname = <YOUR HOSTNAME>

unknown_local_recipient_reject_code = 550

mynetworks = 127.0.0.0/8 <IP OF YOUR NETWORK>

alias_maps = hash:/etc/aliases

smtpd_banner = $myhostname ESMTP $mail_name

readme_directory = no

inet_protocols = ipv4

authorized_submit_users =

queue_directory = /var/spool/postfix-out-xx

multi_instance_group = mta

multi_instance_name = postfix-out-xx

smtp_bind_address = <SPECIFICE POSTFIX INSTANCE IP>

multi_instance_enable = yes

۴در این مرحله به زیر شاخه /var/spool می‌رویم و در تک تک پوشه هایی که برای مولفه های postfixمان یک پوشه etc می سازیم و فایل‌های hosts وservices را در آن کپی می کنیم.

# mkdir /var/spool/postfix-out-XX/etc

# cp /etc/hosts /var/spool/postfix-out-XX/etc

# cp /etc/services /var/spool/postfix-out-XX/etc

توجه داشته باشید که این عملیات برای همه مولفه ها باید انجام شود.

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

۵بعد از آماده شدن مقدمات ابتدا باید postfix را برای بالا آوردن چند مولفه با دستور زیر آماده کنیم

# postmulti -e init

۶در این مرحله به ساختن مولفه ها می‌پردازیم برای این منظور از دستور زیر استفاده می کنیم

# postmulti -I postfix-out-XX -G mta -e create

توجه داشته باشیم که در قسمت postfix-out-XX شما باید به ترتیب اسم پوشه هایی که در زیر شاخه etc ساخته‌اید را بدهید. اگر پوشه ها را در مسیر دیگری ساخته‌اید باید مسیر کامل آن‌ها را به دستور بدهید.

۷در این مرحله باید مولفه هایی را که ساختیم را بالا بیاوریم تا به صورت عملی کار کنند برای این منظور:

اگر بخواهیم فقط یک مولفه را بالا بیاوریم از دستور زیر

# postmulti -i <instance-name> -p start

و اگر بخواهیم تمام مولفه هایی که ساخیم به صورت اتوماتیک و پشت سر هم بالا بیایند از دستور زیر استفاده می کنیم

# postmulti -p start

توجه داشته باشید که در این قسمت <instance-name> اسم مولفه postfix یا همان اسم پوشه ای است که در زیر شاخه etc در مراحل قبل ساخته‌ایم.

ذکر این نکته هم ضروری به نظر می رسد که در دستورات این مرحله می توانید از option های دیگری نیز استفاده کنید که در زیر به آن‌ها اشاره می کنیم

status ==> وضعیت مولفه ها را نمایش می دهد

# postmulti -p status

stop ==> مولفه ها را از حالت سرویس دهی خارج می کند

reload ==> در صورت تغییر در فایل‌های تنظیمات، هر مولفه بدون از دسترس خارج شدن، سرویس فایل تنظیمات جدید را دوباره برای مولفه بارگذاری می کند.

نکته:

در صورتی که بخواهید تنظیماتی را بر روی همه مولفه های درحال اجرا اعمال کنید از دستور زیر استفاده کنید:

# postmulti -x postconf -e “<new configuration>”

و در صورتی که می خواهید فقط روی یکی از مولفه ها تنظیمات را اعمال کنید از دستور زیر استفاده کنید:

# postmulti -i <instance-name> -x postconf -e “<new configuration>”

و در آخر برای تست و اطمینان از بالا بودن هر یک از مولفه ها از دستور telnet به مقصد ip مورد نظر استفاده می کنیم.

# telnet XXX.XXX.XXX.XXX 25