作者kevinblue.bbs@nightless.twbbs.org (凱文藍) 看板: itoc
標題[筆記] bbs 用 postfix 收信 v0.2
時間城區夜未眠 (2007/12/20 Thu 21:57:24)
我是看 DK 大很久以前的文章設定的,因為 postfix 的版本改了跟以前的設定有差別
所以筆記一下免的忘記 囧
出錯時 postconf -n, postconf -d 很好用 :D
若需要測試你的 regualr expresion 可以使用
postmap -q "TEST-STRING-HERE" pcre:/path/to/prec/file
postmap -q "TEST-STRING-HERE" regexp:/path/to/regexp/file
本篇筆記安裝之相關環境:
FreeBSD 7.0beta4
Postfix v2.5.20071212
maple-itoc 原版的 bbsmail, brdmail, mailpost
官網的 document 寫的也很詳細!
DK 大的文件中的設定有點舊了,雖然 postfix 2.0+ 都有一定程度上的相容
但是還是用新版的選項設定會比較好
建議先看 DK 大的文件再看這篇!
如果有需要改進的地方歡迎提出! :D
reference
http://www.postfix.org/postconf.5.html#virtual_alias_maps
http://postfix.wiki.xs4all.nl/index.php?title=Main_Page
http://www.postfix.org/BASIC_CONFIGURATION_README.html
---------------------------from 鳥哥-------------------------------
# 幫助 Client 發送信件,也就是 Relay 的功能開放的需求項目:
在開放哪些項目之後,你的 postfix 主機才會幫助『信任』的 Client 端 Relay 呢?
1. 當 Client 來自信任的網域,也就是 IP 符合 $mynetworks 的設定值時�
2. 當 Client 來自信任的機器,也就是主機名稱符合 $relay_domains 的設定項目時
3. 當 Client 來自不信任的網域,但是去的目的地主機端符合 $relay_domains 的設
定時。
當符合上面三點的任何一點時,那麼 postfix 將對該信件進行 relay 的動作喔!
# 收信程序:在哪些情況之下,我們的 postfix 會將該封信件收下來呢?
1. 收件者主機名稱符合 $inet_interfaces 的設定;
2. 收件者主機名稱符合 $mydestination 的設定;
3. 收件者主機名稱符合 $virtual_maps 的設定。
符合上面三點的任何一項時,那麼該封信件就會被我們的 postfix 收下來!
------------------------end from 鳥哥-------------------------------
如果有需要看 manpage 參考參數的話可以 man 5 postconf 就可以看所有參數
1. 先安裝 mail/postfix-current
然後讓 posts 新增 postfix 這個帳號
2. vi /usr/local/etc/postfix/main.cf
加上以下幾列
myhostname = bbs.cis.scu.edu.tw
mydomain = cis.scu.edu.tw
inet_interfaces = $myhostname, nightless.twbbs.org
myorigin = $myhostname
# 當你這台機器有很多 domain name 要收的時候,你可以用這種這個設定把
# 這些 domain name 放到同一個檔案裡面,檔案的內容就是每一行放一個
# hostname。
mydestination = /usr/local/etc/postfix/local-host-names
> # 因為夜未眠有 2 個 domain,讓這兩個 domain 的信都可以收
> %> cat local-host-names
> bbs.scu.edu.tw
> nightless.twbbs.org
# 關掉你的 vrfy 指令。
# 除非你知道這個東西是做什麼的,否則強烈建議你設定上去!
# Disable the SMTP VRFY command.
# This stops some techniques used to harvest email addresses.
disable_vrfy_command = yes
> 不設定 mynetworks_style,直接設定 mynetworks
mynetworks = /usr/local/etc/postfix/mynetworks
> %> cat mynetworks
> 127.0.0.1
> 163.14.73.4
# 你允許 relay 的 domains,通常是被設為 MX 才要設定上去。格式跟
# local-host-names 相同,都是一行一個 domain。
# 這個很重要,因為是要用 postfix 把信轉給 bbsmail brdmail mailpost
# 所以要設定成自己的 domain,否則在 maillog 會有 Relay Access Deny
relay_domains = /usr/local/etc/postfix/relay-domains
> %> cat relay-domains
> nightless.twbbs.org
> bbs.cis.scu.edu.tw
# 全部接成一行不能用 "\" Orz
# 處理順序是先去 client-access 這個檔案看有沒有符合 regular expression 的
# domain,如果沒有就繼續看 reject_unknow_client,
# 如果也沒有就是一律 reject
# 有問題 man 5 postconf
smtpd_client_restrictions = permit_mynetworks,
check_client_access regexp:/usr/local/etc/postfix/client-access,
reject_unknown_client_hostname,
reject
> %> cat client-access
> # 註解用 '#' 開頭
> # 用 '/blah$/' 把 regular expression 包起來
> # OK 表示允許這個 request,不再對 smtpd_client_restrictions 後面所列的
> # 條件做檢查了。
> # http://www.postfix.org/regexp_table.5.html
> /new\.ptt\.cc?$/ OK
> /\.com?$/ 554 no mail relay here
> /\.com\.tw?$/ 554 no mail relay here
> /\.hinet\.net?$/ 554 no hinet mail relay here
# 加上 check_recipient_access 不要讓廣告信寄到非 bbs 信箱/看板
# 如果你不需要就拿掉 check_recipient_access 吧 :D
smtpd_recipient_restrictions = permit_mynetworks,
check_recipient_access /usr/local/etc/postfix/local-usr-deny,
reject #一律 reject 不用管了 :p
> %> cat local-usr-deny
> #只要不是寄到 bbsmail brdmail mailpost 的都 reject
> /^(.+)\.bbs@nightless\.twbbs\.org?$/ OK
> /^(.+)\.brd@nightless\.twbbs\.org?$/ OK
> /^(.+)\.bbs@bbs\.cis\.scu\.edu\.tw?$/ OK
> /^(.+)\.brd@bbs\.cis\.scu\.edu\.tw?$/ OK
> #非 bbs 帳號之 mailbox
> /^(.+)@nightless\.twbbs\.org?$/ REJECT
> /^(.+)@bbs\.cis\.scu\.edu\.tw?$/ REJECT
# 原本 postfix2.0+ 之後 local_recipient_maps 變成強制選項
# http://www.postfix.org/LOCAL_RECIPIENT_README.html#format
# 不設定自動使用預設值,官網強烈建議不要 disable 免的變成病毒轉信中心 :p
# 預設值: local_recipient_maps = proxy:unix:passwd.byname $alias_maps
# 詳細說明就在 main.cf 中
--------------------這邊開始轉給 *mail 以及 mailpost 處理---------------
# virtual 的部分,我們用 pcre 來處理 :
# virtual_maps 在 postfix2.0+ 之後被分割成
# virtual_alias_domains 以及 virtual_alias_maps
# 設定完之後跑 postmap /usr/local/etc/postfix/virtual 更新
# http://www.postfix.org/postconf.5.html#virtual_alias_domains
virtual_alias_maps = /usr/local/etc/postfix/virtual
# transport 的部分,我們用 hash 來處理:
transport_maps = hash:/usr/local/etc/postfix/transport
# 如果你不想執行 postalias hash:/usr/local/etc/postfix/aliases 這麼長串
# 的指令,你可以設定下面這行,要設的跟 alias_maps 一樣。
# 設定完以後只要用 newaliases 變可以更新,詳細說明就在本身的檔案
# 設定 alias,用預設值,如果不確定 alias dir 請 postconf -d | grep alias
# http://www.postfix.org/postconf.5.html#alias_maps
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
> %> cat virtual
> /^bbs(reg)?@nightless\.twbbs\.org(\.tw)?$/ bbs@mailpost.
> /^(.+)\.bbs@nightless\.twbbs\.org(\.tw)?$/ $1@bbsmail.
> /^(.+)\.brd@nightless\.twbbs\.org(\.tw)?$/ $1@brdmail.
> /^bbs(reg)?@bbs\.cis\.scu\.edu\.tw?$/ bbs@mailpost.
> /^(.+)\.bbs@bbs\.cis\.scu\.edu\.tw?$/ $1@bbsmail.
> /^(.+)\.brd@bbs\.cis\.scu\.edu\.tw?$/ $1@brdmail.
> %> cat transport
> #新增完以後,跑下面的命令讓它產生相關的設定:
> #postmap hash:/usr/local/etc/postfix/transport
> bbsmail bbsmail:
> brdmail brdmail:
> mailpost mailpost:
最後加下面指令到 /usr/local/etc/postfix/master.cf
%> cat master.cf
#無斷行
bbsmail unix - n n - - pipe flags=FR
user=bbs argv=/home/bbs/bin/bbsmail $mailbox
brdmail unix - n n - - pipe flags=FR
user=bbs argv=/home/bbs/bin/brdmail $mailbox
mailpost unix - n n - - pipe flags=FR
user=bbs argv=/home/bbs/bin/mailpost
以上大概就是這樣
我們站現在就不太怕奇奇怪怪的 relay 了 Orz
--
�i◣�i█ ██ █�i ██ █ ██ ██ ██ * ● . ' ▃▃
██ █�f ██ █ █ █▆ █▆ █▆ ' * . :: : :: : :
█◥ █ ██ █�i █ █▆ █▆ ▆█ ▆█ 城區夜未眠 : :: :: : ::
Origin:東吳資科城區夜未眠(nightless.twbbs.org)▊▋▎ [FROM:140.109.23.36]