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中需要如何的活跃的变化?