歡迎您光臨本站 註冊首頁

使用solaris自帶的sendmail快速建立一個郵件伺服器

←手機掃碼閱讀     火星人 @ 2014-03-09 , reply:0
本文出自:http://www.chinaunix.net 作者:三少爺 整理:段譽
原文出自:http://www.chinaunix.net [Solaris]精華區
整理文檔出自:http://www.wway.net/ay/docs/sendmail_toc.html


第一節、了解sendmail

sendmail的啟動文檔一般是/etc/init.d/sendmail,我們通過他可以清楚的了解sendmail 使用的幾個文檔.

# cd /etc/init.d/
# more sendmail
通過這個文檔我可以清楚的看到幾個相關文件:
/usr/lib/sendmail 實際運行的執行文件
/etc/mail/sendmail.cf 主配置文件
/var/spool/mqueue 郵件隊列
/etc/default/sendmail 初始變數設置文件等等.
運行機制簡單的說就是由/etc/init.d/sendmail啟動/usr/lib/sendmail,/usr/lib/sendmail載入/etc/mail/sendmail.cf裡面關於sendmail的設置.

#!/sbin/sh
#
# Copyright (c) 1992, 1995, 1997 - 2000 by Sun Microsystems, Inc.
# All rights reserved.
#
#ident "@(#)sendmail 1.16 00/09/06 SMI"

ERRMSG1='WARNING: /var/mail is NFS-mounted without setting actimeo=0,'
ERRMSG2='this can cause mailbox locking and access problems.'

'start')
if [ -f /usr/lib/sendmail -a -f /etc/mail/sendmail.cf ]; then
if [ ! -d /var/spool/mqueue ]; then
/usr/bin/mkdir -m 0750 /var/spool/mqueue
/usr/bin/chown root:bin /var/spool/mqueue
fi
MODE="-bd"
if [ -f /etc/default/sendmail ]; then
. /etc/default/sendmail
fi

if [ -z "$QUEUEINTERVAL" ]; then
QUEUEINTERVAL="15m"
fi
case $QUEUEINTERVAL in
*s | *m | *h | *d | *w) ;;
*) QUEUEINTERVAL="15m" ;;
esac
if [ $QUEUEINTERVAL -le 0 ]; then
QUEUEINTERVAL="15m"
fi
/usr/lib/sendmail $MODE -q$QUEUEINTERVAL $OPTIONS &



for i in $ETRN_HOSTS; do
SERVER=`echo $i | /usr/bin/sed -e 's/:.*$//'`
CLIENTS=`echo $i | /usr/bin/sed -n -e 's/,/ /g'
-e '/:/s/^.*://p'`
/usr/sbin/etrn $SERVER $CLIENTS >/dev/null 2>&1 &
done
fi

if /usr/bin/nawk 'BEGIN{s = 1}
$2 == "/var/mail" && $3 == "nfs" && $4 !~ /actimeo=0/ &&
$4 !~ /noac/{s = 0} END{exit s}' /etc/mnttab; then

/usr/bin/logger -p mail.crit "$ERRMSG1"
/usr/bin/logger -p mail.crit "$ERRMSG2"
fi
;;

'stop')
/usr/bin/pkill -x -u 0 sendmail
;;

*)
echo "Usage: $0 { start | stop }"
exit 1
;;
esac
exit 0

第二節、sendmail.cf的配置
/etc/mail/sendmail.cf這個文件一般不要修改,其配置規則簡單介紹如下:
sendmail.cf文件通常由若干個節組成,以下是常見的節名:
Local Information 定義有關個人主機的信息
General Macros 定義有關本地網路的宏
Classes 定義用於特殊郵件傳輸程序的主機名群或域名群
Version Number 標識sendmail.cf文件的版本號
Special Macros 定義由sendmail所用的一些特殊的宏
Option 定義sendmail選項
Message Precedence 定義sendmail所用的各種消息的優先順序值
Trusted Users 定義在發送郵件時可忽略發送者地址的用戶
Format of Headers 定義sendmail插入的郵件首部格式
Rewriting Rules 定義用於重寫郵件地址的規則
Mailers 定義sendmail用來調用郵件傳輸程序的指令
Ruleset Zero 定義一組稱為Ruleset Zero的特殊重寫規則
Machine-dependent part of Ruleset Zero 定義與配置相關的Ruleset Zero部分

sendmail.cf命令從每一行的第一格開始,#開頭的表示註釋,第一個字元表示指令,以下是每個指令的意義:
V 設定組態文件sendmail.cf的版本


M 指定一個MTA
D 定義宏x的值為values
命令D用來定義宏,然後該宏就可以被sendmail.cf文件中的其他配置命令和sendmail程序自身調用.宏的名字可以是任何單個的ASCII字元,以下是sendmail中所有的內部宏:
a RFCs822格式的原始日期
b RFCs822格式的當前日期
c Hop計數
d UNIX格式的日期
e SMTP數據項信息
f 「來自」地址的發送者
g 相對於接收者的發送者的地址
h 接收主機
i 隊列標識
j 節點的正式域名
l UNIX的行格式
n 用於錯誤信息中的名字
o 地址中的操作符集合
p sendmail的PID
q 默認的發送者地址格式
r 所用的協議
s 發送者主機名
t 當前時間的數值表示
u 接收方用戶
v sendmail的版本號
w 該節點的主機名
x 發送者全名
z 接收者宿主目錄

R 重寫lhs為rhs
地址重寫是sendmail的核心部分,它的作用是分析來自郵件程序的電子郵件的地址,並將它們重寫成郵件傳輸程序所需要的格式.
規則集是一組可以由數字引用的相關重寫規則.Sn命令標誌一個規則集的開始,其中n是這個規則集的編號,其範圍從0~29.其中0~4號規則集是被sendmail直接調用的,它們的說明如下:
0 在規則集3之後調用,它將生成一個三元組:<傳輸程序,接收方主機,接 收用戶名>
1 用於消息中所有發送者地址
2 用於消息中所有接收者地址
3 最大和最複雜的規則集,也是用於地址的第一個規則集,將地址轉化成正規形式,即:local-part@host.domain
4 用於消息中所有地址並將內部地址轉換成外部地址形式
地址重寫規則由命令R定義,其格式如下:

Rlhs rhs comment

lhs,rhs和comment這三個欄位之間用tab隔開.重寫規則將輸入地址與lhs進行匹配,如果成功,就按照rhs進行重寫.重寫后的結果再次與lhs匹配,如果成功,就再次按照rhs進行重寫,直到結果不再與rhs匹配.



S 開始一個規則集合
C 定義類別宏
F 文件定義類別
O 設定sendmail.cf選項
命令O給sendmail的選項賦值.賦給選項的值可以是字元,整數,布耳值或時間間隔值.每個選項都在sendmail中進行了定義.以下是sendmail中所有選項的含義和用法:
選項 用 法 解 釋
A Afile 指定別名文件的名字
a aN 為@:@等待N分鐘,然後重建別名文件
B Bc 定義空代替字元
c c 將郵件隊列排隊以等待郵件傳輸程序
D D 重建別名資料庫
db db 以後台方式傳輸
di di 互動式傳輸
dq dq 在下一個隊列運行時傳輸
ee ee 郵遞錯誤信息,總是返回退出狀態0
em em 郵回錯誤信息
ep ep 列印錯誤信息
eq eq 僅返回退出狀態,無錯誤信息
ew ew 寫回退出狀態
f f 保持UNIX風格的From行
g gn 設置郵件傳輸程序默認的GroupID為n
H Hfile 定義SMTP幫助文件的名字
I I 使用BIND名字伺服器來解析所用的名字
i i 忽略入局信息中的點
L Ln 設置日誌級別為n
M Mxval 設置宏x的值為val
m m 同時發往自身
N Nnet 定義宿主網路名
o o 接受舊格式首部
Q Q 定義隊列目錄名
q qn 定義用於決定何時排隊任務的因子n
r rt 設置用於超時的內部時間間隔t
S Sfile 定義統計日誌文件名
s s 在試圖傳輸前總是創建隊列文件
T Tt 設置排隊超時為t
u un 設置郵件傳輸程序默認的UserID為n
v v 以冗餘方式運行
W Wpass 定義用於遠程調試的口令
X X1 如果平均負載超過1則拒絕SMTP連接
x x1 如果平均負載超過1則排隊郵件
Y Y 在不同的進程中傳輸每個排隊郵件
y yn 每個接收者作業時間優先順序差為n
Z Zn 每次運行時減少n個作業優先順序
z zn 同前綴一起決定郵件優先順序





H 定義標頭
P 優先權設定
T 信任的用戶
K 具有鍵值的資料庫
E 重設環境變數
L 擴充負載的支持
第三節、sendmail別名

sendmail別名
別名是sendmail最重要的功能之一.它在aliases中定義.aliases文件的位置由sendmail.cf中的選項A指定,一般位於/etc/mail目錄中.aliases是一個文本文件,其中每一行的格式如下:

alias:recipeint[,recipeint,...]

其中alias為郵件中地址的名字,recipient為郵件目的地址的名字.郵件目的地址名可以有很多,每個之間用逗號符隔開.下面介紹別名的幾種主要用法:

保護登陸帳號

許多網路黑客進攻網路計算機的第一步是獲取目標機上合法用戶的帳號,而電子郵件帳號一般和登陸帳號相同,這就使黑客有機可乘.但是可以用別名來保護合法用戶的帳號.如一位合法用戶的登陸帳號為mmmmmn,而他的電子郵件帳號可以是tiaozao.只要在別名文件中加入「tiaozao:mmmmmn」就可以達到這一目的.

電子郵件轉發

如果想要將發給mmmmmn用戶的電子郵件自動轉發給root用戶,只需在別名文件中加入「mmmmmn:root」.又如用戶mmmmmn離開這個單位.從安全角度上講應該將他的用戶帳號刪除.但是由於他不可能馬上將新的電子郵件帳號通知所有人,希望將他原來的電子郵件帳號保留一段時間.這隻要在別名文件中加入「mmmmmn:新的電子郵件地址」.

郵件列表的實現

別名最重要的功能就是實現郵件列表.通過它可以實現填寫一個接收者地址而將信發給許多人.例如在主機上設置一個郵件列表boycw,包括mmmmmn,bear,joy 和peng.只需在別名文件中加入:
boycw:mmmmmn,bear,joy,peng
owner_boycw:mmmmmn
當接收者是boycw時,信會自動發給mmmmmn,bear,joy和peng.當發送郵件給boycw時如果出錯,將把錯誤信息發給mmmmmn.


第四節、access 的用法

對付垃圾郵件,以及進行許可權控制.

關於access的用法在http://www.fanqiang.com/a6/b3/20010724/1000011015.html已經講的很清楚了,我補充點如下:--好象8.10版以後的才能使用次功能,主要是增加了LHS 部分的變數內容.

新增的變數為:
Connect: connection information (${client_addr}, ${client_name})
From: sender
To: recipient

很容易理解,舉例如下:
From:spammer@some.dom REJECT
To:friend.domain RELAY
Connect:friend.domain OK
Connect:from.domain RELAY
From:good@another.dom OK
From:another.dom REJECT


[火星人 ] 使用solaris自帶的sendmail快速建立一個郵件伺服器已經有701次圍觀

http://coctec.com/docs/linux/show-post-56500.html