Linux下的postfix
Linux下的postfixPostfix是wietse Venema在IBM的GPL协议下开发的MTA(邮件传输代理)软件。特点为以下几点:免费、速度快、兼容性好、更灵活、安全性高。一、Postfix的邮件队列Postfi...
Linux下的postfix
Postfix是wietse Venema在IBM的GPL协议下开发的MTA(邮件传输代理)软件。
特点为以下几点:免费、速度快、兼容性好、更灵活、安全性高。
一、Postfix的邮件队列
Postfix有四种不同的邮件队列,并且有队列管理进程统一管理:
- maildrop:本地邮件放置在maildrop中,同时也拷贝到incoming中。
- incoming:放置在到达或队列管理进程尚未发现的邮件。
- active:放置在队列管理进程已经打开了并正准备投递的邮件,该队列有长度的限制。
- deferred:放置不能被投递的邮件。
队列管理进程仅仅在内存中保留active队列,并且对该队列长度进行限制,这样做的目的是为了避免运行内存超过系统的可用内存。
二、postfix对邮件风暴的处理
当有新的邮件到达时,postfix进行初始化,初始化时postfix同时只接受两个并发的连接请求。当邮件投递成功后,可以同时接受的并连发的数目就会缓慢的增长至一个可以配置的值。当然,如果这时系统的而消耗已达到系统不能承受的负载就会停止增长。还有一中情况时,如果postfix在处理邮件过程中遇到了问题,则该值会降低。
当接收到的新邮件数量超过postfix的投递能力时,postfix会暂时停止投递deferred对列中的邮件而去处理新接收到的邮件。这是因为处理新邮件的延迟要小于deferred队列中的邮件。Postfix会在空闲时间处理deferred的邮件。
三、postfix对无法投递的邮件的处理
当一封邮件第一次不能成功投递时,postfix会给该邮件贴上一个将来的时间邮票。邮件队列管理程序会忽略贴有将来时间邮票的邮件。时间邮票到期时,postfix会尝试再对该邮件进行一次投递,如果这次投递失败,postfix就给该邮件贴上一个两倍于上次时间的时间邮票,等邮票到期再次投递,依次类推。当然,经过一定次数的尝试后,postfix会放弃对该邮件的投递,返回一个错误信息给该邮件的发件人。
四、postfix对不可到达目的地的邮件的处理
Postfix会在内存中保存一个有长度限制的当前不可到达的地址列表。这样就避免了对那些,目的地为当前不可到达地址的邮件的投递尝试。从而大大提高了系统的性能。
五、1.2.5 postfix的安全性
postfix通过一系列的措施来提高系统的安全性,这些措施包括:
1.动态分配内存,从而防止系统缓冲区溢出;
2. 把大邮件分割成几块进行处理,投递时再重组;
3. Postfix的各种进程不在其他用户进程的控制之下运行,而是运行在驻留主进程master的控制之下,与其他用户进程无父子关系,所以有很好的绝缘性。
4. Postfix的队列文件有其特殊的格式,只能被postfix本身识别;
邮件服务器也采用的是C/S工作模式,通过SMTP,POP,IMAP协议来是实现邮件的发送和接受的。那么,电子邮件在互联网上是如何传输的呢?因为每个电子邮件是由3部分组成的:
MUA(mail user Agent)负责写收信
MTA(mail transfer agent) 负责信件寄送
MDA (mail Delivery Agent)投递者负责将信件放在指定目的地
Linux下的Postfix搭建:
- 关闭防火墙
- 关闭selinux
- 安装postfix
进入配置文件进行配置:
配置邮件服务器主机名:
配置域名(这个邮件服务器管理的是哪个区域范围的邮件发送)
#指定邮件发送时的域名
定网络接口(默认只监听本地但是如果要与外界通信那么就要监听所有地址)
116 注释掉
#指定服务器的目标区域 设置邮件可以发送到哪些域名(可注释掉,取消165注释)
#指定允许网络网段地址,设置信任的邮件客户端地址
#转发域 设置邮件转发到哪去
2、配置dovecot服务
配置dovecot主配置文件(本地邮件传输协议)
添加用户
给文件修改权限
chmod 0600 /var/mail/*
重启postfix和 dovecot
检测
不同域之间如要发送邮件则需要做DNS解析服务器
补充:
- 邮件群发:
#先编辑文件
Vim /etc/aliases
#加入以下内容:(不同的组自己可定义名称)
例:workgroup: haha,xixi,dudu
Workgroup1:redhat,xiaoming
#使用postalias命名将别名文件转化成数据库
[root@mail~]#postalias /etc/aliases
ll /etc/aliases*
useradd maomao /xixi/redhat 创建用户
#mail to workgroup (给workgroup发送邮件)
#su – xixi (切换用户进行查看邮件)
#su – redhat
- mail命令的使用
#写邮件给redhat
mail to redhat
#输入邮件主题,冒号前的为提示信息
subject:test
#输入主题后会返回空白提示,输入邮件内容
…………
#按下ctrl + d按键保存发送,回显一个标记
EOT
到redhat用户查收邮件
su – redhat
#使用mail命令查看自己返回的邮件
#输入1查看编号为1的邮件
3、支持ssl访问
cd /etc/postfix
#openssl生成CA认证的一个私钥工具
-keyout 生成证书签署的文件
openssl req -new -x509 -nodes -out smtpd.pem -keyout smtpd.pem -days 365
86
shaanxi
xi'an
openlab
rhce
mail.baidu.com
编辑/etc/postfix/main.cf文件 (功能的参数,功能的特点)
安全传输层协议(TLS)用于在两个通信应用程序之间提供保密性和数据完整性。
smtp_use_tls = yes
smtpd_use_tls = yes
smtp_tls_note_starttls_offer = yes
smtpd_tls_CAfile = /etc/postfix/smtpd.pem
smtpd_tls_cert_file = /etc/postfix/smtpd.pem
smtpd_tls_key_file = /etc/postfix/smtpd.pem
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes 标准
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom
编辑/etc/postfix/master.cf文件,去掉以下内容的注释:(主配置文件的主配置文件功能的开关方法)
#smtps inet n - n - - smtpd
# -o smtpd_tls_wrappermode=yes 安全传输的包装层模块
# -o smtpd_sasl_auth_enable=yes 安全传输认证开启
重启服务
systemctl restart postfix
systemctl restart dovecot
systemctl restart saslauthd
打开foxmail账号管理----账号 ---将ssl端口选中改变加密端口,
可以实现加密之间的账户和加密和非加密之间的账户可以互相发送邮件
四、虚拟别名域
使用虚拟别名域,可以将发给虚拟域的邮件实际投递到真实域的用户邮箱中;可以实现群组邮递的功能,即指定一个虚拟邮件地址,任何人发给这个邮件地址的邮件都将由邮件服务器自动转发到真实域中的一组用户的邮箱中。
这里的虚拟域可以是实际并不存在的域,而真实域既可以是本地域(即main.cf文件中的mydestination参数值中列出的域),也可以是远程域或Internet中的域。虚拟域是真实域的一个别名。实际上,通过一个虚拟别名表(virtual),实现了虚拟域的邮件地址到真实域的邮件地址的重定向。
配置:
###例:在两个域的主配置文件中添加如下内容:
[root@mail~]#vim /etc/postfix/main.cf
virtual_alias_domains=group.com,work.com
virtual_ailas_maps=hash:/etc/postfix/virtual (映射)
###在虚拟别名域中添加如下内容
#vim /etc/postfix/vritual
#例:baidu域的虚拟别名
@group.com @baidu.com #group对应的是baidu域
@work.com @qq.com #work对应的是qq域
admin@group.com maomao,xixi,rehdat(组里添加的用户后面都一样)
doudou@work.com xiaodou,dadou
123@group.com maomao,xixi #如果是本域名用户不需要加后缀
234@work.com doudou@work.com,xaiodouwork.com
#postmap /etc/postfix/virtual 更新文件
以上只是假设对一个域的别名的虚拟,可根据实际情况而定。
###每次改变该文件,需要执行以下两个命令
#重新生成虚拟别名域数据库
[root@mail~]#postmap /etc/postfix/virtual
#重新加载虚拟别名域数据文件
[root@mail~]#systemctl reload postfix
#测试
以一个用户身份发送邮件给设定好的虚拟用户发送邮件
更多推荐
所有评论(0)