Sendmail與M$的exchange比較起來,sendmail有較高的穩定度,消耗的系統資源較低,且可自由的改寫規則集(如果你能記熟那些長的像”梵文”的東西的話)
話說如此,Exchange有許多企業解決方案也是相當好用的,而且如果沒有非常特別的需求,並且硬體配備不錯,Exchange在管理方面是很好用的。
在這邊基本的介紹一下Sendmail系統的基本設置。
more..
在Internet上,有許多UNIX、Linux的主機使用的就是sendmail,雖說因為sendmail程式龐大(倒是沒有Exchange那麼大),軟體容易發生漏洞,且也因sendmail必須利用root權限啟動,如果找出漏洞,不管是over follow還是利用郵件處理規則集的失誤造成異常的反應,這些動作都是以root權限執行,這也造成sendmail為部分入侵者的第一目標,由於sendmail程式龐大,所以除非不用,否則建議多多注意相關的更新訊息或是版本。
不管怎麼說,如果防護做的妥當,這些倒都是還好,畢竟它Sendmail是一個功能強大且穩定度極高的郵件伺服軟體。
目的:
sendmail要讓它會動是很簡單,不過要是需要更改設定的話倒是挺麻煩的,市面上見到介紹sendmail的書有O’Reilly Sendmail安裝與設定,一大一小,兩本加起來的厚度都快要可以當枕頭了。不管怎麼說,還是在這裡把目前一般有用到的相關設定以及基本概念大致說明,讓新人能夠快速的建立mail service、對內外收送e-mail,並且處理基本狀況。
/etc/sendmail.cf基本說明:
sendmail大部分主體的設定就是在這個檔案裡面,但是sendmail的組態設定值太多了,再度強調本文件的最主要目標是快速上手,所以就只列舉幾個比較會用到的設定項,其實系統default產生的sendmail.cf裡面有滿詳盡的註解,稍微看一下應該就能了解。
參數定義說明:
Sendmail.cf裡面的參數,它的定義項不同於一般軟體,許多軟體都是「設定項目 設定值」或是「設定項=設定值」,Sendmail的有些設定項與設定值是直接連在一起的。舉例來說,DM項的設定值定起來是這個樣子的:「DMxxxxx.com.tw」,但是O類的設定卻又是分開的,不同的定義方式,例如:「O DaemonPortOptions=Name=MTA」,所以設定sendmail時要稍微注意一下其他選項的功能。
組態設定:
DM:偽裝網域,如果沒有經過設定,由這部主機寄出的信件,所解出的mail address都會長成這個樣子userid@host.domainname.com.tw,一般來說都不會使用這樣的mail address,除網域有多部mail主機,分別負責其他區域,期望使用者的信件直接寄到當地郵件主機,不然都是只留domain name,利用dns的mx紀錄指出mail server,如果有指定的話,只要利用這部郵件主機寄出去的信件,解出來的寄件者地址就會變成userid@domainname.com.tw。
DS:轉寄主機,如果沒有設定,就是這部mail server的所有外寄信件,皆直接遞送到對方的郵件主機。使用時機:通常是於企業內部的次要郵件主機,例如外地倉庫建立專門供倉庫使用的mail server,倉庫的mail server並沒有直接對外連接到internet,倉庫的使用者都是在利用這部mail server寄信,這部mail server收到信件之後,將信件轉送到台北有直接連接internet的mail server,台北的mail server再將信件轉送出,DS就是指定台北的mail server。
DH:將這部主機所有的信件送至指定的mail server,包括建立於本機的root、user帳號的信件。
DR:如這部主機沒有這個帳號,會將郵件轉送到何部主機。
DZ:對方與這部主機利用SMTP建立交談的時候,主機所回應的訊息,Telnet對方主機Port 25就可以看到了。
Dn:主機回應的訊息該寄予何帳號。
以下三項是指定sendmail郵件遞送的變化、限制的規則定義檔位於何處,一般來說不用更改。
Kvirtuser hash -o /etc/mail/virtusertable.db :指定virtusertable.db檔案位置
Kaccess hash -o /etc/mail/access.db :指定access.db的檔案位置
FR-o /etc/mail/relay-domains %[^#] :指定relay domain的設定檔
指定Alias name檔的位置。
O AliasFile=/etc/aliases
指定mail queue位於何目錄。
O QueueDirectory=/var/spool/mqueue
Telnet 25 Port的招呼訊息,$j是主機的FQDN(Fully Qualified Domain Name),$v會顯示出sendmail版本,$Z會顯示在DZ所定義的內容,$b會顯示連結建立時間。
O SmtpGreetingMessage=$j Sendmail $v/$Z; $b
其餘的部分比較少動到( 重點是因為不會……^_^ )
再來就是介紹一些週邊相關檔案的用途,這些檔案放置在/etc/mail的目錄,進入此目錄之後,修改各檔案,更改完畢之後,請記得要make db file,指令用法如下:
make access access.db
/etc/mail/ relay-domains:設定主機可接受目的為何處的relay郵件,如果與access的reject互相牴觸,以access設定的為優先。
/etc/mail/access:設定domain、ip對於此主機遞送的mail所回應的動作,有accept、reject、discard、relay這幾種動作,可以對於郵件主機做一基本的管理、限制。
/etc/mail/virtusertable:指定將特定收件者的郵件地址轉換成欲變更的地址,例如:由Kitty本機寄送給root@Kitty.xxxxx.com.tw的Log郵件,轉寄給amos@xxxxx.com.tw,此部郵件主機的root便不會接收到不應該接收的信件。
/etc/mail/mailertable:將固定網域的信件轉送至固定的郵件主機。
關於m4:
另外sendmail.cf可以利用「m4」建立,本來就不太熟了,又因為很久沒用,忘記設定方式跟指令,一般Linux的m4檔案也是放在/etc/mail的目錄裡面,檔案名稱為Linux.mc,可使用指令:m4 linux.mc > sendmail.cf,可以將linux.mc的規則檔轉成sendmail.cf,有興趣的人可以參照O’Reilly的「Sendmail安裝與管理」研究一下。
郵件存放區:
sendmail的預設值中,所有的user信件都是放置於/var/spool/mail,所有檔案權限應為
-rw------- 1 userid users 556 Nov 6 11:20 userid
Antivir & amavis-sendmail:
在SuSE-7.2之後,sec的選項裡面有多了一項「amavis」,這是一個for sendmail的郵件掃毒軟體,amavis可以配合許多種掃毒軟體運作,在SuSE裡面的amavis,預設是配合Antivir這個程式使用,所以如果要安裝的話,請先找到antivir,並且安裝上即可,沒記錯的話應該是在CD5的pay裡面,裝好antivir之後,再安裝amavis,並且在sendmail.cf裡面加上兩行:
O InputMailFilters=milter-amavis
Xmilter-amavis, S=local:/var/amavis/amavis-milter.sock, T=S:10m;R:10m;E:10m
然後啟動amavis ( /etc/init.d/amavis start ) ,再啟動sendmail ( /etc/init.d/sendmail start),有時候啟動sendmail時,會出現沒有/var/amavis/amavis-milter.sock這個檔案的訊息,請尋找出amavis-milter.sock,將Xmilter-amavis修改為正確的位置。
mail address aliases:
sendmail還有alias name的功能,我們可以看做單一帳號有數個名稱,比如說semdmail會將所有系統回報以mail傳送給postmaster這個郵件帳號,其實postmaster這個帳號它是不存在的,是利用aliases的功能,將所有寄至postmaster@xxxxx.com.tw的郵件轉遞至root@xxxxx.com.tw。
請開啟/etc/aliases這個檔案,看一下裡面的結構,他的定義方式是:
虛擬名稱: 實際帳號名稱
test: root
abc: root
這樣的設定方式,在外部信件寄給test@xxxxx.com.tw的時候,不會發生user unknow的情況,而這些信件會到root@xxxxx.com.tw的帳號裡面,abc@xxxxx.com.tw的address亦同。
PS:請記住,在修改完/etc/aliases之後,請記得執行 newaliases,不然之前的修改不會生效的噢。
郵件forward:
另外還有forward的方式,由於公司內的所有user帳號都是建立在同一目錄,login shell設定為/dev/null,所以這些user都不能夠登入郵件主機,但是仍可收發e-mail,puffy.xxxxx.com.tw使用者在主機上面的login directory 是 /local/ghestftp/./guests,不過有部分的user,例如James、Sandy、Jackie、Rex這些帳號都是有自己的home directory,只要在其home directory裡面建立一個檔案,檔案名稱是 .forward ,裡面直接鍵入要轉送的mail address即可,如果forward給別人之後還是想要在自己的mail account裡面留一份,那就在鍵入自己的mail address即可,以root為例,如果想要將所有root的信件轉到admin這個account,也要留一個備份,那就在/root裡面建立 .forward這個檔案,裡面鍵入:
root@xxxxx.com.tw
admin@xxxxx.com.tw
即可。
Mailing list ─ majordomo:
於企業中,郵件主機的群組功能是個基本個功能,不然發個信給某個部門,光是點人就點個半死,那不是很累嗎?majordomo就是這樣的軟體,信件只要寄給某個群組帳號,主機會再將郵件分送給群組名單內的人,有點類似Outlook的郵寄群組,不過是由主機幫使用者處理掉這個動作,在我們公司的majordomo的設定方式有點不同,如果利用其他3rd party的軟體設定majordomo,產生出的設定檔的用法跟我們公司內部使用的不同。不過先別管這麼多,我們還是以目前公司的組態為主。
/etc/majordomo.cf:
在/etc裡面有個叫做majordomo.cf的檔案,這裡是設定majordomo的運作方式以及規則,設定值如下:
$whereami = "mail-i.xxxxx.com.tw";
chop($whereami = `hostname -f`);
$whoami = "Majordomo@$whereami";
$whoami_owner = "Majordomo-Owner@$whereami";
if ( defined $ENV{"HOME"}) {
$homedir = $ENV{"HOME"};
} else {
$homedir = "/usr/lib/majordomo";
}
$homedir2 = "/var/lib/majordomo";
$listdir = "/var/lib/majordomo/lists";
$digest_work_dir = "/var/lib/majordomo/digest";
$log = "/var/lib/majordomo/Log";
$sendmail_command = "/usr/sbin/sendmail";
$mailer = "$sendmail_command -oi -oee -f$sender";
$bounce_mailer = "$sendmail_command -oi -oee -f$sender -t";
$max_loadavg = 10; # Choose the maximum allowed load
$uptime = `/usr/bin/uptime` if -x '/usr/bin/uptime'; # Get system uptime
($avg_1_minute, $avg_5_minutes, $avg_15_minutes) =
$uptime =~ /average:s+(S+),s+(S+),s+(S+)/;
exit 75 if ($avg_15_minutes >= $max_loadavg); # E_TEMPFAIL
$config'default_subscribe_policy = "open+confirm";
$no_x400at = 0;
$no_true_x400 = 0;
$filedir = "$listdir";
$filedir_suffix = ".archive";
$index_command = "/bin/ls -lRL";
$return_subject = 1;
$majordomo_request = 1;
$max_which_hits = 0;
umask(007);
$config_umask = 007;
die "Perl version $] too old
" if ($] < 4.019);
@safedirs = ( );
$TMPDIR = $ENV{'TMPDIR'} || "/var/lib/majordomo/tmp";
$MAX_HEADER_LINE_LENGTH = 128;
$MAX_TOTAL_HEADER_LENGTH = 1024;
$admin_headers = <<'END';
/^subject:s*subscribe?/i
/^subject:s*unsubscribe?/i
/^subject:s*unsw*b/i
/^subject:s*.*un-sub/i
/^subject:s*help?/i
/^subject:s.*?change?.*?address?/i
/^subject:s*request?(.*?)?addition?/i
/^subject:s*cancel?/i
END
$admin_body = <<'END';
/?cancel?/i
/?add me?/i
/?delete me?/i
/?removes+me?/i
/?change?.*?address?/
/?subscribe?/i
/^sub?/i
/?unsubscribe?/I
/^unsub?/i
/?unsw*b/i
/^s*helps*$/i
/^s*infos*$/i
/^s*infos+S+s*$/i
/^s*listss*$/i
/^s*whichs*$/i
/^s*whichs+S+s*$/i
/^s*indexs*$/i
/^s*indexs+S+s*$/i
/^s*whos*$/i
/^s*whos+S+s*$/i
/^s*gets+S+s*$/i
/^s*gets+S+s+S+s*$/i
/^s*approve?/i
/^s*passwd?/i
/^s*newinfo?/i
/^s*config?/i
/^s*newconfig?/i
/^s*writeconfig?/i
/^s*mkdigest?/i
END
$global_taboo_headers = <<'END';
/^subject: ndn: /i
/^subject:s*RCPT:/i
/^subject:s*Delivery Confirmation?/i
/^subject:s*NON-DELIVERY of:/i
/^subject:s*Undeliverable Message?/i
/^subject:s*Receipt Confirmation?/i
/^subject:s*Failed mail?/i
/^subject:s*Returned mail?/i
/^subject:s*unable to deliver mail?/i
/^subject:s.*?away from my mail?/i
/^subject:s*Autoreply/i
END
#
$global_taboo_body = <<'END';
END
$majordomo_dont_reply = '(mailer-daemon|uucp|listserv|majordomo|listproc)@';
1;
Majordomo在/etc/aliases:
Majordomo有部分的設定在/etc/的aliases裡面,舉employees@xxxxx.com.tw這個帳號做例子,設定方式如下:
employees-owner: Reporter@xxxxx.com.tw
owner-employees: employees-owner
employees-approval: employees-owner
employees: :include:/var/lib/majordomo/lists/employees
employees-request: "|/usr/lib/majordomo/wrapper request-answer employees"
只要在/etc/aliases裡面加上這幾行設定,另外於/var/lib/majordomo/lists這個目錄裡面建立一個名為employees的郵件地址清單即可。
另外的建立、設定方式:
其實之前的設定值看起來長長一串,亂嚇人的,所以這個也可以靠webmin這個工具來建立,之後再說一下 webmin 如何安裝、啟動、使用。
Posted by 椰子殼
