设置一个完整的Linux系统邮件服务器涉及许多配置,并可能涉及到一些网络安全问题。在此,我会给出如何基于Postfix和Dovecot(用于SMTP和IMAP服务),结合MySQL作为存储后端来创建基本的邮件服务器。这里我们以Ubuntu 20.04 LTS为例:
前提:
1. 您需要有一个可以公开访问的DNS记录和一个域名。
2. 你需要安装和配置好防火墙,如iptables。
步骤1:准备您的Linux系统
1. 安装必要的依赖:
sudo apt update
sudo apt install postfix postfixmysql dovecotcore dovecotimapd dovecotlmtpd dovecotmysql mailutils sasl2bin libsasl2modules postfixpolicydspfpython opendkim opendkimtools
2. 配置postfix,选择Internet Site并输入域名。
步骤2:安装和设置MySQL服务器
3. 创建MySQL数据库用于管理用户邮箱和别名:
bash
mysql uroot p
> CREATE DATABASE mail;
> CREATE USER 'mail_admin'@'localhost' IDENTIFIED BY 'some_password';
> GRANT ALL PRIVILEGES ON mail. TO 'mail_admin'@'localhost';
4. 建立用户,虚拟域名及别名等表结构:
sql
USE `mail`;
CREATE TABLE `users` (
`email` varchar(255) NOT NULL DEFAULT '',
`password` char(196) DEFAULT '',
`active` tinyint(1) NOT NULL DEFAULT '0',
`lastseen` datetime DEFAULT NULL,
PRIMARY KEY (`email`)
);
CREATE TABLE IF NOT EXISTS virtual_aliases (
`domain_id` int(11) NOT NULL,
`source` varchar(255) NOT NULL,
`destination` text NOT NULL,
PRIMARY KEY (source,domain_id)
);
CREATE TABLE IF NOT EXISTS virtual_domains (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE IF NOT EXISTS virtual_users (
`id` int(11) NOT NULL AUTO_INCREMENT,
`domain_id` int(11) NOT NULL,
`password` passwordhash(255) DEFAULT '',
`email` varchar(255) NOT NULL,
PRIMARY KEY (id),
FOREIGN KEY (domain_id) REFERENCES virtual_domains (id) on delete cascade
);
exit
以上表结构用于管理用户的邮箱账户信息。
5. 添加第一个用户到数据库中
使用以下查询添加一个测试用户的记录
sql
INSERT INTO users (email,password,active)
VALUES('testuser@domain.com',passwordhash,'1')
请替换"passwordhash"为密码加密值。确保已设置正确的MD5或SHA256密码加密格式。
步骤3:编辑Dovecot相关配置文件
6. 打开`/etc/dovecot/dovecot.conf`
将'dict_sql = include auth {} dict_sql'注释行前增加‘’
7. 打开并编辑`/etc/dovecot/conf.d/10auth.conf`,取消以下行的评论:
auth_mechanisms = plain login 默认即可。
disable_plaintext_auth = no 启用不使用加密的连接上的身份验证,仅推荐测试环境或特定安全性条件下使用。
auth_username_charsets = utf8 这将处理用户名编码问题,使其支持非ASCII用户名(尽管大多数邮件用户会偏好小写或数字字符)
auth_ssl_require_client_cert = yes
auth_ssl_username_from_cert = yes
8. 更改`conf.d/10mail.conf`中邮件存储方式(Maildir通常更受欢迎,因为其提供了更好的邮件恢复特性),如下:
`mail_location = maildir:~/Maildir`
9. 在`/etc/dovecot/conf.d/10master.conf`中的 service auth 下面加上下面的参数:
unix_listener /var/spool/postfix/private/auth {
mode = 0666
user = postfix
group = postfix
}
unix_listener authuserdb {
mode=0666
你可以根据你系统上的需求改变它
}
inet_listener imaplogin {
address=192.0.2.1 替换为你服务器的外部IP地址。
port=993
}
inet_listener imapslogin {
port=993
}
inet_listener pop3login { port=110}
步骤4:编辑postfix配置
9. 编辑 Postfix 主体文件:
用您所创建的数据表名替换掉下面这些参数:
bash
smtpd_banner = $myhostname ESMTP
biff = no
mydestination = localhost.
virtual_alias_domains =
virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysqlvirtualmailboxdomains.cf
virtual_alias_maps = proxy:mysql:/etc/postfix/mysqlvirtualmailboxmaps.cf
virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysqlvirtualmailboxmaps.cf
virtual_create_maildirsize = yes
smtpd_recipient_restrictions = reject_unknown_sender_domain, permit_mynetworks,reject_unauth_destination check_policy_service unix:/run/spf.socket
mailbox_size_limit = 26000000000 设置最大的储存量为25GB
alias_maps = $alias_database
alias_database = hash:/etc/aliases
home_mailbox = Maildir/
inet_interfaces = all 允许接受外部连接
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 0.0.0.0/0 ::0/0
policy_time_limit = 3600
smtp_sasl_security_options = noanonymous
smtp_helo_name = mail.domain.com
请根据您的实际情况调整上述内容。
以上步骤只提供了大致方向,具体到实际应用还请仔细检查和验证您的系统配置,确保满足你的所有安全要求以及遵守适用法律和规章制度的要求。
发表评论