postfix 邮件服务的安装及详解

该实验系统:cetnos 6.5

 

sendmail:性能好,设置复杂,适合老手

qmail:体积小260+k ,模块化。需要做二次开发,适合对邮件性能有要求的

postfix:前身是sendmailpostfix原本是sendmail里面的一个模块,红帽6默认安装好postfix

zmailer:近几年才出来的邮件

coremail:国内做的最好的商业平台,运行在linux

 

Pop:允许客户端下载邮件,移动标记已读等操作  不会反馈到服务器、

Imap4:双向通讯,客户端的操作会反馈到服务器,提供想更过的功能,听歌更好的邮件管

 

发邮件:

收邮件的时候都是用的pop3IMAP4 ,区别在于pop3最早的收邮件的协议,功能最简单IMAP4是后来新加入了的一个收邮件的协议,功能相对复杂,可以支持邮件预览、附件预览等等。从根本上来说pop3这个收邮件的操作都必须在本地进行,而ipmap4这个收邮件的操作都必须服务器上进行,如果用的pop3当你收到邮件时必须先下载下来才能看,ipmap4则是在服务器端,如用的imap4协议的话可以先是谁发的, 什么时候发的有没必要下载下来然后做决定是下载到本地还是放弃下载,能看到一部分摘要信息。Imap4协议和pop比起来imap4协议支持的功能更多一点但是在实际生产环境里用的pop3的多,功能简单,要知道功能强大的背后牺牲的是服务器的性能

收邮件:

SMTP协议

FTP一样是诞生最早的一批协议,用的是25tcp端口,加密时使用是tcp465端口

 

主配置文件:/etc/postfix/main.cf

master.cf里面存的是一些优化的参数

下来看些需要改的才参数:(黄色背景的,星号要去掉)

75 #myhostname = mail.xdl.com ##用来设置当前的主机名,需要域名解析

 

76 #myhostname = virtual.domain.tld ##虚拟主机名

邮件格式:

zhangsan@xdl.com   ----->>邮件用户@邮件域

zhangsan@mail.xdl.com  ----->>邮件名都能拿来做邮件域的名称

正常情况下都是用域名里面的域来作为邮件域,某些时候也会使用主机名作为邮件域,所以要在主配置文件里声明一下我的主机名叫什么

83 #mydomain = xdl.com #这里写邮件服务器的邮件 -----原样

发送邮件的设置(如下):---->>

98 #myorigin = $myhostname ##允许发送邮件用户的邮件域,就是说哪些用户能够通过这个邮件服务器往外发邮件,如果有个用户往外发邮件要检查邮件地址($myhostname),看后缀,如果后缀都正确才能允许发送,如果后缀不对,发送不出去

99 #myorigin = $mydomain ##

101#接收邮件的设置(如下): --->>

113 inet_interfaces = all ---->>(开启)用来设置要监听哪些地址以及使用什么样的协议,接收什么域的邮件,默认只接收本地的,要改成113行的all (如下)

 

116行注释掉

165mydestination = $myhostname, localhost.$mydomain, localhost

##和上面的98/99行的对应的,是用来设置允许接收邮件的用户的邮件域

原样----》》

原样:mydestination = $myhostname, localhost.$mydomain, localhost##和上一行一一对应

例:

 

收到一封未知用户时拒绝掉以后返回的错误代码

 

给一个部门做了别名时,当要给一个部门发邮件时就相当于给部门的所有人发

--->>>>做别发时候是要有个数据库的支持者是数据库的位置

419 #home_mailbox = Maildir/ ##指定邮箱的位置

 

setgid_group = postdrop ##收邮件时默认要设置的一个组名

#默认的邮件组

663 html_directory = no ##是否启用基于html的邮件目录

 

667 manpage_directory = /usr/share/man

##在线的帮助页面,位置

672 sample_directory = /usr/share/doc/postfix-2.6.6/samples         ##模板文件的位置

 

因为对主配置文件进行了设置,所以要重启服务:postfix]# service postfix restart

关闭防火墙(清理)和selinux

iptables -F

setenforce  0

实验开始

客户端DNS配置如下

[root@localhost ~]# mount /dev/sr0 /mnt/usb1

[root@localhost ~]# yum -y install bind

[root@localhost ~]# vim /etc/named.conf

 

[root@localhost ~]# cd /etc/

[root@localhost etc]# vim named.rfc1912.zones

 

####上图如果不懂可以留言######

[root@localhost etc]# cd /var/named/

[root@localhost named]# ls

[root@localhost named]# cp -p named.localhost  xdl.localhost ##复制模板并改名

[root@localhost named]: vim xdl.localhost  ##修改复制的模板

MX为邮件交换记录,用来标明当网络里有多台邮件服务器时优先使用哪台服务器来发送邮件

邮件服务器优先级设置格式:MX  3  mail.xdl.com数字越小优先级越高,即使只有一个邮件服务器优先级也必须得设,不设的话DNS起不来(一般是1-10之间)

正向和反向写的都是一样的 [root@localhost named]# service named start

服务器端:

[root@localhost named]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 ###添加DNS1=****

[root@localhost postfix]# service network restart (ifdown eth0;ifup eth0)

[root@localhost postfix]# cat /etc/resolv.conf 

nameserver 192.168.12.155

[root@localhost postfix]# nslookup

> mail.xdl.com       

Server: 192.168.12.155

Address: 192.168.12.155#53

Name: mail.xdl.com

Address: 192.168.12.154

> dns.xdl.com

Server: 192.168.12.155

 [root@localhost ~]# rpm -qa postfix ##帽6开始默认已经安装了posfix

 postfix-2.6.6-2.2.el6_1.x86_64

[root@localhost ~]# cd /etc/postfix/

[root@localhost postfix]# vim main.cf  ##posfix的主配置文件

参数详解:

系统已经自带安装了postfix

主配置文件:/etc/postfix/main.cf

queue_directory = /var/spool/postfix    邮件服务器的位置

command_directory = /usr/sbin        邮件服务器的命令

daemon_directory = /usr/libexec/postfix   邮件服务器可执行程序位置

data_directory = /var/lib/postfix      邮件服务器数据库的存放位置

mail_owner = postfix             服务器的运行身份

               75   myhostname = mail.djkk.com     邮件服务器的主机名称 (需要改成自己定的)

这个正常的情况就是我们服务器的的域名作为邮件的邮件域,同时也可以用域作为邮件域

比如主机的域名为mail.xdl.com

发总邮件是可以是zhangsan@xdl.com、也可以是zhangsan@mail.xdl.com

83  mydomain = djkk.com  服务器的域 (自行开启,改成@后面的部分,不含@

               98   myorigin = $myhostname   允许发送邮件用户的邮件域是谁 (自行开启)

               99   myorigin = $mydomain     允许发送邮件用户的邮件域是谁 (自行开启)

就是说哪些用户可以通过这个邮件服务器发邮件呢?就是$后面设置的这个域。(不用改)

   116  inet_interfaces = localhost (需注释掉)

   113  inet_interfaces = all      用来设置监听的地址 (自行开启)

        119   inet_protocols = all       使用的协议 (默认开启)

165 mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain 用来设置本邮件服务器允许接收哪些地址发来的的邮件 164行注释,165行开启)

unknown_local_recipient_reject_code = 550  收到未知用户的邮件的时候返回的一个错误代码(默认开启)

386 alias_maps = hash:/etc/aliases (邮件别名,有用默认开启

397 alias_database = hash:/etc/aliases (搭配上一条使用,意思为使用别名时需要的数据库)

419 #home_mailbox = Maildir/ 邮件的存放位置 (默认不开启,一共2个,开下面那一个)

----->>>2个相反

[root@localhost ~]# service postfix restart (默认是开启的,需要重启)

至此简单的邮件服务器搭建好了,为了测试一下还要装Telnet来进行测试

[root@localhost postfix]# useradd zhangsan ##创建用户并设上密码

[root@localhost postfix]# passwd zhangsan

[root@localhost postfix]# useradd lisi

[root@localhost postfix]# passwd lisi

[root@localhost postfix]# yum -y install telnet

[root@localhost postfix]# service postfix restart

[root@localhost postfix]# telnet mail.xdl.com 25 25号端口为pop3邮件发送端口)

Trying 192.168.12.154...

Connected to mail.xdl.com.

Escape character is '^]'.

220 mail.xdl.com ESMTP Postfix (连接成功标示)

helo mail.xdl.com          helo声明当前邮件服务器的域名)            

250 mail.xdl.com

mail from:zhangsan@xdl.com (邮件从谁那发出来的,zhangsan发的)

250 2.1.0 Ok

rcpt to:lisi@xdl.com    (发给lisi的)

250 2.1.5 Ok

data (邮件的正文)

354 End data with <CR><LF>.<CR><LF>

wfgke k lrlr lrkypohk566 (内容)

h5kjkgjg

. (回车提交) 为结束标示,一定要另起一行点

250 2.0.0 Ok: queued as 57C3F7F442

Quit (退出)

221 2.0.0 Bye

Connection closed by foreign host. (邮件就发送完了)

检验邮件有没发送成功:(还是在服务端)

[root@localhost new]# cd /home/lisi/Maildir/

[root@localhost Maildir]# ls

cur  new  tmp

[root@localhost Maildir]# cd  new

[root@localhost new]# ls

1479935833.V802Iff008M899554.localhost.local (它就是我们发的邮件已记录下来)

[root@localhost new]# cat 1479935833.V802Iff008M899554.localhost.localdomain

 

服务端dovecot接收邮件步骤:

[root@localhost ~]# yum -y install dovecot*

[root@localhost ~]# service dovecot start

[root@localhost ~]# telnet mail.xdl.com 110 (收邮件)

Trying 192.168.12.154...

Connected to mail.zp.com.

Escape character is '^]'.

+OK Dovecot ready.

user lisi (输入用户名)

+OK

pass pppppp       ---->>这里是输入密码

+OK Logged in.     ---->>>成功登陆提示

list           ---->>>列出所有邮件

+OK 1 messages:

1 448         ---- >>>1封邮件,代号是448

.

retr 1         ---->>>收第一封邮件的意思(查看的意思)

正文区

quit

+OK Logging out.

Connection closed by foreign host.

企业邮件服务搭建(Extmail)的搭建:

(该邮件服务器需要一个干净的系统,系统还原,dns服务器不还原)

客户端DNS服务器):

[root@localhost ~]# yum -y install bind

[root@localhost ~]# vim /etc/named.conf

 

 

[root@localhost named]# vim /etc/named.rfc1912.zones

 

[root@localhost named]# cd /var/named/

[root@localhost named]# ls

[root@localhost named]# cp -p named.localhost extmail.localhost named.localhost 转 自定义)

[root@localhost named]# vim extmail.localhost (如下图)

 

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

      #该图是另一个样本,不是该实验中的

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

[root@localhost named]# service named restart

服务端配置:

[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0

  DEVICE=eth0

  TYPE=Ethernet

  ONBOOT=yes

  BOOTPROTO=static

  IPADDR=192.168.12.154

  NETMASK=255.255.255.0

  DNS1=192.168.12.155

[root@localhost ~]# service network restart

 

能正常解析出来域名后,接着上面的做----->>>

[root@localhost ~]# yum -y install gcc*

把包倒进来extmail-1.2.tar.gz  extman-1.1.tar.gz  Unix-Syslog-1.1.tar.gz

[root@localhost extmail]# yum -y install mysql mysql-server mailx (这3个数据库文件)

[root@localhost extmail]# service mysqld start

 

[root@localhost extmail]# yum -y install httpd

[root@localhost extmail]# mkdir /var/www/extsuite (新建一个目录用来存放和数据库相关的数据)

[root@localhost extmail]# tar -zxvf extmail-1.2.tar.gz -C /var/www/extsuite/ (指定解压到什么位置)

[root@localhost extmail]# tar -zxvf extman-1.1.tar.gz -C /var/www/extsuite/ (大C

[root@localhost extmail]# cd /var/www/extsuite/

[root@localhost extsuite]# mv extmail-1.2/ extmail mv命令把2个软件的版本号去掉)

[root@localhost extsuite]# mv extman-1.1/ extman mv命令把2个软件的版本号去掉)

[root@localhost extsuite]# cd extman/docs/

(这里面的.sql文件就是数据库里的文件,直接把这些sql文件倒到“我们”的数据库中就可以得到它们的一些预定才参数了,倒的时候分前后顺序)如下

[root@localhost docs]# vim init.sql

 

[root@localhost docs]# mysql < extmail.sql ()

这个文件倒完后会在MySQL里创建一个extmail的数据库,有来了这个文件init.sql才能导入成功

[root@localhost docs]# mysql < init.sql ()

[root@localhost docs]# cp mysql_virtual_alias_maps.cf mysql_virtual_domains_maps.cf mysql_virtual_mailbox_maps.cf /etc/postfix/

(因为这个邮件网站用到的是虚拟用户,这些虚拟用户需要一些模板,把这3个模板cppostfix主目录下)

[root@localhost docs]# cd /etc/postfix/

 

[root@localhost postfix]# useradd -u 600 vmail

(释上句:创建一个真实用户uid600为邮件大量的虚拟用户作准备,

原因:我们不能因为邮箱服务器而生成大量的真实用户,这样我们会服务器会极度不安全。)

[root@localhost postfix]# vim main.cf (修改主配置文件)

 

上图框内的数据见下面:

 virtual_mailbox_base = /home/vmail

 virtual_uid_maps = static:600

 virtual_gid_maps = static:600

 

 virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf

 virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf

 virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf

 

[root@localhost postfix]# service postfix restart

 

确保这3个服务都开

  service mysqld start

  service postfix restart

  service httpd start

服务端测试:

 

查看时和下面的都一样

echo “hi” | mail -s test support@extmail.org

(译:用mail这个工具给support的用户发一封邮件,邮件的标题是“test”。邮件的内容是“hi)

[root@localhost vmail]# cd /home/vmail/ (接上面重启 postfix 后的操作)

[root@localhost vmail]# ls

extmail.org  (这是邮件域)

[root@localhost vmail]# cd extmail.org/

[root@localhost extmail.org]# ls

postmaster (这是邮件域)

[root@localhost extmail.org]# cd postmaster/

[root@localhost postmaster]# ls

Maildir (邮箱)

[root@localhost postmaster]# cd Maildir/

[root@localhost Maildir]# ls

cur  new  tmp (

[root@localhost Maildir]# cd new/

[root@localhost new]# ls

1479976033.V802I9f60aM856237.localhost.localdomain  1479976033.V802I9f60fM868644.localhost.localdomain

1479976033.V802I9f60bM865024.localhost.localdomain  1479976033.V802I9f610M871259.localhost.localdomain

1479976033.V802I9f60eM868351.localhost.localdomain  1479976033.V802I9f611M871433.localhost.localdomain

[root@localhost new]# cat 1479976033.V802I9f60

1479976033.V802I9f60aM856237.localhost.localdomain  1479976033.V802I9f60eM868351.localhost.localdomain

1479976033.V802I9f60bM865024.localhost.localdomain  1479976033.V802I9f60fM868644.localhost.localdomain

[root@localhost new]# cat 1479976033.V802I9f60aM856237.localhost.localdomain

Return-Path: <root@localhost.localdomain>

X-Original-To: support@extmail.org

Delivered-To: postmaster@extmail.org

Received: by localhost.localdomain (Postfix, from userid 0)

id BF7297F446; Thu, 24 Nov 2016 16:24:37 +0800 (CST)

Date: Thu, 24 Nov 2016 16:24:37 +0800

To: support@extmail.org

Subject: test

User-Agent: Heirloom mailx 12.4 7/29/08

MIME-Version: 1.0

Content-Type: text/plain; charset=us-ascii

Content-Transfer-Encoding: 7bit

Message-Id: <20161124082713.BF7297F446@localhost.localdomain>

From: root@localhost.localdomain (root)

hirpm -q httpdrpm -q httpdni zuo sha ne

 

以上只是做的上图的上半部分

>收邮件--->>>dovecot (还是服务端操作)

mount 查看挂载光盘情况

[root@localhost new]# yum -y install dovecot dovecot.mysql (dovecot-mysql )

(dovecot为主程序,让dovecot去dovecot-mysql数据库里验证用户名和密码用的,因为之前init.sql都倒到MySQL里面了)

[root@localhost new]# cd /etc/dovecot/ (配置目录)

[root@localhost dovecot]# ls

conf.d  dovecot.conf

[root@localhost dovecot]# cd conf.d/

[root@localhost conf.d]# vim 10-mail.conf (和邮件发送相关的一些配置)

 

 mail_location = maildir:~/Maildir (用来设置邮件在本地保存的位置)

%d:邮件域

%n:一个邮件中用户名部分

所有配置里的选项必须顶头写,不顶头写系统会不认

167 #first_valid_uid = 600 (设置虚拟用户的起始uid号)

 

[root@localhost conf.d]# vim 10-auth.conf (需改认证文件)

意思就是说之前用系统去验证,现在要从sql中去验证                   

启用数据库验证

如何去数据库认证,数据库在哪,数据库密码多少得告诉它(如下)

[root@localhost conf.d]# cd ..

[root@localhost dovecot]#

[root@localhost dovecot]#cp /usr/share/doc/dovecot-2.0.9/example-config/dovecot-sql.conf.ext . (注意:当前目录)

[root@localhost dovecot]# ls

conf.d  dovecot.conf  dovecot-sql.conf.ext (数据库的文件就过来了)

[root@localhost dovecot]# vim dovecot-sql.conf.ext

 

释上图:意思就是说既然要连数据库,得告诉它要连什么样的数据库(这里只写mysql即可

这些用户名和密码是在导入的init.sql时预先定义好了,dbname=extmail是在导入extmail.sql时它生成的

 

上图释:(从一个叫mailbox的数据表里调出username, domain, password 3个字段,用户输入指定的username(用户名)和domain(域名)就去匹配 password )

 

释上图:当用户想要查询用户名的时候,同样去MySQL里面调用一个mailbox104行)的表,从这个字段调出maildiruidgid3个字段,调出来3个字段后后再去匹配一个叫username字段的值,username的值就是用户想要找的用户名

[root@localhost dovecot]# service dovecot start

[root@localhost dovecot]# yum -y install telnet (以下是收信测试)

[root@localhost conf.d]# telnet localhost 110

Trying ::1...

Connected to localhost.

Escape character is '^]'.

+OK Dovecot ready.

user postmaster@extmail.org (用户名)

+OK

pass extmail (密码)

+OK Logged in. (登陆成功)

list   (列出所有邮件)

+OK 7 messages:

1 597

2 571

3 597

4 597

5 597

6 571

7 571

.

retr 1 (意思就是查看第一封邮件)

+OK 597 octets

Return-Path: <root@localhost.localdomain>

X-Original-To: support@extmail.org

Delivered-To: postmaster@extmail.org

Received: by localhost.localdomain (Postfix, from userid 0)

id BF7297F446; Thu, 24 Nov 2016 16:24:37 +0800 (CST)

Date: Thu, 24 Nov 2016 16:24:37 +0800

To: support@extmail.org

Subject: test

User-Agent: Heirloom mailx 12.4 7/29/08

MIME-Version: 1.0

Content-Type: text/plain; charset=us-ascii

Content-Transfer-Encoding: 7bit

Message-Id: <20161124082713.BF7297F446@localhost.localdomain>

From: root@localhost.localdomain (root)

hirpm -q httpdrpm -q httpdni zuo sha ne

.   (点是结束标志)

quit     

+OK Logging out. (退出标志)

Connection closed by foreign host.

以上做的是认证方面的   图片的右边那一部分

如何配置网站邮箱来工作:(接上面继续做)

[root@localhost ~]# vim /etc/httpd/conf/httpd.conf  rpm安装出来的apache主配置文件位置)

 

<virtualhost *:80>

        ServerName mail.extmail.org (邮件服务器的域名)

        DocumentRoot /var/www/extsuite/extmail/html/         #(指定一下用户登录到这个域名以后的默认工作目录)

        scriptalias /extmail/cgi /var/www/extsuite/extmail/cgi   #(脚本别名)

        alias /extmail  /var/www/extsuite/extmail/html     #(访问extmail的时候自动跳转到后面的路径下)

        scriptalias /extman/cgi /var/www/extsuite/extman/cgi

        alias /extman /var/www/extsuite/extman/html

        suexecusergroup vmail vmail           #useradd添加的那个真实用户,只有vmail用户和vmail组有权限加载之前的配置)

</virtualhost>

[root@localhost ~]# cd /var/www/extsuite/extmail/

[root@localhost extmail]# ll (查看、修改cgiWebMail的权限)

[root@localhost extmail]# chown -R vmail:vmail cgi

[root@localhost extmail]# cp webmail.cf.default webmail.cf cp模板产生一个新主配置文件)

[root@localhost extmail]# vim webmail.cf

 

###  /home/后面的位置在哪里看自己当时定的在哪里

[root@localhost extmail]# cd ../extman/

[root@localhost extman]# ll

[root@localhost extman]# pwd

/var/www/extsuite/extman

[root@localhost extman]# chown -R vmail:vmail cgi/

[root@localhost extman]# cp webman.cf.default webman.cf

[root@localhost extman]# vim webman.cf

 

 

(上图)认证:现实生产环境中应该启用这个,这是输入密码时的验证码,虚拟机环境中需关闭。 SYS_CAPTCHA_ON = 0

[root@localhost extman]# service httpd start

[root@localhost extman]# netstat -apnt

返回压缩包所在的目录····

[root@localhost ext]# tar -zxvf Unix-Syslog-1.1.tar.gz

[root@localhost ext]# cd Unix-Syslog-1.1

[root@localhost Unix-Syslog-1.1]# perl Makefile.PL

[root@localhost Unix-Syslog-1.1]# make

[root@localhost Unix-Syslog-1.1]# make install

[root@localhost extman]# service httpd start

[root@localhost extman]# netstat -apnt

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

     ###出现这个是因为没安装unix-syslog这个包

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

最后在本地C:WindowsSystem32driversetc下的HOSTS文件里映射出来即可

 

在客户浏览器端

http://mail.extmail.org #客户端

账号是 postmaster

密码是extmail

域名  extmail.org

http://mail.extmail.org/extman   #管理员端 (下图)

 

#这里是使用你在mysql里面修改的账号密码

欢迎加入QQ群一起讨论Linux、开源等技术

原文地址:https://www.cnblogs.com/smlile-you-me/p/6917831.html