OpenBSD 可以說是目前公認最安全的作業系統,而且它的結構非常的簡捷有力,不會拖泥帶水,所以變成是我最喜歡的作業系統。很多專注在防火牆的工程師都很愛用它,不過因為網路上的文章比較少,導致讓很多對它有興趣的人望之卻步。希望藉由我的一些經驗分享,讓大家都能夠對這個系統有更深的了解。
Mail Server 是目前我認為最複雜的網路服務的一種,因為它必需要結合多種軟體,來達到我們所要提供的功能。在這裡,我要特別介紹一個網站,http://www.kernel-panic.it/,作者很顯然的也是OpenBSD的愛好者。本篇教學最主要的來源就是根據此網站上的Mail Server 而來的,你可以說是這篇就是它的中文版本。不過原文章用的是Courier-IMAP 和 SquirrelMail ,我把它改為用 Dovecot 和 Roundcubemail。
在這篇教學中,我們不會去討論如何安裝OpenBSD ,也許之後我會再發一篇有關OpenBSD 的安裝教學,不過在這裡先預設你已經安裝好OpenBSD了。所有的軟體都是用Ports安裝,因為我覺得BSD 的Ports 還蠻酷的,而且有的時候Package 並沒有你要的功能,必須用 Ports 才能把你要的功能安裝上去。
1. Postfix
Postfix 由 Wietse Venema 所開發,目的是為了取代安全性低、效能不佳且設定檔非常難懂的 Sendmail。所以它也提供了一個叫作 Sendmail程式,來處理原本 Sendmail應該要處理的事情。
在正式進入安裝之前,要特別說明的是:Mail Server 跟 DNS關係很重要,DNS沒設定好的話,Mail Server 也就無法運作了。在這裡,我們預設的網域是 skycat.no-ip.org,主機名稱是 mail.skycat.no-ip.org,記得網址的MX記錄要設定好,不然就收不到信了
1.1 安裝和設定
我們要設定 Postfix 使用 SMTP驗證和要支援Mysql。在預設的Package 裡並沒有同時支援兩個的套件,所以我們要用Ports來安裝。用Mysql 來處理我們的帳號資料和實現多網域,而且之後用 Dovecot透過Mysql 來驗證登入。
# cd /usr/ports/mail/postfix/snapshot # env FLAVOR="mysql sasl2" make install
安裝完後,設定檔會儲存在 /etc/postfix 之下。主要的設定檔是 main.cf ,設定參數共有幾百個可以設定,不過我們只要看主要幾個設定就好。
/etc/postfix/main.cf # Directory containing all the post* commands command_directory = /usr/local/sbin # Directory containing all the Postfix daemon programs daemon_directory = /usr/local/libexec/postfix # Full pathnames of various Postfix commands sendmail_path = /usr/local/sbin/sendmail newaliases_path = /usr/local/sbin/newaliases mailq_path = /usr/local/sbin/mailq # Directories containing documentation html_directory = /usr/local/share/doc/postfix/html manpage_directory = /usr/local/man readme_directory = /usr/local/share/doc/postfix/readme # The owner of the Postfix queue and of most Postfix daemon processes mail_owner = _postfix # The group for mail submission and queue management commands setgid_group = _postdrop # The myhostname parameter specifies the internet hostname of this mail system. It is used as default for many other configuration parameters (default = system's FQDN) myhostname = mail.skycat.no-ip.org # The internet domain name of this mail system. Used as default for many other configuration parameters (default = $myhostname minus the first component) mydomain = skycat.no-ip.org # The domain name that locally-posted mail appears to come from, and that locally posted mail is delivered to. As you can see, a parameter value may refer to other parameters myorigin = $mydomain # Network interface addresses that this mail system receives mail on inet_interfaces = all # List of domains that this machine considers itself the final destination for. Virtual domains must not be specified here mydestination = $myhostname, localhost.$mydomain, localhost # List of "trusted" SMTP clients allowed to relay mail through Postfix. mynetworks = 127.0.0.0/8 # What destination (sub)domains this system will relay mail to relay_domains = $mydestination # List of alias databases used by the local delivery agent alias_maps = hash:/etc/postfix/aliases # Alias database(s) built with "newaliases" or "sendmail -bi". This is a separate configuration parameter, because alias_maps may specify tables that are not necessarily all under control by Postfix alias_database = hash:/etc/postfix/aliases # SMTP greeting banner smtpd_banner = $myhostname ESMTP $mail_name # Postfix is final destination for the specified list of "virtual" domains virtual_mailbox_domains = skycat.no-ip.org # Virtual mailboxes base directory virtual_mailbox_base = /var/vmail # Optional lookup tables with all valid addresses in the domains that match # $virtual_mailbox_domains. virtual_mailbox_maps = hash:/etc/postfix/vmailbox # The minimum user ID value accepted by the virtual(8) delivery agent virtual_minimum_uid = 2000 # User ID that the virtual(8) delivery agent uses while writing to the recipient's mailbox virtual_uid_maps = static:2000 # Group ID that the virtual(8) delivery agent uses while writing to the recipient's mailbox virtual_gid_maps = static:2000 # Optional lookup tables that alias specific mail addresses or domains to other local or remote address virtual_alias_maps = hash:/etc/postfix/virtual
我們將會使用虛擬用戶(非系統用戶),所以我們要建立一個帳號來供存取虛擬用戶的信箱。我們預設的路徑是 /var/vmail ,指定的 uid 和 gid 是2000 ,並且在 main.cf 中的 virtual_uid_maps 和 virtual_gid_maps 參數中設定它。
# useradd -d /var/vmail -g =uid -u 2000 -s /sbin/nologin \ > -c "Virutal Mailboxes Owner" -m vmail
我們希望所有的信箱都能集中在同一個目錄中,也就是 /var/vmail 。我們在 main.cf 中設定 virtual_mailbox_base 的參數為 /var/vmail 。
在我們設定的 virtual_mailbox_maps 參數中,指向 /etc/postfix/vmailbox 檔。在這個檔中設定我們的虛擬用戶資料,每行一筆資料,資料格式是:帳號 信箱路徑。
/etc/postfix/vmailbox syfeng@skycat.no-ip.org skycat.no-ip.org/syfeng/ [...]
virtual_alias_maps 參數中可以讓我們建立帳號的別名,也就是寄到別名的信箱,會同步的寄到所指向的信箱中,你可以想做是信箱的群組。這裡我們建立兩個別名,也就是預設應該要 有的帳號 postmaster 和 abuse。
/etc/postfix/virtual postmaster@skycat.no-ip.org syfeng@skycat.no-ip.org abuse@skycat.no-ip.org syfeng@skycat.no-ip.org [...]
修改 /etc/postfix/aliases :在這個檔裡已經預先幫我們建立了一些預設的帳號,在這個檔裡是給本機帳號用的別名,我們只要修改 root: 那一行就可以了。這裡指的是,只要寄到本機帳號 root 的信,都會傳給 syfeng@skycat.no-ip.org 。
/etc/postfix/aliases root: syfeng@skycat.no-ip.org [...]
最後,我們要建立索引檔供 Postfix 使用:
# /usr/local/sbin/postmap /etc/postfix/vmailbox # /usr/local/sbin/postmap /etc/postfix/virtual # /usr/local/sbin/newaliases
啟用 Postfix:
# /usr/local/sbin/postfix-enable
將原先的 Sendmail 排程註解掉
# crontab -e # sendmail clientmqueue runner #*/30 * * * * /usr/sbin/sendmail -L sm-msp-queue -Ac -q
接著編輯 /etc/rc.conf.local 啟動 Postfix/etc/rc.conf.local # Specify a location where syslogd(8) should place an additional log socket for Postfix syslogd_flags="-a /var/spool/postfix/dev/log" # Make Postfix start in background and process queued messages every 30 min sendmail_flags="-bd"現在,我們可以重開機了。
沒有留言:
張貼留言