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
8> 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.132zhangsan@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 = yesbroken_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了
6400 )
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