zoukankan      html  css  js  c++  java
  • Centos 6 搭建邮箱服务器教程

    Centos 6 搭建邮箱服务器主要是是包括了Postfix, Dovecot和 MySQL了,下文我们详细的为各位介绍Centos 6 搭建邮箱服务器教程(Postfix, Dovecot和 MySQL)步骤,具体如下。

    Postfix(邮箱服务器)是Wietse Venema想要为使用最广泛的sendmail提供替代品的一个尝试。Postfix试图更快、更容易管理、更安全,同时还与sendmail保持足够的兼容性。

    前提配置要域名解析,如下配置:


    本教程旨在配置postfix,并用Dovecot提供IMAP/POP3服务,用mysql存储数据。
    登录服务器主机(ssh root@域名|ip地址)
    安装需要的包


    1.首先更新安装源

    yum update


    2. Centos6自带的Postfix不支持mysql,所以要从CentOS Plus库安装,这里需要修改/etc/yum.repos.d/CentOS-Base.repo添加例外。如下在此文件的[base]和[updates]下面添加例外。
    文件:vi /etc/yum.repos.d/CentOS-Base.repo
    [base]
    name=CentOS-$releasever - Base
    exclude=postfix
    #released updates
    [updates]
    name=CentOS-$releasever - Updates
    exclude=postfix


    3.安装需要的包
    yum --enablerepo=centosplus install postfix
    yum install dovecot mysql-server dovecot-mysql
    首先在centosplus库安装postfix邮件服务器,然后安装dovecot、mysql服务器。
    配置mysql
    1.配置mysql自动启动,然后启动mysql
    chkconfig mysqld on

    chmod 755 /etc/rc.d/init.d/mysqld  修改mysqld执行权限

    service mysqld start
    2.运行mysql_secure_installation设置mysql的root密码、删除匿名账户、取消root远程登录、删除test库和对test库的访问权限、刷新授权表使修改生效(根据提示输入y/n即可)。
    mysql_secure_installation
    3.登录mysql
    mysql -u root -p
    4.新建mail数据库
    CREATE DATABASE mail;
    USE mail;
    5.新建mail的管理员用户mail_admin并授予其在mail数据库的权限,密码这里为mail_admin_password,自己记得修改这个密码为自己的密码。
    GRANT SELECT, INSERT, UPDATE, DELETE ON mail.* TO 'mail_admin'@'localhost' IDENTIFIED BY 'mail_admin_password';
    GRANT SELECT, INSERT, UPDATE, DELETE ON mail.* TO 'mail_admin'@'localhost.localdomain' IDENTIFIED BY 'mail_admin_password';
    FLUSH PRIVILEGES;
    6.下面分别新建 虚拟域名表、邮件转发表、用户表、传输表,最后输入quit退出sql。
    CREATE TABLE domains (domain varchar(50) NOT NULL, PRIMARY KEY (domain) );
    CREATE TABLE forwardings (source varchar(80) NOT NULL, destination TEXT NOT NULL, PRIMARY KEY (source) );
    CREATE TABLE users (email varchar(80) NOT NULL, password varchar(20) NOT NULL, PRIMARY KEY (email) );
    CREATE TABLE transport ( domain varchar(128) NOT NULL default '', transport varchar(128) NOT NULL default '', UNIQUE KEY domain (domain) );
    quit
     
    7.编辑/etc/my.cnf绑定mysql到localhost(127.0.0.1)。
    文件:vi /etc/my.cnf
    bind-address=127.0.0.1
    此地址用于postfix与mysql数据库服务器通信的。
    8.重启mysql
    service mysqld restart
     
    配置postfix
    下面的配置针对mysql的用户mail_admin的密码为mail_admin_password,如果上面已经更改,下面的配置记得替换。
    1.新建/etc/postfix/mysql-virtual_domains.cf作为postfix的虚拟域名配置文件。
    文件:vi /etc/postfix/mysql-virtual_domains.cf
    user = mail_admin
    password = mail_admin_password
    dbname = mail
    query = SELECT domain AS virtual FROM domains WHERE domain='%s'
    hosts = 127.0.0.1
    2.新建/etc/postfix/mysql-virtual_forwardings.cf作为postfix的虚拟转发文件
    文件:vi /etc/postfix/mysql-virtual_forwardings.cf
    user = mail_admin
    password = mail_admin_password
    dbname = mail
    query = SELECT destination FROM forwardings WHERE source='%s'
    hosts = 127.0.0.1
    3.新建/etc/postfix/mysql-virtual_mailboxes.cf作为postfix的虚拟邮箱配置文件
    文件:vi /etc/postfix/mysql-virtual_mailboxes.cf
    user = mail_admin
    password = mail_admin_password
    dbname = mail
    query = SELECT CONCAT(SUBSTRING_INDEX(email,<'@'>,-1),'/',SUBSTRING_INDEX(email,<'@'>,1),'/') FROM users WHERE email='%s'
    hosts = 127.0.0.1
    4.新建/etc/postfix/mysql-virtual_email2email.cf作为postfix的虚拟右键映射文件
    文件:vi /etc/postfix/mysql-virtual_email2email.cf
    user = mail_admin
    password = mail_admin_password
    dbname = mail
    query = SELECT email FROM users WHERE email='%s'
    hosts = 127.0.0.1
    5.为这些文件设置正确的权限和拥有者。
    chmod o= /etc/postfix/mysql-virtual_*.cf
    chgrp postfix /etc/postfix/mysql-virtual_*.cf
    6.新建用于邮件处理的用户和组,所有虚拟邮箱都存储在这个用户的home目录下。
    groupadd -g 5000 vmail
    useradd -g vmail -u 5000 vmail -d /home/vmail -m
    7.输入一下命令完成postfix的全部配置。注意对于下面的server.example.com需要替换为自己的 二级域名.域名,域名是自己购买的域名,比如我的服务器主机名是gradvenblog,在万网购买的域名是gradvenblog.com,二级域名设置为mail,那么就替换为mail.gradvenblog.com。
    postconf -e 'myhostname = server.example.com'
    postconf -e 'mydestination = $myhostname, localhost, localhost.localdomain'
    postconf -e 'mynetworks = 127.0.0.0/8'
    postconf -e 'inet_interfaces = all'
    postconf -e 'message_size_limit = 30720000'
    postconf -e 'virtual_alias_domains ='
    postconf -e 'virtual_alias_maps = proxy:mysql:/etc/postfix/mysql-virtual_forwardings.cf, mysql:/etc/postfix/mysql-virtual_email2email.cf'
    postconf -e 'virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-virtual_domains.cf'
    postconf -e 'virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailboxes.cf'
    postconf -e 'virtual_mailbox_base = /home/vmail'
    postconf -e 'virtual_uid_maps = static:5000'
    postconf -e 'virtual_gid_maps = static:5000'
    postconf -e 'smtpd_sasl_type = dovecot'
    postconf -e 'smtpd_sasl_path = private/auth'
    postconf -e 'smtpd_sasl_auth_enable = yes'
    postconf -e 'broken_sasl_auth_clients = yes'
    postconf -e 'smtpd_sasl_authenticated_header = yes'
    postconf -e 'smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination'
    postconf -e 'smtpd_use_tls = yes'
    postconf -e 'smtpd_tls_cert_file = </etc/pki/dovecot/certs/dovecot.pem'
    postconf -e 'smtpd_tls_key_file = </etc/pki/dovecot/private/dovecot.pem'
    postconf -e 'virtual_create_maildirsize = yes'
    postconf -e 'virtual_maildir_extended = yes'
    postconf -e 'proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $virtual_mailbox_limit_maps'
    postconf -e 'virtual_transport = dovecot'
    postconf -e 'dovecot_destination_recipient_limit = 1'
    8.编辑/etc/postfix/master.cf文件,在最后添加docecot服务。
    文件:vi /etc/postfix/master.cf
    dovecot   unix  -       n       n       -       -       pipe
        flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -f ${sender} -d ${recipient}

    9.配置postfix为自动启动,并启动postfix。
    chkconfig postfix on
    service postfix start
     
    配置Dovecot
    1.首先备份/etc/dovecot/dovecot.conf文件
    mv /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf-backup
    2.此时文件/etc/dovecot/dovecot.conf不存在了,新建/etc/dovecot/dovecot.conf,加入下面的配置信息,这里的example.com需要替换为自己的域名。
    文件:vi /etc/dovecot/dovecot.conf

    listen = *

    protocols = imap pop3

    log_timestamp = "%Y-%m-%d %H:%M:%S "
    mail_location = maildir:/home/vmail/%d/%n/Maildir
    ssl_cert = </etc/pki/dovecot/certs/dovecot.pem
    ssl_key = </etc/pki/dovecot/private/dovecot.pem
    namespace {
        type = private
        separator = .
        prefix = INBOX.
        inbox = yes
    }
    service auth {
        unix_listener auth-master {
            mode = 0600
            user = vmail
        }
        unix_listener /var/spool/postfix/private/auth {
            mode = 0666
            user = postfix
            group = postfix
        }
    user = root
    }
    service auth-worker {
        user = root
    }
    protocol lda {
        log_path = /home/vmail/dovecot-deliver.log
        auth_socket_path = /var/run/dovecot/auth-master
        postmaster_address = postmaster@example.com
    }
    protocol pop3 {
        pop3_uidl_format = %08Xu%08Xv
    }
    passdb {
        driver = sql
        args = /etc/dovecot/dovecot-sql.conf.ext
    }
    userdb {
        driver = static
        args = uid=5000 gid=5000 home=/home/vmail/%d/%n allow_all_users=yes
    }

    disable_plaintext_auth = no


    3.新建/etc/dovecot/dovecot-sql.conf.ext加入下面配置信息,这里需要替换mail_admin_password为自己对应的密码。
    文件:vi /etc/dovecot/dovecot-sql.conf.ext
    driver = mysql
    connect = host=127.0.0.1 dbname=mail user=mail_admin password=mail_admin_password
    default_pass_scheme = CRYPT
    password_query = SELECT email as user, password FROM users WHERE email='%u';
    4.修改这个文件的相应权限和用户。
    chgrp dovecot /etc/dovecot/dovecot-sql.conf.ext
    chmod o= /etc/dovecot/dovecot-sql.conf.ext
    5.配置dovecot为自动启动,并启动它。
    chkconfig dovecot on
    service dovecot start
    6.查看/var/log/maillog文件,查看日志信息确认是否启动成功,如用cat查看,文件大致为:
    Mar 18 15:21:59 sothoryos postfix/postfix-script[3069]: starting the Postfix mail system
    Mar 18 15:22:00 sothoryos postfix/master[3070]: daemon started -- version 2.6.6, configuration /etc/postfix
    Mar 18 15:32:03 sothoryos dovecot: master: Dovecot v2.0.9 starting up (core dumps disabled)
    7.测试pop3服务器是否运行成功。首先安装telnet命令。
    yum install telnet
    telnet localhost pop3
    8.如果成功会大概显示如下内容,然后输入quit退出即可。
    Trying 127.0.0.1...
    Connected to localhost.localdomain.
    Escape character is '^]'.
    +OK Dovecot ready.
     
    配置邮件别名
    1.编辑/etc/aliases文件,加入下面语句,设置邮件别名,example.com记得替换成自己的域名。
    文件:vi /etc/aliases
    postmaster: root
    root: postmaster@example.com
    2.更新别名并重启postfix。
    newaliases
    service postfix restart

    如果启动报这个错:

    Starting Dovecot Imap: Error: socket() failed: Address family not supported by protocol  

    因为系统默认是支持ipv6的,写法为:listen = *, ::

    那么需要vi /etc/dovecot/dovecot.conf 在最上面加上 listen = * 这句,它表示只支持ipv4.

    在/etc/postfix/main.cf中  设置 inet_protocols = ipv4 。

    再次重启service postfix restart。
     
    测试Postfix
    1.连接服务器
    telnet localhost 25
    2.连接成功后输入下面命令
    ehlo localhost
    3.然后会看到下面信息表示服务器运行成功。输入quit断开连接即可。
    250-hostname.example.com
    250-PIPELINING
    250-SIZE 30720000
    250-VRFY
    250-ETRN
    250-STARTTLS
    250-AUTH PLAIN
    250-AUTH=PLAIN
    250-ENHANCEDSTATUSCODES
    250-8BITMIME
    250 DSN
     
    配置域名和新建用户


    这里首先要设置添加域名的mx即解析记录,如图我在万网设置的:

    这里我的域名是xxxxx.com。子域名mail。在mail.xxxxx.com添加MX解析记录,优先级1(越小越高)。
    下面假设我之前设置的域名已经是xxxxx.com了。做测试。
    1.登录mysql
    mysql -u root -p
    2.切换到mail数据库,然后将域名加入虚拟域名表中,并添加一个邮箱账户。这里要修改称自己的域名和自己的账户和自己的密码。
    USE mail;
    INSERT INTO domains (domain) VALUES ('xxxxx.com');
    INSERT INTO users (email, password) VALUES ('hello@xxxxx.com', ENCRYPT('mypassword'));
    quit
    3.使用mailx工具发送邮件。如现在我发送一封邮件到我的另一个邮箱xxxxx@163.com (如果mailx不存在则先安装:yum install mailx)

    这里用新建的邮箱账户hello@xxxxx.com向另一个邮箱发送信息,-r指定发送方,-s指定发送主题,然后指定接收方,多个接收方就用,分开,然后回车后输入邮件内容,最后按ctrl+D提交邮件。

    mailx -r hello@xxxxx.com -s "hello world"   xxxx@163.com

    4.我们可以查看/var/log/maillog日志文件来观察状态信息,如图显示状态status=sent发送成功:

    5.同理我用xxxxx@163.com回复你好,初次见面""这个邮件,我们查看日志信息如图所示显示状态为投递成功。

    6.下面我们通过mutt工具查看邮箱,根据之前设置,邮箱地址为vmail用户home目录下。首先安装mutt工具(yum install mutt)。然后定位到hi账户的邮箱,并用mutt命令查看收到的邮件: mutt -f .

    最后需要清除和关闭防火墙:

    iptables -F 

    service iptables stop 

    chkconfig iptables off 

  • 相关阅读:
    [HAOI2009] 毛毛虫
    [NOI2015]品酒大会
    SDOI2016 生成魔咒
    [POJ2406]字符串的幂
    [SPOJ705]不同的子串
    快速幂和矩阵快速幂
    对于最近的一些日常总结by520(17.10.18)
    思维训练
    趣味性的高智商(贼有意思)的题(坑)
    C++手动开O2优化
  • 原文地址:https://www.cnblogs.com/gradven/p/6421287.html
Copyright © 2011-2022 走看看