This commit is contained in:
yumoqing 2025-03-15 11:31:13 +08:00
parent e19cf1f402
commit 002cb7e6f4

200
mailserver/mailserver.sh Normal file
View File

@ -0,0 +1,200 @@
#!/bin/bash
##############################################################
# 参数占位(请根据实际情况替换)
# 注意事项:请在执行前确认所有参数均被正确替换
##############################################################
MAIL_DOMAIN="{{your-mail-domain.com}}" # 邮件域名example.com
MAIL_IP="{{your-server-ip}}" # 邮件服务器IP地址
ADMIN_EMAIL="{{admin@your-domain.com}}" # 管理员邮箱用于Postfix收件
USER_NAME="{{username}}" # 系统用户账号(用于邮箱存储)
USER_PASSWORD="{{password}}" # 用户密码
WEBROOT_PATH="{{/var/www/html}}" # Certbot使用HTTP验证的网站目录
##############################################################
# 初始配置
##############################################################
echo "==> 开始初始化..."
# 预检测
echo ">> 检查root权限..."
if [ "$(id -u)" != "0" ]; then
echo "请使用root权限执行脚本" >&2
exit 1
fi
# 更新系统
echo ">> 更新软件源..."
apt update && apt upgrade -y
# 安装必要组件
echo ">> 安装Postfix/Dovecot..."
apt install -y postfix mailutils dovecot-core dovecot-imapd dovecot-lmtpd openssl certbot
echo ">> 初始配置完成"
##############################################################
# 配置Postfix邮件服务器
##############################################################
echo "==> 配置Postfix..."
# 配置Postfix主配置文件
cat > /etc/postfix/main.cf <<EOF
# 主配置参数
myhostname = $MAIL_DOMAIN
mydomain = $MAIL_DOMAIN
myorigin = \$mydomain
inet_interfaces = all
inet_protocols = all
# 通用邮件参数
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
# 虚拟域名配置
virtual_mailbox_domains = $MAIL_DOMAIN
virtual_mailbox_base = /var/mail/vhosts
virtual_mailbox_maps = hash:/etc/postfix/vmailbox
virtual_alias_maps = hash:/etc/postfix/virtual
virtual_alias_domains =
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
virtual_transport = lmtp:unix:private/dovecot-lmtp
# TLS设置自动替换SSL路径
smtpd_use_tls = yes
smtpd_tls_security_level = may
smtpd_tls_cert_file = /etc/letsencrypt/live/$MAIL_DOMAIN/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/$MAIL_DOMAIN/privkey.pem
# 防垃圾邮件设置
disable_vrfy_command = yes
smtpd_helo_restrictions = permit_mynetworks,reject_invalid_helo_hostname,permit
smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination
EOF
echo ">> Postfix基础配置完成"
##############################################################
# 配置邮箱用户与域名映射
##############################################################
echo "==> 创建虚拟邮箱配置..."
# 创建邮箱存储目录
mkdir -p /var/mail/vhosts/$MAIL_DOMAIN
chown -R vmail:vmail /var/mail
# 创建虚拟别名(管理员收件)
echo "$ADMIN_EMAIL" > /etc/postfix/virtual
# 创建用户邮箱映射(示例用户)
echo "user1@example.com $MAIL_DOMAIN/user1/" > /etc/postfix/vmailbox
# 生成哈希数据库
postmap /etc/postfix/virtual
postmap /etc/postfix/vmailbox
echo ">> 邮箱账户配置完成"
##############################################################
# Dovecot 配置
##############################################################
echo "==> 配置Dovecot..."
# 创建主配置
cat > /etc/dovecot/dovecot.conf <<EOF
protocols = imap lmtp
listen = *
disable_plaintext Authentication = yes
# 账户配置
defaultibble_uid = vmail
defaultibble_gid = vmail
mail_location = maildir:/var/mail/vhosts/%d/%n
# SSL证书路径自动替换
ssl = required
ssl_cert = </etc/letsencrypt/live/$MAIL_DOMAIN/fullchain.pem
ssl_key = </etc/letsencrypt/live/$MAIL_DOMAIN/privkey.pem
EOF
# 配置IMAP/LMTP协议
cat > /etc/dovecot/conf.d/10-master.conf <<EOF
service lmtp {
unix_listener /var/spool/postfix/private/dovecot-lmtp {
mode = 0600
user = postfix
group = postfix
}
}
service imap {
inet_listener imap {
port = 143
}
inet_listener imaps {
port = 993
ssl = yes
}
}
EOF
echo ">> Dovecot配置完成"
##############################################################
# 获取SSL证书Let's Encrypt
##############################################################
echo "==> 申请SSL证书..."
if [ ! -d "/etc/letsencrypt/live/$MAIL_DOMAIN" ]; then
certbot certonly --standalone --agree-tos --no-eff-email \
--email $ADMIN_EMAIL \
-d $MAIL_DOMAIN
# 设置定时更新
(crontab -l ; echo "0 0 * * * certbot renew --quiet") | crontab -
fi
echo ">> SSL证书获取完成"
##############################################################
# 防火墙配置
##############################################################
echo "==> 配置防火墙..."
if ! systemctl is-active --quiet ufw; then
ufw allow 'OpenSSH'
ufw allow "$MAIL_IP"/4
ufw enable
fi
ufw allow 25/tcp # SMTP
ufw allow 587/tcp # Submission
ufw allow 465/tcp # SMTPS
ufw allow 143/tcp # IMAP
ufw allow 993/tcp # IMAPS
ufw reload
echo ">> 防火墙配置完成"
##############################################################
# 启动服务并测试
##############################################################
echo "==> 启动服务..."
systemctl restart postfix
systemctl restart dovecot
# 检查服务状态
systemctl status postfix
systemctl status dovecot
echo "--------------------"
echo "部署完成,请验证服务:"
echo "1. 检查端口 25/587/993 是否开放"
echo "2. 发送测试邮件echo \"测试邮件正文\" | mail -s \"测试标题\" $ADMIN_EMAIL"
echo "3. 查看日志tail -f /var/log/mail.log"
echo "--------------------"