热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

CentOS5.9系统中配置安全的sendmail邮件服务器

Sendmail是UNIX/Linux环境中稳定性较好的一款邮件服务器软件,通过对Sendmail服务器的配置可以实现基本的邮件转发功能;dovecot服务器实现了POP3协议,可以与Sendmail服务器配合工作,实现用户对邮件的收取功能;OpenWebmail是网页形式的邮件应用系统,可实
  Sendmail是UNIX/Linux环境中稳定性较好的一款邮件服务器软件,通过对Sendmail服务器的配置可以实现基本的邮件转发功能;dovecot服务器实现了POP3协议,可以与Sendmail服务器配合工作,实现用户对邮件的收取功能;OpenWebmail是网页形式的邮件应用系统,可实现用户对邮件的发送、收取和管理功能。通过对Sendmail、dovecot和penWebmail的综合管理,系统管理员可以构建出功能完善的邮件应用系统。
  本次实验需求:
  (1)DNS域名解析;
  (2)SMTP认证功能;
  (3)pop3服务的配置;
  (4)用户别名,及群发邮件的功能;
  (5)sendmail结合apache和openwebmail实现网页收发邮件功能.

  一.实验前的准备工作
  为了方便相关软件包的安装,我先搭建好本地YUM源。
  我们先挂载好安装光盘:
  [root@mail ~]# mount
  /dev/sda2 on / type ext3 (rw)
  proc on /proc type proc (rw)
  sysfs on /sys type sysfs (rw)
  devpts on /dev/pts type devpts (rw,gid=5,mode=620)
  /dev/sda1 on /boot type ext3 (rw)
  tmpfs on /dev/shm type tmpfs (rw)
  none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
  sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
  /dev/hdc on /media type iso9660 (ro)
  1. [root@mail mail]# cd /etc/yum.repos.d
  2. [root@mail yum.repos.d]# vi CentOS-Media.repo
  [c5-media]
  name=CentOS-$releasever - Media
  baseurl=file:///media/
  gpgcheck=1
  enabled=1
  gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS- 5
  修改成以上内容,保存退出!
  3. [root@mail yum.repos.d]# mv CentOS-Base.repo CentOS-Base.repo.bak
  4. [root@mail mail]# yum clean all
  通过这几步简单的修改,本地YUM源就搭建好了!开始下面的实验.

  二.DNS环境搭建
  1.安装DNS前先修改主机名
  dns可以单独作为服务器也可以与sendmail同一台服务器!这里我将他们都安装在同一台服务器中!
  可以通过修改"/etc/hosts"和"/etc/sysconfig/work"两个文件更改主机域名。
  Centos可以通过setup 来进行修改,不用重启生效!
  2.安装DNS
  [root@mail ~]# rpm -qa |grep bind
  bind-9.3.6-16.P1.el5
  bind-utils-9.3.6-16.P1.el5
  bind-libs-9.3.6-16.P1.el5
  ypbind-1.19-12.el5
  我的机器已经安装好了相关的软件包!
  安装好DNS后会在/etc目录下生成以下文件:
  [root@mail ~]# ll /etc/named.*
  -rw-r----- 1 root named 1230 2011-02-23 /etc/named.caching-nameserver.conf
  -rw-r----- 1 root named 1018 10-28 05:44 /etc/named.rfc1912.zones
  named.rfc1912.zones是区域定义文件,是BIND 的核心配置文件,它包含了BIND 的基本配置,但其并不包括区域数据。
  named.rfc1912.zones 文件定义了DNS 服务器的工作目录所在位置,所有的区域数据文件都存放在该目录中,该文件还定义了DNS 服务器能够管理哪些区域,如果DNS 服务器可以管理某个区域,它将完成该区域内的域名解析工作。
  在这里,我们单独建立一个配置文件为:named.conf
  [root@mail ~]# vi /etc/named.conf
  options {
  directory "/var/named"; //这里是全局配置,这里一定要加进去,不然DNS不会解析!
  zone "." IN {
  type hint;
  file "named.ca";
  }; zone "jh." IN { type master; file "jh.zone"; allow-update { none; }; }; [root@mail ~]# chown :named /etc/named.conf [root@mail ~]# ll /etc/named.* -rw-r----- 1 root named 1230 2011-02-23 /etc/named.caching-nameserver.conf -rw-r--r-- 1 root named 315 10-28 04:53 /etc/named.conf -rw-r----- 1 root named 975 10-28 04:07 /etc/named.rfc1912.zones 我们再看下区域文件存在的目录:
  [root@mail ~]# ll /var/named/
  总计 40 drwxr-x--- 5 root named 4096 10-28 03:39 chroot drwxrwx--- 2 named named 4096 10-28 03:54 data -rw-r----- 1 root named 195 2011-02-23 localhost.zone -rw-r----- 1 root named 427 2011-02-23 named.broadcast -rw-r----- 1 root named 1892 2011-02-23 named.ca -rw-r----- 1 root named 424 2011-02-23 named.ip6.local -rw-r----- 1 root named 427 2011-02-23 named.zero drwxrwx--- 2 named named 4096 2011-02-23 slaves 我们在这里手动建立区域文件:jh.zone、jh.rev .
  这里的区域文件在上面配置的/etc/named.conf文件中对应!
  下面是我创建好的文件内容:
  [root@mail ~]# cat /var/named/jh.zone
  $TTL
  @ IN SOA mail.jh.. root.mail.jh.. (
  42 ; serial (d. adams)
  3H ; refresh
  15M ; retry
  1W ; expiry
  1D ) ; minimum
  @ IN NS mail.jh..
  mail IN A 172.28.12.60
  @ IN MX 10 mail.jh..
  [root@mail ~]# cat /var/named/jh.rev
  $TTL
  @ IN SOA mail.jh.. root.mail.jh.. (
   ; Serial
   ; Refresh
   ; Retry
   ; Expire
   ) ; Minimum
  IN NS mail.jh..
  8 IN PTR mail.jh..
  上面的内容意思本文不作重点,不懂得请查阅相关内容!
  DNS服务器环境到此为止也搭建好了.
  现在重启named服务:
  [root@mail ~]# service named start
  启动 named: [确定]
  DNS服务启动成功!
  我们检测下DNS服务是否正常工作:
  有两种方法:
  [root@mail ~]# ping mail.jh.
  PING mail.jh. (172.28.12.60) 56(84) bytes of data.
  64 bytes from 172.28.12.60: icmp_seq=1 ttl=64 time=0.042 ms
  。。。。。。。。。
  下面用dig 这个工具来测试:正向和反向解析!
  正向测试:
  [root@mail ~]# dig -t a jh.
  ; <<>> DiG 9.3.6-P1-RedHat-9.3.6-16.P1.el5 <<>> -t a jh.
  ;; global options: printcmd
  ;; Got answer:
  ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id:
  ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0
  ;; QUESTION SECTION:
  ;jh.. IN A
  ;; AUTHORITY SECTION:
  jh.. IN SOA mail.jh.. root.mail.jh.. 42 900
  ;; Query time: 7 msec
  ;; SERVER: 172.28.12.60#53(172.28.12.60)
  ;; WHEN: Fri Oct 28 16:40:14 2011
  ;; MSG SIZE rcvd: 70
  反向测试:
  [root@mail ~]# dig -x 172.28.12.60
  ; <<>> DiG 9.3.6-P1-RedHat-9.3.6-16.P1.el5 <<>> -x 172.28.12.60
  ;; global options: printcmd
  ;; Got answer:
  ;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id:
  ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0 ;; QUESTION SECTION: ;60.12.28.172.in-addr.arpa. IN PTR ;; AUTHORITY SECTION: 12.28.172.in-addr.arpa. IN SOA mail.jh.. root.mail.jh.. ;; Query time: 7 msec ;; SERVER: 172.28.12.60#53(172.28.12.60) ;; WHEN: Fri Oct 28 16:41:14 2011 ;; MSG SIZE rcvd: 95 通过dig这个工具测试到正向和反向都能正常解析工作,说明DNS服务器搭建成功!
  还有一点说明下我们还可以用下面的命令来测试配置文件语法是否正确:
  named-checkconf
  named-checkzone /etc/named/jh.zone
  named-checkzone /etc/named/jh.rev

  三.Sendmail服务
  一切环境准备就绪,开始正式我们的主角:sendmail。
  在系统安装时,默认把sendmial安装好了。
  [root@mail mail]# rpm -qa |grep sendmail
  sendmail-8.13.8-8.el5
  sendmail-cf-8.13.8-8.el5
  [root@mail ~]# chkconfig --list |grep sendmail
  sendmail 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭
  安装好后,还是不能配置sendmail,因为sendmail配置文件sendmail.cf不是一般人能搞明白其中的奥妙的,我能只能通过修改sendmail.mc这个配置文件!
  m4软件包提供了配置Sendmail服务器必须的工具程序,用来生成sendmail.cf配置文件的,与Sendmail软件包一同默认安装在系统中。
  后面会说明如何用m4来生成配置文件的!
  [root@mail ~]# rpm -qa |grep m4
  m4-1.4.5-3.el5.1
  设置local-host-names文件,用于设置邮件服务器提供邮件服务的域名。
  [root@mail ~]# vi /etc/mail/local-host-names
  [root@mail ~]# cat /etc/mail/local-host-names
  # local-host-names - include all aliases for your machine here.
  jh.
  编辑sendmail.mc文件,有两处需要修改的!
  [root@mail ~]# vi /etc/mail/sendmail.mc
  开启Sendmail服务器的网络接口,Sendmail服务器出于安全考虑,默认只对lo网络接口(IP地址为127.0.0.1)提供服务,为了使服务器能够为主机的所有网络接口(地址为0.0.0.0)提供服务,需要在sendmail.mc文件中进行配置的修改。
  dnl # address restriction to accept email from the inter or intra.
  dnl #
  DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0, Name=MTA')dnl
  dnl #
  dnl # The following causes sendmail to additionally listen to port 587 for
  开启SMTP的用户认证功能。将TRUST_AUTH_MECH('EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')前面的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
  现在我们使用m4工具生成sendmail.cf这个配置文件:
  [root@mail ~]# cd /etc/mail
  [root@mail mail]#
  [root@mail mail]# m4 sendmail.mc > sendmail.cf
  启动/etc/rc.d/init.d/sendmail服务,使sendmial.cf配置生效!!
  [root@mail mail]# service sendmail restart
  关闭sm-client: [确定]
  关闭 sendmail: 确定]
  启动 sendmail: [确定]
  启动 sm-client: [确定]
  开启了Sendmail服务器的认证功能之后,需要确保saslauthd服务程序正确运行。
  [root@mail mail]# service saslauthd restart
  停止 saslauthd: [确定]
  启动 saslauthd: [确定]
  邮件用户账户的设置
  Sendmail服务器使用Linux系统中的用户账户作为邮件账户,因此为用户添加邮件账户只需要添加Linux账户即可。为了方便用户管理可以将具有同种性质的用户加入某一个组中。
  我这里添加一个用户组和三个用户:
  [root@mail mail]# groupadd IT
  [root@mail mail]# useradd g IT s /sbin/nologin zjqiu
  [root@mail mail]# passwd zjqiu
  [root@mail mail]# useradd g IT s /sbin/nologin rfan
  [root@mail mail]# passwd rfan
  [root@mail mail]# useradd s /sbin/nologin zsliu
  [root@mail mail]# passwd zsliu
  zjqiu和rfan 加入到IT组,他们具有相同性质!zsliu
  设置邮件别名和邮件群发功能
  在Sendmail服务器中使用aliases机制实现邮件别名和邮件群发功能。在/etc目录下同时存在名为aliases和aliases.db的两个文件。aliases文件是文本文件,其内容是可阅读和编辑的,aliases.db是数据库文件,是由aliases文件生成而来的。
  [root@mail mail]# ll /etc/aliases*
  -rw-r--r-- 1 root root 1532 10-28 04:16 /etc/aliases
  -rw-r----- 1 root smmsp 10-28 19:08 /etc/aliases.db
  编辑aliases文件,在文件末尾添加"IT: zjqiu,rfan" ,
  >群发到zjqiu@jh.和rfan@jh.这两个邮箱中!
  [root@mail mail]# vi /etc/aliases
  ………..
  # Person who should get root's mail
  #root: marc
  IT: zjqiu,rfan
  设置完成之后,通过newaliases生成aliases.db文件。
  [root@mail mail]# newaliases
  /etc/aliases: 77 aliases, longest 10 bytes, 781 bytes total
  如果想让一个用户通过匿名的方式向外发送邮件,可以通过修改access文件,然后通过"makemap hash access.db   这里只是说明下做法:
  vi /etc/mail/access
  根据示例用如下格式加入到该文件的最后:
  某个用户的IP RELAY
  在我的环境里就没有设置!!
  全部都安装好后我们测试看DNS有没有与sendmail结合起来:
  [root@mail ~]# nslookup
  > set q=mx
  > jh.
  Server: 172.28.12.60
  Address: 172.28.12.60#53
  jh. mail exchanger = 10 mail.jh..
  可以看了二者已经结合到一起了!!

  四、devecot的安装与配置
  Sendmail服务器并不为MUA软件提供收取邮件的功能,因此系统中需要单独安装实现POP3或IMAP4功能的服务器程序。
  系统默认安装了devecot软件,由于devecot服务器依赖的软件包比较多,因此建议使用上面搭建YUM源来安装!
  [root@mail mail]# yum -y install dovecot
  Loaded plugins: fastestmirror
  Determining fastest mirrors
  c5-media | 1.1 kB 00:00
  c5-media/primary | 954 kB 00:00
  c5-media 2683/2683
  Setting up Install Process
  Resolving Dependencies
  --> Running transaction check
  ---> Package dovecot.i386 0:1.0.7-7.el5 set to be updated
  --> Processing Dependency: libmysqlclient.so.15 for package: dovecot
  --> Processing Dependency: libmysqlclient.so.15(libmysqlclient_15) for package: dovecot
  --> Running transaction check
  ---> Package mysql.i386 0:5.0.77-4.el5_5.4 set to be updated
  --> Processing Dependency: perl(DBI) for package: mysql
  --> Running transaction check
  ---> Package perl-DBI.i386 0:1.52-2.el5 set to be updated
  --> Finished Dependency Resolution
  .................................................. .....
  .................................................. .....
  Running Transaction
  Installing : perl-DBI 1/3
  Installing : mysql 2/3
  Installing : dovecot 3/3
  Installed:
  dovecot.i386 0:1.0.7-7.el5
  Dependency Installed:
  mysql.i386 0:5.0.77-4.el5_5.4 perl-DBI.i386 0:1.52-2.el5 可以看到dovecot依赖的包是:perl-DBI、MYSQL、dovecot!!
  [root@mail mail]# rpm -qa |grep dovecot
  dovecot-1.0.7-7.el5
  安装好dovecot软件包,会在/etc下生成如下配置文件:
  [root@mail mail]# ll /etc/dovecot.conf
  -rw-r--r-- 1 root root 2009-01-21 /etc/dovecot.conf
  安装好的dovecot服务不要作任何修改直接可以启动!
  [root@mail mail]# service dovecot start
  启动 Dovecot Imap: [确定]
  把它加入系统服务,随系统开机启动:
  [root@mail mail]# chkconfig --level 35 dovecot on
  [root@mail mail]# chkconfig --list |grep dovecot
  dovecot 0:关闭 1:关闭 2:关闭 3:启用 4:关闭 5:启用 6:关闭
  四、 邮件客户端Outlook Express的配置
  邮件客户可以有多种:oe、OUTLOOK、foxmail等等。。。。
  我这里用OE作下说明:一定要在服务器配置栏中勾选:"的服务器要求身份验证"!
  
  有于时间关系我不作测试了~~


  五、安装openWebmail,通过web形式发布webmail
  OpenWebmail是使用Perl语言编写的Webmail应用系统,可以很好地和Sendmail等邮件系统配合,构建功能强大的Webmail应用。
  OpenWebmail所需要的软件包:
  [root@mail openwebmaill-soft]# ls
  openwebmail-2.53-3.i386.rpm perl-CGI-SpeedyCGI-2.21-RH9.i386.rpm
  openwebmail-data-2.53-3.i386.rpm perl-Text-Iconv-1.7-2.el5.i386.rpm
  perl-CGI-2.81-88.i386.rpm
  perl-Compress-Zlib perl-suidperl
这两个包用YUM安装:
  [root@mail openwebmaill-soft]# rpm ivh *.rpm
  安装好OpenWebmail后会在/var//cgi-bin/openwebmail/etc
建立dbm.conf配置文件!
  [root@mail openwebmaill-soft]# cat /var//cgi-bin/openwebmail/etc/dbm.conf
  dbm_ext .db
  dbmopen_ext .db
  dbmopen_haslock no
  初始化OpenWebmail系统:
  执行"/var//cgi-bin/openwebmail/openwebmail"目录中的openwebmail-tool.pl程序,并使用"--init"选项进行OpenWebmail系统的初始化过程。
  [root@mail openwebmaill-soft]# cd /var//cgi-bin/openwebmail/
  [root@mail openwebmail]# ls
  auth openwebmail-main.pl openwebmail-vdomain.pl
  etc openwebmail.pl openwebmail-viewatt.pl
  misc openwebmail-prefs.pl openwebmail-webdisk.pl
  modules openwebmail-read.pl preload.pl
  openwebmail-abook.pl openwebmail-saprefs.pl quota
  openwebmail-advsearch.pl openwebmail-send.pl shares
  openwebmail-cal.pl openwebmail-spell.pl userstat.pl
  openwebmail-folder.pl openwebmail-tool.pl vacation.pl
  [root@mail openwebmail]# ./openwebmail-tool.pl --init
  creating db /var//cgi-bin/openwebmail/etc/maps/b2g ...done.
  creating db /var//cgi-bin/openwebmail/etc/maps/g2b ...done.
  creating db /var//cgi-bin/openwebmail/etc/maps/lunar ...done.
  Creating UTF-8 locales...
  langconv ar_AE.CP1256 -> ar_AE.UTF-8
  langconv ar_AE.ISO8859-6 -> ar_AE.UTF-8
  langconv bg_BG.CP1251 -> bg_BG.UTF-8
  langconv ca_ES.ISO8859-1 -> ca_ES.UTF-8
  langconv cs_CZ.ISO8859-2 -> cs_CZ.UTF-8
  langconv da_DK.ISO8859-1 -> da_DK.UTF-8
  langconv de_DE.ISO8859-1 -> de_DE.UTF-8
  langconv el_GR.ISO8859-7 -> el_GR.UTF-8
  langconv en_US.ISO8859-1 -> en_US.UTF-8
  langconv es_AR.ISO8859-1 -> es_AR.UTF-8
  langconv fi_FI.ISO8859-1 -> fi_FI.UTF-8
  langconv fr_FR.ISO8859-1 -> fr_FR.UTF-8
  langconv he_IL.CP1255 -> he_IL.UTF-8
  langconv hr_HR.ISO8859-2 -> hr_HR.UTF-8
  langconv hu_HU.ISO8859-2 -> hu_HU.UTF-8
  langconv id_ID.ISO8859-1 -> id_ID.UTF-8
  langconv it_IT.ISO8859-1 -> it_IT.UTF-8
  langconv ko_KR.eucKR -> ko_KR.UTF-8
  langconv lt_LT.CP1257 -> lt_LT.UTF-8
  langconv nl_NL.ISO8859-1 -> nl_NL.UTF-8
  langconv no_NO.ISO8859-1 -> no_NO.UTF-8
  langconv pl_PL.ISO8859-2 -> pl_PL.UTF-8
  langconv pt_BR.ISO8859-1 -> pt_BR.UTF-8
  langconv pt_PT.ISO8859-1 -> pt_PT.UTF-8
  langconv ro_RO.ISO8859-2 -> ro_RO.UTF-8
  langconv ru_RU.KOI8-R -> ru_RU.UTF-8
  langconv sk_SK.ISO8859-2 -> sk_SK.UTF-8
  langconv sl_SI.CP1250 -> sl_SI.UTF-8
  langconv sr_CS.ISO8859-2 -> sr_CS.UTF-8 langconv sv_SE.ISO8859-1 -> sv_SE.UTF-8 langconv th_TH.TIS-620 -> th_TH.UTF-8 langconv tr_TR.ISO8859-9 -> tr_TR.UTF-8 langconv uk_UA.KOI8-U -> uk_UA.UTF-8 ...done. Wele to the OpenWebMail! This program is going to send a short message back to the developer, so we could have the idea that who is installing and how many sites are using this software, the content to be sent is: OS: Linux 2.6.18-238.el5 i686 Perl: 5.008008 WebMail: OpenWebMail 2.53 Send the site report?(Y/n) n
这里我们选择n!!
  Thank you.
  [root@mail openwebmail]#
  系统默认安装好了apache!!!

  启动apache服务器:
  [root@mail openwebmail]# service d start
  启动 d:d: Could not reliably determine the server's fully qualified domain name, using mail.jh. for ServerName

推荐阅读
author-avatar
2013丶峰峰最逆天_192
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有