星期六, 6月 02, 2007

[linux]如何設定 postfix mail server

[doc] 在 FreeBSD 如何使用 postfix
但願人長久,千里共嬋娟 freebsd-taiwan-doc@freebsd.sinica.edu.tw
04 Apr 2001 08:58:31 GMT

--------------------------------------------------------------------------------

※ 本文轉錄自 [Daily] 看板

作者: DarkKiller (但願人長久,千里共嬋娟) 看板: Daily
標題: Re: [doc] 在 FreeBSD 如何使用 postfix
時間: Wed Apr 4 16:57:32 2001

參考文件http://www.postfix.org/usr/local/etc/postfix/sample-*

1. 首先,我們先利用 tarball 安裝 postfix:

cd /usr/ports/mail/postfix
make all install clean

他所問你的問題請選 Yes,讓他開 postfix 要用的帳號。

2. 安裝好以後,到 /usr/local/etc/postfix 下面修改 main.cf 的下列設定:

# 你的 hostname
myhostname = infomath.math.nctu.edu.tw

# 你的 domain
mydomain = math.nctu.edu.tw

# 當你這台機器有很多 domain name 要收的時候,你可以用這種這個設定把
# 這些 domain name 放到同一個檔案裡面,檔案的內容就是每一行放一個
# hostname。
mydestination = /usr/local/etc/postfix/local-host-names

# 關掉你的 vrfy 指令。
#
# 除非你知道這個東西是做什麼的,否則強烈建議你設定上去!
disable_vrfy_command = yes

# 你允許 relay 的 domains,通常是被設為 MX 才要設定上去。格式跟
# local-host-names 相同,都是一行一個 domain。
relay_domains = /usr/local/etc/postfix/relay-domains
# 這是設定 global 的 aliases,你可以把以前放在 /etc/mail/aliases 的檔
# 案直接 copy 過來以後,跑 postalias /usr/local/etc/postfix/aliases。
alias_maps = hash:/usr/local/etc/postfix/aliases

# 以前 sendmail 用 /etc/mail/access 來控制 discard/reject/relay 以及其
# 他的設定。在 postfix 裡面,我們拆開對 HELO/MAIL FROM/RCPT TO/... 等等
# 作處理,我們僅介紹 relay 所需要用到對 RCPT TO 的控制,把下面這行:
#
# smtpd_recipient_restrictions = permit_mynetworks,check_relay_domains
#
# 修改成:(不斷行)
#
smtpd_recipient_restrictions = permit_mynetworks,
hash:/usr/local/etc/postfix/rcptto-access,check_relay_domains,
#
# 然後跑 postmap hash:/usr/local/etc/postfix/rcptto-access 即可。
#
# 更進階的用法請參考 /usr/loca/etc/postfix/sample-smtpd.cf 裡面的說明。

3. 現在,要把 postfix 放到 /usr/local/etc/rc.d 裡面讓 postfix 在開機的時
候跑起來,另外把正在跑 sendmail kill 掉,以及在 /etc/rc.conf 把 sendmail
設為不啟動。

所以,到 /usr/local/etc/rc.d 建立一個檔案,叫做 postfix.sh:

#!/bin/sh
/usr/local/sbin/postfix start

[請注意] 現在的 startup script 都應該要支援 start、stop,這個地方這樣
寫是並不支援 stop 的部分,這是因為我懶惰 :p

另外在 /etc/rc.conf 把 sendmail 的預設值設為關閉:

sendmail_enable="NO"

然後把現在正在跑的 sendmail 砍掉:

killall -9 sendmail

把你的 postfix 跑起來:

/usr/local/etc/rc.d/postfix.sh start

4. 先從自己機器寄一封信到你這台機器,看看可不可以送到。如果可以的話,從
別台寄到你自己的機器看看! 有問題的話看看 /var/log/maillog 裡面有什麼
可以提供你自己 debug 的方法,找到的話,post 到 386BSD 板跟大家分享 :)

5. 接下來,我們把 local mailer 也改成 postfix 附的 sendmail:

把 /etc/mail/mailer.conf 裡面的四項設定改成:

sendmail /usr/local/sbin/sendmail
send-mail /usr/local/sbin/sendmail
mailq /usr/local/sbin/sendmail
newaliases /usr/local/sbin/sendmail

然後用自己機器寄信給自己看看,如果成功的話,寄到別台機器的帳號看看,
相同的,如果你遇到困難的話,你可以看看 /var/log/maillog 裡面的東西去
猜測問題的出處 :)

6. 接下來是說 BBS 的部分了,對於 BBS 而言,最主要就是 bbsmail 以及
mailpost 要透過 sendmail (以前) 或是 postfix (現在) 把信件轉到 BBS 裡。

所以我們的做法是使用 canonical 把 username.bbs@bbs.twbbs.org 轉成
username@bbsmail 以後,再用 transport 把要給 bbsmail 的文章都丟給
BBS 的 bbsmail 處理。

而 mailpost 除了類似的方式以外,你也可以直接在 BBS 的 home directory
裡面的 .forward 設定:

"| exec /home/bbs/bin/mailpost"

這樣的話下面的 mailpost 的部分你就不需要設定了。

我們先在 main.cf 裡面新增兩項設定:

# canonical 的部分,我們要用到 Regular Expression:
canonical_maps = regexp:/usr/local/etc/postfix/canonical

# transport 的部分,我們用 hash 來處理:
transport_maps = hash:/usr/local/etc/postfix/transport

我們先新增 /usr/local/etc/postfix/canonical:

/^bbs@/ $1@mailpost
/^(.+)\.bbs@/ $1@bbsmail

然後再新增 /usr/local/etc/postfix/transport:

bbsmail bbsmail:
mailpost mailpost:

新增完以後,跑下面的命令讓它產生相關的設定:

postmap hash:/usr/local/etc/postfix/transport

然後我們要告訴 postfix,bbsmail 以及 mailpost 這兩個 mailer 到底是
那兩隻程式負責。

修改 /usr/local/etc/postfix/master.cf,加到最後面:

# 請注意,這是沒有換行的,請自行接上:(用 tab)
bbsmail unix - n n - - pipe
flags=R user=bbs argv=/home/bbs/bin/bbsmail $mailbox

# 這也是沒有換行的,也是用 tab 接上:
mailpost unix - n n - - pipe
flags=R user=bbs argv=/home/bbs/bin/mailpost

設定改完以後,請輸入下列指令,讓 postfix 去重新讀入設定:

postfix reload

--
交大校園網路策進會 NCTUCCCA 林嘉軒
Gea-Suan Lin
--
※ Origin: 小鹿鹿 ◆ From: infomath.math.nctu.edu.tw

沒有留言: