转自 “小蜗牛技术之家” 博客  原稿: http://snailwarrior.blog.51cto.com/680306/139098

【小蜗牛奋力之作


目标:在RHEL5系统架设简易邮件服务器,包括SMTP服务、POP3服务,发信支持SMTP验证。然后使用客户端(比如Foxmail,Outlook)连接,进行邮件收发。
【注意】此文档的配置在我的RHEL5系统上能正确运行
【注意】此文档的内容不一定说得正确,欢迎大家指正!小蜗牛十分感谢!
===================================================
Sendmail 入门配置
===================================================
在这里不讲sendmail如何安装,只讲述简单的sendmail配置使用。大多数Linux系统在安装的时候,一般都默认安装了senmdail。我使用的RHEL5系统,已经安装的sendmail包如下:
[root@pps ~]# rpm -qa | grep sendmail
sendmail-8.13.8-2.el5
1、启动、停止sendmail服务
大多数系统默认开机就启动sendmail服务了,我们可以查看sendmail服务状态,停止、启动sendmail:
[root@pps ~]# service sendmail status
sendmail (pid 3944 3935) 正在运行...
[root@pps ~]# service sendmail stop
关闭 sm-client:                                           [确定]
关闭 sendmail:                                            [确定]
[root@pps ~]# service sendmail start
启动 sendmail:                                            [确定]
启动 sm-client:                                           [确定]

【小贴士】--------------------------------------------------------------【小贴士】
可以telnet检查一下sendmail服务是否真的启动了:
[root@pps ~]# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
220 pps.hoho.com ESMTP Sendmail 8.13.8/8.13.8; Sat, 14 Mar 2009 00:22:53 +0800
quit
221 2.0.0 pps.hoho.com closing connection
Connection closed by foreign host.
嘿嘿,说明senmail服务启动正常啦!可以看到sendmail的版本号是 8.13.8,我连接上后啥也没做,输入quit命令退出来了!
【小贴士】--------------------------------------------------------------【小贴士】
其实用telnet命令可以测试连接其它端口,检测端口是否打开(即提供服务),比如检测80或者8080等,如果端口打开了就会有信息返回提示,即使是连接被blocked的信息,否则就会出现连接被拒的情况(Connection refused)。

2、简单配置sendmail
当sendmail服务启动的时候,就可以使用mail工具给系统内别的用户发邮件(信息),或者给外界发邮件了,如果目标email系统不做什么反垃圾检查、IP过滤的话,一般能收到的。

(1)sendmail的主配置文件 /etc/mail/sendmail.cf
这个配置文件差不多有2000行,有点恐怖,不过我们需要做的修改并不多,先入门嘛。我修改的几个地方如下:
1)SMTP监听地址参数
# SMTP daemon options
# O DaemonPortOptions=Addr=127.0.0.1,Port=smtp,Name=MTA
O DaemonPortOptions=Port=smtp,Name=HoHo'MTA
这里我把Addr=127.0.0.1去掉,sendmail就监听系统的所有IP的smtp(25)端口,否则只监听127.0.0.1的25端口,系统外的客户端是无法连接到我的sendmail的,要么就再写上我们对外服务的局域网IP地址,如下:
O DaemonPortOptions=Addr=127.0.0.1,Addr=192.168.32.50,Port=smtp,Name=MTA
(有本事你就写上一个公网IP,哈哈)
2)设置本服务器主机名信息
Cwlocalhost
# file containing names of hosts for which we receive email
Fw/etc/mail/local-host-names
Cw之后写明所有要收信的主机名,但是接下来Fw这一行说明可以从local-host-names文件读取所要收信的主机名,我可以这样:
Cwlocalhost hoho.com pps.hoho.com
或者在 local-host-names 文件里:
[root@pps mail]# cat /etc/mail/local-host-names
# local-host-names - include all aliases for your machine here.
hoho.com
pps.hoho.com
(经测试,可以同时在Cw里和Fw里有相同的主机名,不过我认为这是无聊的做法)
现在我想发信给本机的hoho用户,发给 hoho@hoho.com 或者 hoho@pps.hoho.com 都可以。
【注意】如果本机还有其它别名,比如 bbs.hoho.com:
[root@pps mail]# nslookup bbs.hoho.com
Server:         127.0.0.1
Address:        127.0.0.1#53
bbs.hoho.com    canonical name = pps.hoho.com.
Name:   pps.hoho.com
Address: 192.168.32.50
那么如果在Cw或Fw里写上 pps.hoho.com 但是没有写上 bbs.hoho.com ,给 hoho@bbs.hoho.com发信也是可以的。
但是,如果 bbs.hoho.com 是独立的A记录,如下:
[root@pps mail]# nslookup bbs.hoho.com
Server:         127.0.0.1
Address:        127.0.0.1#53
Name:   bbs.hoho.com
Address: 192.168.32.50
那么此时给 hoho@bbs.com.cn 发信将会有退信,说是“system config error, mail loops back to me (MX problem?)"。
【注意】如果此时 bbs.hoho.com 实际为局域网内另外一台主机(带有邮件服务),那么给 hoho@bbs.hoho.com 发信,本机就将信件relay到 bbs.hoho.com 主机,不会产生上述错误。

(2)sendmail的访问限制配置文件 /etc/mail/access
[root@pps mail]# cat access
# Check the /usr/share/doc/sendmail/README.cf file for a de.ion
# of the format of this file. (search for access_db in that file)
# The /usr/share/doc/sendmail/README.cf is part of the sendmail-doc
# package.
#
# by default we allow relaying from localhost...
Connect:localhost.localdomain           RELAY
Connect:localhost                           RELAY
Connect:127.0.0.1                          RELAY
# 这一行是我添加的
Connect:192.168.32                        RELAY
编辑保存后,执行以下命令更新访问数据库:
[root@pps mail]# makemap hash access.db < access
这里配置允许本机和 192.168.32.0/24 网段的所有机器的访问,因此可以在本网段内的机器(假设是Windows XP)上使用Foxmail或者Outlook来设置smtp服务器为 192.168.32.50 来发送邮件。当然,防火墙需要允许外界对25端口的访问(防火墙的配置就不扯远了)。

【小贴士】--------------------------------------------------------------【小贴士】
access文件定义举例:
hoho.com          RELAY //允许hoho.com域内用户发送
192.168.32        RELAY //允许192.168.32.0/24网段发送
hoho@163.com  RELAY //允许特定邮件地址
snailwarrior@     RELAY //允许特定用户发送
参数说明:
OK               无条件接受或发送
RELAY           允许SMTP代理投递
REJECT         拒绝接受并发送错误消息
DISCARD       丢弃邮件,不发送错误消息

(3)sendmail设置SMTP验证
【注意】如果做了SMTP验证,上述/etc/mail/access的限制还是起作用的,即使SMTP验证通过,但是在access里限制客户端不能访问,则客户端还是无法发信。

sendmail设置smtp验证需要cyrus-sasl包,我的RHEL5系统已安装的包如下:
[root@pps mail]# rpm -qa | grep sasl
cyrus-sasl-lib-2.1.22-4
cyrus-sasl-plain-2.1.22-4
cyrus-sasl-2.1.22-4
【注意】如果是用源码包方式编译安装sendmail,如果需要支持SMTP验证,则需要先安装sasl(简单认证和安全层协议)。
sasl 认证方式有多种,我在这里介绍使用 /etc/shadow 来做用户密码验证,下面谈到的Qpopper做POP3服务器时也配置为用 /etc/shadow 来验证。
1)关注一下 /usr/lib/sasl2/Sendmail.conf
[root@pps ~]# cat /usr/lib/sasl2/Sendmail.conf
pwcheck_method:saslauthd
有资料说需要将 Sendmail.conf 复制一份,名为 smtpd.conf,但在我的RHEL5系统不需要这么做,也不需要修改其默认内容。
2)修改 /etc/mail/sendmail.mc,重新生成sendmail.cf
把以下两行前面的 dnl 去掉:
dnl TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
dnl define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
把这一行注释掉:
DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl
添加以下一行:
DAEMON_OPTIONS(`Port=smtp,Name=MSA, M=Ea')dnl
其实也有配置使用SMTP验证的一行(我们不动它,保持注释状态):
dnl DAEMON_OPTIONS(`Port=submission, Name=MSA, M=Ea')dnl
但这里的Port=submission,也即是在 587 端口上才使用SMTP验证,这不是我想要的,我需要在SMTP默认的25端口上使用SMTP验证,于是将 Port=submission 修改为 Port=smtp。
修改保存好sendmail.mc后,执行以下命令来生成新的 sendmail.cf 配置文件:
[root@pps mail]# m4 sendmail.mc > sendmail.cf
sendmail.mc:10: m4: cannot open `/usr/share/sendmail-cf/m4/cf.m4': No such file or directory
这是因为没有安装sendmai-cf这个包,安装了就OK了。
3)启动saslauthd服务
[root@pps ~]# service saslauthd start
【注意】想要saslauthd开机时启动,RHEL5可以通过ntsysv配置来实现,或者通过在 /etc/rc.local 里添加 /etc/init.d/saslauthd start 一行。
4)重启sendmail
[root@pps ~]# service sendmail restart
美丽的时刻,SMTP客户端连接就需要SMTP验证了!
【小贴士】--------------------------------------------------------------【小贴士】
使用Telnet检查SMTP验证是否生效了:
[root@pps mail]# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
220 pps.hoho.com ESMTP Sendmail 8.13.8/8.13.8; Sun, 15 Mar 2009 14:47:10 +0800
ehlo localhost
250-pps.hoho.com Hello localhost.localdomain [127.0.0.1], pleased to meet you
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-8BITMIME
250-SIZE
250-DSN
250-AUTH LOGIN PLAIN
250-DELIVERBY
250 HELP
quit
221 2.0.0 pps.hoho.com closing connection
Connection closed by foreign host.
可以看到 250-AUTH LOGIN PLAIN 说明SMTP验证生效了。
OutlookExpress、Foxmail使用LOGIN认证方式。
也可以通过以下命令检查sasl是否生效:
[root@pps mail]# sendmail -d0.1 -bv root | grep SASL
               NETUNIX NEWDB NIS PIPELINING SASLv2 SCANF SOCKETMAP STARTTLS

嘿嘿,可以看到我的 SASLv2 已经启用了。

(4)sendmail相关配置文件以及作用
/etc/mail/sendmail.cf        Sendmail主配置文件
/etc/aliases                        Sendmail使用的别名文件(raw data)
/etc/mail/aliases.db           别名数据库(加快别名查找)
/etc/mail/helpfile               帮助文件
/var/log/mail/statistics     统计文件
/var/spool/mqueue/*        邮件队列临时文件
【举例1】/etc/aliases 我可以通过这个文件实现“群发”
# 我在文件末尾添加自己想要群发的“用户群” allpeople
allpeople:      mail_user_1,mail_user_2,mail_user_3,mail_user_4,mail_user_5
更新别名:
[root@pps etc]# newaliases 或者 sendmail -bi
下面给 allpeople@hoho.com 发信,就相当于给上述5个邮件用户发信了!
allpeople就是一个邮件列表(maillist)!
【补充2】/var/log/maillog 这是sendmail的日志文件(其实也是下面说的POP3服务的日志文件)
root可以查看此文件检查邮件的投递情况。在这里也可以看到sendmail和下面讲述的POP3服务器Qpopper的启动相关信息。
[root@pps mail]# service sendmail restart
/var/log/maillog日志记录如下:
Mar 14 23:27:38 pps sendmail[20861]: alias database /etc/aliases rebuilt by root
Mar 14 23:27:38 pps sendmail[20861]: /etc/aliases: 76 aliases, longest 10 bytes, 765 bytes total
Mar 14 23:27:39 pps sendmail[20866]: starting daemon (8.13.8): SMTP+queueing@01:00:00
Mar 14 23:27:40 pps sm-msp-queue[20877]: starting daemon (8.13.8): queueing@01:00:00
所有的邮件收发都在这里有记录,这里就不细说了。
===================================================
Qpopper 安装配置
===================================================
Qpopper是一个POP3服务器,它不支持SMTP等功能,只是和标准的UNIX邮件传输代理(MTA)比如sendmail、smail等一起工作。一般Linux安装的时候不自带qpopper,需要自己下载安装。(我没注意我使用的RHEL5光盘里是否有qpopper的rpm包)
下载当前最新的版本:qpopper4.0.16
[url]ftp://ftp.qualcomm.com/eudora/servers/unix/popper/qpopper4.0.16.tar.gz[/url]
下面的操作步骤参考Qpopper的手册GUIDE.pdf,但手册有很多地方“跟不上”时代了,下面根据自己RHEL5系统的实际情况说说我的安装配置。
【注意】/var/mail --> /var/spool/mail
【注意】需要防火墙开放110端口
1、安装步骤
[root@pps software]# tar zxf qpopper4.0.16.tar.gz
[root@pps software]# cd qppoper
[root@pps qpopper4.0.16]# ./configure --enable-standalone
[root@pps qpopper4.0.16]# make
[root@pps qpopper4.0.16]# make install
popper安装在 /usr/local/sbin/popper
【注意】这里可执行程序名叫"popper",而不是"qpopper"
手册里介绍可以用inetd来启动qpopper,但目前比较新的系统都采用了xinetd了。我本人也不喜欢使用它们,就喜欢standalone模式。下面介绍如何使用standalone模式运行apopper,因此我在 configure 的时候加上 --enable-standalone 开关。
我实际使用的配置如下:
[root@pps qpopper4.0.16]# ./configure --enable-standalone --enable-specialauth --enable-log-login  
--enable-standalone   使用standalone模式
--enable-specialauth  使得支持RHEL5的用户密码shadow
--enable-log-login    Qpopper记录成功登陆的认证。
2、Qpopper的运行、停止
运行Qpopper,我实际使用的运行参数如下:
[root@pps qpopper4.0.16]# popper -c -C -R -s -T180
-c    将用户名大写变为小写,因此用户名可以大小写混合使用,结果都为小写
-C    如果用户名带有域名,-C选项将“@域名”去掉,hoho@hoho.com变为hoho
-R    禁用对客户端IP反向DNS查询
-s    在日志中记录统计数据
-T    设置客户端的读取超时时间,默认120秒
下面这个选项也比较有用,就是从文件读取运行选项,使用时请查看手册看看注意事项。
-f config-file 从config-file读取额外的run-time选项
停止Qpopper:
[root@pps mail]# killall popper
/var/log/maillog日记里的停止、启动记录:
Mar 14 23:21:52 pps popper[14759]: popper: Server: cleaning up and exiting normally
Mar 14 23:25:02 pps popper[20740]: popper: Server: listening . 0.0.0.0:110
【提示】我在 /etc/rc.local 里添加一行 /usr/local/sbin/popper -c -C -R -s -T180 来设置开机自动启动POP3服务。
3、添加POP3用户(其实就是添加邮件用户)
参考了一下资料,发现可以只添加邮件用户而实际上没有增加系统用户,以下命令不用理会警告信息:
[root@pps mail]# useradd mail_user_1 -g mail -d /dev/null -s /bin/false
useradd:警告:此主目录已经存在。
不从 skel 目录里向其中复制任何文件。
因此,可以用shell脚本批量生成邮件用户,同时使用 chpasswd 命令来批量初始化用户的密码。示例如下:
(1)批量生成用户
先来看看mail用户的组别:
[root@pps ~]# cat /etc/passwd | grep mail
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
可见mail用户的GID为12
新建mail_users.txt内容如下:
[root@pps ~]# cat mail_users.txt
mail_user_1:x::12::/dev/null:/sbin/nologin
mail_user_2:x::12::/dev/null:/sbin/nologin
mail_user_3:x::12::/dev/null:/sbin/nologin
mail_user_4:x::12::/dev/null:/sbin/nologin
mail_user_5:x::12::/dev/null:/sbin/nologin
【注意】必须严格按照/etc/passwd 的格式来书写
使用newusers命令来批量生成用户:
[root@pps ~]# newusers mail_users.txt
查看一下/etc/passwd用户添加情况:
[root@pps ~]# cat /etc/passwd
...
mail_user_1:x:65535:12::/dev/null:/sbin/nologin
mail_user_2:x:65536:12::/dev/null:/sbin/nologin
mail_user_3:x:65537:12::/dev/null:/sbin/nologin
mail_user_4:x:65538:12::/dev/null:/sbin/nologin
mail_user_5:x:65539:12::/dev/null:/sbin/nologin
这里UID是系统自动分配的。
(2)批量修改用户密码
新建mail_users_passwd.txt内容如下:
[root@pps ~]# cat mail_users_passwd.txt
mail_user_1:135790
mail_user_2:135790
mail_user_3:135790
mail_user_4:135790
mail_user_5:135790
【注意】这里的格式也是固定的
使用chpasswd命令批量修改用户密码:
[root@pps ~]# chpasswd < mail_users_passwd.txt
这里,相当于我初始化所有邮件用户的密码为135790。

如果使用加密的方式修改密码,则需要使用 -e 参数,可以参考/etc/shadow文件创建密码。(我个人认为实在没有必要用加密方式批量修改用户密码,日后用户自己修改密码还得管理员来完成,我以后得想个办法来实现让用户自己修改POP3/SMTP密码。可以用数据库或者其它的验证方式)
又一个美丽的时刻,新建好的邮件用户可以POP3收信了!
【注意】-【注意】-【注意】-【注意】-【注意】-【注意】-【注意】-【注意】-【注意】
如果想从Internet上收取别的系统发来的邮件,你需要有自己的域名和管理域名DNS解释的权限,主要是做好MX记录解释。比如我的域名是 hoho.com(其实这已经是被国外注册了的域名,可是我的英文名就叫HoHo[SnailWarrior是我的笔名],呜呜呜……好想要回来),我在自己的系统上做了MX记录解释,如下:
[root@pps mail]# nslookup -q=mx hoho.com
Server:         127.0.0.1
Address:        127.0.0.1#53
hoho.com        mail exchanger = 10 mx1.hoho.com.
hoho.com        mail exchanger = 10 mx2.hoho.com.
hoho.com        mail exchanger = 10 mx3.hoho.com.
hoho.com        mail exchanger = 10 mail.hoho.com.
我自己无聊就做了4个MX记录,其实都指向本机的192.168.32.50 IP地址。
因此如果想收取外界的邮件,需要把你的域名的MX记录指向邮件服务器IP地址即可。或者像我这样,先做一个邮件服务器主机的A记录,然后设置MX记录指向邮件服务器主机。
===================================================
客户端SMTP/POP3设置
===================================================

以我的机器为例,Foxmail、Outlook里,SMTP/POP3服务器都填写192.168.32.50
用户可以用 mail_user_1 或者用 mail_user_1@hoho.com 或者 mail_user_1@pps.hoho.com 都可以,密码当然就是135790了。

转载于:https://blog.51cto.com/haidi/1238976

RHEL5系统 sendmail+qpopper 架设简易邮件服务器相关推荐

  1. 利用Windows自带服务架设免费邮件服务器

    在Windows Server 2003中带有完整的SMTP和POP3服务,并且能够支持有域和无域两种环境,非常便于中小型企业实施.今天,小编就以Windows Server 2003企业版为例带领大 ...

  2. 华硕路由器(RT-AC86U)架设简易git服务器

    背景   我有多台设备, 而且不同平台, 在多台设备间倒腾代码, 直接复制很不方便. 于是有了搭一个简易家用级别的git服务器的想法. 目的 解决内部不同平台间倒腾代码不方便的问题 家用级轻量解决方案 ...

  3. 架设HmailServer邮件服务器以及webmail

    参考:http://www.it0355.com/a/201207/31/a9275.htm 在安裝Hmailserver前先安裝Apache.php.mysql,如果你想懶點直接到http://ww ...

  4. winmail计算机三级,用 Win2003 架设邮件服务器 图文详解

    其实我们可以通过Windows Server 2003提供的POP3服务和SMTP服务架设小型邮件服务器来满足我们的需要. 一.安装POP3和SMTP服务组件 Windows Server 2003默 ...

  5. 用Win 2003架设邮件服务器(转)

    很多企业局域网内都架设了邮件服务器,用于进行公文发送和工作交流.但使用专业的企业邮件系统软件需要大量的资金投入,这对于很多企业来说是无法承受的.其实我们可以通过Windows Server 2003提 ...

  6. Imail 邮件服务器的SMTP配置与 .NET 下使用 System.Net.SmtpClient 发送邮件

    前言 目前,各大门户均已推出了各自的邮件服务系统,且功能日益强大,如腾讯QMail:然而,作为一家公司的官方邮件,相信邮件地址里使用本公司的域名更具信服力(例如 c.com 以邮件使用 service ...

  7. windos server 2003 邮件服务器的搭建

    2019独角兽企业重金招聘Python工程师标准>>> 很多企业局域网内都架设了邮件服务器,用于进行公文发送和工作交流.但使用专业的企业邮件系统软件需要大量的资金投入,这对于很多企业 ...

  8. 2003邮件服务器维护,Windows 2003邮件服务器配置指南

    很多企业局域网内都架设了邮件服务器,用于进行公文发送和工作交流.但使用专业的企业邮件系统软件需要大量的资金投入,这对于很多企业来说是无法承受的.其实我们可以通过Windows Server 2003提 ...

  9. 邮件服务器要安装哪些组件,邮件服务器:安装POP3和SMTP服务组件步骤详解

    很多企业局域网内都架设了邮件服务器,用于进行公文发送和工作交流.但使用专业的企业邮件系统软件需要大量的资金投入,这对于很多企业来说是无法承受的. 其实我们可以通过Windows Server 2003 ...

最新文章

  1. windows7/10开启客户端telnet命令解决“‘telnet‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。”
  2. MySQL练习题:常用函数
  3. 测试驱动开发 测试前移_测试驱动的开发可能看起来是工作的两倍-但无论如何您都应该这样做...
  4. 对于刷oj时因为scanf()出现wa而cin却AC的详解 【scanf() 和 cin 详解】
  5. NDK学习笔记-JNI的引用
  6. 只需要2个工具,百度云盘大文件就能用迅雷和IDM下载
  7. 傲游浏览器语言怎么切换 傲游浏览器语言切换方法简述
  8. git 添加公钥的命令
  9. 由一维数组表示的N维数组实现(C++)
  10. python32位系统下载_python 32位安装包
  11. FLask框架AJAX操作
  12. No MyBatis mapper was found in ‘[xx]‘ package. Please check your configuration.
  13. 计算入瞳、出瞳位置及孔径大小
  14. FPGA中usb-blaster驱动的安装
  15. uni-app 选择图片(chooseImage)
  16. javascript eval 函数作用
  17. Dev C++开发lib和dll
  18. 《Python编程:从入门到实践》配套资源 官方网站免费下载
  19. 随机邻域嵌入_诠释数据降维算法:一文讲尽t-分布邻域嵌入算法(t-SNE)如何有效利用-阿里云开发者社区...
  20. 【一笔画】问题 详解

热门文章

  1. Intellij-Idea使用小细节
  2. 文件系统中文件的最长(字符数)绝对路径 Longest Absolute File Path
  3. JDBC高级特性3--JNDI,连接池,分布式事务
  4. vmware虚拟机克隆后,启动网卡报错device eth0 does not seem to be present, delaying initialization...
  5. 如何调用系统的包安装自己的apk呢?
  6. 在Linux下用LVS和Ipvsadm做Web负载均衡
  7. [Hibernate]在VS2010中应用NHibernate 3.2与MySQL
  8. 《高性能Linux服务器构建实战》封面照出炉
  9. 读书笔记4:单例模式
  10. mysql--常用基础命令