Red Hat Linux 253 實驗部分
試驗2
域名系統
估計時間: 2個小時
目標: 安裝和配置一個DNS服務器
試驗的起點: 標準的Red Hat Linux安裝
介紹
本次實驗指導您通過使用Berkeley Internet Name守護進程來配置域名服務。使用模板文件作為指導,您將
實現一個僅有緩存的域名服務器
配置named作為example.com的從域名服務器
配置named作為主域名服務器用于轉發和IP反查詢
在
整個試驗中,您使用的機器名稱和域名將基于您使用的機器的IP地址。如果下面的試驗出現了X字樣的名稱,您應該把X字樣的名稱替換成您的工作站的號碼(您
的IP地址的最后一個部分)。例如,如果您的工作站的IP的地址是192.168.0.3,您應該將
stationX.domainX.example.com轉換成station3.domain3.example.com。
將數據包過濾設定為無效狀態。在本次試驗開始之前,請您確保您的主機上的所有包過濾已被關閉(顯然,在實際使用中您可以利用Linux內核的防火墻機制,然而我們在這里關掉它是為了減少潛在的問題)。
本次試驗中以root身份來使用下面命令達成上面的要求:
service iptables stop
chkconfig iptables off
初始化安裝
A. 獲得必要的文件
需要bind,bind-utils和caching-nameserver軟件包。使用`rpm –q`來決定這些軟件包是否被安裝。如果沒有被安裝,通過輸入如下命令來安裝(以root身份):
mkdir /mnt/server1; mount server1:/var/ftp/pub /mnt/server1
rpm –Uvh /mnt/server1/RedHat/RPMS/bind-9*
rpm –Uvh /mnt/server1/RedHat/RPMS/bind-utils*
rpm –Uvh /mnt/server1/RedHat/RPMS/caching-nameserver*
RPM軟件包bind包括DNS守護進程和支持腳本,但是沒有配置和區域文件。caching-nameserver提供了一個通用的配置和區域文件。
B. 配置本地的解析器
配置您的主機使得它能夠被用來作為域名服務,而不是192.168.0.254。
注意:直到您的域名服務器被正確安裝和配置,您的機器的DNS服務不會奏效。您也應該注意到當您的系統重新啟動的時候或者重新設定您的網絡的時候您的/etc/resolve.conf將會被改寫(除非您對您的網絡界面設定了在本講座中提及的PEERDNS)
按照如下編輯您的解析器配置文件
/etc/resolv.conf
search domainX.example.comnameserver 192.168.0.X
(記住將X替換成您的工作站的號碼)
第一行定義了如果出現簡單的不符合完整域名的主機名稱時默認添加的缺省域。第二行指定了將主機192.168.0.X (您的機器)來作為DNS查詢的解析器。
為了簡化情況,將除了localhost主機名稱的定義從您的主機名稱配置文件中刪除。
/etc/hosts
127.0.0.1 localhost localhost.localdomain
該步驟并不是必需的,但是可以簡化DNS的調式。有時候安裝程序會將符合完整域名的主機名放在localhost的這一行,這樣一來會使得您無法準確的確定您的域名服務器配置是否正確。
步驟1:配置一個僅有緩存的域名服務器
第
一個配置您將建立一個僅有緩存的域名服務器。這種類型的域名服務器對于任何區域都不授權。僅有緩存的域名服務器被設定為主域名服務器。當主機名稱或者IP
地址需要被解析的時候,僅有緩存的域名服務器將查詢請求轉發到另外一臺域名服務器或者到根域名服務器來決定授權的用來解析的域名服務器。一旦解析完成,僅
有緩存的域名服務器在緩存中存儲解析的信息,該解析信息有一段的生存周期。以后的查詢將會變得很快。
您已經安裝完對于此項配置所有必須的文件。按照如下步驟來配置域名服務器:
1. 在由caching-nameserver提供的/etc/named.conf中的“option”區域添加下面的內容:
forwarders {192.168.0.254; };
forward only;
這將導致您工作站上的僅有緩存的域名服務器轉發其不能解析的DNS查詢到在192.168.0.254的域名服務器,并且如果超時,不與根域名服務器直接聯系。
2. 啟動named: service named start
3. 測試您的配置使用host或者dig來查詢一些example.com名稱和一些真實的Internet域名(如果您有Internet訪問接口的話)
步驟2:配置一個從域名服務器
一個從域名服務器將為一個區域提供授權的回答,但不是區域的授權開始。您現在將重新配置您的域名服務器作為example.com區域和0.168.192.in-addr.arpa區域的從域名服務器。
1. 在您的/etc/named.conf文件中添加如下行
zone “example.com” {
type slave;
masters { 192.168.0.254; };
file “slave-example.com.zone”;
};
zone “0.168.192.in-addr.arpa” {
type slave;
masters { 192.168.0.254; };
file “slave-192.168.0.zone”;
};
2. 重新啟動named: servcie named restart
3. 檢查slave-example.com.zone和slave-192.168.0.zone文件。這些文件應該包含了從位于192.168.0.254的主域名服務器傳過來的區域數據庫的副本。
確保所有的正確工作。在您開始下一個部分之前,去除您剛才在第一步中在/etc/named.conf中加入的兩個從區域。
步驟3:配置一個主域名服務器
現在您將配制您的域名服務器來負責對于區域“domainX.example.com”的解析工作。您將同樣負責向對應的反查區域。將采用如下的步驟:
A. 編輯配置文件(named.conf)
B. 準備區域“domainX.example.com”和區域“X.0.168.192.in-addr.arpa”的數據庫文件。
C. 重新啟動域名服務器
D. 測試您的配置
為了您能夠準備您的配置文件和區域文件,我們提供了模板文件。您可以通過匿名ftp方式從以下地址獲得:
ftp://192.168.0.154/pub/namedfiles/
在如下的步驟中,記得將范例文件中中每一出出現的X替換成您的工作站的號碼。
E. 主配置文件
下面是我們應該考慮的三個區域
1. “.”(根級別)區域
“.”區域是DNS層次中的最高層。根服務器提供了哪些服務器對于給定的域享有授權?!?”節應該以如下的方式出現:
zone “.” {
type hint;
file “named.ca”;
};
2. “domainX.example.com”(正向查詢)區域
添加如下的行,使得您的域名服務器成為區域的主服務器。
zone “domainX.exmaple.com” {
type master;
file “domainX.example.com.zone”;
};
3. “X.0.168.192.-in-addr.arpa”(反向查詢)區域
現在添加如下的行,使得您的域名服務器成為反查區域的主服務器。
zone “X.0.168.192.in-addr.arpa” {
type master;
file “192.168.0.X.zone”;
};
下面是位于192.168.0.2的station2的樣例配置文件
/etc/named.conf
options
{directory “/var/named”;forwarders {192.168.0.254; };forward
only;};zone “.” { type hint; file “named.ca”;};zone "localhost" IN {
type master; file "localhost.zone";};zone "0.0.127.in-addr.arpa" IN {
type master; file "named.local";};zone “domain2.exmaple.com” { type
master; file “domain2.example.com.zone”;};zone
“2.0.168.192.in-addr.arpa” { type master; file “192.168.0.2.zone”;};
F. 數據庫文件
您的主要配置文件指定了/var/named為數據庫所在的目錄。您現在必須在這個目錄下面為您區域和反查區域建立數據庫文件。這些數據庫文件包括您的SOA,NS,A,CNAME,MX,PTR和其他的可能的記錄。所有的數據文件以如下的行開頭:
$TTL 86400
該數值是缺省的以秒計的生存期間,該數值對所有在該域中的記錄有效
1. 區域“domainX.example.com”
在主配置文件中,區域“domainX.example.com”數據庫文件被存放在/var/named/domainX.example.com。這個文件含有類似的如下的記錄
開始授權記錄
@ IN SOA stationX.domainX.example.com. root.stationX.domainX.example.com. (
2001101100; Serial
28800 ;Refresh
14400 ;Retry
3600000 ;Expire
0) ;Negative
“開
始授權”(SOA)記錄是數據庫文件的第一個資源記錄,但是它可能帶了一個前導符$TTL(缺省存活時間)。SOA記錄使得數據庫文件稱為該區域的授權的
信息源。第一個標記是后繼記錄適合的域,通常以“@”簡化形式出現,如果擴展開來那就是在named.conf文件中“zone”節中所指明的域名(或者
是在文件通過$ORIGIN定義的當前區域,如果該定義存在的話)。
第四個標記使該域的主域名服務器,第五個是負責維護這個數據庫的系統管理員的電子郵件的地址,注意第一個分隔符替換了第一個標記的@符號(你能解釋為什么嗎?)。接下來在記錄中的條目指定了交互解析域名服務器的動態特性。
域名服務器記錄
@ IN NS stationX.domainX.example.com.
域
名服務器(NS)標識了主機作為特定域的授權的域名服務器。他們對于這個區域指定了主和從服務器和代表授權的子域的其他的服務器(例如,
server1.example.com對于所有domainX.example.com的域名服務器有一個NS記錄)。正如您對于
“domainX.example.com”只能有一個單一的域名服務器,您也只能有一個單一的NS記錄。
地址記錄
domainX.example.com IN A 192.168.0.X
stationX.domainX.example.com IN A 192.168.0.X
www IN A 192.168.0.X
ftp IN A 192.168.0.X
pop IN A 192.168.0.X
地
址(A)記錄將主機名稱映射到IP地址(域名服務器的主要功能)。一個數據庫文件通常包含A記錄對應著許多IP地址。然而在我們的教室的環境里,在您的區
域里面只有一臺主機。注意第一個A記錄設定了域的“缺省的IP地址”。接下來的A記錄建立了多個主機名稱對應一個IP地址。
主機名稱可以是一個完全符合標準的名稱(FQDN),也可以是一個縮寫。所有的不以點號結尾的主機名稱都將被視為縮寫,并且區域名稱被附加到主機名稱的后面。例如,第三個A記錄就是主機名稱www.domainX.example.com.
規范名稱(別名)記錄
www1 IN CNAME stationX.domainX.example.com.
www2 IN CNAME stationX.domainX.example.com.
www3 IN CNAME stationX.domainX.example.com.
別名(CNAME)記錄建立了主機名稱的別名。注意到別名映射到主機名稱而不是IP地址。
CNAME不應該出現在右邊的數據區域作為真實的主機名稱,對于多重別名的解析的速度會很慢。
郵件交換記錄
@ IN MX 10 stationX.domainX.example.com.
domainX.example.com IN MX 10 stationX.domainX.example.com.
郵
件交換記錄(MX)記錄了一個主機它將會處理給定的域或者主機郵件的轉發。當一個郵件傳遞代理(MTA)試圖投遞信件的時候,它將首先試圖在DNS中查找
目的主機的MX記錄。如果該MX記錄存在,那么將直接發送到MX記錄指定的主機。反之,如果不存在MX記錄,MTA對于目的主機進行標準的DNS查詢,并
且直接投遞到該主機上去。MX記錄用來建立郵件的網關,和作為缺省的對于域的郵件的目的地。
2. 區域“X.0.168.192.in-addr.arpa”
在/etc/named.conf中,我們指定了/var/named/192.168.0.X.zone作為區域X.0.168.192.in-addr.arpa的反查區域數據庫文件。他應該包含SOA記錄,NS記錄,和對應的PTR記錄。
開始授權記錄
@ IN SOA stationX.domainX.example.com. root.stationX.domainX.example.com. (
4;
10800;
3600;
604800;
86400)
IN NS stationX.domainX.example.com.
SOA和NS記錄與前面的區域文件中的名稱應該相同。
注意在NS記錄開頭的空白的地方是非常特別的,并且被解釋為“和上一條記錄相同”的縮寫。在本例中,上一條記錄為符號“@”,其本身就是在主配置文件中定義的域名的縮寫。
指針記錄
X.0.168.192.IN-ADDR.ARPA. IN PTR stationX.domainX.example.com.
指
針(PTR)記錄通過間接的機制將名稱映射到IP地址。作為分離的技術來進行IP地址的反查詢的替代,BIND采用了一種修改的對于特定主機名稱的正向查
詢的方式。這種“反向域名查詢”以反轉的IP地址后面添加“in-addr.arpa”域的形式出現。這將允許域名服務器使用相同的機制進行正反兩方面的
查詢。
3. 把他們放在一起
下面是位于192.168.0.2的station2的樣例配置文件:
/var/named/domain2.example.com.zone
$TTL
86400@ IN SOA station2.domain2.example.com.
root.station2.domain2.example.com. ( 2001101100; Serial 28800 ; Refresh
14400 ; Retry 3600000 ; Expire 0) ; Negative @ IN NS
station2.domain2.example.com. @ IN A
192.168.0.2station2.domain2.example.com. IN A 192.168.0.2www IN A
192.168.0.2ftp IN A 192.168.0.2pop IN A 192.168.0.2www1 IN CNAME
station2.domain2.example.com.www2 IN CNAME
station2.domain2.example.com.www3 IN CNAME
station2.domain2.example.com.@ IN MX 10
station2.domain2.example.com.station2 IN MX 10
station2.domain2.example.com.
/var/named/192.168.0.2.zone
$TTL
86400@ IN SOA station2.domain2.example.com.
root.station2.domain2.example.com. (4 10800 3600 604800 86400) IN NS
station2.domain2.example.com.2.0.168.192.IN-ADDR.ARPA. IN PTR
station2.domain2.example.com.
C. 重新啟動域名服務器
再一次,我們將重新啟動域名服務器。然后通過運行pidof命令來確定其被運行:
service named restart
pidof named
查看一下服務器添加到/var/log/messages文件中的條目。確定您的域名在調入的時候沒有發生錯誤。
如果您已經有一個域名服務器在運行并且不想重新啟動它,您可以使用service named reload 來重新裝入配置文件,這樣子對于停止和啟動服務器而言都比較快。
D. 測試域名服務器
進行如下DNS查詢,您能夠解釋所有的結果么?
host stationX
dig stationX.example.com
dig stationX.example.com @192.168.0.254
dig stationX.example.com
host server1.example.com
host 192.168.0.X
dig –x 192.168.0.X
dig –x 192.168.0.254
host www
host www1
記住dig期望給與一個FQDN作為查詢,然而host則通過查看位于文件/etc/resolv.conf的查詢信息。試著在別的人的域名服務器和子域上進行附加的查詢。如果設定正確,您將能夠在其他教室系統上進行正向和反向查詢。
挑戰性的項目
通過增加多個“A”記錄使得一個主機名稱對應著不同的IP地址來配置一個“輪轉”的主機名稱。域名服務器該如何處理這種情況?提示: 試圖嘗試設定這些的A記錄的TTL為0。
在您的域中增加子域“support.somainX.example.com”。增加合適的資源記錄使得它能夠反向指向您的IP地址。
與另一臺工作站合作,成為另一臺工作站的從域名服務器,在您的區域中為您的工作站增加一個新的CNAME,確保這個改變能夠傳播到從服務器。
收尾工作
接下來的試驗就較為簡單了,一旦您重新啟動您的工作站,所有的DNS查詢將會重新設定到教室中的服務器上。為了確保收尾,確保您重新設定/etc/resolve.conf到其初始的狀態。
/etc/resolv.conf
search example.comnameserver 192.168.0.254
/etc/hosts
127.0.0.1 localhost localhost.localdomain localhost192.168.0.X stationX.example.com
(如果您關閉后啟動eth0接口,DHCP將會自動為您設定配置文件)
試驗3
Samba服務
估計時間: 1個小時
目標: 使用samba共享用戶認證和文件系統
試驗的起點: 標準的Red Hat Linux安裝
將
數據包過濾設定為無效狀態。在本次試驗開始之前,請您確保您的主機上的所有包過濾已被關閉。缺省的安裝將會有一個文件叫做
“/etc/sysconfig/iptables”,該文件配置了iptable的功能。運行“chkconfig iptables
off”。為了去除空間中所有的規則,運行“service iptables stop”
步驟1:Samba的用戶連接的配置
任務
1. 安裝samba,samba-common和samba-client RPM 軟件包并且啟動smb服務。一個缺省的配置將會被應用. 使用如下的命令確定Samba是在正確的工作:
smbclient –L localhost –N
您可以從服務器獲得回應,但是并不代表文件共享可用。(確保smbd在運行,否則該命令無法工作)
2.在您的系統中增加幾個用戶(karl,joe,mary和jen),但是并不給他們設定密碼。這些用戶僅能夠從samba服務訪問服務器。為了使得他們在shadow中不含有密碼,這些用戶的shell應該設定為/sbin/nologin
3.
缺省的samaba是被配置用來接收加密的密碼的,但是在文件/etc/samba/smbpasswd中沒有設定任何密碼。如果加密的密碼在
/etc/samba/smb.conf被設定,smbclient將發送加密的密碼,所以為了在您的系統上測試samba服務,您應該首先建立
smbpasswd文件,然后為每一個用戶在該文件中添加密碼。
4.注意到第一個在/etc/samba/smb.conf設定的共享clearcase/" target="_blank" >cc">home并沒有指定路徑。該共享被配置用來當用戶連接并且認證通過以后共享用戶的home目錄。瀏覽一個或者兩個用戶的home目錄。上傳一個文件到joe的home目錄。
可用的結果
一個工作的samba服務可以被多個用戶通過smbclient訪問。
步驟2: 提供給組目錄訪問的權限
場景/故事
為了使得我們的四個用戶除了有他們自己的在服務器上的共享,我們這四位用戶同時在同一個部門工作并且需要一個地方來存儲部門的文件。我們將需要一個Linux用戶組,建立一個目錄給這些用戶來存儲它們的內容,并且配置samba服務器來共享目錄。
任務
1. 建立一個對于擁有gid為30000的用戶叫做legal的新組并且使用usermod命令將這些用戶加到組里去。
2.
建立一個目錄/home/depts/legal。對于這個目錄設定擁有權限,使得在legal組中的用戶可以在這個目錄中添加/刪除文件,然而其他的人
不可以。并且設定SGID和粘滯位使得所有在這個目中建立的文件都擁有同legal組的權限并且組中其他的的人不能夠刪除該用戶建立的文件。
3. 在/etc/samba/smb.conf中建立一個samba共享叫做legal。只有legal組中的用戶才能夠訪問該共享。并且確保在legal中存放的文件的被建立的許可權限為0600。
4. 重新啟動smb服務并且使用smbclient;來進行測試。
可用的結果
1. 只有lagal組能夠訪問和使用一個Linux目錄。
2. 一個samba共享只有legal組的用戶能夠訪問并且編輯
步驟3:為打印機提供訪問
場景/故事
在samba中除了可以共享文件以外,另外一個重要的功能就是提供共享打印隊列,該打印隊列已經在您的Linux機器上定義。實際上,缺省的,所有在Linux機器上配置的打印隊列通過printers共享到網絡上去。在該步驟中,您將建立一個打印隊列,通過samba服務器進行共享。然后通過smbclient來查看共享的打印機。
任務
1.
使用redhat-config-printer建立一個新的打印隊列。把打印隊列命名為printerX(其中X為您的工作站的號碼)。配置打印機到本
地連接的打印機/dev/lp0。配置打印隊列確保任何遞交的打印作業將保留在隊列中。不要忘記重新啟動samba服務器。
2. 通過smbclient來連接samba服務器上共享的printerX。使用print命令來遞交打印作業到隊列中去。檢查作業已排隊否。
可用的結果
1. 一個定義的Linux打印隊列printerX
2. 一個Samba服務器允許授權的用戶打印到共享打印機printerX
挑戰1:安全和備份Samba/SMB
現在所有的東西都可以運行了,我們應該考慮在Samba服務器上的網絡安全和數據的可靠性了。
任務
1. 定義并且保護對于samba服務器而言合法的連接。在文件/etc/samba/smb.conf中使用hosts allow參數來確定所有教室里的子網和本地回環子網。
2. 使用testparm測試/etc/samba/smb.conf的語法。這個是否顯示出一些應該考慮的安全上的漏洞呢?
3. 對您的鄰居的legal 共享進行備份。通過用戶karl的帳戶建立一個共享的數據打包,使用或者smbtar命令或者smbclient 的-T 選項。
可用的結果
1.samba服務器能夠識別來自允許的子網或者主機的連接
2.一個SMB或者Samba共享的備份數據打包
一種解決方案
步驟1
l rpm –ivh ftp://server1.exmaple.com/pub/RedHat/RPMS/samba-c*
rpm –ivh ftp://server1.exmaple.com/pub/RedHat/RPMS/samba-2*
service smb start
smbclient –L localhost –N
l useradd –s /bin/false karl
useradd –s /bin/false joe
useradd –s /bin/false mary
useradd –s /bin/false jen
l smbpasswd –a karl
smbpasswd –a joe
smbpasswd –a mary
smbpasswd –a jen
l smbclient //localhost/joe –U joe
您應該看到smb:\>提示符
put /etc/hosts hosts
步驟2
l groupadd –g 30000 legal
usermod –G legal karl
usermod –G legal joe
usermod –G legal mary
usermod –G legal jen
l mkdir –p /home/depts/legal
chgrp legal /home/depts/legal
chmod 3770 /home/depts/legal
l 在文件/etc/samba/smb.conf文件中,共享定義部分:
legal
commnet = Legal’s files
path = /home/depts/legal
public = no
write list = @legal
create mask =0660
l service smb restart
步驟3:
l redhat-config-printer
l service smb restart
l smbclient //localhost/printerX –u joe
復習問題
1. 在ftp和smbclient之間有什么相同的地方?您使用ftp的時候永什么命令進行上傳?ftp和smbclient之間上傳操作之間有什么不同。
2. 命令nmblookup \*的作用是什么
3. smbtar命令是干什么的?
4. testparm /etc/samba/smb.conf 33.44.55.66 是做什么用的?
5. 使用smbmount命令該使用什么語法?
試驗4
電子郵件
估計時間: 2個小時
目標: 建立基本的MTA的配置的技能
試驗的起點: 標準的Red Hat Linux安裝
指導教師:確保在Server1上的sednmail.mc文件中的DAEMON_OPTIONS被注釋并且重新編譯sendmail.cf文件使得能構接受來自其他主機的電子郵件。
介紹
本次實驗作為一個安裝和配置MTA的介紹。在介紹中我們將提及sendmail和postfix。您可以選擇任何一個MTA,如果時間允許,您兩個都可以做一下試驗。在接下來的步驟中,您將
安裝并且驗證sendmail的“發件箱”
為您的sendmail的按渣添加新的別名
使用m4工具來改變您的轉發行為
安裝POP3服務器并且配置POP客戶端
在
整個試驗中,主機和域名取決于您的機器的IP地址。如果下面的試驗出現了X字樣的名稱,您應該把X字樣的名稱替換成您的工作站的號碼(您的IP地址的最后
一個部分)。例如,如果您的工作站的IP的地址是192.168.0.2,您應該將stationX.domainX.example.com轉換成
station2.domain2.example.com。
將數據包過濾設定為無效狀態。在本次試驗開始之前,請您確保您的主機上的所有包過濾已被關閉(顯然,在實際使用中您可以利用Linux內核的防火墻機制,然而我們在這里關掉它是為了減少潛在的問題)。
本次試驗中以root身份來使用下面命令達成上面的要求:
service iptables stop
chkconfig iptables off
初始化安裝-安裝必要的軟件包
下
列軟件包對于sendmail是必需的:
sendmail,sendmail-cf,sendmail-doc,m4和procmail。對于postfix而言,您需要:
postfix。如果需要他們,從CD上進行檢視和安裝,server1的NFS安裝點,從:
ftp://server1/pub/RedHat/RPMS/
步驟1:配置MTA來收取郵件
為了安全的原因,sendmail和postfix的缺省的配置允許發郵件但是不允許從網絡上接收郵件(缺省的它們只接受從回環接口上的連接)。按照如下配置您選擇的MTA使得它接受傳入的連接:
1.對于sendmail: 修改 /etc/mail/sendmail.mc
使用dnl注釋在下面的行之前,就象這樣:
dnl DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')
2.將您的sendmail.cf文件做一個備份:
cp /etc/mail/sendmail.cf /etc/mail/sendmail.cf.orig
3.在同一個目錄下,編譯sendmail.cf
m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
4.重新啟動sendmail,通過
service sendmail restart
對于postfix:修改/etc/postfix/main.cf
A.找到并注釋如下行
inet_interfaces = localhost
B.取消注釋該行:
inet_interfaces = all
C. 保存文件并且進行到步驟2 的結束的地方。找到和上面一樣的對應于postfix的配置的地方。
步驟2: 啟動和校驗MTA操作
對于sendmail: 有幾個步驟您應該采用,以確保sendmail被正確安裝。
A.確信sendmail已經被在適當的運行級別上運行
檢查您的sendmail被適當的配置且能夠在重新啟動以后其能夠運行。使用chkconfig是比較方便的。
chkconfig -–list sendmail
sendmail 0ff 1ff 2n 3n 4n 5n 6ff
如果sendmail在標準的用戶運行級別時無效,使用chkconfig, ntsysv 或者serviceconf 之類的工具來激活服務。
B.確定sendmail沒有在啟動的時候出現錯誤
Red Hat Linux安裝的時候使用提供的syslog工具來記錄所有的信息到文件/var/log/maillog中去。檢查此文件中的最后出現“starting”的地方以確保sendmail在啟動的時候沒有任何錯誤。
sendmail可執行文件位于/usr/sbin/sendmail。為了確定sendmail是否正確標識您的主機名稱,通過命令行開關開啟其調試模式并且設定為0:
sendmail –d0 < /dev/null
Version 8.11.6
Compiled with: LDAPMAP MAP_REGEX LOG MATCHGECOS MIME7TO8 MIME8TO7
NAMED_BIND NETINET NETINET6 NETUNIX NEWDB NIS QUEUE SASL SCANF
SMTP TCPWRAPPERS USERDB
============ SYSTEM IDENTITY (after readcf) ============
(short domain name) $w = station2
(canonical domain name) $j = station2.example.com
(subdomain name) $m = station2
(node name) $k = station2.example.com
========================================================
Recipient names must be specified
如
果sendmail返回您的主機名稱為localhost,您可能錯誤配置了/etc/hosts文件。檢查您的/etc/hosts文件,刪除所有的但
記住留下localhost的指向。如果/etc/hosts文件是正確的,那么檢查一下在/etc/sysconfig/netwoek中的
HOSTNAME的定義。
試圖向root@server1發送簡單的郵件。您可以看到一個合理的您的主機的轉發服務器的SMTP交換。
echo “hello root” | mail –v –s hello root@server1
root@server1... Connecting to 127.0.0.1 via relay...
220 localhost.localdomain ESMTP Sendmail 8.12.8/8.12.8; Mon, 22 Sep 2003 14:29:24 +0800
>>> EHLO localhost.localdomain
250-localhost.localdomain Hello station1 127.0.0.1, pleased to meet you
...
>>> MAIL From: SIZE=52 AUTH=root@localhost.localdomain
250 2.1.0 ... Sender ok
>>> RCPT To:
>>> DATA
250 2.1.5 ... Recipient ok
354 Enter mail, end with "." on a line by itself
>>> .
250 2.0.0 h8M6TOU5026513 Message accepted for delivery
root@192.168.241.182... Sent (h8M6TOU5026513 Message accepted for delivery)
Closing connection to 127.0.0.1
>>> QUIT
221 2.0.0 localhost.localdomain closing connection
如果SMTP交換向上面一樣正確,那么消息將被轉發到您的工作站上的本地的轉發服務器上,并且mailq –Ac將會報告一個空的對列。接下來檢查mail(不使用參數)來檢查一下消息是否從本地的轉發到server1。這樣對列也應該是空的。
您的消息是不是在/var/log/maillog中正確的記錄呢?在下面的步驟中,監視文件/var/log/maillog。下面的命令將會十分的有用:
xterm –e tail –f /var/log/maillog &
對于postfix:
A.運行‘service sendmail stop’,接下來使用redhat-switch-mail使得postfix成為活躍的MTA。您也可以使用如下的命令行:
alternatives –set mta /usr/sbin/sendmail.postfix
B.確保postfix在合適的運行級別有效:
chkconfig -–list postfix
postfix 0ff 1ff 2n 3n 4n 5n 6ff
C.確定hostname命令正確的返回您的主機名稱。應該是您的FQDN。
如
果sendmail返回您的主機名稱為localhost,您可能錯誤配置了/etc/hosts文件。檢查您的/etc/hosts文件,刪除所有的但
記住留下localhost的指向,然后再試一遍。如果/etc/hosts文件是正確的,那么檢查一下在/etc/sysconfig/netwoek
中的HOSTNAME的定義。當這些值都正確的時候,啟動postfix服務。
D.確定postfix在啟動的時候沒有錯誤
和sendmail一樣,Red Hat Linux的安裝使用提供的syslog工具來記錄所有的信息到文件/var/log/maillog中去。檢查此文件中的最后查找任何錯誤信息。
試圖向root@server1發送簡單的郵件并且檢查/var/log/maillog的記錄文件
mail –s `echo $USER` root@server1 < /etc/redhat-release
應該如下所示:
Sep 22 02:51:50 station1 postfix/pickup2865: A20ED348389: uid=0 from=
Sep 22 02:51:50 station1 postfix/cleanup3534: A20ED348389: message-id=<2003092
2065150.A20ED348389@station1.example.com>
Sep 22 02:51:50 station1 postfix/nqmgr2866: A20ED348389: from=
xample.com>, size=341, nrcpt=1 (queue active)
Sep 22 02:51:51 station1 postfix/smtp3536: A20ED348389: to=
82>, relay=192.168.241.182192.168.241.182, delay=1, status=sent (250 Message q
ueued)
步驟3:添加新的別名
對于sendmail:
在sendmail
決定消息的接受者的目的地的之前,其先試圖在別名中查找。sendmail的主要的別名配置文件是/etc/aliases。為了優化查找,
sendmail為其別名記錄建立了一個哈希表數據庫/etc/aliases.db.該文件通過newalias命令產生(該命令是sendmail
–bi的同名)
下列命令將增加用戶student(如果不存在的話)
useradd student
在/etc/aliases 行加入如下的行:
me: student
wizards: root, me
methere: student@stationX.example.com
現在運行newalias 命令來更新數據庫,嘗試發送郵件給您定義的收件人:
newalias
echo “hello there” | mail –s “hello” me
echo “hello there” | mail –s “hello” wizards
echo “hello there” | mail –s “hello” methere
您是否得到了期望的結果?是否所有的位于wizards的收件人都受到了郵件?如果沒有,su – 到不是root的用戶再試一次。
在postfix
決定消息的接受者的目的地的之前,其先試圖在別名中查找。postfix的主要的別名配置文件是/etc/postfix/aliases。為了優化查
找,postfix為其別名記錄建立了一個哈希表別名數據庫/etc/postfix/aliases.db(和sendmail類似).該文件通過
newalias命令產生。
下列命令將增加用戶student(如果不存在的話)
useradd student
在/etc/postfix/aliases 行加入如下的行:
注意:注釋root別名的那一行為postfix
me: student
wizards: root, me
methere: student@stationX.example.com
現在運行newalias 命令來更新數據庫,嘗試發送郵件給您定義的收件人:
newalias
echo “hello there” | mail –s “hello” me
echo “hello there” | mail –s “hello” wizards
echo “hello there” | mail –s “hello” methere
您是否得到了期望的結果?是否所有的位于wizards的收件人都受到了郵件?
步驟4.控制轉發
轉發允許郵件通過使用中間的“轉發”及其傳遞到其目的地。盡管這個功能曾經有用,但是轉發已經成為Internet上垃圾郵件的源泉了。人們希望發送主動提供的的郵件的時候希望使用轉發機制,從而使得郵件發源地很難被偵測出來。
下列步驟將使用下面的主機。替換X,Y和Z為適合的工作站的號碼:
stationX:源機器,郵件從這里發出
stationY:轉發機器,這里郵件從發送者送出
stationZ:目的機器,郵件的最終目的
該步驟假設您是stationX,轉發機器,與某人的stationY合作,該機器為郵件的源頭。在該步驟中,注意/var/log/maillog的變化。下列命令將會顯得十分的有用。
對于sendmail
步驟A:允許轉發
您
具有控制允許誰在您的機器上轉發的能力。通過控制您的機器的混雜轉發,您可以使得任何人都能夠將您的機器作為轉發的主機。(我們對于這種的嘗試表示反對,
也希望通過該實驗顯示出其缺陷)。配置/etc/mail/sendmail.mc, 通過加入如下行使得m4前置處理器允許混雜轉發:
/etc/mail/sendmail.mc
(…其他的內容…)FEATURE(promiscuous_relay)dnl
使用m4前置處理機通過這個模板文件生成一個新的sendmail配置文件,然后將新生成的文件與通過sendmail RPM軟件包提供的進行比較
m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.test-relay
diff /etc/mail/sendmail.test-relay /etc/mail/sendmail.cf
使用混雜轉發以后會有多大的不同呢?現在將新建立的sendmail.test放置在恰當的位置上,重新啟動sendmail.
mv /etc/mail/sendmail.cf /etc/mail/sendmail.cf.accept-mail
cp /etc/mail/sendmail.test-relay /etc/mail/sendmail.cf
service sendmail restart
讓您的伙伴扮演惡意的垃圾郵件的發送者,該人能夠通過telnet到您的機器上的smtp(sendmail)的25號斷口,進行垃圾郵件發送地址的欺騙,在stationY鍵入如下命令:
這個例子對于stationY(源機器)=station2,并且stationX(轉發,在這里目的機器)=station1
root@station1 root# telnet station1 25
Trying station1.example.com...
Connected to station1.example.com (station1.example.com).
Escape character is '^]'.
220 station1.example.com (IMail 8.00 8-1) NT-ESMTP Server X1
helo mail.cracker.org
250 hello station1.example.com
mail from: spammer@cracker.org
250 ok
rcpt to:root@station1.example.com
250 ok its for
data
354 ok, send it; end with .
Subject: Faked
this was faked!
.
250 Message queued
quit
221 Goodbye
Connection closed by foreign host.
垃圾郵件現在送到您的機器上了。下一步,看看您的伙伴能不能從您的機器轉發給第三臺機器:
這個例子對于stationY(源機器)=station2,并且stationX(轉發,在這里目的機器)=station1,并且stationZ(目的機器)=station3
root@station1 root# telnet station1 25
Trying station1.example.com...
Connected to station1.example.com (station1.example.com).
Escape character is '^]'.
220 station1.example.com (IMail 8.00 9-1) NT-ESMTP Server X1
helo mail.craker.org
250 hello station1.example.com
mail from: spammer@craker.org
250 ok
rcpt to root@station3.example.com
250 ok its for
data
354 ok, send it; end with .
Subject: Relayed
this was faked any relayed!
.
250 Message queued
quit
221 Goodbye
Connection closed by foreign host.
由于您的機器已經被配置成為允許混雜轉發,垃圾郵件可以通過您的機器進行郵件轉發。
對于postfix:
您具有控制允許誰在您的機器上轉發的能力。缺省的postfix允許在子網上的任何人通過您的機器進行轉發。膽汁并不是在每一個環境中都安全的。例如,您的機器和其他機器在一起,如果您的本地子網里有一臺機器被其他人控制,那么其他的機器都會有麻煩。
讓您的伙伴扮演惡意的垃圾郵件的發送者,該人能夠通過telnet到您的機器上的postfix的25號斷口,進行垃圾郵件發送地址的欺騙,在stationY鍵入如下命令:
root@station1 root# telnet station1 25
Trying 127.0.0.1...
Connected to station1 (127.0.0.1).
Escape character is '^]'.
220 station1.example.com ESMTP Postfix
helo mail.craker.org
250 station1.example.com
mail from:spammer@craker.org
250 Ok
rcpt to: root@station1.example.com
250 Ok
data
354 End data with .
Subject: Faked
this was faked!
.
250 Ok: queued as 4FFA2348389
quit
221 Bye
Connection closed by foreign host.
垃圾郵件現在送到您的機器上了。下一步,看看您的伙伴能不能從您的機器轉發給第三臺機器:
這個例子對于stationY(源機器)=station2,并且stationX(轉發,在這里目的機器)=station1,并且stationZ(目的機器)=station3
root@station1 root# telnet station1 25
Trying 127.0.0.1...
Connected to station1 (127.0.0.1).
Escape character is '^]'.
220 station1.example.com ESMTP Postfix
helo mail.craker.org
250 station1.example.com
mail from: spammer@cracker.org
250 Ok
rcpt to: root@station3.example.com
250 Ok
data
354 End data with .
subject: Relayed
this was faked and relayed!
.
250 Ok: queued as 69C7B348389
quit
221 Bye
Connection closed by foreign host.
由于您的機器已經被配置成為允許混雜轉發,垃圾郵件可以通過您的機器進行郵件轉發。
步驟B:不允許轉發
對于sendmail
通過替換新的sendmail.cf為接受傳入的信件的配置文件來恢復缺省的sendmail的配置,并且重新啟動sendmail:
mv /etc/mail/sendmail.cf.accept-mail /etc/mail/sendmail.cf
service sendmail restart
讓您的伙伴再從stationY轉發垃圾郵件。您的sendmail還是一個轉發器么?任何一個轉發的都會產生如下的消息:
550 root@station3.example.com .. Relaying denied
對于postfix
編輯文件/etc/postfix/main.cf取消轉發。
查找并且取消注釋下面的行,并且重新啟動postfix
mynetworks_style = host
讓您的伙伴再從stationY轉發垃圾郵件。您的postfix還是一個轉發器么?任何一個轉發的都會產生如下的消息:
554 : Recipient address rejected: Relay access denied
步驟C:選擇性的轉發
對于sendmail
對
于特定的主機,域或者網絡,編輯/etc/mail/access并且重新啟動sendmail。為了允許所有在example.com域中的機器可以把
您的機器作為郵件轉發服務器,你在/etc/mail/acces中添加如example.com域。和您的伙伴使用場景A中的命令進行測試。
對于postfix
對于特定的主機,域或者網絡,編輯/etc/postfix/main.cf并且重新啟動postfix。對于特定的主機允許通過您的機器進行轉發,找到并且取消注釋該行:
mynetworks_style = host
然后添加新行來允許轉發的主機和網絡,在這里允許station1和本地轉發
mynetworks = 192.168.0.1, 127.0.0.0/8
和您的伙伴使用場景A中的命令進行測試。
步驟5:安裝POP3服務器和客戶端
在這個步驟中,你將配制您的機器stationX作為郵件的POP3服務器,使得您的在stationY的伙伴扮演POP客戶端的角色。
步驟A:安裝POP3服務器
配置一個POP3服務器比較簡單,只需要兩個步驟:
l 安裝相關的RPM軟件包
l 在xinetd中允許服務
安裝相關的RPM軟件包
POP守護進程和其他的具有相同功能的守護進程,例如IMAP守護進程綁定在軟件包imap中。再如xinetd,krb5-libs*和imap軟件包來檢查imap軟件包含有什么軟件。
三個守護進程被包括進來:imapd,ipop2d和ipop3d。POP3被用在很多Internet服務提供商,POP2提供是為了向后兼容。IMAP守護進程提供了根加復雜的能力,包括了在服務器端的文件夾的管理。
在xinetd中允許服務
對于本實驗,我們僅選定POP3服務。ipop3d通過xinetd在請求的時候被啟動。為了激活,運行下面的命令:
service xinetd start
chkconfig ipop3 on
查看一下/etc/xinetd.d/ipop3。顯式的重新啟動xinetd并不是必需的,由于chkconfig發送給xinetd 一個USR2信號告訴他重新調入其配置。
確認服務
運行下面的命令確認服務已經被正確的安裝。下面的命令只是一個指導:
echo “mail to be poped” | mail –s “Hello student” student
root@station1 root# telnet localhost 110
Trying 127.0.0.1...
Connected to station1 (127.0.0.1).
+OK POP3 station1 v2001.78rh server ready
USER student
+OK User name accepted, password please
PASS student
+OK Mailbox open, 1 messages
STAT
+OK 1 440
TOP 1 99999
+OK Top of message follows
Return-Path:
Delivered-To: student@station1.example.com
Received: by station1.example.com (Postfix, from userid 0)
id 72314348390; Mon, 22 Sep 2003 08:02:27 -0400 (EDT)
To: student@station1.example.com
Subject: Hello student
Message-Id: <20030922120227.72314348390@station1.example.com>
Date: Mon, 22 Sep 2003 08:02:27 -0400 (EDT)
From: root@station1.example.com (root)
Status:
mail to be poped
.
DELE 1
+OK Message deleted
QUIT
+OK Sayonara
Connection closed by foreign host.
如果一切順利的話,您現在有一個安裝好的POP服務器了。
步驟B :使用POP客戶端
所
有的現在的郵件用戶代理(MUA),例如netscape,elm,Outlook,pine和mutt都是使用POP的,可以被用作POP的客戶端。每
一個的配置都有所不同。同樣有一個流行字符界面的的POP客戶端叫做fetchmail。fetchmail是高度的可配置的,可以查詢多個郵箱,可以作
為守護進程運行,這樣使得其每五分鐘查詢用戶的郵箱。fetchmail在主機上遞送郵件到郵件傳送代理(MTA),例如sendmail。我們將勾畫出
以后如何安裝fetchmail和使用其來查詢我們裝過的POP服務器。
從CD或者從ftp://server1/pub/RedHat/RPMS來安裝fetchmail軟件包
注意到有很多選項可以影響fetchmail的行為。建立一個~/.fetchmailrc文件如下所示:
~student/.fetchmailrc
poll stationX.exmaple.com with protocol pop3: user studentXX there is user studentXX here password “password”
由于密碼存儲在該文件中,因此fetchmail將會拒絕運行除非您把該文件的屬性設定為對于僅僅文件的所有者只讀。注意還可以使用chown改變由root創建的文件的所有者為studentXX。
chmod 600 ~student/.fetchmailrc
chown student.student ~student/.fetchmailrc
嘗試使用studentXX登陸到POP3郵箱
echo “hello student” | mail –s “Hola” student
su – student
fetchmail –v
exit
fetchmail能不能接收到student的POP郵件?將遞送student的郵件到哪里?比從本地獲取POP郵件有意義么?
讓您的伙伴在另外一臺機器上建立相同的~/.fetchmailrc文件(或者配置其它諸如mozilla的MTA)試圖從您的服務器上進行收信。
復習的問題
1. m4宏語言提供給sendmail管理哪些東西?把所有的在xyz.com的用戶郵件導向到本地用戶xzplogin該使用什么語法?該在什么文件的和處填上這句話?
2. mailq命令用來作什么?您如何使用?
3. 當命令sendmail –q發出以后,sendmail將會試圖仍在隊列中等待的郵件。何時使用該命令是有用的?
4. 如果去除FEATURE(accept_unresolvable_domains)的注釋將對垃圾郵件產生如何的影響?
5. m4有什么特征允許sendmail發送郵件作為整個域(例如,“example.com”)而不是完全的符合標準的主機名稱(例如,“mail.example.com”)?
6. 在postfix中mynetworks_style如何影響轉發?
請您查看文件/etc/postfix/main.cf。
7. 在文件/etc/postfix/access中需要如何的活躍的變化?
原文轉自:http://www.anti-gravitydesign.com