明輝手游網(wǎng)中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

這個問題不該在這里問哦!看看吧,一段SENDMAIL的設置。不過想要學得更好,還是要再找其它的資料的。

[摘要]Sendmail的配置  Sendmail對一般的系統(tǒng)管理者而言,往往是個不敢手的「禁區(qū)」 ,因為絕大多數(shù)系統(tǒng)的使用者對E-Mail的需求與依賴的程度之高,可說是稍有分毫差錯,系統(tǒng)管理者就要準備接受...

Sendmail的配置


  Sendmail對一般的系統(tǒng)管理者而言,往往是個不敢手的「禁區(qū)」 ,因為絕大多數(shù)系統(tǒng)的使用
者對E-Mail的需求與依賴的程度之高,可說是稍有分毫差錯,系統(tǒng)管理者就要準備接受如雪片般飛
來的抗議與 抱怨!而Sendmail這個東東的「內(nèi)函」,似乎又有點不太容易理解: 與設定有關(guān)
的sendmail.cf 檔,如果不是下過一番死功夫,則讀起來如同讀天書一樣,只知道里面有英文字與
數(shù)字!所以一般人總是能不 動則不動,只要能用就好。不過,很不幸的,一般跟著機器而來
的sendmail總是有著令人心驚膽跳的「附加功能」,就是常常都有一些可以讓無聊人士作為侵入路
徑的BUG 或後門,某些BUG 還可以讓侵入 者經(jīng)由Sendmail而取得最高權(quán)限的root!一旦root權(quán)限
被人拿走了, 那麼這機器就可被人任意屠宰,最惡劣的,還可能破壞系統(tǒng)!

  Sun 在國內(nèi)的使用人口相當?shù)亩,筆者對Sun 也稍微比較熟悉一點。不過,Sun的Sendmail卻
是令人頗不敢恭維的,幾乎可以說:只要還在使用Sun 的Sendmail而沒有「常!筽atch 的話,那
甚麼系統(tǒng)安全都不必談了,談了也是白談;如果還在使用Sun 的Sendmail,那就如果系統(tǒng)抱著一顆
不定時炸彈,隨時一個不注意,都可能引爆:(。這一點,大家可以翻一翻CERT或8lgm看一看,幾乎
是只要有sendmail 的問題,Sun 大多跑了....。其他系統(tǒng)的Sendmail也不要偷笑,雖然大家的出
場率沒有Sun 高,可是也常會問題的。 另一方面,Sendmail 8.6.9與之前的版本最近剛發(fā)現(xiàn)有
個ident方面的Bug 。如果方便的話,請大家務必換成最新版。如果不方便的話,在v8.6.5之後的
版本有個克難式的補救法,即在sendmail.cf 加入這麼一行:
  Orident=0
  表示不作ident 的檢查。
  v8.6.5之前的版本就一定要換成最新版。

  本軟體在系統(tǒng)安全方面,是目前評價最高的,目前已知的BUG都已經(jīng)改好了,最主要的原因,
當然是要感謝作者Eric Allman ,他(或他們)能作到一發(fā)現(xiàn)重大的Bug (如系統(tǒng)安裝)就立刻出新版
。本軟體是一public domain ,可以在網(wǎng)路上各ftp server上找到其source code。由於該軟體的
發(fā)展者把一些必要的設定步驟自動化了,所以,其實安裝這個軟體并不是想像中那麼樣的困難。如
果連compile 的時間也算下去,順利的話,不用半個小時就可以安裝完畢!所以,「麥驚」啦!:


3.安裝Sendmail

3.1 下載Sendmail最新版本

  最新版本的Sendmail可以從 ftp://ftp.sendmail.org/pub/sendmail/ 得到!
如 sendmail.8.9.3.tar.gz 這是截止到文章發(fā)布的最新版本,size:1068290byte
有關(guān)最新版本的發(fā)布,請瀏覽Sendmail的主頁 http://www.sendmail.org

3.2 安裝Sendmail

  用root登陸或su成root后,先把tar.gz的包解開tar fvxz sendmail.8.9.3.tar.gz,用make
-f 開始編譯

  編譯完成后系統(tǒng)會產(chǎn)生系統(tǒng)設定文件,也就是sendmail.cf (一般這個文件都存放在/etc下)

  接下來,這按幾步繼續(xù)安裝: (注:~/sendmail為解開后的sendmail目錄)

  1.請切換至設定檔目錄~/sendmail/cf/cf 之下。找一個合適自己系統(tǒng)的XXXX.mc檔。筆者一
般上是使用tcpproto.mc 這一個不用uucp的檔。如果是用tcpproto.mc 這個檔,筆者在solaris
2.3 試了,得記得在檔中要加上一行:
  OSTYPE(solaris2)
  Sun 4.1.3 不必,其他系統(tǒng)就不曉得了。在目錄 ~/sendmail/cf/ostype下有幾個OSTYPE()可
以的 檔,只有這個目錄有資料的才可能能夠OSTYPE()。還有, 如果是 system V的/bin/mail,似
乎就得要加OSTYPE()。
  一句老話,詳情請看DOCUMENT:~/sendmail/cf/README。這希望有經(jīng)驗的朋友能夠補充:)
  如果不小心忘了加上OSTYPE()會怎樣?也不會怎樣,只會有"unknow mailer error" 的錯誤,
然後信收不到。
  有一點要提醒大家的,就是:在~/sendmail/cf/cf 所看到的各種系統(tǒng)的.mc 檔,都
是Sendmail 8.6.x的作者 Eric Allman 「演示」給大家看的,所以,可以看到檔名都有個"cs",
要是沒有修改就用這些檔的話,那一定會發(fā)生錯誤的。而要修改,有相當多地方要改,所以,如筆
者一般懶的人,用tcpproto.mc 還是比較簡單又不會出錯:)

  2.好,選定了某一個合意的.mc 檔,那接下來可執(zhí)行m4產(chǎn)生.cf 檔。請下指令:
# m4 XXX.mc > YYY.cf 如果是sun 4.1.3 ,可能系統(tǒng)會抱怨m4的版本太舊了。那請試一試用:
  # /usr/5bin/m4 XXX.mc >YYY.cf
  要是還是不行,那就請去抓新版的m4回來compile (可以在 http://www.gnu.org 找到gnu
的m4)。

  這個步驟是要把compile好的files, install 到系統(tǒng)上去了。

  羅嗦的我還是得再一次提醒您看看:把舊檔案備份好了嗎?

  好,假設compile 的結(jié)果非常沒挑戰(zhàn)性的沒有任何錯誤,產(chǎn)生.cf 檔過程也沒有甚麼值得注意
的訊息。所產(chǎn)生的.cf 檔 也改好了。而且最重要的:作好舊檔的備份(不是我要嚇人,這是以防
萬一)。

  1.挑個老板沒有在用mail的時間,快手快腳的切換至目錄~/sendmail/src ,下指令:
  # make -f Makefile.XXX install
  系統(tǒng)會把compile出來的~/sendmail/src/sendmail與man document拷貝到它們該有的目錄(
所以你還如果沒有備份/usr/lib/sendmail ,那趕快祈禱待回不要出問題,要不然就趕快準備淚水
哭吧!
  因為舊的會被compile 出來的sendmail覆蓋)

  2.切換至目錄~/sendmail/cf/cf ,把產(chǎn)生出來的YYY.cf檔拷貝到本系統(tǒng)sendmail.cf 應該在
的地方,
  如:/etc或 /etc/mail 。

  3.把舊sendmail daemon 的process 殺掉。(這應該不用我羅嗦吧!用ps -ax grep
sendmail grep -v grep 找出舊daemon的process(或head -1/etc/sendmail.pid 或 head -1
/etc/mail/sendmail.pid),然后用 kill -9 processID干掉它(或直接用 kill -9 `head -1
/etc/sendmail.pid`)。

  4.啟動新daemon。例如下指令:
  /usr/lib/sendmail -bd -q30m
  當然,保守一點,看舊的daemon怎麼跑,照舊的來下參數(shù)應該是沒有問題。
  這時,初步安裝就已經(jīng)完成了,接下來請看設置sendmail

3.3安裝Sendmail注意事項

  如果安裝不成功,請參考下面的問題:
  用vi或任一種編輯器,編輯的makefile檔,作一點點 必要的修改。所要修改的地方不多,下
面是可能要修改的地方:

  1."CC ="如果原檔所用的compiler并不是我們系統(tǒng)的,這才要改。

  2.本系統(tǒng)是否有安裝Berkerlay 的New database?如果有,跳過本點,到第3點。 如果沒有(
如:一般SunOS 都沒有裝),那麼請修改這幾 行(下面以Makefile.SunOS為例,但其他系統(tǒng)也類
似):

  A.在 DBMDEF= -DNDBM -DNEWDB -DNIS 一行,請改成: DBMDEF= -DNDBM -DNIS (即去
掉-DNEWDB)

  B.把這兩行REMARK起來: INCDIRS=-I/usr/sww/include/db --> #
INCDIRS=-I/usr/sww/include/db
LIBDIRS=-L/usr/sww/lib --> # LIBDIRS=-L/usr/sww/lib

  C.修改LIBS= -ldb -ldbm -lresolv 這一行成: LIBS= -ldbm -lresolv (即去掉-db )

  3.把nroff 的"-mandoc "參數(shù)改成一般系統(tǒng)可以接受的 "-man"(當然,這得依你的系統(tǒng)而定
,如果你是用groff,那就可以很愉快的直接使用,不必改這個參數(shù):)。如果不改也并不會影
響sendmail的安裝,只是不能看到格式化後的sendmail相關(guān)文件罷了。

  關(guān)于DIRECTORY PERMISSIONS的問題你需要執(zhí)行2條命令:

  chmod go-w / /etc /etc/mail /usr /var /var/spool /var/spool/mqueue
  chown root / /etc /etc/mail /usr /var /var/spool /var/spool/mqueue

  許多系統(tǒng)的spool目錄使用/usr/spool來代替/var/spool,設置別名的etc/mail取而代之的
是/etc,如果你要在sendmail.cf設置RunAsUser許選項,/var/spool/mqueue這個目錄需
要RunAsUser 用戶的權(quán)利,ok,這時開始編譯Sendmail,執(zhí)行這條命令

  sendmail -v -bi

  這時,開始初始化alias database. 如果它顯示:

  WARNING: writable directory /etc
  WARNING: writable directory /usr/spool/mqueue
  那么這個目錄列出了不適當?shù)膶懱貦?quán),應該避免多方面的的安全攻擊。

4.1 設置Sendmail.cf
  產(chǎn)生出來的YYY.cf一般得要改個地方才能正常的收信。請尋找"Cw",原來產(chǎn)生的.cf 檔,Cw應
是:Cwlocalhost請在localhost 之後加上你那一臺機器所有可能用來當收信地址的host name 。
  例如我有一臺機器叫:ftp.games.net.cn,而且也叫:gopher.games.net.cn,
而我希望這一臺機器這兩個名字都能收信,那我要這么作:
  Cwlocalhost ftp.games.net.cn gopher.games.net.cn

  順便說一下,Cw之後只能寫入本機器的名字,千萬不能寫入其他機器的名字,否則,甚麼地方
都能寄,那被寫的就一定不能寄。

  上面其實是簡略的說法,如果你對DNS 也熟悉的話,可參考這節(jié)來作判斷,判斷是否須要在Cw
之後寫入東東。否則請直接跳過這一小節(jié),閉上眼睛把本機器所用的所有名字都寫上就是了:)

  1.在一臺機器上,如果有多個名字(hostname),而是用CNAME 建立的,如:
  $ORIGIN games.net.cn
  ftp IN A 140.119.1.2
  gopher IN CNAME ftp

  那麼可以不必在Cw上標明。系統(tǒng)會透過DNS 找到其 Canonical name。

  2.如果一臺機器有多個名字,可是,每個名字是用A record 建立的。如:
  $ORIGIN games.net.cn.
  ftp IN A 192.168.25.2
  gopher IN A 192.168.25.2
  這種情況【一定】要記得在Cw後寫上你所要收信的名字。如果這個忘了寫,會有怎樣的問題呢
?
  忘了將會有從外面機器寄信來,沒有寫上的機器名將卻收不到信,機器會抱怨:
  "Local configuration error" 。

  如:我的sendmail.cf中的Cw這行是如下: Cw games.net.cn
  那我將無法使用這個地址:
  username@games.net.cn
  而只能用
  username@ftp.games.net.cn 否則將出現(xiàn)上述錯誤。

  如果發(fā)現(xiàn)了錯誤,那再加上去也就可以了。

  3.如果一臺機器有多interface ,各interface有其本身的名字,且要收信。
  這個情況也要在Cw之後寫明所有要收信的hostname。

  ok!一個標準的sendmail.cf文件就設置完了!

4.2 設置access

  打開/etc/mail/access,你會看到 (注意一些系統(tǒng)的access文件不再/etc/mail下,如找不到
請用whereis查找或檢查是否安裝正常)

  # Check the /usr/doc/sendmail-8.9.3/README.cf file for a description
  # of the format of this file. (search for access_db in that file)
  # The /usr/doc/sendmail-8.9.3/README.cf is part of the sendmail-doc
  # package.
  #
  # by default we allow relaying from localhost...
  localhost.localdomain RELAY
  localhost RELAY

  如果您的IP地址是192.168.25.11的話,這樣請在最后一行加上192.168.25.11   RELAY
  其文件的最后三行應是:

  localhost.localdomain RELAY
  localhost RELAY
  192.168.25.11 RELAY

  加上這句話您就可以用sendmail發(fā)送接收mail了!但是如果您想讓別人也可以使用sendmail的
話,他的IP是202.168.25.22,這樣就在在最后一行加入202.168.25.22   RELAY
  其文件的最后四行應是:

  localhost.localdomain RELAY
  localhost RELAY
  192.168.25.11 RELAY
  192.168.25.22 RELAY

  我想,您現(xiàn)在一定有個疑問是,如果我想設置50個人用sendmail是不是需要加50個IP。?
  嘿嘿,不用啦,是這樣,sendmail考慮到多用戶的時候,它準許你添入整個C類地址,(B類好
像也可以,我沒try過。
  其格式如下:

  localhost.localdomain RELAY
  localhost RELAY
  192.168.25 RELAY

  這樣,您就是把192.168.52這整個C都加入的sendmail中,這個C類地址的用戶,如果在你的系
統(tǒng)里有賬號的話,就可以使用sendmail收發(fā)信件了!

4.3 設置pop3

  如果您需要pop3來接收信件,您需要打開pop3端口,

  vi /etc/inetd.conf 查找到
  # pop-3 stream tcp nowait root /usr/sbin/tcpd ipop3d
  把#號刪掉。

  vi /etc/services 查找到
  #pop-3 110/tcp # POP version 3
  把#號刪掉。

  這樣,在restart inetd后,pop3 110端口就可以接信了!如果還是不行,請檢查是否安裝pop
3端口!

4.4 如何restart sendmail;inetd以及注意事項

  有一點要提醒大家的,要用"kill -9 [pid-of-sendmail]" ,從新啟動sendmail
  如果用 kill -HUP 是不會發(fā)生作用的! (這是頗多人常遇到的問題,切記!)
  在redhat6中用/etc/rc.d/init.d/sendmail restart即可!

  inetd是/etc/rc.d/init.d/inetd restart

5.1 sendmail的別名和forward


  (1) 關(guān)于直接用IP地址發(fā)信

  mail user@[166.111.IP.Address]
  只要用[]將IP地址括起來就行了

  (2) 關(guān)于alias

  sendmail在/etc下有兩個文件 aliases和aliases.db, 后者是前者用newaliases
生成的別名數(shù)據(jù)庫. 你可以手工編輯/etc/aliases, 然后運行newaliases更新數(shù)據(jù)庫(其
實newaliases是個到sendmail的 symlink)

  eg: nickname : user@hotmail.com
  alias-name: real-user-account

  則以后mail nickname就可以將信寄到user@hotmail.com處
  而別人寄給alias-name@your.domain.name的信就會轉(zhuǎn)給真正的用戶   
 real-user-account

  (3) 關(guān)于forward

  在你的$HOME目錄下面編輯一個.forward文件, 里面寫上你要forward的目的e-mail
地址或本機的用戶名, 就可以自動將信 forward到相應地址

  eg: .forward: user@hotmail.com
  或 other-user-account
  則給此人的e-mail會forward到hotmail或other-user-account處

  (4) 關(guān)于vacation

  去找一個vacation包(如RedHat的contrib中有vacation的rpm), 裝上后就一個
  /usr/bin/vacation程序和一個man.
  先運行vacation, 它會讓你編輯$HOME/.vacation.msg文件, 就是要發(fā)回給對方
告訴他你現(xiàn)在不看信的東西啦. 然后編輯$HOME/.forward文件, 寫這樣一句 \username,
" /usr/bin/vacation username", username 要換回你自己的了然后運行vacation -I建
立$HOME/.vacation.db就好了 (看看man更詳細)

  (5) 關(guān)于sendmail的一些文件

  /var/log/maillog sendmail的log, 分析錯誤有用
  /var/spool/mail/$USER 進來的信, 每個用戶一個文件
  /var/spool/mqueue mail queue, 可以用mailq看隊列中待發(fā)的信
  (mailq也是 sendmail的symlink了)
  dfxxxxxx 這是信的內(nèi)容
  qfxxxxxx 這是信的subject和別的信息 (反正每信一個號了, 配對的)
  /etc/sendmail.cf sendmail的配置文件, 改動它可要小心
  /etc/sendmail.cw 假如你的機器有好多alias的話就把名字寫在
  這個文件中, 這樣寫哪個都能收到信

5.2 限制郵件的大小

  Modify /etc/sendmail.cf:
  Mlocal, P=/bin/mail, F=lsDFMrmn, S=10, R=20/40,
  Maxsize=1000000,
  A=mail -d $u
  Mprog, P=/usr/local/sendmail/smrsh, F=lsDFMeu, S=10, R=20/40, D=$z:/,
  Maxsize=1000000,
  A=sh -c $u

  This limits incoming mail processed by by smrsh and /bin/mail to 1 million bytes.

  You can do the same with the Mstmp, Mesmtp, and Mrelay statements to limit the
size of outgoing mail as well.
  You can do the same with the Mstmp, Mesmtp, and Mrelay statements to limit the
size of outgoing mail as well.