Skip to content

Commit 6c0c403

Browse files
author
Kristan Kenney
committed
Implement SSL for mail domains and webmail subdomain support
2 parents a993836 + bb9d02a commit 6c0c403

26 files changed

+509
-311
lines changed

bin/v-add-backup-host

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -169,9 +169,7 @@ fi
169169

170170
# Adding backup host
171171
if [ $type != 'local' ]; then
172-
time_n_date=$(date +'%T %F')
173-
time=$(echo "$time_n_date" |cut -f 1 -d \ )
174-
date=$(echo "$time_n_date" |cut -f 2 -d \ )
172+
new_timestamp
175173
str="HOST='$host'\nUSERNAME='$user'\nPASSWORD='$password'"
176174
str="$str\nBPATH='$path'\nPORT='$port'\nTIME='$time'\nDATE='$date'"
177175
echo -e "$str" > $HESTIA/conf/$type.backup.conf

bin/v-add-letsencrypt-domain

Lines changed: 46 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -83,11 +83,11 @@ fi
8383
# Action #
8484
#----------------------------------------------------------#
8585

86-
# Rework domain and alieses for mail.
86+
# Generate correct variables for mail domain SSL certificates
8787
if [ ! -z "$mail" ]; then
88-
original_domain=$domain
89-
aliases="webmail.$domain,autodiscover.$domain"
90-
domain="mail.$domain"
88+
root_domain=$domain
89+
domain="mail.$root_domain"
90+
aliases="$WEBMAIL_ALIAS.$root_domain,autodiscover.$root_domain"
9191
fi
9292

9393
# Registering LetsEncrypt user account
@@ -162,34 +162,38 @@ for auth in $authz; do
162162
$BIN/v-add-dns-record $user $domain "_acme-challenge" "TXT" $record
163163
check_result $? "DNS _acme-challenge record wasn't created"
164164
else
165-
if [ "$WEB_SYSTEM" = 'nginx' ] || [ ! -z "$PROXY_SYSTEM" ]; then
166-
if [ -z "$mail" ]; then
167-
conf="$HOMEDIR/$user/conf/web/$domain/$PROXY_SYSTEM.conf_letsencrypt"
168-
sconf="$HOMEDIR/$user/conf/web/$domain/$PROXY_SYSTEM.ssl.conf_letsencrypt"
169-
else
170-
conf="$HOMEDIR/$user/conf/mail/$original_domain/$PROXY_SYSTEM.conf_letsencryptmail"
171-
sconf="$HOMEDIR/$user/conf/mail/$original_domain/$PROXY_SYSTEM.ssl.conf_letsencryptmail"
172-
fi
173-
174-
if [ ! -e "$conf" ]; then
175-
echo 'location ~ "^/\.well-known/acme-challenge/(.*)$" {' \
176-
> $conf
177-
echo ' default_type text/plain;' >> $conf
178-
echo ' return 200 "$1.'$THUMB'";' >> $conf
179-
echo '}' >> $conf
180-
fi
181-
if [ ! -e "$sconf" ]; then
182-
ln -s "$conf" "$sconf"
183-
fi
184-
$BIN/v-restart-proxy
185-
check_result $? "Proxy restart failed" > /dev/null
165+
if [ -z "$mail" ]; then
166+
if [ "$WEB_SYSTEM" = 'nginx' ] || [ ! -z "$PROXY_SYSTEM" ]; then
167+
if [ ! -z "$mail" ]; then
168+
conf="$HOMEDIR/$user/conf/mail/$root_domain/$PROXY_SYSTEM.conf_letsencrypt"
169+
sconf="$HOMEDIR/$user/conf/mail/$root_domain/$PROXY_SYSTEM.ssl.conf_letsencrypt"
170+
else
171+
conf="$HOMEDIR/$user/conf/web/$domain/$PROXY_SYSTEM.conf_letsencrypt"
172+
sconf="$HOMEDIR/$user/conf/web/$domain/$PROXY_SYSTEM.ssl.conf_letsencrypt"
173+
fi
174+
175+
if [ ! -e "$conf" ]; then
176+
echo 'location ~ "^/\.well-known/acme-challenge/(.*)$" {' \
177+
> $conf
178+
echo ' default_type text/plain;' >> $conf
179+
echo ' return 200 "$1.'$THUMB'";' >> $conf
180+
echo '}' >> $conf
181+
fi
182+
if [ ! -e "$sconf" ]; then
183+
ln -s "$conf" "$sconf"
184+
fi
185+
$BIN/v-restart-proxy
186+
check_result $? "Proxy restart failed" > /dev/null
186187

187-
else
188-
if [ -z "$mail" ]; then
189-
well_known="$HOMEDIR/$user/web/$domain/public_html/.well-known"
190188
else
191-
well_known="/var/lib/roundcube/.well-known"
189+
well_known="$HOMEDIR/$user/web/$domain/public_html/.well-known"
190+
acme_challenge="$well_known/acme-challenge"
191+
mkdir -p $acme_challenge
192+
echo "$token.$THUMB" > $acme_challenge/$token
193+
chown -R $user:$user $well_known
192194
fi
195+
else
196+
well_known="/var/lib/roundcube/.well-known"
193197
acme_challenge="$well_known/acme-challenge"
194198
mkdir -p $acme_challenge
195199
echo "$token.$THUMB" > $acme_challenge/$token
@@ -262,14 +266,23 @@ if [[ $(head -n 1 $ssl_dir/$domain.ca) = "-----END CERTIFICATE-----" ]]; then
262266
sed -i '1,2d' $ssl_dir/$domain.ca
263267
fi
264268

269+
# Rename certs for mail
270+
if [ ! -z "$mail" ]; then
271+
mv $ssl_dir/$domain.ca $ssl_dir/$root_domain.ca
272+
mv $ssl_dir/$domain.crt $ssl_dir/$root_domain.crt
273+
mv $ssl_dir/$domain.csr $ssl_dir/$root_domain.csr
274+
mv $ssl_dir/$domain.key $ssl_dir/$root_domain.key
275+
mv $ssl_dir/$domain.pem $ssl_dir/$root_domain.pem
276+
fi
277+
265278
# Adding SSL
266279
if [ -z "$mail" ]; then
267280
ssl_home=$(search_objects 'web' 'LETSENCRYPT' 'yes' 'SSL_HOME')
268281
$BIN/v-delete-web-domain-ssl $user $domain > /dev/null 2>&1
269282
$BIN/v-add-web-domain-ssl $user $domain $ssl_dir $ssl_home
270283
else
271-
$BIN/v-delete-mail-domain-ssl $user $domain >/dev/null 2>&1
272-
$BIN/v-add-mail-domain-ssl $user $domain $ssl_dir
284+
$BIN/v-delete-mail-domain-ssl $user $root_domain >/dev/null 2>&1
285+
$BIN/v-add-mail-domain-ssl $user $root_domain $ssl_dir
273286
fi
274287

275288
if [ "$?" -ne '0' ]; then
@@ -295,9 +308,9 @@ if [ -z "$mail" ]; then
295308
update_object_value 'web' 'DOMAIN' "$domain" '$LETSENCRYPT' 'yes'
296309
else
297310
if [ -z "$LETSENCRYPT" ]; then
298-
add_object_key "mail" 'DOMAIN' "$original_domain" 'LETSENCRYPT'
311+
add_object_key "mail" 'DOMAIN' "$root_domain" 'LETSENCRYPT'
299312
fi
300-
update_object_value 'mail' 'DOMAIN' "$original_domain" '$LETSENCRYPT' 'yes'
313+
update_object_value 'mail' 'DOMAIN' "$root_domain" '$LETSENCRYPT' 'yes'
301314
fi
302315

303316
#----------------------------------------------------------#

bin/v-add-mail-domain

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,14 @@ if [ ! -z "$DNS_SYSTEM" ] && [ "$dkim" = 'yes' ]; then
127127
fi
128128
fi
129129

130+
# Add webmail configuration to mail domain
131+
if [ ! -z "$WEB_SYSTEM" ]; then
132+
add_webmail_config "$WEB_SYSTEM" "default.tpl"
133+
fi
134+
if [ ! -z "$PROXY_SYSTEM" ]; then
135+
add_webmail_config "$PROXY_SYSTEM" "default.tpl"
136+
fi
137+
130138
#----------------------------------------------------------#
131139
# Hestia #
132140
#----------------------------------------------------------#
@@ -138,6 +146,14 @@ if [ "$dkim" = 'yes' ]; then
138146
increase_user_value "$user" '$U_MAIL_DKIM'
139147
fi
140148

149+
# Restarting web server
150+
$BIN/v-restart-web $restart
151+
check_result $? "Web restart failed" >/dev/null
152+
153+
# Restarting proxy server
154+
$BIN/v-restart-proxy $restart
155+
check_result $? "Proxy restart failed" >/dev/null
156+
141157
# Logging
142158
log_history "added mail domain $domain"
143159
log_event "$OK" "$ARGUMENTS"

bin/v-add-mail-domain-ssl

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -65,31 +65,37 @@ is_web_domain_cert_valid
6565
# Call routine to add SSL configuration to mail domain
6666
add_mail_ssl_config
6767

68+
# Add webmail configuration to mail domain
69+
if [ ! -z "$WEB_SYSTEM" ]; then
70+
add_webmail_config "$WEB_SYSTEM" "default.stpl"
71+
fi
72+
if [ ! -z "$PROXY_SYSTEM" ]; then
73+
add_webmail_config "$PROXY_SYSTEM" "default.stpl"
74+
fi
75+
6876
# Increase value for domain
6977
increase_user_value "$user" '$U_MAIL_SSL'
7078

7179
# Set SSL as enabled in configuration
7280
update_object_value 'mail' 'DOMAIN' "$domain" '$SSL' "yes"
7381

74-
# Refresh webmail configuration
75-
if [ ! -z "$WEB_SYSTEM" ]; then
76-
add_ssl_webmail_config
77-
78-
# Restart web services for webmail changes to take effect
79-
$BIN/v-restart-web $restart
80-
$BIN/v-restart-proxy $restart
81-
fi
82-
8382
#----------------------------------------------------------#
8483
# Hestia #
8584
#----------------------------------------------------------#
8685

8786
# Restarting mail server
8887
$BIN/v-restart-mail $restart
8988
$BIN/v-restart-service $IMAP_SYSTEM $restart
90-
9189
check_result $? "Mail restart failed" >/dev/null
9290

91+
# Restarting web server
92+
$BIN/v-restart-web $restart
93+
check_result $? "Web restart failed" >/dev/null
94+
95+
# Restarting proxy server
96+
$BIN/v-restart-proxy $restart
97+
check_result $? "Proxy restart failed" >/dev/null
98+
9399
# Logging
94100
log_history "enabled mail ssl support for $domain"
95101
log_event "$OK" "$ARGUMENTS"

bin/v-add-webmail

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
#!/bin/bash
2+
# info: add webmail support for a domain
3+
# options: USER DOMAIN [RESTART]
4+
#
5+
6+
#----------------------------------------------------------#
7+
# Variable&Function #
8+
#----------------------------------------------------------#
9+
10+
# Argument definition
11+
user=$1
12+
domain=$2
13+
restart="$3"
14+
15+
# Additional argument formatting
16+
if [[ "$domain" =~ [[:upper:]] ]]; then
17+
domain=$(echo "$domain" |tr '[:upper:]' '[:lower:]')
18+
fi
19+
if [[ "$domain" =~ ^www\..* ]]; then
20+
domain=$(echo "$domain" |sed -e "s/^www.//")
21+
fi
22+
if [[ "$domain" =~ .*\.$ ]]; then
23+
domain=$(echo "$domain" |sed -e "s/\.$//")
24+
fi
25+
26+
domain=$(idn -t --quiet -u "$domain" )
27+
domain_idn=$(idn -t --quiet -a "$domain")
28+
29+
# Includes
30+
source $HESTIA/func/main.sh
31+
source $HESTIA/func/domain.sh
32+
source $HESTIA/func/ip.sh
33+
source $HESTIA/conf/hestia.conf
34+
35+
# Additional argument formatting
36+
format_domain
37+
format_domain_idn
38+
get_user_ip
39+
40+
#----------------------------------------------------------#
41+
# Verifications #
42+
#----------------------------------------------------------#
43+
44+
check_args '3' "$#" 'USER DOMAIN [RESTART]'
45+
is_format_valid 'user' 'domain'
46+
is_system_enabled "$MAIL_SYSTEM" 'MAIL_SYSTEM'
47+
is_system_enabled "$WEB_SYSTEM" 'WEB_SYSTEM'
48+
is_object_valid 'user' 'USER' "$user"
49+
is_object_unsuspended 'user' 'USER' "$user"
50+
is_object_valid 'mail' 'DOMAIN' "$domain"
51+
is_object_unsuspended 'mail' 'DOMAIN' "$domain"
52+
is_object_valid 'web' 'DOMAIN' "$domain"
53+
is_object_unsuspended 'web' 'DOMAIN' "$domain"
54+
55+
#----------------------------------------------------------#
56+
# Action #
57+
#----------------------------------------------------------#
58+
59+
# Add webmail configuration to mail domain
60+
if [ ! -z "$WEB_SYSTEM" ]; then
61+
add_webmail_config "$WEB_SYSTEM" "default.tpl"
62+
fi
63+
if [ ! -z "$PROXY_SYSTEM" ]; then
64+
add_webmail_config "$PROXY_SYSTEM" "default.tpl"
65+
fi
66+
67+
# Enable SSL for webmail if available
68+
if [ -f $HOMEDIR/$user/conf/mail/$domain/ssl/$domain.crt ]; then
69+
if [ ! -z "$WEB_SYSTEM" ]; then
70+
add_webmail_config "$WEB_SYSTEM" "default.stpl"
71+
fi
72+
if [ ! -z "$PROXY_SYSTEM" ]; then
73+
add_webmail_config "$PROXY_SYSTEM" "default.stpl"
74+
fi
75+
fi
76+
77+
#----------------------------------------------------------#
78+
# Hestia #
79+
#----------------------------------------------------------#
80+
81+
if [ ! -z "$3" ]; then
82+
# Restarting web server
83+
$BIN/v-restart-web $restart
84+
check_result $? "Web restart failed" >/dev/null
85+
86+
$BIN/v-restart-proxy $restart
87+
check_result $? "Proxy restart failed" >/dev/null
88+
fi
89+
90+
# Logging
91+
log_history "enabled webmail support for $domain"
92+
log_event "$OK" "$ARGUMENTS"
93+
94+
exit

bin/v-delete-mail-domain

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,9 @@ if [ "$SSL" = 'yes' ]; then
6767
del_mail_ssl_config
6868
fi
6969

70+
# Delete webmail configuration
71+
del_webmail_config
72+
7073
#----------------------------------------------------------#
7174
# Hestia #
7275
#----------------------------------------------------------#

bin/v-delete-mail-domain-ssl

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,6 @@ is_object_value_exist 'mail' 'DOMAIN' "$domain" '$SSL'
4242
# Delete mail domain SSL configuration
4343
del_mail_ssl_config
4444

45-
# Delete SSL webmail configuration
46-
if [ ! -z "$WEB_SYSTEM" ]; then
47-
del_webmail_ssl_config
48-
fi
49-
5045
#----------------------------------------------------------#
5146
# Hestia #
5247
#----------------------------------------------------------#

bin/v-delete-webmail

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
#!/bin/bash
2+
# info: delete webmail support for a domain
3+
# options: USER DOMAIN [RESTART]
4+
#
5+
# The function delete ssl certificates.
6+
7+
#----------------------------------------------------------#
8+
# Variable&Function #
9+
#----------------------------------------------------------#
10+
11+
# Includes
12+
source $HESTIA/func/main.sh
13+
source $HESTIA/func/domain.sh
14+
source $HESTIA/conf/hestia.conf
15+
16+
# Argument definition
17+
user=$1
18+
domain=$2
19+
restart="$3"
20+
21+
# Additional argument formatting
22+
format_domain
23+
format_domain_idn
24+
25+
#----------------------------------------------------------#
26+
# Verifications #
27+
#----------------------------------------------------------#
28+
29+
check_args '2' "$#" 'USER DOMAIN [RESTART]'
30+
is_format_valid 'user' 'domain'
31+
is_system_enabled "$MAIL_SYSTEM" 'MAIL_SYSTEM'
32+
is_system_enabled "$WEB_SYSTEM" 'WEB_SYSTEM'
33+
is_object_valid 'user' 'USER' "$user"
34+
is_object_unsuspended 'user' 'USER' "$user"
35+
is_object_valid 'mail' 'DOMAIN' "$domain"
36+
is_object_unsuspended 'mail' 'DOMAIN' "$domain"
37+
38+
#----------------------------------------------------------#
39+
# Action #
40+
#----------------------------------------------------------#
41+
42+
# Delete webmail configuration
43+
del_webmail_config
44+
45+
#----------------------------------------------------------#
46+
# Hestia #
47+
#----------------------------------------------------------#
48+
49+
if [ ! -z "$3" ]; then
50+
# Restarting web server
51+
$BIN/v-restart-web $restart
52+
check_result $? "Web restart failed" >/dev/null
53+
54+
$BIN/v-restart-proxy $restart
55+
check_result $? "Proxy restart failed" >/dev/null
56+
fi
57+
58+
# Logging
59+
log_history "disabled webmail support for $domain"
60+
log_event "$OK" "$ARGUMENTS"
61+
62+
exit

bin/v-list-sys-rrd

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,7 @@ json_list() {
2121
echo "{"
2222

2323
# Generating timestamp
24-
time_n_date=$(date +'%T %F')
25-
TIME=$(echo "$time_n_date" |cut -f 1 -d \ )
26-
DATE=$(echo "$time_n_date" |cut -f 2 -d \ )
24+
new_timestamp
2725

2826
for type in $rrd_types; do
2927
for rrd in $(ls $RRD/$type |grep rrd$ |sed "s/\.rrd$//g"); do

0 commit comments

Comments
 (0)