如何使用Postfix,Dovecot,MySQL,phpMyAdmin,TLS / SSL在虚拟用户/域上配置ISP邮件服务器
本教程介绍如何设置Postfix是SMTP服务的邮件服务器,Dovecot提供IMAP和POP服务。 用户是虚拟的,用户信息存储在MySQL数据库中。
预配置要求:
1.名称为cnode1.rnd.pk,IP地址为(172.16.4.80)为eth0。 (您可以分配您选择的IP地址和主机名。)
2.创建一个别名eth0:0。 分配IP地址(172.16.4.81)。 (您可以分配您选择的IP地址。)
3.在/ etc / hosts
中输入您的主机名和IP。 在我的例子中,我的/ etc / hosts
文件显示
127.0.0.1 localhost.localdomain localhost 172.16.4.80 cnode1.rnd cnode1 172.16.4.81 mail.rnd mail
安装所需的软件包:
我们需要安装我们的邮件服务器的以下软件包:
dovecot-0.99.11-8.EL4(具有数据库支持),postfix-2.2.10-1.1.el4.centos.mysql(具有数据库支持)和squirrelmail。
首先安装dovecot。 如果您在dovecot之前安装了postfix,那么由于软件包冲突,dovecot将不会安装在您的系统上。
yum install -y dovecot
这将安装dovecot以及依赖关系(mysql和postgresql)。
2.然后从centosplus repos安装postfix(使用mysql支持)和mysql-server-5。
yum --enablerepo=centosplus install postfix mysql-server
yum install -y squirrelmail
这将安装postfix以及依赖关系mysql-5和postgresql。 我们的安装部分现已完成。 转到我们的下一个部分,即配置。
组态:
SMTP-AUTH / TLS
首先我们配置SMTP-AUTH和TLS。 对于这个编辑/usr/lib/sasl2/smtpd.conf
与你最喜欢的编辑器。
vi /usr/lib/sasl2/smtpd.conf
并进行如下更改。
pwcheck_method: saslauthd mech_list: plain login
创建目录,然后创建私钥,最后创建证书。
mkdir -p /etc/ssl/mycompany/mailserver/
cd /etc/ssl/mycompany/mailserver/
openssl genrsa -des3 -rand /etc/hosts -out smtpd.key 1024
chmod 600 smtpd.key
openssl req -new -key smtpd.key -out smtpd.csr
openssl x509 -req -days 3650 -in smtpd.csr -signkey smtpd.key -out smtpd.crt
openssl rsa -in smtpd.key -out smtpd.key.unencrypted
mv -f smtpd.key.unencrypted smtpd.key
openssl req -new -x509 -extensions v3_ca -keyout cakey.pem -out cacert.pem -days 3650
已创建私钥和证书。 后来我们会告诉postfix来使用它们。
MySQL:
我们现在将创建一个名为mail的数据库,为此我们将发出下面给出的命令; 我们的第一步是为管理用户设置密码。
mysqladmin -u root password newpassword
用你的密码替换新密码短语。 在我们的案例中,我们将使用用户“mail”进行所有与数据库相关的操作。 (选择更新并插入数据库。)
mysql -u root -p
输入密码,你将在MySQL提示符下(mysql>)
CREATE DATABASE mail;
将邮件的所有权限授予用户邮件。
GRANT ALL PRIVILEGES ON mail.* TO 'mail'@'localhost' IDENTIFIED BY 'mail';
FLUSH PRIVILEGES;
quit
设置邮件用户的密码。 这将通过以下声明完成。
msqladmin -u mail password newpassword
然后,我们将为包含域,用户,别名和邮箱信息的新数据库(邮件)创建必要的表。
mysql -u mail -p
在提供密码后,您将在MySQL提示符下。
show databases;
它将显示所有数据库,包括我们的“邮件”数据库。 我们将使用“邮件”。
USE mail;
1.创建域表。
CREATE TABLE domain ( domain varchar(255) NOT NULL default '', description varchar(255) NOT NULL default '', aliases int(10) NOT NULL default '0', mailboxes int(10) NOT NULL default '0', maxquota int(10) NOT NULL default '0', transport varchar(255) default NULL, backupmx tinyint(1) NOT NULL default '0', created datetime NOT NULL default '0000-00-00 00:00:00', modified datetime NOT NULL default '0000-00-00 00:00:00', active tinyint(1) NOT NULL default '1', PRIMARY KEY (domain), KEY domain (domain) ) TYPE=MyISAM COMMENT=' Virtual Domains';
2.第二个最重要的表是邮箱,所以创建邮箱。
CREATE TABLE mailbox ( username varchar(255) NOT NULL default '', password varchar(255) NOT NULL default '', name varchar(255) NOT NULL default '', maildir varchar(255) NOT NULL default '', quota int(10) NOT NULL default '0', domain varchar(255) NOT NULL default '', created datetime NOT NULL default '0000-00-00 00:00:00', modified datetime NOT NULL default '0000-00-00 00:00:00', active tinyint(1) NOT NULL default '1', PRIMARY KEY (username), KEY username (username) ) TYPE=MyISAM COMMENT='Virtual Mailboxes';
3.创建别名表。
CREATE TABLE alias ( address varchar(255) NOT NULL default '', goto text NOT NULL, domain varchar(255) NOT NULL default '', created datetime NOT NULL default '0000-00-00 00:00:00', modified datetime NOT NULL default '0000-00-00 00:00:00', active tinyint(1) NOT NULL default '1', PRIMARY KEY (address), KEY address (address) ) TYPE=MyISAM COMMENT='Virtual Aliases';
我们已经创建了必要的表,所以退出MySQL。
quit
Postfix MySQL:
Postfix需要知道哪里和如何查找所有邮箱相关信息。 为此,我们将在/ etc / postfix下创建以下文件。 Postfix的最新版本可能会使用它,而不是其他语句,在这种情况下,只需将所有行注释出来,并取消评论最后一行。
1.创建文件mysql_virtual_alias_maps.cf,将电子邮件从一个电子邮件地址转发到另一个
vi /etc/postfix/mysql_virtual_alias_maps.cf
user = mail password = mail hosts = localhost dbname = mail table = alias select_field = goto where_field = address additional_conditions = and active = '1' #query = SELECT goto FROM alias WHERE address='%s' AND active = '1'
2.创建文件mysql_virtual_domains_maps.cf,为虚拟域映射。 使用此文件中提供的信息查询虚拟域。
vi /etc/postfix/mysql_virtual_domains_maps.cf
user = mail password = mail hosts = localhost dbname = mail table = domain select_field = domain where_field = domain additional_conditions = and backupmx = '0' and active = '1' #query = SELECT domain FROM domain WHERE domain='%s' AND backupmx = '0' AND active = '1'
3.创建文件mysql_virtual_mailbox_maps.cf。 通常将电子邮件地址映射到硬盘上用户邮箱的位置。 如果您使用Postfix内置的虚拟传输代理将传入的电子邮件保存到硬盘,则可以查询邮箱路径。
vi /etc/postfix/mysql_virtual_mailbox_maps.cf
user = mail password = mail hosts = localhost dbname = mail table = mailbox select_field = CONCAT(domain,'/',maildir) where_field = username additional_conditions = and active = '1' #query = SELECT CONCAT(domain,'/',maildir) FROM mailbox WHERE username='%s' AND active = '1'
4.最后创建文件mysql_virtual_mailbox_limit_maps.cf将用于映射用户邮箱配额限制。
vi /etc/postfix/mysql_virtual_mailbox_limit_maps.cf
user = mail password = mail hosts = localhost dbname = mail table = mailbox select_field = quota where_field = username additional_conditions = and active = '1' #query = SELECT quota FROM mailbox WHERE username='%s' AND active = '1'
Postfix:
在Postfix配置部分,我们将编辑位于postfix(/ etc / postfix)配置目录中的main.cf文件,输入Postfix所需的一些基本信息。
mv /etc/postfix/main.cf /etc/postfix/main.cf.orig
vi /etc/postfix/main.cf
############## Postfix############### smtpd_banner = $myhostname biff = no append_dot_mydomain = no relayhost = mynetworks = 172.16.4.81 inet_interfaces = 172.16.4.81 mailbox_size_limit = 0 recipient_delimiter = + alias_database = hash:/etc/postfix/aliases alias_maps = $alias_database myhostname = cnode1.rnd mydomain = rnd myorigin = $myhostname mydestination = $myhostname, localhost.$mydomain, $transport_maps mail_spool_directory = /var/spool/mail debug_peer_level = 2 debugger_command = PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin xxgdb $daemon_directory/$process_name $process_id & sleep 5 disable_vrfy_command = no readme_directory = /usr/share/doc/postfix-2.2.10/README_FILES sample_directory = /usr/share/doc/postfix-2.2.10/samples sendmail_path = /usr/sbin/sendmail html_directory = no setgid_group = postdrop command_directory = /usr/sbin manpage_directory = /usr/share/man daemon_directory = /usr/libexec/postfix newaliases_path = /usr/bin/newaliases mailq_path = /usr/bin/mailq queue_directory = /var/spool/postfix mail_owner = postfix unknown_local_recipient_reject_code = 450 ####################postfix section ends here###############
Postfix虚拟用户信息:
再次,我们将编辑main.cf文件以添加对虚拟用户的支持。 在我的情况下,“virtual_minimum_uid”和“virtual_uid_maps”指向用户ID 150,这是我专门用于处理虚拟邮件的用户。 它使用带有默认gid 12的标准“邮件”组。因此,首先通过发出useradd命令或adduser来创建用户。
useradd -r -u 150 -g mail -d /var/vmail -s /sbin/nologin -c “Virtual mailbox” vmail
chmod 770 /var/vmail/
chown vmail:mail /var/vmail
vi /etc/postfix/main.cf
#######################Virtual Domains Users and mailboxes############### virtual_mailbox_domains = mysql:$config_directory/mysql_virtual_domains_maps.cf virtual_mailbox_base = /var/vmail virtual_mailbox_maps = mysql:$config_directory/mysql_virtual_mailbox_maps.cf virtual_alias_maps = mysql:$config_directory/mysql_virtual_alias_maps.cf virtual_minimum_uid = 150 virtual_uid_maps = static:150 virtual_gid_maps = static:12 ##############################Virtual section of main.cf ends##############
Postfix SASL / TLS认证:
最后,我们将再次编辑main.cf文件以启用SASL / TLS身份验证。 以前我们创建了一些证书,我们将在这里使用它们来保护邮件服务器。
vi /etc/postfix.main.cf
#################### SASL/TLS Authentication########################### ######SASL PART######### smtpd_sasl_auth_enable = yes smtpd_sasl_security_options = noanonymous broken_sasl_auth_clients = yes smtpd_sasl_local_domain = smtpd_recipient_restriction = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination ######TLS PART########### smptpd_tls_cert_file = /etc/ssl/rnd/mailserver/smtpd.crt smtpd_tls_key_file = /etc/ssl/rnd/mailserver/smtpd.key smtpd_tls_CAfile = /etc/ssl/rnd/mailserver/cacert.pem smtp_tls_auth_only = no smtp_use_tls = yes smtpd_use_tls = yes smtpd_tls_received_header = no smtp_tls_note_starttls_offer = yes smtpd_tls_loglevel = 1 tls_random_source = dev:/dev/urandom smtpd_tls_session_cache_timeout = 3600s smtpd_tls_recieved_header = yes ###########################SASL/TLS Authentication ends here#############
为了方便起见,我分三个部分(Postfix,虚拟域 - 用户和邮箱,SASL / TLS-Authentication}。 SASL / TLS-Authentication进一步分为(SASL-PART和TLS-PART)。 为了显示每个部分及其参数,我已经编辑了相同的文件三次。 现在将/ etc / aliases
和/etc/aliases.db复制
到/ etc / postfix /
并运行newaliases。
cp /etc/aliases* /etc/postfix/
newaliases
Dovecot IMAP和POP:
让我们配置提供POP3和IMAP服务的Dovecot。 Dovecot的配置文件是/etc/dovecot.conf。
我们将其重命名为dovecot.conf.orig,并创建我们自己的。 要使用dovecot处理虚拟用户,我们将创建文件/etc/dovecot-mysql.conf
vi /etc/dovecot-mysql.conf
######dove-mysql.conf should look like this########## db_host = 127.0.0.1 db_port = 3306 db = mail db_user = mail db_passwd = mail db_client_flags = 0 default_pass_scheme = PLAIN password_query = SELECT password FROM mailbox WHERE username = '%u' user_query = SELECT '/var/vmail/%d/%n' as home, 'maildir:/var/vmail/%d/%n' as mail, 150 AS uid, 12 AS gid, concat('dirsize:storage=',quota) AS quota FROM mailbox WHERE username ='%u' AND active ='1' ####################ends here####################
现在移动配置dovecot.conf,使用mysql_auth方法验证虚拟用户。 请记住,正常的Linux用户无法登录到邮件服务器。 因为我们的dovecot配置中尚未启用Pam身份验证方法。 此外,first_valid_uid和last_valid_uid也设置为150,这意味着只有具有uid 150的用户才能登录。Pop3和pop3s协议可用。
mv /etc/dovecot.conf /etc/dovecot.conf.orig
vi /etc/dovecot.conf
##############dovecot configured to work with virtual users############ base_dir = /var/run/dovecot/ protocols = imap pop3 imaps pop3s imap_listen = [::] pop3_listen = [::] login_dir = /var/run/dovecot-login login = imap login = pop3 default_mail_env = mbox:/var/vmail/%d/%n mbox_locks = fcntl log_timestamp = "%Y-%m-%d %H:%M:%S " log_path = /var/log/maillog mail_extra_groups = mail first_valid_uid = 150 last_valid_uid = 150 maildir_copy_with_hardlinks = yes auth = mysql_auth auth_userdb = mysql /etc/dovecot-mysql.conf auth_passdb = mysql /etc/dovecot-mysql.conf ####################################ends here######################
之后,我们将在/etc/dovecot-mysql.conf上设置所有权和访问权限。
chmod 600 /etc/dovecot/*.conf
chown vmail /etc/dovecot/*.conf
松鼠配置:
转到squirrelmail config目录并运行config.pl。
cd /usr/share/squirrelmail/config/
/conf.pl
它会显示一些这样的选择:
松鼠邮件配置:阅读:config.php(1.4.0)------------------------------------- --------------------
主菜单 -
组织偏好
2.服务器设置
3.文件夹默认值
4.一般选项
主题
地址簿
7.消息(MOTD)
8.插件
9.数据库
10.语言
D.为特定IMAP服务器设置预定义的设置
C.打开颜色
S保存数据
Q退出命令>>
在命令提示符下键入1并设置“组织偏好设置”。 这里显示我的设置。 你可以选择自己的。
组织名称:研发部
组织标志:../images/sm_logo.png
组织 标识宽度/高度:(308/111)
组织名称:研究与开发
5.登出页面:http://mail.rnd
顶部框架:_top
7.提供商链接:http://mail.rnd
8.供应商名称:研发
保存设置并返回主菜单。 现在在命令提示符下键入2,并在服务器设置菜单中提供信息。
>>命令2我的下面显示。
域:mail.rnd
反转时间:假
3. Sendmail或SMTP:SMTP
A.更新IMAP设置:mail.rnd:143(uw)
B.更新SMTP设置:mail.rnd:25
配置squirrelmail非常容易,因为它是菜单驱动。 希望你会自己做
HTTP部分:
要开始使用mailserver web前端,我们将编辑文件/etc/httpd/conf/httpd.conf。
vi /etc/httpd/conf/httpd.conf
并附上下面给出的陈述。
<VirtualHost 172.16.4.81:80> DocumentRoot /usr/share/squirrelmail ServerName mail.rnd </VirtualHost>
保存配置并退出。
创建虚拟用户和域:
现在我们将在我们的邮件数据库中创建虚拟域和虚拟用户。
mysql -u mail -p
输入密码,你将在mysql>提示符下。
USE mail;
首先使用下面给出的命令在域表(mail.rnd)中创建一个虚拟域。
INSERT INTO domain (domain,description,aliases,mailboxes,maxquota,transport,backupmx,active) VALUES ('mail.rnd','Virtual domain','10','10', '0','virtual', '0','1');
现在在邮箱表中创建两个虚拟用户。 我已经创建(mike@mail.rnd&john@mail.rnd)作为mike和john的用户名。
INSERT INTO mailbox (username,password,name,maildir,quota,domain,active) VALUES ('john@mail.rnd','mypassword', 'John Smith ','john/', '0','mail.rnd','1');
INSERT INTO mailbox (username,password,name,maildir,quota,domain,active) VALUES ('mike@mail.rnd','mypassword', 'Mike Tyson','mike/', '0','mail.rnd','1');
quit
现在我们已经创建了虚拟用户和虚拟域,我们想通过登录并将邮件从一个用户帐户发送到另一个用户来测试我们的邮件服务器。 所以让我们开始Dovecot,Postfix,MySQL和webserver守护进程。 另外我们希望他们应该在下次重新启动时开始。 为此,我们发出以下命令。
chkconfig –level 235 mysqld on
chkconfig –level 235 saslauthd on
chkconfig –level 235 postfix on
chkconfig –level 235 dovecot on
chkconfig –level 235 httpd on
/etc/init.d/saslauthd start
/etc/init.d/mysqld start
/etc/init.d/postfix start
/etc/init.d/dovecot start
/etc/init.d/httpd start
最后启动浏览器并转到http://mail.rnd并输入用户名和密码,然后单击登录。 并享受与您的邮件服务器玩。
phpMyAdmin:
phpMyAdmin是一个功能强大且易于使用的前端。 phpMyAdmin的rpm存在于DAG存储库中。 去添加DAG存储库。 如果尚未安装,请安装phpmyadmin和php-mysql。
yum install -y phpmyadmin php-mysql
在此之后启动浏览器并在地址栏中输入http://127.0.0.1。 输入用户名和密码并开始使用。 /etc/httpd/conf.d/phpmyadmin.conf具有查找phpmyadmin的信息。 如果失败,您可以通过编辑/etc/httpd/conf/httpd.conf文件创建一个虚拟别名。
vi /etc/httpd/conf/httpd.conf
<VirtualHost 127.0.0.1> DocumentRoot /usr/share/phpmyadmin ServerName localhost.localdomin </VirtualHost>
享受使用phpMyAdmin创建用户,域和别名。
参考文献:
http://workaround.org/articles/ispmail-etch/#step-2-create-the-database-and-user
http://www.nomoa.com/articles/Setting_up_your_own_Mail_Server