Centos 7.1 搭建postfix 邮件系统
学习一个服务的流程;
1、此服务器的概述:名字,功能,特点,端口号
2、安装
3、配置文件的位置
4、服务启动关闭脚本,查看端口
5、此服务的使用方法
6、修改配置文件,实战举例
7、服务的安全
8、排错(从下到上,从内到外)
9、模拟错误<对服务的原理要精通>
背景介绍;
RHEL5默认,地位已失
地位失守原因:
第一个重要的缺点是它的安全性较差,这是因为当其作者Eric Allman最初开始写作这个软件的时候,Internet的用户还很少,因而安全性并不没有得到大家的重视。
由于邮件系统需要处理的是外部发送来的各种各样的信息,甚至包含一些恶意数据,然而sendmail在大多数系统中都是以root身份运行,一旦出现问题,就会对系统安全造成严重影响。在这种情况下,要防止出现安全问题,仅仅依赖程序本身是不可取的,应该从系统结构出发,使程序拥有的特殊权限限制到最小。
第二个,使用Sendmail还会遇到的另一个问题是它的设置相当复杂,对于使用缺省设置来收发电子邮件,问题并不存在。当管理员打算进行一些特殊设置,以便利用Sendmail提供的复杂邮件处理能力时,就不得不面对复杂的宏和正则表达式。
Qmail可以替代Sendmail
Qmail,为了解决sendmail的安全问题,整个系统结构需要重新设计。基本的原则是将系统划分为不同的模块,有负责接收外部邮件的,有管理缓冲目录中待发送的邮件队列的,有将邮件发送到远程服务器或本地用户的。Qmail就是按照这个原则进行的设计,它由多个不同功能的小程序组成,只有必要的程序才是setuid程序(即以root用户权限执行),这样就减少了安全隐患,并且由于这些程序都比较简单一些,因此就可以达到较高的安全性。Qmail已经许多年没有更新了,用户已经习惯于通过第三方的插件及补丁来使qmail增加新的功能.
postfix 介绍:
另一种替换软件:Postfix 可以替代sendmail
postfix同样也是采用了模块化的方式,但与Qmail不同的是,Postfix使用了一个主控进程进行监控。Postfix在很多方面都考虑到了安全问题,它甚至不向root分发电子邮件,以避免以root身份读写文件或启动外部程序。考虑到它的作者Wietse Venema曾编写了著名的安全软件TcpWrapper,Postfix的安全性是非常值得信赖的。
Postfix的性能也非常不错,甚至在Qmail作者自己进行的测试中也表明,Postfix的性能和Qmail基本相当。postfix在性能上大约比sendmail快三倍
官网:http://www.postfix.org/
logo
作者:Wietse Venema
作者介绍:http://www.porcupine.org/wietse/
前面我们说的都是邮件发送服务器
接下来我们看看邮件接收服务器
Dovecot: 邮件接收服务器:
Dovecot 是一个开源的 IMAP 和 POP3 邮件服务器,支持 Linux/Unix 系统。
POP / IMAP4 是 MUA 从邮件服务器中读取邮件时使用的协议。
POP3 是从邮件服务器中下载邮件存起来,IMAP 则是将邮件留在服务器端直接对邮件进行管理、操作。比POP3更先进。
由 Timo Sirainen 开发,最初发布于 2002年7月。作者将安全性考虑在第一,所以 Dovecot 在安全性方面比较出众。
IMAP4是TCP/IP协议族中的一员,现在的版本是“IMAP第四版第一次修订版”。
一个完整的邮件服务器由以下内容构成:
postfix(作为发送邮件服务器)+dovecot(作为接收邮件服务器)+mysql(作为数据库)
25 端口:SMTP协议。 发送邮件
是本地邮件传输协议,与SMTP类似,但不支持邮件队列(queue),主要应用于非广域网的邮件网关。
110端口:POP3协议
是本地邮件传输协议,与SMTP类似,但不支持邮件队列(queue),主要应用于非广域网的邮件网关。
143:IMAP
IMAP: (InternetMail Access Protocol Internet邮件访问协议) 。IMAP是斯坦福大学在1986年开发的一种邮件获取协议。它的主要作用是邮件客户端(例如Outlook)可以通过这种协议从邮件服务器上获取邮件的信息,下载邮件等。
当前的权威定义是RFC3501。IMAP协议运行在TCP/IP协议之上,使用的端口是143。它与POP3协议的主要区别是用户可以不用把所有的邮件全部下载,可以通过客户端直接对服务器上的邮件进行操作。两者之前的区别
POP3协议允许电子邮件客户端下载服务器上的邮件,但是在客户端的操作(如移动邮件、标记已读等),不会反馈到服务器上,比如通过客户端收取了邮箱中的3封邮件并移动到其他文件夹,邮箱服务器上的这些邮件是没有同时被移动的 。
而IMAP提供webmail 与电子邮件客户端之间的双向通信,客户端的操作都会反馈到服务器上,对邮件进行的操作,服务器上的邮件也会做相应的动作。
邮件功能组件
MUA:邮件用户代理(Mail User Agent) 收邮件
MTA:邮件传输代理(Mail Transfer Agent) 发邮件
rhel5默认采用sendmail做为MTA,rhel6则采用postfix
MDA:邮件递送代理(Mail Delivery Agent)
名称 |
全名 |
基于协议 |
作用 |
常见软件 |
MUA |
Mail User Agent 用户邮件代理 |
替用户收发邮件的 |
Outlook Foxmail Thunderbird mutt |
|
MTA |
Mail Transfer Agent 邮件传输代理 |
SMTP |
服务器中接受邮件 |
Sendmail qmail postfix(IBM) exchange |
MDA |
Mail Deliver Agent 邮件投递代理 |
把SMTP收到的邮件投递的用户邮箱 |
Procmail maildrop |
|
MRA |
Mail Retrival Agent邮件检索代理 |
POP3/IMAP |
帮用户去邮箱取邮件 |
dovecot courier-imap cyrus-imap |
工作原理图
搭建postfx服务端
[root@post-test ~]# hostname
postfix-server
[root@postfix-server ~]# rpm -qa |grep sendmail
[root@postfix-server ~]# yum remove sendmail -y
[root@postfix-server ~]# alternatives --config mta
共有 1 个提供“mta”的程序。
选项 命令
-----------------------------------------------
*+ 1 /usr/sbin/sendmail.postfix
按 Enter 保留当前选项[+],或者键入选项编号: # 如果有多个输入数字进行选择
[root@postfix-server ~] alternatives --display mta #查看所有详细的版本
[root@postfix-server ~] #yuminstall postfix �Cy # postfix服务的主程序包,服务器端必须安装该
[root@postfix-server ~] #yuminstall dovecot �Cy #接收邮件软件包。 安装在服务端用于测试收邮件。 安装客端用于收邮件。
[root@postfix-server ~] #vim /etc/postfix/main.cf
[root@postfix-server ~] # vim/var/log/maillog
[root@postfix-server ~]#service postfix start
[root@postfix-server ~]#lsof -i :25
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODENAME
master 2336 root 12u IPv4 13216 0t0 TCP localhost:smtp (LISTEN)
master 2336 root 13u IPv6 13218 0t0 TCP localhost:smtp (LISTEN)
服务的使用方法:
linux:
发送:
[root@postfix-server ~]# mail -s 'Postfix'[email protected] < /etc/passwd
-s:指定邮件主题名
接收:
windows:
通过浏览器访问或 foxmail
案例一;
1)修改主机名和对应关系:
[root@postfix-server~]# hostname
xuegod63.cn
[root@postfix-server ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
postfix-server 172.16.1.201
2.修改postfix服务配置文件
[root@postfix-server ~]#vim /etc/postfix/main.cf
queue_directory= /var/spool/postfix #队列目录,也是运行的根目录
mydomain =postfix-server#指定邮件域,接收用来识别的
myhostname= postfix-server#发送邮件的主机名
mynetworks= 192.168.1.0/24, 127.0.0.0/8 #指定允许使用的ip地址段
myorigin =$mydomain #发信地址,此设置显示为@postfix-server
inet_interfaces= all #对外提供MTA服务设置为监听所有网卡,默认只监听本地
#inet_interfaces= localhost #注释掉,这个是只监听本地的
mydestination= $myhostname, localhost.$mydomain, localhost, $mydomain
mynetworks_style= subnet #允许转发的来源网段,可选subnet子网,class网段,host本机
local_recipient_maps = //209行,把前面的注释拿掉
relay_domains= $mydestination #允许转发的目标域
alias_maps= hash:/etc/aliases #对某个用户发,文件中的用户都可以收到邮件
alias_database= hash:/etc/aliases
smtpd_banner= $myhostname ESMTP "postfix mail server" #自定服务器信息
3.启动postfix服务;
[root@postfix-server ~]#servicepostfix restart
1)测试给[email protected]发送邮件:
[root@xuegod63 ~]# mail -s 'Postfix'[email protected]< /etc/postfix/main.cf
由于要经过很多域名解析发送中转,所以会有些延迟
-s:邮件主题
#
[root@postfix-server ~] #mail
HeirloomMail version 12.4 7/29/08. Type ? forhelp.
"/var/spool/mail/root":12 messages 1 new 2 unread
>N 12 Mail Delivery System Sun Nov 29 21:14 752/29445 "UndeliveredMail Returned to S"
&
没有发送出去,经验证是网络ip的问题
http://www.anti-spam.org.cn/ 反垃圾邮件联盟,看看你的ip是否被拉入黑名单
用别的地方的一台机器,一样的配置文件,可以发送
[root@postfix~]# mail -s 'Postfix' [email protected] </etc/postfix/main.cf
1.我们怎样才能让我们的邮件服务器给别人发送邮件不显示垃圾邮件?
需要为邮件服务器添加DNS解析
虽然不加DNS解析也能把邮件发出去,但会被大多数邮件服务器当作垃圾邮件。根据我们的实际经验,需要添加三条DNS解析记录:A记录、MX记录、TXT记录比如域名cnblogs.info,对应的DNS记录如下
需求:
我们先创建2个用户,创建一个组HA,当我们给HA送邮件的时候,alice和bob两个用户可以收到邮件
别名功能
1)添加测试用户:
[root@postfix-server ~]# groupadd HA
[root@postfxi-server ~]# useradd alice
[root@postfix-server ~]# echo "123456" | passwd --stdinalice
[root@postfix-server ~]# useradd bob
[root@postfix-server~]# echo "123456" | passwd --stdin bob
[root@postfix-server~]# vim /etc/aliases
HA: alice,bob
[root@postfix-server ~]# service postfixrestart
3)发送测试邮件:
[root@postfix-server ~]# mail HA
Subject: Test
This is a Test-mail
lllloo
kllll
lll
EOT 按ctrl-D结束输入
4) 切换用户查看:
[root@postfix-server ~]# su - alice
[alice@postfix-server ~]$ mail
修改dovecot配置文件:
[root@postfix-server ~]# vim /etc/dovecot/dovecot.conf
protocols = imap pop3 lmtp #启用,lmtp被淘汰的地步。可能不被支持,不用就删掉
login_trusted_networks = 192.168.1.0/24 //指定允许登录的网段地址
或login_trusted_networks = 0.0.0.0 设置为四个零,允许所有网络
[root@postfix-server ~]# grep -v '^#' /etc/dovecot/dovecot.conf |grep-v '^$' |grep -v '#'
protocols= imap pop3 lmtp
login_trusted_networks= 192.168.1.0/24
dict {
}
!includeconf.d/*.conf
设置邮件存放目录:
[root@postfix-server~]# vim/etc/dovecot/conf.d/10-mail.conf
mail_location = mbox:~/mail:INBOX=/var/mail/%u #指定邮件的位置
重启dovecot服务
[root@postfix ~]# service dovecot restart
修改创建用户模板文件,使用户创建时自动生成mail存放目录
[root@postfix ~]# vim /etc/skel/.bash_profile
if[ ! -d ~/mail/.imap/INBOX ] ; then
mkdir -p ~/mail/.imap/INBOX
fi
[root@postfix-server ~]# source .bash_profile
5)测试:
先创建用户
[root@postfix-server~]# useradd alice
[root@postfix-server~]# echo alice:123456 |chpasswd
[root@postfix-server~]# useradd bob
[root@postfix ~]# echobob:123456 |chpasswd
测试发邮件
测试发邮件:
mail发邮件三种用法
1:以文件中的内容为邮件内容发信
[root@postfix-server ~]# su - alice
[alice@postfix-server ~]$ mail -s'Posfix1' bob@postfix-server < /etc/hosts
2:手动输入内容作为发送内容
[alice@postfix-server ~]$ echo"2222222222" | mail -s 'Postfix2' bob@postfix-server
3:手动输入一串作为发送内容
[alice@postfix-server~]$ mail -s 'Postfix3' bob@postfix-server
yyyuuu
hhhhhkkk
jjjnnnn
EOT
通过mail命令查看邮件:
[root@postfix-server~]# su - bob
[bob@postfix-serve~]$ mail
& #mail命令的提示符为 &
& 1 # 输入数字1,查看第一封邮件
& h #查看邮件列表
& l #查看所有支持的命令
& d 2 #删除第二个邮件; d 2-4 删除第2-4的邮件
& ? #查看 所有用法。
本文出自 “渲染不变的昨天” 博客,谢绝转载!