RHEL5系统 sendmail+qpopper 架设简易邮件服务器
2011-03-22 12:43
549 查看
目标:在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 ftp://ftp.qualcomm.com/eudora/servers/unix/popper/qpopper4.0.16.tar.gz 下面的操作步骤参考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了。 |
相关文章推荐
- RHEL5系统 sendmail+qpopper 架设简易邮件服务器
- RHEL5系统 sendmail+qpopper 架设简易邮件服务器
- 使用sendmail配置企业简易邮件系统
- Linux下mail服务器应用之sendmail邮件系统的一个案例
- zz LAB_RHEL5下sendmail+dovecot+openwebmail邮件系统配置(图片链接已失效 2010/11/08)
- Windows系统架设简易的WebDAV服务器
- Rhel7本地邮件系统,服务器和客户机都配置postfix和null client
- LAB_RHEL5下sendmail+dovecot+openwebmail邮件系统配置
- 菜鸟学Linux十:Sendmail服务器的搭建之在Linux和Windows系统上邮件收发的应用
- Linux环境下利用Sendmail架设Mail服务器
- RHCE课程-RH253Linux服务器架设笔记七-Sendmail服务器配置
- 一个月实验室网站和PMS系统、邮件系统、FTP服务器搭建
- Linux系统下sendmail发送邮件失败的问题
- RHEL5.7下的sendmail服务器配置
- RHEL 5服务篇—部署Postfix邮件系统(四)设置SMTP发信认证及别名机制
- 邮件系统服务器搭建记录(三)(Postfix+Cyrus-sasl+Courier-authlib+Dovecot+ExtMail+MySQL)
- 【转】Centos系统sendmail发送邮件很慢的解决方法
- 在服务器上用sendmail代发邮件
- 不关闭sendmail的情况下关闭系统邮件提示
- 在RHEL5下构建基于系统用户的Postfix邮件系统 推荐