电子邮件:

特点:1.快捷 2.安全 3.多样性
术语:
协议:   发送 smtp   tcp  25      smtps
         接受 pop3   tcp  110      和imap4  (tcp143)  pop3s  imaps
服务器:
发送 :   MAT (邮件传输代理)  
 windows  电子邮件服务(2003 2000)  2008 (只有发送,无接受)    exchange server(微软)     软件:lotus notes  mdaemon 
 linux :sendmail(本身不支持身份验证,不防垃圾邮件)   postfix(更安全些)      qmail(荷兰数学家 基于算法)
 接受:   MAA()     dovecot   协议 pop3  imap pop3s imaps
客户端: MUA        web client       outlook express    foxmail     evolution  mutt
Mda  投递员   postfix   (mailproc)  sendmail默认带mda
电子邮件传输流程:
每创建一个账户就会创建一个邮箱,该邮箱除了本用户可以访问,mail组也能访问,系统默认情况下是安装了sendmail的
在文件/etc/syslog.conf中我们可以得知Mial服务所产生的所有日志会在/var/log/maillog中显示
我们通过tail -f 可以动态监控该服务所有的mail记录,便于找到错误
/etc/syslog.conf  日志配置档
[root@localhost mail]# ll
total 16
-rw------- 1 root  root 10351 Aug  6 09:07 root
-rw-rw---- 1 rpc   mail     0 Aug  5 02:15 rpc
-rw-rw---- 1 user1 mail     0 Aug  6 09:07 user1   user1的邮箱为空
信件查看之后会放在家目录下的mbox中
[root@localhost mail]# mail user1  测试向user1 发一封邮件
Subject: hello   标题
1111111   内容
.          一“.”结束
Cc:      退出
[root@localhost mail]# ll
total 20
-rw------- 1 root  root 10351 Aug  6 09:07 root
-rw-rw---- 1 rpc   mail     0 Aug  5 02:15 rpc
-rw-rw---- 1 user1 mail   651 Aug  6 09:08 user1  再次查看发现该用户已经接受到邮件了
当我们使用user1登录时:
[root@localhost ~]# su - user1   切换到user1
[user1@localhost ~]$ mail    查看家目录下的邮箱
Mail version 8.1 6/6/93.  Type ? for help.
"/var/spool/mail/user1": 1 message 1 new    可以看到提示有一封新邮件
>N  1 root@localhost.local  Sat Aug  6 09:08  16/651   "hello"  编号1的邮件
& 1     选取编号进行查看
Message 1:
From root@localhost.localdomain  Sat Aug  6 09:08:36 2011
Date: Sat, 6 Aug 2011 09:08:36 +0800
Subject: hello          标题
1111111   内容
& q    推出
Saved 1 message in mbox   邮件被保存在mbox中
[user1@localhost ~]$ ll
total 4
-rw------- 1 user1 user1 662 Aug  6 09:30 mbox   产生一个mbox,保存邮件
[user1@localhost ~]$ ll /var/spool/mail/
total 16
-rw------- 1 root  root 10351 Aug  6 09:07 root
-rw-rw---- 1 rpc   mail     0 Aug  5 02:15 rpc
-rw-rw---- 1 user1 mail     0 Aug  6 09:30 user1 在user1的邮箱中没有邮件了(已取走)
邮件已经取走了,如果再想查看就不能到邮箱里去拿了,那么我们去存放的它的mbox中拿
直接打开mbox查看便可
以上都是明文传输,很容易被抓包截获到密码账号
Smtps(smtp ssl)利用证书在发送的时候做加密,分段加密,没有证书就无法加密
Pop3s  在接受段加密
但是都不是×××全,有一定的局限性,这里我们可是使用一种端到端的加密:使用pgp
防垃圾邮件:
1.认证  sendmail(最初是基于地址的认证)
   地址认证  文件在/etc/mail/access中   
   账号认证  sendmail默认没有  借助cyrus-sasl(开源工具)实现
2.第三防软件 apache  spamassassin
3..电子邮件服务器 正向与反向解析 MX(bj.com.mx   mail.bj.com 1.1.1.1) (1.1.1.1   -----名称)看到bj地区的发来的邮件,首先查找bj.com.mx 知道是mail.bj.com 再根据mail.bj.com找到地址1.1.1.1    再根据1.1.1.1 找到名称 若再企业网内部,会认为是垃圾中转站
防病毒邮件  linux默认不具备
Clamav病毒特征 (有规则定义) 
错误
1.临时  重发
mailq   查看邮件队列
2.永久    退回
下面我们来尝试着实现mail服务器间的对发跟加密
 

Mail服务器的搭建(1)_Mail服务器搭建

(1)首先我们先配置北京的mail服务器
系统默认已经安装了sendmail的,它只能实现mta
[root@localhost Server]# rpm -qa |grep sendmail
sendmail-8.13.8-8.el5
还需要一些其他的包
sendmail-cf-8.13.8-8.el5.i386.rpm  生成易配置的配置文件跟脚本
sendmail-devel-8.13.8-8.el5.i386.rpm   开发包
sendmail-doc-8.13.8-8.el5.i386.rpm  文档包
m4-1.4.5-3.el5.1.i386.rpm     转换工具包
我们需要把这几个包一个个的安装
安装完后在目录/etc/mail上生成文件:sendmail.mc主配置文件  直接编译后重启便由m4转换成sendmail.cf    还有生成文件access  可以直接编译,会由m4装换为saccess.db
如图:若北京用户向上海用户发送邮件,那么就需要dns,还用到转发
首先搭建dns服务器:
1.安装包:bind-9.3.6-4.P1.el5_4.2.i386.rpm
         bind-chroot-9.3.6-4.P1.el5_4.2.i386.rpm
  caching-nameserver-9.3.6-4.P1.el5_4.2.i386.rpm
2.生成主配置文件:
[root@localhost Server]# cd /var/named/chroot/etc/
[root@localhost etc]# cp -p named.caching-nameserver.conf named.conf 
[root@localhost etc]# vim named.conf 
options {
        listen-on port 53 { any; };  更改监听范围
        listen-on-v6 port 53 { ::1; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        allow-query     { any; };  改为any
};
logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};
view localhost_resolver {
        match-clients      { any; };  改为any
        match-destinations { any; };  改为any
        recursion yes;
        include "/etc/named.rfc1912.zones";
};
2.声明区域:[root@localhost etc]# vim named.rfc1912.zones 
zone "bj.com" IN {
        type master;
        file "bj.com.db";
        allow-update { none; };
};
3.创建数据库:
[root@localhost named]# pwd
/var/named/chroot/var/named
[root@localhost named]# cp -p localhost.zone bj.com.db
[root@localhost named]# vim bj.com.db 
$TTL    86400
@               IN SOA  ns.bj.com.       root (
                                        42              ; serial (d. adams)
                                        3H              ; refresh
                                        15M             ; retry
                                        1W              ; expiry
                                        1D )            ; minimum
@               IN NS           ns.bj.com.
ns              IN A            192.168.20.99
mail            IN A            192.168.20.99
pop3            IN CNAME        mail
smtp            IN CNAME        mail
@               IN MX 10         mail   创建邮件交换器,便于别人向本地区发信
4.启动dns  service named start,并改变dns指向
[root@localhost named]# vim /etc/resolv.conf 
nameserver 192.168.20.99
到此dns服务器便搭配好了
我们这里要做的是mail服务器,我们需要把主机名称也改了
[root@localhost named]# vim /etc/hosts
127.0.0.1          mail.bj.com  localhost.localdomain localhost    添加
::1             localhost6.localdomain6 localhost6
[root@localhost named]# vim /etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=yes
HOSTNAME=mail.bj.com  修改名称
修改完成之后重启系统
其他邮件发送方法telnet
[root@mail ~]# telnet 192.168.20.99 25
Trying 192.168.20.99...
telnet: connect to address 192.168.20.99: Connection refused
telnet: Unable to connect to remote host: Connection refused
这里被拒绝了,所以我们需要在主配置文件中更改
[root@mail ~]# vim /etc/mail/sendmail.mc
DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0, Name=MTA')dnl
然后重启sendmail就可以了service sendmail restart
[root@mail ~]# netstat -tupln |grep 25
tcp   0    0 0.0.0.0:25       0.0.0.0:*      LISTEN  3769/sendmail: acce 
[root@mail ~]# telnet 192.168.20.99 25  再次连接
Trying 192.168.20.99...
Connected to 192.168.20.99 (192.168.20.99).
Escape character is '^]'.
220 mail.bj.com ESMTP Sendmail 8.13.8/8.13.8; Sat, 6 Aug 2011 11:19:35 +0800
Help  获取帮助
214-2.0.0 This is sendmail
214-2.0.0 Topics:
214-2.0.0  HELO EHLO MAIL RCPT DATA
214-2.0.0  RSET NOOP QUIT HELP VRFY
214-2.0.0  EXPN VERB ETRN DSN AUTH
214-2.0.0  STARTTLS
214-2.0.0 For more info use "HELP <topic>".
214-2.0.0 To report bugs in the implementation see
214-2.0.0  http://www.sendmail.org/email-addresses.html
214-2.0.0 For local information send email to Postmaster at your site.
214 2.0.0 End of HELP info
HElo mail.bj.com  向服务器打个招呼
250 mail.bj.com Hello [192.168.20.99], pleased to meet you
mail from:hhh@hh.com   发送邮件(这里是不没有邮箱验证的,名字可以随便写)
250 2.1.0 hhh@hh.com... Sender ok
rcpt to :user1@mail.bj.com   收件人@服务器
250 2.1.5 user1@mail.bj.com... Recipient ok
Data    
354 Enter mail, end with "." on a line by itself
subject:hello
hekkllll
.
250 2.0.0 p763JZIk003784 Message accepted for delivery
quit
221 2.0.0 mail.bj.com closing connection
Connection closed by foreign host.
这时我们可以用tail /var/log/maillog查看邮件发送的状态,发现已经发送成功,但是任何用户都可以发送了,此服务器就成了垃圾中转站了,所以我们还可以做一些其他的机制
除了telnet外,我们还可以用windo自带的outlook 发送
首先我们先安装服务器端的pop3
[root@mail Server]# yum install dovecot
Divecot安装后默认情况下开启了pop3,pop3s,imap ,imaps
[root@mail Server]# netstat -tupln |grep dov
tcp  0  0 :::993   :::*    LISTEN      3863/dovecot        (imaps)
tcp  0  0 :::995   :::*    LISTEN      3863/dovecot        (pops)
tcp  0  0 :::110   :::*    LISTEN      3863/dovecot        
tcp  0  0 :::143   :::*    LISTEN      3863/dovecot 
[root@mail Server]# vim /etc/dovecot.conf   编译它的主配置文件
protocols =  pop3   我们这里可以设置只使用pop3
然后启动dovecot     -------service dovecot star
客户端配置:
 

Mail服务器的搭建(1)_Missingluo_02

再接受user1的邮件便可以收到了:
 

Mail服务器的搭建(1)_Missingluo_03 

Mail服务器的搭建(1)_Missingluo_04

来解决它吧
此时我们知道从服务器内部是能往外发得(刚接受到的那封就是)
在/etc/mail目录下的access文件是一个中继文件
[root@mail ~]# vim /etc/mail/access
Connect:localhost.localdomain      RELAY
Connect:localhost                  RELAY
Connect:localhost                   RELAY
Connect:127.0.0.1                RELAY
Connect:192.168.20.        RELAY    如果客户端处于不同网段,一定要为其添加中继
/etc/mail/local-host-names 记录本地域名,必须知道自己负责的域
[root@mail ~]# vim /etc/mail/local-host-names 
mail.bj.com         添加本地服务器名
bj.com       添加本地域名
做完之后重启sendmail ,然后在客户端便可以向服务器本地发了
(2)我们再用同样的方法配置上海的mail服务器
sendmail-cf-8.13.8-8.el5.i386.rpm  生成易配置的配置文件跟脚本
sendmail-devel-8.13.8-8.el5.i386.rpm   开发包
sendmail-doc-8.13.8-8.el5.i386.rpm  文档包
m4-1.4.5-3.el5.1.i386.rpm     转换工具包
我们需要把这几个包一个个的安装
首先搭建dns服务器:
3.安装包:bind-9.3.6-4.P1.el5_4.2.i386.rpm
         bind-chroot-9.3.6-4.P1.el5_4.2.i386.rpm
  caching-nameserver-9.3.6-4.P1.el5_4.2.i386.rpm
4.生成主配置文件:
[root@localhost Server]# cd /var/named/chroot/etc/
[root@localhost etc]# cp -p named.caching-nameserver.conf named.conf 
[root@localhost etc]# vim named.conf 
options {
        listen-on port 53 { any; };  更改监听范围
        listen-on-v6 port 53 { ::1; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        allow-query     { any; };  改为any
};
logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};
view localhost_resolver {
        match-clients      { any; };  改为any
        match-destinations { any; };  改为any
        recursion yes;
        include "/etc/named.rfc1912.zones";
};
2.声明区域:[root@localhost etc]# vim named.rfc1912.zones 
zone "sh.com" IN {
        type master;
        file "sh.com.db";
        allow-update { none; };
};
3.创建数据库:
[root@localhost named]# pwd
/var/named/chroot/var/named
[root@localhost named]# cp -p localhost.zone bj.com.db
[root@localhost named]# vim bj.com.db 
$TTL    86400
@               IN SOA  ns.sh.com.       root (
                                        42              ; serial (d. adams)
                                        3H              ; refresh
                                        15M             ; retry
                                        1W              ; expiry
                                        1D )            ; minimum
                IN NS           ns.sh.com.
ns              IN A            192.168.20.88
mail            IN A            192.168.20.88
pop3            IN CNAME        mail
smtp            IN CNAME        mail
@               IN MX 10        mail   创建邮件交换器,便于别人向本地区发信
5.启动dns  service named start,并改变dns指向
[root@localhost named]# vim /etc/resolv.conf 
nameserver 192.168.20.88
到此dns服务器便搭配好了
我们这里要做的是mail服务器,我们需要把主机名称也改了
[root@localhost named]# vim /etc/hosts
127.0.0.1          mail.sh.com  localhost.localdomain localhost    添加
::1             localhost6.localdomain6 localhost6
[root@localhost named]# vim /etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=yes
HOSTNAME=mail.sh.com  修改名称
修改完成之后重启系统
默认sendmail是安装的,这里我们设置允许telnet连接服务器的其它地址的25号口进行收发邮件,所以我们需要在主配置文件中更改
[root@mail ~]# vim /etc/mail/sendmail.mc
DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0, Name=MTA')dnl
然后重启sendmail就可以了service sendmail restart
[root@mail ~]# netstat -tupln |grep 25
tcp   0    0 0.0.0.0:25       0.0.0.0:*      LISTEN  3739/sendmail: acce 
[root@mail ~]# telnet 192.168.20.88 25  再次连接
Trying 192.168.20.88...
Connected to 192.168.20.88 (192.168.20.88).
Escape character is '^]'.
220 mail.bj.com ESMTP Sendmail 8.13.8/8.13.8; Sat, 6 Aug 2011 11:19:35 +0800
quit
221 2.0.0 mail.bj.com closing connection
Connection closed by foreign host.
除了telnet外,我们还可以用windows自带的outlook 发送
首先我们先安装服务器端的pop3
[root@mail Server]# yum install dovecot
Divecot安装后默认情况下开启了pop3,pop3s,imap ,imaps
[root@mail Server]# netstat -tupln |grep dov
tcp  0  0 :::993   :::*    LISTEN      3863/dovecot        (imaps)
tcp  0  0 :::995   :::*    LISTEN      3863/dovecot        (pops)
tcp  0  0 :::110   :::*    LISTEN      3293/dovecot        
tcp  0  0 :::143   :::*    LISTEN      3863/dovecot 
[root@mail Server]# vim /etc/dovecot.conf   编译它的主配置文件
protocols =  pop3   我们这里可以设置只使用pop3
然后启动dovecot     -------service dovecot start
在/etc/mail目录下的access文件是一个中继文件
[root@mail ~]# vim /etc/mail/access
Connect:localhost.localdomain      RELAY
Connect:localhost                  RELAY
Connect:localhost                   RELAY
Connect:127.0.0.1                RELAY
Connect:192.168.20.        RELAY    如果客户端处于不同网段,一定要为其添加中继
/etc/mail/local-host-names 记录本地域名,必须知道自己负责的域
[root@mail ~]# vim /etc/mail/local-host-names 
mail.sh.com         添加本地服务器名
sh.com       添加本地域名
做完之后重启sendmail ,然后在客户端便可以向服务器本地发了
(3)基本的对发
北京地区用户要给上海用户大发邮件,首先会发给自己的服务器,然后自己的服务器再转发给上海的邮件服务器,再由该服务器下发到对端,该过程中服务器间的对发需要用到域名解析,所以需要在本地dns上做转发
在北京跟上海的dns上分别做转发:编译主配置文件
[root@mail ~]# vim /var/named/chroot/etc/named.conf 
options {
        listen-on port 53 { any; };
        listen-on-v6 port 53 { ::1; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
          forwarders    { 192.168.20.88; };    装发到对端的服务器地址
        allow-query     { any; };
        allow-query-cache { any; };
};
做完转发后,就位其他区域转发做中继
分别在北京跟上海为对端的服务区域做转发中继
[user1@mail ~]$ vim  /etc/mail/access
Connect:localhost.localdomain     RELAY
Connect:localhost                 RELAY
Connect:127.0.0.1                RELAY
Connect:192.168.20.              RELAY
bj.com                    OK
sh.com                 RELAY      
重启sendmail后便可以做转发了,实现北京和上海的对发了,但是速度很慢
(4)但是这样不能避免垃圾软件,我们为了避免垃圾邮件,每一个邮件服务器根据对方的mx记录找到对方的地址,再根据地址解析一下名称是否是对方的那个名称
所以我们需要在双方dns上做反向dns
1.为反向查找做区域声明:(两边都做)
[root@mail user1]# vim /var/named/chroot/etc/named.rfc1912.zones 
zone "20.168.192.in-addr.arpa" IN {
        type master;
        file "192.168.20.db";
        allow-update { none; };
};
2.产生反向查找的数据库文件(两边都做)
[root@mail user1]# cd /var/named/chroot/var/named/
[root@mail named]# cp -p named.local  192.168.20.db
[root@mail named]# vim 192.168.20.db 
$TTL    86400
@     IN   SOA  localhost.   root.localhost.  (   “本机就是该反向dns的服务”器
                                      1997022700 ; Serial
                                      28800      ; Refresh
                                      14400      ; Retry
                                      3600000    ; Expire
                                      86400 )    ; Minimum
        IN      NS      localhost.
99       IN      PTR    mail.bj.com.  添加服务器记录
88       IN      PTR    mail.sh.com.  添加对端服务器记录
做完之后执行rndc  reload  便可以解析了
此时再用客户端相互对发便可以很快的发送过去了
我们可以替管理员做邮件的别名,这个别名账号数不需要创建,只是一个外号而已,这个外号可以对应好几个账号,那么所发得邮件就会发到它对应的每一个
这个别名在/etc/aliases中配置,由于m4会将aliases的改变更新到aliases.db中,系统真正使用的是aliases.db数据库
编译aliases文件,为用户添加别名记录
[root@mail etc]# vim /etc/aliases
master:         user5,user6   (用户间可以用逗号隔开)
做完之后重启sendmail,那么往该别名发送的邮件都会被user5与user6收到