sendmail  单体式结构


qmail

 
postfix   模块化设计   参考posft权威指南15,16页

 

postfix在本机的发信原理  参考posft权威指南30页的图3-2
          35页的图3-4

 


postfix


yum install postfix*    dovecot   system-switch-mail  -y

 

[root@dns ~]#  rpm -qi system-switch-mail-0.5.25-12  --查看这个包,说明是一个MTA切换工具


[root@li named]# system-switch-mail --使用这条命令进行MTA的切换
[root@li named]# /etc/init.d/sendmail status --切换过后,默认关闭了sendmail
sendmail is stopped
[root@li named]# /etc/init.d/postfix status --并自动启动了posftfix
master (pid 4896) is running...

 

[root@dns ~]# vim /etc/postfix/main.cf


myhostname = dns.cluster.com --只修改主机名,主机名对postfix非常重要,当然如果不改,它自己会调用gethostname()去查询


[root@dns ~]# /etc/init.d/postfix restart


[root@dns ~]# mail user1 --给本地的user1用户发邮件

[root@dns ~]# su - user1 
[user1@dns ~]$ mail --切换到user1用户查看,可以收到邮件
Mail version 8.1 6/6/93.  Type ? for help.
"/var/spool/mail/user1": 1 message 1 new
>N  1 root@dns.cluster.com  Sun May  8 10:26  14/454 
& 1

 

-------------------------------------------------------

两个sendmail的互发


sendmail         ----         sendmail

172.16.57.130      172.16.57.131

li.aaa.com    li.bbb.com

 

回顾一下邮件的配置过程


1,首先配置好主机名,三步, hostname  x.x.com   vim /etc/hosts   vim /etc/sysconfig/network
   最好用静态IP     vim /etc/sysconfig/network-scripts/ifcfg-eth0
   时间同步  ntpdate  x.x.x.x
   关闭iptables  service iptables stop
   selinux       vim /etc/selinux/config  确认是否为disabled
   配置好yum,为后面装包方便  
 


2.
我这里把DNS服务器做在172.16.57.1上

[root@dns ~]# vim /var/named/chroot/etc/named.conf

options {
        directory "/var/named";
};


zone "aaa.com" IN {
        type master;
        file "data/master.aaa.com.zone";
};

zone "bbb.com" IN {
        type master;
        file "data/master.bbb.com.zone";
};


[root@dns etc]# vim /var/named/chroot/var/named/data/master.aaa.com.zone


$TTL 86400
@       IN      SOA     li.cluster.com. root. (
                            2011081101
                                60
                                30
                                360
                                86400   )
        IN      NS      li.aaa.com.   
        IN      MX 0    li.aaa.com.
li      IN      A       172.16.57.130

 

[root@dns etc]# vim /var/named/chroot/var/named/data/master.bbb.com.zone


$TTL 86400
@       IN      SOA     li.cluster.com. root. (
                            2011081101
                                60
                                30
                                360
                                86400   )
        IN      NS      li.bbb.com.
        IN      MX 0    li.bbb.com.
li      IN      A       172.16.57.131


# /etc/init.d/named restart --启动DNS服务

 

--然后把两台邮件服务器的/etc/resolv.conf的DNS指向DNS服务器的IP 172.16.57.1  
[root@li ~]# nslookup    --两台都要这样验证aaa.com和bbb.com两个域的邮件交换记录OK
> set type=mx
> aaa.com
Server:         172.16.57.1
Address:        172.16.57.1#53

aaa.com mail exchanger = 0 li.aaa.com.
> bbb.com
Server:         172.16.57.1
Address:        172.16.57.1#53

bbb.com mail exchanger = 0 li.bbb.com.


3,在两台邮件服务器上安装sendmail邮件服务器相关软件包
[root@li ~]# yum install sendmail* dovecot m4 -y

 


4,配置邮件 --两边都做

[root@li named]# vim /etc/mail/sendmail.mc  --sendmail配置档

DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0, Name=MTA')dnl  --改为0.0.0.0,监听所有

[root@li named]# vim /etc/dovecot.conf

protocols = imap imaps pop3 pop3s

[root@li named]# /etc/init.d/sendmail restart

[root@li named]# /etc/init.d/dovecot restart

netstat -ntl     验证端口  smtp (25)    pop3 (110)   imap (143)

 

5,验证,
自己给自己发  @主机名 @域名       OK
自己给别方发  @主机名 OK 
   @域名  不行

 

6,--实现自己给对方发用短域名OK 
在li.aaa.com里
 vim /etc/mail/local-host-names  --加上
li.aaa.com
aaa.com
在li.bbb.com里
vim /etc/mail/local-host-names  --加上
li.bbb.com
bbb.com

重启sendmail   /etc/init.d/sendmail  restart


再次验证
使用    @域名  互发  OK

 

--但注意的是上面的步骤做完后,两台sendmail之间可以使用mail -s互相跨域发送邮件;但是再用两个客户端的话,互相跨域发送邮件会报中继拒绝的错误

 

   SENDMAIL  SENDMAIL
   li.aaa.com  li.bbb.com
  172.16.57.130  172.16.57.131  

    DNS
      li.cluster.com 
         172.16.57.1


  claw-mail 172.16.57.1     OUTLOOK 172.16.57.132
  zhangsan@aaa.com  lisi@bbb.com


如果还要另用MUA客户端软件来互相发的话,上面的两个邮件服务器还要允许这两个客户端的IP进行转发

  vim /etc/mail/access
  Connect:172.16.57                       RELAY
  /etc/init.d/sendmail restart

 

 

==================================================================

 


把上面其中一台换成postfix

 

   postfix  sendmail
   li.aaa.com  li.bbb.com
  172.16.57.130  172.16.57.131  

    DNS
      li.cluster.com 
         172.16.57.1


  claw-mail 172.16.57.1     OUTLOOK 172.16.57.132
  zhangsan@aaa.com  lisi@bbb.com

 


下面在li.aaa.com上的操作
[root@li ~]# yum install postfix* system-switch-mail -y


[root@li ~]# vim /etc/postfix/main.cf --配置参数格式参考PDF第41页
     --主要参数介绍参考PDF第52页


[root@li ~]# vim /etc/postfix/main.cf

myhostname = li.aaa.com  --定义自己的主机名

[root@li ~]# /etc/init.d/postfix restart

 

现在就可以自己与自己发送邮件
自己给sendmail发,也可以(因为sendmail那边的配置是OK的)
但sendmail给自己发,就不可以(因为postfix也是默认只监听127.0.0.1)

 

[root@li ~]# vim /etc/postfix/main.cf

inet_interfaces = all  --表示监听所有

[root@li ~]# /etc/init.d/postfix restart

 

现在sendmail给自己发,用长域名就可以了,短域名不可以


[root@li ~]# vim /etc/postfix/main.cf

mydestination = $myhostname, localhost.$mydomain, localhost,aaa.com
--在上面的基础上把mydestination后面加上aaa.com

[root@li ~]# /etc/init.d/postfix restart

现在sendmail给自己发,用短域名也可以了

 


把上面几个小例子综合配置一个postfix邮件服务器

 vim /etc/postfix/main.cf

myhostname = li.aaa.com --本机主机名
mydomain = aaa.com --本机域名,postfix会自动扣除第一点号前的部分作为域名。如果不是FQDN形式的主机名,就一定要手动配置你的域名
myorigin = $mydomain --当你在li.aaa.com以user1发送邮件,它会自动把你的发信地址改为user1@aaa.com
inet_interfaces = all --监听所有
mydestination = $myhostname, localhost.$mydomain, localhost ,$mydomain
  --加上$mydomain,则表示可以直接以域名来收邮件
mynetworks = 172.16.57.0/24, 127.0.0.0/8 --信任网络,在这里也可以不配,因为默认值为subnet,也就是本网段内的都是信任网络

 /etc/init.d/postfix restart

 

===================================

再把另一台sendmail也换成postfix

   postfix  postfix
   li.aaa.com  li.bbb.com
  172.16.57.130  172.16.57.131  

    DNS
      li.cluster.com 
         172.16.57.1


  claw-mail 172.16.57.1     OUTLOOK 172.16.57.132
  zhangsan@aaa.com  lisi@bbb.com

 

做法和上面一样


然后测试两台postfix服务器的互发 长短域名 都OK


==========================================================

postfix   验证  --参考postfix中文权威指南的173页
  不自带验证
  需要sasl包来验证
  sasl( simple authention and security layer)

yum install cyrus-sasl


/etc/init.d/saslauthd restart


cat /usr/lib/sasl2/smtpd.conf
pwcheck_method: saslauthd


[root@li ~]# vim /etc/postfix/main.cf --加上下面一段
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_sasl_security_options = noanonymous
smtpd_recipient_restrictions =
        permit_mynetworks,
        permit_sasl_authenticated,
        reject_non_fqdn_hostname,
        reject_unknown_sender_domain,
        reject_non_fqdn_sender,
        reject_non_fqdn_recipient,
        reject_unauth_destination,
        reject_unauth_pipelining,
        reject_invalid_hostname


/etc/init.d/postfix restart
/etc/init.d/saslauthd restart


--上面一系列的参数就是验证通过的规则,从上往下匹配,匹配一条后,就不再匹配
--permit_mynetworks
 这个参数就表示mynetworks这个参数配置的网段里的主机都是允许的,
也就是说,只要是你配置的信任网段里的主机,不管它们密码有没有写对,还是主
机名不符合FQDN,都是允许的
--permit_sasl_authenticated
 这个参数是需要邮件客户端把验证打勾,它表示:用户的密码要写对才允许通过


--所以上面的参数总结起来就是表示:
1,只要是mynetworks配置的信任网段就允许
2,如果不是信任的网段内的主机,则把验证打勾,然后就匹配第二条,只要用户名和密码正确也允许
3,拒绝非FQDN的主机名,拒绝未知的发送域,拒绝。。。。。。等等

 


例子1:
有permit_mynetworks此参数
那么只要是信任的网段,故意把用户的密码写错,也可以互发邮件


例子2。
注释permit_mynetworks这个参数,客户端也不把验证打勾。
然后发送测试。claws-mail报relay access deny
xp报 helo FQDN的主机名拒绝

解决:
把客户端验证打勾
再发送测试: 可以互发。因为它们是通过了permit_sasl_authenticated的验证

再把用户密码故意写错,发送测试,也通过不了

 

==========================================================

 

 

=============================================================

在上面的基础上加webmail功能

 

   postfix  postfix
   li.aaa.com  li.bbb.com
  172.16.57.130  172.16.57.131  
  --加openwebmail    --squirrelmail

    DNS
      li.cluster.com 
         172.16.57.1


  claw-mail 172.16.57.1     OUTLOOK 172.16.57.132
  zhangsan@aaa.com  lisi@bbb.com

 


--在130上做以下操作
openwebmail  一个网页的邮件收发工具,支持附件,网盘等各种功能
  
官方网站http://openwebmail.org/


软件包地址
ls /share/soft/openwebmail/
openwebmail-2.51-20050627.src.rpm  openwebmail-data-2.53-1.i386.rpm
openwebmail-2.53-1.i386.rpm        perl-Text-Iconv-1.7-2.el5.i386.rpm
openwebmail-2.53.tar.gz

 

[root@li /]# yum install perl-suidperl httpd httpd-devel -y   

[root@li openwebmail]# rpm -ivh perl-Text-Iconv-1.7-2.el5.i386.rpm

[root@li openwebmail]# useradd  -s /sbin/nologin tchung  --tchung这个用户是作者名,如果不加这个用户,下一步会报错说tchung用户不存在

[root@li openwebmail]# rpm -ivh openwebmail-data-2.53-1.i386.rpm openwebmail-2.53-1.i386.rpm   --这两个包要一起装,是互相依赖性的包

 

Permission and Ownership for openwebmail files have been fixed!

Please execute following tool first as a root:
/var/www/cgi-bin/openwebmail/openwebmail-tool.pl --init

After restarting httpd service, login with non-root account from
http://li.aaa.com/cgi-bin/openwebmail/openwebmail.pl
or http://li.aaa.com/webmail

If SELinux enabled, you may need to set it 'permissive' in
/etc/sysconfig/selinux or system-config-selinux

[root@li openwebmail]# /var/www/cgi-bin/openwebmail/openwebmail-tool.pl --init

初始化后


启动httpd 服务  /etc/init.d/httpd start 

 

 

--在131上加squirrelmail(rhel自带的 rpm 版webmail,基于php的)


[root@li ~]# yum install squirrelmail -y


[root@li ~]# vim /etc/squirrelmail/config.php


$provider_uri     = 'http://li.bbb.com/';

$domain           = 'bbb.com';   --写上自己的域,默认为localhost,如果你用lisi发信,在zhangsan那边收到的发信人为lisi@localhost。改成bbb.com就会正常显示为lisi@bbb.com