bugfix
This commit is contained in:
parent
e19cf1f402
commit
002cb7e6f4
200
mailserver/mailserver.sh
Normal file
200
mailserver/mailserver.sh
Normal 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 "--------------------"
|
||||
|
Loading…
Reference in New Issue
Block a user