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

來源:互聯網
上載者:User
問題

Sendmail的配置


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

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

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


3.安裝Sendmail

3.1 下載Sendmail最新版本

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

3.2 安裝Sendmail

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

  編譯完成後系統會產生系統設定檔案,也就是sendmail.cf (一般這個檔案都存放在/etc下)

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

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

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

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

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

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

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

  2.切換至目錄~/sendmail/cf/cf ,把產生出來的YYY.cf檔拷貝到本系統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怎麽跑,照舊的來下參數應該是沒有問題。
  這時,初步安裝就已經完成了,接下來請看設定sendmail

3.3安裝Sendmail注意事項

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

  1."CC ="如果原檔所用的compiler並不是我們系統的,這才要改。

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

  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 "參數改成一般系統可以接受的 "-man"(當然,這得依你的系統而定
,如果你是用groff,那就可以很愉快的直接使用,不必改這個參數:)。如果不改也並不會影
響sendmail的安裝,只是不能看到格式化後的sendmail相關檔案罷了。

  關於DIRECTORY PERMISSIONS的問題你需要執行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

  許多系統的spool目錄使用/usr/spool來代替/var/spool,設定別名的etc/mail取而代之的
是/etc,如果你要在sendmail.cf設定RunAsUser許選項,/var/spool/mqueue這個目錄需
要RunAsUser 使用者的權利,ok,這時開始編譯Sendmail,執行這條命令

  sendmail -v -bi

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

  WARNING: writable directory /etc
  WARNING: writable directory /usr/spool/mqueue
  那麼這個目錄列出了不適當的寫特權,應該避免多方面的的安全攻擊。

4.1 設定Sendmail.cf
  產生出來的YYY.cf一般得要改個地方才能正常的收信。請尋找"Cw",原來產生的.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 也熟悉的話,可參考這節來作判斷,判斷是否須要在Cw
之後寫入東東。否則請直接跳過這一小節,閉上眼睛把本機器所用的所有名字都寫上就是了:)

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

  那麽可以不必在Cw上標明。系統會透過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 否則將出現上述錯誤。

  如果發現了錯誤,那再加上去也就可以了。

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

  ok!一個標準的sendmail.cf檔案就設定完了!

4.2 設定access

  開啟/etc/mail/access,你會看到 (注意一些系統的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發送接收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

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

  localhost.localdomain RELAY
  localhost RELAY
  192.168.25 RELAY

  這樣,您就是把192.168.52這整個C都加入的sendmail中,這個C類地址的使用者,如果在你的系
統裡有帳號的話,就可以使用sendmail收發信件了!

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 是不會發生作用的! (這是頗多人常遇到的問題,切記!)
  在redhat6中用/etc/rc.d/init.d/sendmail restart即可!

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

5.1 sendmail的別名和forward


  (1) 關於直接用IP地址發信

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

  (2) 關於alias

  sendmail在/etc下有兩個檔案 aliases和aliases.db, 後者是前者用newaliases
產生的別名資料庫. 你可以手工編輯/etc/aliases, 然後運行newaliases更新資料庫(其
實newaliases是個到sendmail的 symlink)

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

  則以後mail nickname就可以將信寄到user@hotmail.com處
  而別人寄給alias-name@your.domain.name的信就會轉給真正的使用者   
 real-user-account

  (3) 關於forward

  在你的$HOME目錄下面編輯一個.forward檔案, 裡面寫上你要forward的目的e-mail
地址或原生使用者名稱, 就可以自動將信 forward到相應地址

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

  (4) 關於vacation

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

  (5) 關於sendmail的一些檔案

  /var/log/maillog sendmail的log, 分析錯誤有用
  /var/spool/mail/$USER 進來的信, 每個使用者一個檔案
  /var/spool/mqueue mail queue, 可以用mailq看隊列中待發的信
  (mailq也是 sendmail的symlink了)
  dfxxxxxx 這是信的內容
  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.


相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。