debian/ubuntu搭建基于postfix的邮件服务器 (只发送)

kevin.Zhu 发布于:2013-1-16 15:45 分类:Postfix  有 16 人浏览,获得评论 0 条  

debian/ubuntu搭建基于postfix的邮件服务器 (只发送)  



1. 安装包

apt-get install postfix postfix-mysql postfix-doc mysql-client libsasl2-2 libsasl2-modules libsasl2-modules-sql sasl2-bin libpam-mysql openssl telnet mailutils  mysql-server



2. 配置postfix所需的数据库

CREATE DATABASE mail;

USE mail;

GRANT SELECT, INSERT, UPDATE, DELETE ON mail.* TO 'mail_admin'@'localhost' IDENTIFIED BY 'password-for-mail_admin';

GRANT SELECT, INSERT, UPDATE, DELETE ON mail.* TO 'mail_admin'@'127.0.0.1' IDENTIFIED BY 'password-for-mail_admin';

FLUSH PRIVILEGES;

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) );


注:请替换password-for-mail_admin为用户mail_admin的密码,以下出现password-for-mail_admin的也请替换下。



3. 配置Postfix使用MySQL


文件:/etc/postfix/mysql-virtual_domains.cf

user = mail_admin

password = password-for-mail_admin

dbname = mail

query = SELECT domain AS virtual FROM domains WHERE domain='%s'

hosts = 127.0.0.1


文件:/etc/postfix/mysql-virtual_forwardings.cf

user = mail_admin

password = password-for-mail_admin

dbname = mail

query = SELECT destination FROM forwardings WHERE source='%s'

hosts = 127.0.0.1


文件:/etc/postfix/mysql-virtual_mailboxes.cf

user = mail_admin

password = password-for-mail_admin

dbname = mail

query = SELECT CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/') FROM users WHERE email='%s'

hosts = 127.0.0.1


文件:/etc/postfix/mysql-virtual_email2email.cf

user = mail_admin

password = password-for-mail_admin

dbname = mail

query = SELECT email FROM users WHERE email='%s'

hosts = 127.0.0.1



设置权限:

chmod o= /etc/postfix/mysql-virtual_*.cf

chgrp postfix /etc/postfix/mysql-virtual_*.cf


建立用户:

groupadd -g 5000 vmail

useradd -g vmail -u 5000 vmail -d /home/vmail -m



4. 配置postfix:

postconf -e 'myhostname = centos.bz'

postconf -e 'mydestination = centos.bz, localhost, localhost.localdomain'

postconf -e 'mynetworks = 127.0.0.0/8'

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_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/postfix/smtpd.cert'

postconf -e 'smtpd_tls_key_file = /etc/postfix/smtpd.key'

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 'local_transport = dovecot'


5. 为postfix创建证书:

cd /etc/postfix

openssl req -new -outform PEM -out smtpd.cert -newkey rsa:2048 -nodes -keyout smtpd.key -keyform PEM -days 365 -x509

更改证书权限:

chmod o= /etc/postfix/smtpd.key


6. 配置saslauthd

mkdir -p /var/spool/postfix/var/run/saslauthd

cp -a /etc/default/saslauthd /etc/default/saslauthd.bak


编辑文件:/etc/default/saslauthd,按以下内容修改:

START=yes

DESC="SASL Authentication Daemon"

NAME="saslauthd"

MECHANISMS="pam"

MECH_OPTIONS=""

THREADS=5

OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd -r"


文件:/etc/pam.d/smtp

auth    required   pam_mysql.so user=mail_admin passwd=password-for-mail_admin host=127.0.0.1 db=mail table=users usercolumn=email passwdcolumn=password crypt=1

account sufficient pam_mysql.so user=mail_admin passwd=password-for-mail_admin host=127.0.0.1 db=mail table=users usercolumn=email passwdcolumn=password crypt=1


文件:/etc/postfix/sasl/smtpd.conf

pwcheck_method: saslauthd

mech_list: plain login

allow_plaintext: true

auxprop_plugin: sql

sql_engine: mysql

sql_hostnames: 127.0.0.1

sql_user: mail_admin

sql_passwd: password-for-mail_admin

sql_database: mail

sql_select: select password from users where email = '%u@%r'


设置权限:

chmod o= /etc/pam.d/smtp

chmod o= /etc/postfix/sasl/smtpd.conf



7. 重启服务:

adduser postfix sasl

service postfix restart

service saslauthd restart


至此, 邮件服务器已建设完成了 , 以下创建smtp账号 , 



设置Mail Aliases

文件/etc/aliases

postmaster: root

root: postmaster@centos.bz


测试

mysql -u root -p

USE mail;

INSERT INTO domains (domain) VALUES ('centos.bz');

INSERT INTO users (email, password) VALUES ('sales@centos.bz', ENCRYPT('password-for-sales'));

quit

这里添加了一个sales@centos.bz的用户,密码为password-for-sales

最后,可以使用邮件客户端,如foxmail进行收信和发信的测试。