Centos系统下如何linux搭建邮件服务器器

CentOS 5 使用 Sendmail 架设邮件服务器 | 网站架构
CentOS 5 使用 Sendmail 架设邮件服务器
Sendmail 是一款简单易用的邮件服务软件(邮件传输代理、MTA),许多 Linux 发行版都内置 Sendmail 程序,只需简单设置即可将服务器配置为可收发邮件的服务器,下面以 CentOS 5作为例子。
1、域名的设置首先需要设置域名 DNS 的 MX 记录和 SPF 记录,一个典型的域名设置如下:
记录类型&&& 主机名&& 目标
------------------------------------
A&&&&&&&& @&&&&&&& 123.123.123.123 (这里设置为你服务器的IP)
CNAME&&&& www&&&&& your-domain.com
CNAME&&&& SMTP&&&& your-domain.com
MX&&&&&&& @&&&&&&& smtp.your-domain.com
TXT&&&&&& @&&&&&&& v=spf1 a mx ~all
MX记录是邮件服务器必须依赖的,而TXT(SPF)是用来防止自己的邮件服务器发送的邮件不被当成垃圾邮件(spam email),假如不增加SPF记录的话对方邮箱服务器可能会把你发出的邮件直接丢弃、或者塞到垃圾邮件文件夹里,所以这条记录现今是必不可少的。
2、设置 Sendmail
下面使用的 Sendmail 版本是 8.14,设置方法非常简单,首先确保你系统已经有 sendmail 及其相关服务了:
# yum install sendmail
# yum install sendmail-cf
# yum install sendmail-devel
# yum install sendmail-milter
然后切换到 /etc/mail 目录,a、编辑 local-host-names 文件,在里面添加你的域名,比如 linuxidc.com,一行一个域名。b、编辑 sendmail.mc,把下面两行的注释(即 “dnl #”)删除:
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN’)dnldefine(`confAUTH_MECHANISMS’, `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN’)dnl
c、编辑 sendmail.mc,把下面这行:DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA’)dnl当中的“127.0.0.1”替换成“0.0.0.0”,以允许外网可以访问你的服务器,假如有多个IP地址,而且只想让其中的某一个用作邮件服务,那么就把具体的IP地址填上去。d、添加一个本地帐号,比如“webmaster1”,并设置密码。e、编辑 virtusertable 文件,增加这样的一行:&&&&&&& webmaster1f、重新编译一下 sendmail 的设置:
# m4 sendmail.mc & sendmail.cf
g、重启 sendmail 服务,这样就设置好了,你已经可以使用 mail 命令发送邮件了。
3、设置 IMAP 或 POP3 服务
虽然经过上面的设置我们已经可以对外发送邮件了(使用命令或编程方式),而且回复的邮件也能接收,不过如果我们提供IMAP或者POP3服务,就能方便各种邮件客户端收发邮件。dovecot 就是这样的一个服务。a、先安装 dovecot 服务:
# yum install dovecot
b、编辑dovecot的配置文件,即 /etc/dovecot.conf,有些 Linux 发行版有可能位于 /etc/dovecot/conf.d/,在 #protocols 一行下面增加:protocols imap, pop3假如你不需要 pop3,则直接去除。c、继续编辑dovecot的配置文件,在 #mail_location 下面增加:mail_location = mbox:~/mail:INBOX=/var/mail/%u
e、由于这样简单配置的IMAP或者POP3的数据传输是没有经过加密的,有些 Linux 发行版会禁止明文密码登录(当然位于服务器的web程序发送邮件不受此限制),所以还需要在 #disable_plaintext_auth 这行下面增加:disable_plaintext_auth = nof、重启 dovecot 服务,现在可以使用邮件客户端软件来测试收发邮件了。
4、在 Web App 里发送邮件
这里举一个使用 Java 收发邮件例子。在 Java 里发送邮件一般用 JavaMail,而更简单的是使用 Apache Commons Email 组件:
Email email = new SimpleEmail();
email.setHostName("smtp.linuxidc.com");
email.setAuthenticator(new DefaultAuthenticator("webmaster1", "password"));
email.setTLS(false);
email.setFrom("");
email.setSubject("Hello");
email.setMsg("This is a test mail");
email.addTo(foo@www.linuxidc.net);
email.send();下次自动登录
现在的位置:
& 综合 & 正文
在CentOS下用Postfix配置邮件服务器
在CentOS中,默认的邮件服务器(SMTP方面)是sendmail,但sendmail有若干的缺点,比如,配置复杂、安全漏洞曾被多次发现- -并且依然存在隐患、邮件发送速度慢等等,这里就不再一一叙述。而另一个被广泛应用于邮件服务方面的“Postfix”的缺点就少得多,或者说它就是针对 于sendmail的缺点,而被设计的。对应sendmail的短处,它在各方面也比较成熟。所以,无特殊要求,这里不推荐用sendmail来构建邮件 服务器。本站介绍的邮件服务器配置方法,也将基于Postfix。
添加MX记录(这里假设使用动态域名)
由于MX记录添加后,可能生效要等待一段时间(通常为数分钟或数十分钟,也可能马上生效),所以在安装配置前,我们首先为动态域名添加MX记录。添加方法也会因域名ISP的不同而不同,但大致信息如下:
mx mail.centospub.com. 10a mail 服务器的IP地址
mail为别名,10为优先度。这个别名指向服务器的IP地址.
确认MX记录的添加是否生效的方法:
[root@sample ~]# host -t mx centospub.com
centospub.com mail is handled by 10 mail.centospub.com. ← 确认MX记录生效
安装Postfix
然后,安装Postfix。
[root@sample ~]# yum -y install postfix ← 在线安装Postfix
Setting up Install ProcessSetting up repositoriesdag 100& |=========================| 1.1 kB 00:00update 100& |=========================| 951 B 00:00base 100& |=========================| 1.1 kB 00:00addons 100& |=========================| 951 B 00:00extras 100& |=========================| 1.1 kB 00:00Reading repository metadata in from local filesprimary.xml.gz 100& |=========================| 28 kB 00:04update : ################################################## 84/84Added 84 new packages, deleted 1499 old in 3.44 secondsprimary.xml.gz 100& |=========================| 157 B 00:00Added 0 new packages, deleted 1499 old in 1.97 secondsprimary.xml.gz 100& |=========================| 26 kB 00:00extras : ################################################## 102/102Added 102 new packages, deleted 1499 old in 2.73 secondsReducing Dag RPM Repository for Red Hat Enterprise Linux to included packages onlyFinishedParsing package install argumentsResolving Dependencies–& Populating transaction set with selected packages. Please wait.—& Downloading header for postfix to pack into transaction set.postfix-2.2.10-1.RHEL4.2. 100& |=========================| 40 kB 00:00—& Package postfix.i386 2:2.2.10-1.RHEL4.2 set to be updated–& Running transaction check
Dependencies Resolved
=============================================================================Package Arch Version Repository Size=============================================================================Installing:postfix i386 2:2.2.10-1.RHEL4.2 base 3.0 M
Transaction Summary=============================================================================Install 1 Package(s)Update 0 Package(s)Remove 0 Package(s)Total download size: 3.0 MDownloading Packages:(1/1): postfix-2.2.10-1.R 100& |=========================| 3.0 MB 00:05Running Transaction TestFinished Transaction TestTransaction Test SucceededRunning TransactionInstalling: postfix ######################### [1/1]
Installed: postfix.i386 2:2.2.10-1.RHEL4.2Complete!
配置Postfix及相关组件
[1] 对Postfix进行配置。
[root@sample ~]# vi /etc/postfix/main.cf ← 编辑Postfix的配置文件
#myhostname = host.domain.tld ← 找到此行,将等号后面的部分改写为主机名↓myhostname = sample.centospub.com ← 变为此状态,设置系统的主机名
#mydomain = domain.tld ← 找到此行,将等号后面的部分改写为域名↓mydomain = centospub.com ← 变为此状态,设置域名(我们将让此处设置将成为E-mail地址“@”后面的部分)
#myorigin = $mydomain ← 找到此行,将行首的#去掉↓myorigin = $mydomain ← 变为此状态,将发信地址“@”后面的部分设置为域名(非系统主机名)
inet_interfaces = localhost ← 找到此行,将“localhost”改为“all”↓inet_interfaces = all ← 变为此状态,接受来自所有网络的请求
mydestination = $myhostname, localhost.$mydomain, localhost ← 找到此行,在行为添加“$mydomain”↓mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain ← 变为此状态,指定发给本地邮件的域名
#relay_domains = $mydestination ← 找到此行,将行首的#去掉↓relay_domains = $mydestination ← 变为此状态,定义允许转发的域名
#mynetworks = 168.100.189.0/28, 127.0.0.0/8 ← 找到此行,依照自己的内网情况修改↓mynetworks = 168.100.189.0/28, 127.0.0.0/8 ← 变为此状态,指定内网和本地的IP地址范围
#home_mailbox = Maildir/ ← 找到这一行,去掉行首的#↓home_mailbox = Maildir/ ← 变为此状态,指定用户邮箱目录
# SHOW SOFTWARE VERSION OR NOT## The smtpd_banner parameter specifies the text that follows the 220# code in the SMTP server’s greeting banner. Some people like to see# the mail version advertised. By default, Postfix shows no version.## You MUST specify $myhostname at the start of the text. That is an# RFC requirement. Postfix itself does not care.##smtpd_banner = $myhostname ESMTP $mail_name#smtpd_banner = $myhostname ESMTP $mail_name ($mail_version) ← 找到这一行,接此行添加如下行:smtpd_banner = $myhostname ESMTP unknow ← 添加这一行,不显示SMTP服务器的相关信息
在配置文件的文尾,添加如下行:smtpd_sasl_auth_enable = yes ← 服务器使用SMTP认证smtpd_sasl_local_domain = $myhostname ← 指定SMTP认证的本地域名(主机名)smtpd_sasl_security_options = noanonymous ← 不允许匿名的方式认证smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destinationsmtpd_sasl_security_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination←(very important)message_size_limit =
← 规定邮件最大尺寸为15MB
[2] 配置SMTP认证的相关选项
为了提高安全性,我们不将系统用户的密码作为相应用户SMTP认证的密码,而将在后面为用户建立SMTP认证专用的密码。
[root@sample ~]# vi /usr/lib/sasl2/smtpd.conf ← 编辑SMTP认证的配置文件
pwcheck_method: saslauthd ← 找到此行,将“saslauthd”改为“auxprop”↓pwcheck_method: auxprop ← 不使用系统用户密码作为用户的SMTP认证密码
[root@sample ~]# vi /etc/sysconfig/saslauthd
MECH=shadow ← 找到这一行,在前面加# ↓#MECH=shadow ← 不使用shadow机制
FLAGS= ← 找到此行,在等号后面添加“sasldb”↓FLAGS=sasldb ← 定义认证方式为sasldb2
[3] 建立用户的邮箱目录
首先建立用户模板下的邮箱目录,以便于建立新用户时,相应用户的邮箱目录自动被建立。
[root@sample ~]# mkdir /etc/skel/Maildir ← 在用户模板下建立用户邮箱目录
[root@sample ~]# chmod 700 /etc/skel/Maildir ← 设置用户邮箱目录属性为700
然后再为已经存在的用户建立相应邮箱目录。
[root@sample ~]# mkdir /home/centospub/Maildir ← 为用户(这里以centospub用户为例)建立邮箱目录
[root@sample ~]# chmod 700 /home/centospub/Maildir ← 设置该用户邮箱目录属性为700
[root@sample ~]# chown centospub. /home/centospub/Maildir ← 设置该用户邮箱目录为该用户所有
[4] 为用户设置SMTP认证密码
[root@sample ~]# saslpasswd2 -u sample.centospub.com -c centospub ← 为centospub用户设置SMTP认证密码
Password: ← 在这里输入密码(不会显示)Again (for verification): ← 再次输入密码
[5] 改变SALS的属性及归属
[root@sample ~]# chgrp postfix /etc/sasldb2 ← 将数据库归属改为postfix,
[root@sample ~]# chmod 640 /etc/sasldb2 ← 将数据库属性改为640
[6] 关闭sendmail服务及设置默认MTA
因为在用Postfix作为SMTP服务器的前提下,我们不准备再用sendmail,所以将sendmail服务关掉,以确保安全及节省系统资源。
[root@sample ~]# /etc/rc.d/init.d/sendmail stop ← 关闭sendmail服务
Shutting down sendmail:         [ OK ]Shutting down sm-client:         [ OK ]
[root@sample ~]# chkconfig sendmail off ← 关闭sendmail自启动
[root@sample ~]# chkconfig –list sendmail ← 确认sendmail自启动已被关闭(都为off就OK)sendmail 0:off 1:off 2:off 3:off 4:off 5:off 6:off
然后再将默认的MTA设置为Postfix。
[root@sample ~]# alternatives –config mta ← 设置默认MTA
There are 2 programs which provide ‘mta’.
Selection Command———————————————–*+ 1 /usr/sbin/sendmail.sendmail ← 当前状态:sendmail为默认MTA2 /usr/sbin/sendmail.postfix
Enter to keep the current selection[+], or type selection number: 2 ← 在这里输入2,使Postfix成为默认MTA
启动相应服务
最后,启动SMTP认证及Postfix服务,并设置相应服务为自启动。
[root@sample ~]# chkconfig saslauthd on ← 将SMTP-Auth设置为自启动
[root@sample ~]# chkconfig –list saslauthd ← 确认SMTP-Auth服务状态saslauthd 0:off 1:off 2:on 3:on 4:on 5:on 6:off ← 确认2~5为on的状态就OK
[root@sample ~]# /etc/rc.d/init.d/saslauthd start ← 启动SMTP-Auth
Starting saslauthd:           [ OK ]
[root@sample ~]# chkconfig postfix on ← 将Postfix设置为自启动
[root@sample ~]# chkconfig –list postfix ← 确认Postfix服务状态postfix 0:off 1:off 2:on 3:on 4:on 5:on 6:off ← 确认2~5为on的状态就OK
[root@sample ~]# /etc/rc.d/init.d/postfix start ← 启动Postfix
Starting postfix:            [ OK ]
至此,就完成了SMTP服务器方面的配置,但目前只具从备客户端通过服务器发送邮件的功能。做为完整的邮件服务器,还需具备从客户端通过POP/IMAP协议接受邮件到本地的功能。POP/IMAP服务器的构建请参见下一节
【上篇】【下篇】CentOS 6/7下配置exim发邮件服务器
1. 配置epel源(exim包位于EPEL软件源中) CentOS7 # cat /etc/yum.repos.d/epel.repo EOF [ epel ] name = Extra Packages for Enterprise Linux 7 - \$basearch #baseurl=http://download.fedoraproject.org/pub/epel/7/\$basearch mirrorlist
1. 配置epel源(exim包位于EPEL软件源中)
# cat & /etc/yum.repos.d/epel.repo && EOF
name=Extra Packages for Enterprise
7 - \$basearch
#baseurl=http://download.fedoraproject.org/pub/epel/7/\$basearch
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=\$basearch
failovermethod=priority
gpgcheck=0
# cat & /etc/yum.repos.d/epel.repo && EOF
name=Extra Packages for Enterprise Linux 6 - \$basearch
#baseurl=http://download.fedoraproject.org/pub/epel/6/\$basearch
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=\$basearch
failovermethod=priority
gpgcheck=0
2. 禁止postfix
# service postfix stop
# chkconfig postfix off
3. 安装exim
# yum -y install exim
4. 将exim设为默认的MTA
# alternatives --set mta /usr/sbin/sendmail.exim
5. 修改exim配置文件
# vi /etc/exim/exim.conf #几个参数
primary_hostname = mail.linuxeye.com #查看源邮件时显示Received: from mail.linuxeye.com,如果不指定直接去操作系统的hostname
domainlist local_domains = @ localhost : localhost.localdomain :mail.linuxeye.com
domainlist relay_to_domains = linuxeye.com #允许通过改主机发送邮件的域名
relay_from_hosts = 127.0.0.1 : 192_32G : 192.168.0.0/16 : #允许那些客户端主机发送邮件,如本地使用这台服务器发送邮件时,即需要添加本地出口ip地址(公网地址)
# yum -y install mailx
# date | mail -r no- -s 'exim test'
# tail -f /var/log/exim/main.log #exim日志文件
如果不指定-r(发邮件地址),且你的主机名不是xxx.com,可能会报如下错误:
SMTP error from remote mail server after MAIL FROM:
错误是550 MI:IMF 发信人电子邮件地址不合规范
强烈建议用网易企业邮箱,如果自己搭建邮件服务器做发邮件,又设置QQ企业邮箱做本地收发服务器会出现地址未验证问题。
转载请保留固定链接:
------分隔线----------------------------
fail2ban是由Python语言开发监控软件,通过监控系统日志(Debian/...
Linux在4.9版本的内核新增了一款TCP拥塞控制技术:BBR, Linode 最新...
概述 RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支...
概述 RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支...
一、使用背景 当生产环境有很多服务器、很多业务模块的日志需...
What is the opcode cache? When the interpreter to complete the analysis of script...扫一扫关注U-Mail微信
版权所有(C)U-Mail Co.,Ltd.

我要回帖

更多关于 如何搭建邮件服务器 的文章

 

随机推荐