Skip to content

Commit e6b235b

Browse files
author
Kristan Kenney
committed
Add internal functions to facilitate per-domain mail SSL
1 parent fc96dc7 commit e6b235b

File tree

2 files changed

+79
-0
lines changed

2 files changed

+79
-0
lines changed

func/domain.sh

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -562,6 +562,79 @@ is_mail_new() {
562562
}
563563

564564

565+
# Add mail server SSL configuration
566+
add_mail_ssl_config() {
567+
# Ensure that SSL certificate directories exists
568+
if [ ! -d $HOMEDIR/$user/conf/mail/$domain/ssl/ ]; then
569+
mkdir -p $HOMEDIR/$user/conf/mail/$domain/ssl/
570+
fi
571+
572+
if [ ! -d /usr/local/hestia/ssl/mail ]; then
573+
mkdir -p /usr/local/hestia/ssl/mail
574+
fi
575+
576+
if [ ! -d /etc/dovecot/conf.d/domains ]; then
577+
mkdir -p /etc/dovecot/conf.d/domains
578+
fi
579+
580+
# Add certificate to Hestia user configuration data directory
581+
cp -f $ssl_dir/$domain.crt $USER_DATA/ssl/mail.$domain.crt
582+
cp -f $ssl_dir/$domain.key $USER_DATA/ssl/mail.$domain.key
583+
cp -f $ssl_dir/$domain.crt $USER_DATA/ssl/mail.$domain.pem
584+
if [ -e "$ssl_dir/$domain.ca" ]; then
585+
cp -f $ssl_dir/$domain.ca $USER_DATA/ssl/mail.$domain.ca
586+
echo >> $USER_DATA/ssl/mail.$domain.pem
587+
cat $USER_DATA/ssl/mail.$domain.ca >> $USER_DATA/ssl/mail.$domain.pem
588+
fi
589+
590+
chmod 660 $USER_DATA/ssl/mail.$domain.*
591+
592+
# Add certificate to user home directory
593+
cp -f $USER_DATA/ssl/mail.$domain.crt $HOMEDIR/$user/conf/mail/$domain/ssl/$domain.crt
594+
cp -f $USER_DATA/ssl/mail.$domain.key $HOMEDIR/$user/conf/mail/$domain/ssl/$domain.key
595+
cp -f $USER_DATA/ssl/mail.$domain.pem $HOMEDIR/$user/conf/mail/$domain/ssl/$domain.pem
596+
if [ -e "$USER_DATA/ssl/mail.$domain.ca" ]; then
597+
cp -f $USER_DATA/ssl/mail.$domain.ca $HOMEDIR/$user/conf/mail/$domain/ssl/$domain.ca
598+
fi
599+
600+
# Add domain SSL configuration to dovecot
601+
if [ -f /etc/dovecot/conf.d/domains/$domain.conf ]; then
602+
rm -f /etc/dovecot/conf.d/domains/$domain.conf
603+
fi
604+
605+
echo "" >> /etc/dovecot/conf.d/domains/$domain.conf
606+
echo "local_name mail.$domain {" >> /etc/dovecot/conf.d/domains/$domain.conf
607+
echo " ssl_cert = <$HOMEDIR/$user/conf/mail/$domain/ssl/$domain.pem" >> /etc/dovecot/conf.d/domains/$domain.conf
608+
echo " ssl_key = <$HOMEDIR/$user/conf/mail/$domain/ssl/$domain.key" >> /etc/dovecot/conf.d/domains/$domain.conf
609+
echo "}" >> /etc/dovecot/conf.d/domains/$domain.conf
610+
611+
# Add domain SSL configuration to exim4
612+
ln -s $HOMEDIR/$user/conf/mail/$domain/ssl/$domain.pem /usr/local/hestia/ssl/mail/mail.$domain.crt
613+
ln -s $HOMEDIR/$user/conf/mail/$domain/ssl/$domain.key /usr/local/hestia/ssl/mail/mail.$domain.key
614+
615+
# Set correct permissions on certificates
616+
chmod 0644 $HOMEDIR/$user/conf/mail/$domain/ssl/*
617+
chown -h $user:mail $HOMEDIR/$user/conf/mail/$domain/ssl/*
618+
chmod -R 0644 /usr/local/hestia/ssl/mail/*
619+
chown -h $user:mail /usr/local/hestia/ssl/mail/*
620+
}
621+
622+
# Delete SSL support for mail domain
623+
del_mail_ssl_config() {
624+
# Remove dovecot configuration
625+
rm -f /etc/dovecot/conf.d/domains/mail.$domain.conf
626+
627+
# Remove SSL vhost configuration
628+
rm -f $HOMEDIR/$user/conf/mail/$domain/*.ssl.conf
629+
rm -f /etc/$WEB_SYSTEM/conf.d/domains/$WEBMAIL_ALIAS.$domain.ssl.conf
630+
rm -f /etc/$PROXY_SYSTEM/conf.d/domains/$WEBMAIL_ALIAS.$domain.ssl.conf
631+
632+
# Remove SSL certificates
633+
rm -f $HOMEDIR/$user/conf/mail/$domain/ssl/*
634+
rm -f $USER_DATA/ssl/mail.$domain.*
635+
rm -f /usr/local/hestia/ssl/mail/mail.$domain.*
636+
}
637+
565638
#----------------------------------------------------------#
566639
# CMN #
567640
#----------------------------------------------------------#

func/rebuild.sh

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -529,6 +529,12 @@ rebuild_mail_domain_conf() {
529529
chown -R dovecot:mail $HOMEDIR/$user/conf/mail/$domain/passwd
530530
fi
531531
chown $user:mail $HOMEDIR/$user/mail/$domain_idn
532+
# Remove and recreate SSL configuration
533+
if [ "$SSL" = 'yes' ]; then
534+
mkdir -p $HOMEDIR/$user/conf/mail/$domain/ssl/
535+
del_mail_ssl_config
536+
add_mail_ssl_config
537+
fi
532538
fi
533539

534540
# Update counters

0 commit comments

Comments
 (0)