热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

postfix邮件服务器安装指南

核心提示:要求:使用postfix为公司配置一部邮件服务器,用户可以使用username@test.com或username@test.net访问邮箱(也即要实现虚拟域功能),并且要能将所有发给root的邮件转发给用户tom(也即要实现别名)。公司内部网段为192.168.1要求:使用postfix为公

核心提示:要求:
使用postfix为公司配置一部邮件服务器,用户可以使用username@test.com或username@test.net访问邮箱(也即要实现虚拟域功能),并且要能将所有发给root的邮件转发给用户tom(也即要实现别名)。公司内部网段为192.168.1
要求:
使用postfix为公司配置一部邮件服务器,用户可以使用username@test.com或username@test.net访问邮箱(也即要实现虚拟域功能),并且要能将所有发给root的邮件转发给用户tom(也即要实现别名)。公司内部网段为192.168.1.0/24,邮件服务器插有两张网卡。
一、运行环境:
操作系统:RedHat7.0
postfix版本:postfix-20010228release-2.i386
pop3服务器版本:RedHat7.0自带的imap-4.7c2-12
客户端工具:outlook

二、安装postfix和imap

1. 获取postfix的rpm软件包。
从http://web6.dialin.co.uk/~sjmudd/postfix/ 站点下载下面的postfix的rpm包:
postfix-20010228release-2.i386.rpm

2. 用以下命令查看系统是否安装了sendmail:
[root@mail /root]# rpm ?qa |grep sendmail
sendmail-8.11.0-8

3. 卸载sendmail:
[root@mail /root]# rpm -e sendmail -?nodeps

4. 用以下命令杀死运行中的sendmail进程:
[root@mail /root]# killall sendmail
如果系统提示:
sendmail: no process killed
则说明当前系统中没有sendmail进程。

5. 安装postfix:
[root@mail /root]# rpm -Uvh postfix-20010228release-2.i386.rpm

6. 安装imap
插入RedHat7.0安装盘,mount后执行:
rpm ?ivh /mnt/cdrom/RedHat/RPMS/ imap-4.7c2-12.rpm

三、配置DNS

配置DNS服务器,将test.com和test.net域的MX记录都指向邮件服务器,然后执行ndc reload命令使改动生效。

四、配置postfix
编辑postfix的主要配置文件/etc/postfix/main.cf,根据需求只需修改以下几个参数:

1. mydomain
指明你的域名,在这里我们指定:
mydomain = test.com

2. myorigin
myorigin参数指明发件人所在的域名。如果你的用户的邮件地址为user@domain.com,则该参数指定@后面的域名。在这里我们指定:
myorigin = $mydomain

3. mydestination
mydestination参数指定postfix接收邮件时收件人的域名,换句话说,也就是你的postfix
系统要接收什么样的邮件。通常与myorigin一样:
mydestination = $mydomain

4. mynetworks_style
设置网络类型,我们指定:
mynetworks_style = subnet

6.mynetworks
定义可以使用的此smtp服务器发信的客户ip地址,因为公司的ip范围已知,所以我们指定:
mynetworks = 192.168.1.0/24

五、配置虚拟域

为了让用户可以使用username@test.net收发邮件,我们必须配置虚拟域,在main.cf文件中,我们添加以下内容:
virtual_maps = hash:/etc/postfix/virtual
这里假定用户tom、test、white需要使用这个虚拟域名,当然首先要在系统中添加这几个用户,然后建立/etc/postfix/virtual文件并添加以下内容:
test.net anything
tom@test.net tom
test@test.net test
white@test.net white
之后,用postmap命令生成虚拟域数据库:
postmap /etc/postfix/virtual

六、配置用户别名

假设tom是管理员,并且通过tom可以收取所有寄给root的邮件,以便管理员对系统进行监控。要实现这一点,我们必须使用邮件别名。
在main.cf文件中添加以下内容:
alias_maps = hash:/etc/postfix/aliases
其实该配置文件中已经有这一条了,只不过是被注释掉的,可以去掉前面的#号来取消注释。
编辑/etc/postfix/aliases文件,将
root: postfix
改为:
root: tom
用以下命令建立别名数据库:
postalias /etc/postfix/aliases

七、配置pop3

RedHat7.0已经使用xinetd代替了以前的inetd,为了使pop3服务启动,我们编辑/etc/xinetd.d/ipop3文件,将其中的disable = yes改为disable = no 以便启动pop3服务。
为了使改动生效,执行以下命令:
/etc/rc.d/init.d/xinetd reload

八、启动postfix
执行以下命令启动postfix:
/etc/rc.d/init.d/postfix start

这样,我们就实现了所有的需求:在/etc/postfix/virtual中配置过的用户既可以使用username@test.com 访问邮箱,又可以使用username@test.net 访问邮箱;同时也实现了别名功能,所有发给root的邮件都将被转发给用户tom。根据这个例子,读者应该很容易举一反三,实现更复杂一些的功能。
 

5. 关于延迟邮件的再投递控制
可以通过以下的几个参数实现对延迟邮件的再投递控制:
queue_run_delay:设置队列管理进行扫描deferred邮件队列的频率,缺省值为1000秒。
maximal_queue_lifetime:设置postfix在放弃投递而返回不可投递信息前,被延迟邮件再deferred邮件队列中的生存时间。
minimal_backoff_time:当一封邮件投递失败后,邮件队列将在一段时间内忽视该邮件的存在,也就是我们前面讲的时间邮票。该参数就是用来设置最小的时间邮票。缺省值为1000秒。
maximal_backoff_time:设置最大的时间邮票。

6. 对拒绝服务攻击的处理
postfix对每一个SMTP会话都设置一个错误计数器,当该客户端的请求未
被接受或违反那UCE规则时,该计数器就增1。随着计数器的增加,postfix将采取不同的措施来防止恶意用户的拒绝服务攻击。
smtpd_error_sleep_time:当该错误计数器的值还很小时,postfix将暂停
smtpd_error_sleep_time指定的时间,然后向客户端报告一个错误。该参数的缺省值为5秒。
smtpd_soft_error_limit:当错误计数器的值超过该参数指定的值时,postfix在响应该客户端请求前将沉睡一段时间。缺省值为10。
smtpd_hard_error_limit:当错误计数器的值超过该参数指定的值时,postfix
中断同该客户端的连接。缺省值为100。

4.5 postfix对使用资源的控制
通过特定的postfix配置参数,我们可以实现postfix运行时对所消耗的资源的灵活控制。可以通过以下几个方面来控制postfix消耗的资源:

1. 限制内存中的对象的大小
要控制对内存资源的消耗,必须控制内存中对象的大小。可以用以下的参数来进行对象大小的控制:
line_length_limit:控制读入数据时每一行的大小,如果太长则强行将其分割成更短的行,太长的行在投递时再重组。缺省值为2048 bytes。
header_size_limit:限制信头长度。缺省值为102400bytes。
message_size_limit:限制postfix队列文件的大小。缺省值为10240000 bytes。
queue_minfree:邮件队列中可用的空间大小。缺省为无限制。建议该值最好时message_size_limit的数倍以便于处理大邮件。
bounce_size_limit:限制某一邮件不可投递时,返回给发件人不可投递报告的大小,缺省值为50000 bytes。

2. 限制内存中对象的数目
qmgr_message_recipient_limit:设置内存中收件人地址的最大数目。缺省值为10000。
qmgr_message_active_limit:设置active邮件队列中邮件数目的最大值。缺省值为1000。
duplicate_filter_limit:设置需要local和cleanup后台程序记住的收件人地址的最大数目。缺省值为1000。

3.限制等待一个外部命令完成的时间
command_time_limit:设置local程序等待一个外部命令完成的时间。缺省值为1000秒。

4. 限制文件锁定的操作时间
deliver_lock_attempts:设置锁定一个文件的最大尝试次数。缺省值为5次。
deliver_lock_delay:设置如果锁定一个文件失败后再次尝试的等待时间,缺省值为1秒。

5. 控制错误恢复
在某些情况下(如高负载),postfix的某个进程可能会死掉,这时master进
程会试图重新启动该进程,我们可以通过下面的参数来控制这种行为:
fork_attempts:试图重启动一个进程的最大尝试次数。缺省值为5次。
fork_delay:每两次尝试之间的等待时间,缺省值为1秒。
transport_retry_time:队列管理进程每两次尝试连接一个不正常的投递代理进程之间的等待时间。缺省为60秒。

4.6 postfix中的地址操作

1. 将地址改写为标准格式
在cleanup进程进行表查询之前,它首选请求trivial-rewrite进程将新
邮件地址改写成标准的user@fully.qualified.domain格式。改写的目的是为了减少查询表中的条目,从而提供查询的效率。trivial-rewrite进程可以实现以下的地址改写:
* 将包含源路由信息的地址如@hosta,@hostb:user@site写成user@site,因为postfix不支持包含源路由信息的地址格式。
* 将形如user%domain的地址改写成user@domain的形式。该特性可通过allow_percent_hack参数进行控制,其缺省值为yes。
* 将只包含user的地址改写成user@$myorigin。该特性可通过append_at_myorigin参数进行控制,其缺省值为yes。最好不要改动其缺省值,因为大多数的postfix进程更擅长处理地址形如user@$myorigin的邮件。
* 将形如user@host的地址改写成user@host.$mydomain。该特性可通过append_dot_mydomain参数进行控制,其缺省值为yes。
* 将形如user@site.的地址改写成 user@site,也即除去了最后的点号。

2. 规范地址映射
在cleanup进程将一封新邮件存入incoming邮件队列之前,cleanup进程
将根据查询规范表来进行地址改写,从而使之更具可读性。主要是替换形如Firstname.Lastname 风格的地址以及清除无效的域。缺省postfix是不进行规范地址改写的,你可以通过指定canonical_maps参数的值来使其生效。如:
canonical_maps = hash:/etc/postfix/canonical
也可以分别为收件人和发件人地址分别指定不同的改写规范,这时参数sender_canonical_maps和recipient_canonical_maps的优先级比canonical_maps高。如:
sender_canonical_maps = hash:/etc/postfix/sender_canonical
recipient_canonical_maps = hash:/etc/postfix/recipient_canonical

3. 地址欺骗
就是将形如user@host.domain的地址改写成user@domain或user@other.domain,
好像是从其他的邮件服务器发出的一样。缺省该功能是被禁止的,可以用参数masquerade_domains使其生效,如:
masquerade_domains = $mydomain
也可以通过masquerade_exceptions参数对特定的用户不进行地址欺骗,如:
masquerade_exceptiOns= root
注意:地址欺骗只对发件人地址有作用。


推荐阅读
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文介绍了如何找到并终止在8080端口上运行的进程的方法,通过使用终端命令lsof -i :8080可以获取在该端口上运行的所有进程的输出,并使用kill命令终止指定进程的运行。 ... [详细]
  • 禁止程序接收鼠标事件的工具_VNC Viewer for Mac(远程桌面工具)免费版
    VNCViewerforMac是一款运行在Mac平台上的远程桌面工具,vncviewermac版可以帮助您使用Mac的键盘和鼠标来控制远程计算机,操作简 ... [详细]
  • 本文详细介绍了云服务器API接口的概念和作用,以及如何使用API接口管理云上资源和开发应用程序。通过创建实例API、调整实例配置API、关闭实例API和退还实例API等功能,可以实现云服务器的创建、配置修改和销毁等操作。对于想要学习云服务器API接口的人来说,本文提供了详细的入门指南和使用方法。如果想进一步了解相关知识或阅读更多相关文章,请关注编程笔记行业资讯频道。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 如何基于ggplot2构建相关系数矩阵热图以及一个友情故事
    本文介绍了如何在rstudio中安装ggplot2,并使用ggplot2构建相关系数矩阵热图。同时,通过一个友情故事,讲述了真爱难觅的故事背后的数据量化和皮尔逊相关系数的概念。故事中的小伙伴们在本科时参加各种考试,其中有些沉迷网络游戏,有些热爱体育,通过他们的故事,展示了不同兴趣和特长对学习和成绩的影响。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
author-avatar
fjy69
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有