new_options.sh 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317
  1. #!/usr/bin/env bash
  2. # _modules/scripts/new_options.sh
  3. # THIS SCRIPT IS DESIGNED TO BE RUNNING BY MAILCOW SCRIPTS ONLY!
  4. # DO NOT, AGAIN, NOT TRY TO RUN THIS SCRIPT STANDALONE!!!!!!
  5. adapt_new_options() {
  6. CONFIG_ARRAY=(
  7. "AUTODISCOVER_SAN"
  8. "SKIP_LETS_ENCRYPT"
  9. "SKIP_SOGO"
  10. "USE_WATCHDOG"
  11. "WATCHDOG_NOTIFY_EMAIL"
  12. "WATCHDOG_NOTIFY_WEBHOOK"
  13. "WATCHDOG_NOTIFY_WEBHOOK_BODY"
  14. "WATCHDOG_NOTIFY_BAN"
  15. "WATCHDOG_NOTIFY_START"
  16. "WATCHDOG_EXTERNAL_CHECKS"
  17. "WATCHDOG_SUBJECT"
  18. "SKIP_CLAMD"
  19. "SKIP_OLEFY"
  20. "SKIP_IP_CHECK"
  21. "ADDITIONAL_SAN"
  22. "DOVEADM_PORT"
  23. "IPV4_NETWORK"
  24. "IPV6_NETWORK"
  25. "LOG_LINES"
  26. "SNAT_TO_SOURCE"
  27. "SNAT6_TO_SOURCE"
  28. "COMPOSE_PROJECT_NAME"
  29. "DOCKER_COMPOSE_VERSION"
  30. "SQL_PORT"
  31. "API_KEY"
  32. "API_KEY_READ_ONLY"
  33. "API_ALLOW_FROM"
  34. "MAILDIR_GC_TIME"
  35. "MAILDIR_SUB"
  36. "ACL_ANYONE"
  37. "FTS_HEAP"
  38. "FTS_PROCS"
  39. "SKIP_FTS"
  40. "ENABLE_SSL_SNI"
  41. "ALLOW_ADMIN_EMAIL_LOGIN"
  42. "SKIP_HTTP_VERIFICATION"
  43. "SOGO_EXPIRE_SESSION"
  44. "SOGO_URL_ENCRYPTION_KEY"
  45. "REDIS_PORT"
  46. "REDISPASS"
  47. "DOVECOT_MASTER_USER"
  48. "DOVECOT_MASTER_PASS"
  49. "MAILCOW_PASS_SCHEME"
  50. "ADDITIONAL_SERVER_NAMES"
  51. "WATCHDOG_VERBOSE"
  52. "WEBAUTHN_ONLY_TRUSTED_VENDORS"
  53. "SPAMHAUS_DQS_KEY"
  54. "SKIP_UNBOUND_HEALTHCHECK"
  55. "DISABLE_NETFILTER_ISOLATION_RULE"
  56. "HTTP_REDIRECT"
  57. "ENABLE_IPV6"
  58. "ACME_DNS_CHALLENGE"
  59. "ACME_DNS_PROVIDER"
  60. "ACME_ACCOUNT_EMAIL"
  61. )
  62. sed -i --follow-symlinks '$a\' mailcow.conf
  63. for option in ${CONFIG_ARRAY[@]}; do
  64. if grep -q "^#\?${option}=" mailcow.conf; then
  65. continue
  66. fi
  67. echo "Adding new option \"${option}\" to mailcow.conf"
  68. case "${option}" in
  69. AUTODISCOVER_SAN)
  70. echo '# Obtain certificates for autodiscover.* and autoconfig.* domains.' >> mailcow.conf
  71. echo '# This can be useful to switch off in case you are in a scenario where a reverse proxy already handles those.' >> mailcow.conf
  72. echo '# There are mixed scenarios where ports 80,443 are occupied and you do not want to share certs' >> mailcow.conf
  73. echo '# between services. So acme-mailcow obtains for maildomains and all web-things get handled' >> mailcow.conf
  74. echo '# in the reverse proxy.' >> mailcow.conf
  75. echo 'AUTODISCOVER_SAN=y' >> mailcow.conf
  76. ;;
  77. DOCKER_COMPOSE_VERSION)
  78. echo "# Used Docker Compose version" >> mailcow.conf
  79. echo "# Switch here between native (compose plugin) and standalone" >> mailcow.conf
  80. echo "# For more informations take a look at the mailcow docs regarding the configuration options." >> mailcow.conf
  81. echo "# Normally this should be untouched but if you decided to use either of those you can switch it manually here." >> mailcow.conf
  82. echo "# Please be aware that at least one of those variants should be installed on your machine or mailcow will fail." >> mailcow.conf
  83. echo "" >> mailcow.conf
  84. echo "DOCKER_COMPOSE_VERSION=${DOCKER_COMPOSE_VERSION}" >> mailcow.conf
  85. ;;
  86. DOVEADM_PORT)
  87. echo "DOVEADM_PORT=127.0.0.1:19991" >> mailcow.conf
  88. ;;
  89. LOG_LINES)
  90. echo '# Max log lines per service to keep in Redis logs' >> mailcow.conf
  91. echo "LOG_LINES=9999" >> mailcow.conf
  92. ;;
  93. IPV4_NETWORK)
  94. echo '# Internal IPv4 /24 subnet, format n.n.n. (expands to n.n.n.0/24)' >> mailcow.conf
  95. echo "IPV4_NETWORK=172.22.1" >> mailcow.conf
  96. ;;
  97. IPV6_NETWORK)
  98. echo '# Internal IPv6 subnet in fc00::/7' >> mailcow.conf
  99. echo "IPV6_NETWORK=fd4d:6169:6c63:6f77::/64" >> mailcow.conf
  100. ;;
  101. SQL_PORT)
  102. echo '# Bind SQL to 127.0.0.1 on port 13306' >> mailcow.conf
  103. echo "SQL_PORT=127.0.0.1:13306" >> mailcow.conf
  104. ;;
  105. API_KEY)
  106. echo '# Create or override API key for web UI' >> mailcow.conf
  107. echo "#API_KEY=" >> mailcow.conf
  108. ;;
  109. API_KEY_READ_ONLY)
  110. echo '# Create or override read-only API key for web UI' >> mailcow.conf
  111. echo "#API_KEY_READ_ONLY=" >> mailcow.conf
  112. ;;
  113. API_ALLOW_FROM)
  114. echo '# Must be set for API_KEY to be active' >> mailcow.conf
  115. echo '# IPs only, no networks (networks can be set via UI)' >> mailcow.conf
  116. echo "#API_ALLOW_FROM=" >> mailcow.conf
  117. ;;
  118. SNAT_TO_SOURCE)
  119. echo '# Use this IPv4 for outgoing connections (SNAT)' >> mailcow.conf
  120. echo "#SNAT_TO_SOURCE=" >> mailcow.conf
  121. ;;
  122. SNAT6_TO_SOURCE)
  123. echo '# Use this IPv6 for outgoing connections (SNAT)' >> mailcow.conf
  124. echo "#SNAT6_TO_SOURCE=" >> mailcow.conf
  125. ;;
  126. MAILDIR_GC_TIME)
  127. echo '# Garbage collector cleanup' >> mailcow.conf
  128. echo '# Deleted domains and mailboxes are moved to /var/vmail/_garbage/timestamp_sanitizedstring' >> mailcow.conf
  129. echo '# How long should objects remain in the garbage until they are being deleted? (value in minutes)' >> mailcow.conf
  130. echo '# Check interval is hourly' >> mailcow.conf
  131. echo 'MAILDIR_GC_TIME=1440' >> mailcow.conf
  132. ;;
  133. ACL_ANYONE)
  134. echo '# Set this to "allow" to enable the anyone pseudo user. Disabled by default.' >> mailcow.conf
  135. echo '# When enabled, ACL can be created, that apply to "All authenticated users"' >> mailcow.conf
  136. echo '# This should probably only be activated on mail hosts, that are used exclusively by one organisation.' >> mailcow.conf
  137. echo '# Otherwise a user might share data with too many other users.' >> mailcow.conf
  138. echo 'ACL_ANYONE=disallow' >> mailcow.conf
  139. ;;
  140. FTS_HEAP)
  141. echo '# Dovecot Indexing (FTS) Process maximum heap size in MB, there is no recommendation, please see Dovecot docs.' >> mailcow.conf
  142. echo '# Flatcurve is used as FTS Engine. It is supposed to be pretty efficient in CPU and RAM consumption.' >> mailcow.conf
  143. echo '# Please always monitor your Resource consumption!' >> mailcow.conf
  144. echo "FTS_HEAP=128" >> mailcow.conf
  145. ;;
  146. SKIP_FTS)
  147. echo '# Skip FTS (Fulltext Search) for Dovecot on low-memory, low-threaded systems or if you simply want to disable it.' >> mailcow.conf
  148. echo "# Dovecot inside mailcow use Flatcurve as FTS Backend." >> mailcow.conf
  149. echo "SKIP_FTS=y" >> mailcow.conf
  150. ;;
  151. FTS_PROCS)
  152. echo '# Controls how many processes the Dovecot indexing process can spawn at max.' >> mailcow.conf
  153. echo '# Too many indexing processes can use a lot of CPU and Disk I/O' >> mailcow.conf
  154. echo '# Please visit: https://doc.dovecot.org/configuration_manual/service_configuration/#indexer-worker for more informations' >> mailcow.conf
  155. echo "FTS_PROCS=1" >> mailcow.conf
  156. ;;
  157. ENABLE_SSL_SNI)
  158. echo '# Create seperate certificates for all domains - y/n' >> mailcow.conf
  159. echo '# this will allow adding more than 100 domains, but some email clients will not be able to connect with alternative hostnames' >> mailcow.conf
  160. echo '# see https://wiki.dovecot.org/SSL/SNIClientSupport' >> mailcow.conf
  161. echo "ENABLE_SSL_SNI=n" >> mailcow.conf
  162. ;;
  163. SKIP_SOGO)
  164. echo '# Skip SOGo: Will disable SOGo integration and therefore webmail, DAV protocols and ActiveSync support (experimental, unsupported, not fully implemented) - y/n' >> mailcow.conf
  165. echo "SKIP_SOGO=n" >> mailcow.conf
  166. ;;
  167. MAILDIR_SUB)
  168. echo '# MAILDIR_SUB defines a path in a users virtual home to keep the maildir in. Leave empty for updated setups.' >> mailcow.conf
  169. echo "#MAILDIR_SUB=Maildir" >> mailcow.conf
  170. echo "MAILDIR_SUB=" >> mailcow.conf
  171. ;;
  172. WATCHDOG_NOTIFY_WEBHOOK)
  173. echo '# Send notifications to a webhook URL that receives a POST request with the content type "application/json".' >> mailcow.conf
  174. echo '# You can use this to send notifications to services like Discord, Slack and others.' >> mailcow.conf
  175. echo '#WATCHDOG_NOTIFY_WEBHOOK=https://discord.com/api/webhooks/XXXXXXXXXXXXXXXXXXX/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' >> mailcow.conf
  176. ;;
  177. WATCHDOG_NOTIFY_WEBHOOK_BODY)
  178. echo '# JSON body included in the webhook POST request. Needs to be in single quotes.' >> mailcow.conf
  179. echo '# Following variables are available: SUBJECT, BODY' >> mailcow.conf
  180. WEBHOOK_BODY='{"username": "mailcow Watchdog", "content": "**${SUBJECT}**\n${BODY}"}'
  181. echo "#WATCHDOG_NOTIFY_WEBHOOK_BODY='${WEBHOOK_BODY}'" >> mailcow.conf
  182. ;;
  183. WATCHDOG_NOTIFY_BAN)
  184. echo '# Notify about banned IP. Includes whois lookup.' >> mailcow.conf
  185. echo "WATCHDOG_NOTIFY_BAN=y" >> mailcow.conf
  186. ;;
  187. WATCHDOG_NOTIFY_START)
  188. echo '# Send a notification when the watchdog is started.' >> mailcow.conf
  189. echo "WATCHDOG_NOTIFY_START=y" >> mailcow.conf
  190. ;;
  191. WATCHDOG_SUBJECT)
  192. echo '# Subject for watchdog mails. Defaults to "Watchdog ALERT" followed by the error message.' >> mailcow.conf
  193. echo "#WATCHDOG_SUBJECT=" >> mailcow.conf
  194. ;;
  195. WATCHDOG_EXTERNAL_CHECKS)
  196. echo '# Checks if mailcow is an open relay. Requires a SAL. More checks will follow.' >> mailcow.conf
  197. echo '# No data is collected. Opt-in and anonymous.' >> mailcow.conf
  198. echo '# Will only work with unmodified mailcow setups.' >> mailcow.conf
  199. echo "WATCHDOG_EXTERNAL_CHECKS=n" >> mailcow.conf
  200. ;;
  201. SOGO_EXPIRE_SESSION)
  202. echo '# SOGo session timeout in minutes' >> mailcow.conf
  203. echo "SOGO_EXPIRE_SESSION=480" >> mailcow.conf
  204. ;;
  205. REDIS_PORT)
  206. echo "REDIS_PORT=127.0.0.1:7654" >> mailcow.conf
  207. ;;
  208. DOVECOT_MASTER_USER)
  209. echo '# DOVECOT_MASTER_USER and _PASS must _both_ be provided. No special chars.' >> mailcow.conf
  210. echo '# Empty by default to auto-generate master user and password on start.' >> mailcow.conf
  211. echo '# User expands to [email protected]' >> mailcow.conf
  212. echo '# LEAVE EMPTY IF UNSURE' >> mailcow.conf
  213. echo "DOVECOT_MASTER_USER=" >> mailcow.conf
  214. ;;
  215. DOVECOT_MASTER_PASS)
  216. echo '# LEAVE EMPTY IF UNSURE' >> mailcow.conf
  217. echo "DOVECOT_MASTER_PASS=" >> mailcow.conf
  218. ;;
  219. MAILCOW_PASS_SCHEME)
  220. echo '# Password hash algorithm' >> mailcow.conf
  221. echo '# Only certain password hash algorithm are supported. For a fully list of supported schemes,' >> mailcow.conf
  222. echo '# see https://docs.mailcow.email/models/model-passwd/' >> mailcow.conf
  223. echo "MAILCOW_PASS_SCHEME=BLF-CRYPT" >> mailcow.conf
  224. ;;
  225. ADDITIONAL_SERVER_NAMES)
  226. echo '# Additional server names for mailcow UI' >> mailcow.conf
  227. echo '#' >> mailcow.conf
  228. echo '# Specify alternative addresses for the mailcow UI to respond to' >> mailcow.conf
  229. echo '# This is useful when you set mail.* as ADDITIONAL_SAN and want to make sure mail.maildomain.com will always point to the mailcow UI.' >> mailcow.conf
  230. echo '# If the server name does not match a known site, Nginx decides by best-guess and may redirect users to the wrong web root.' >> mailcow.conf
  231. echo '# You can understand this as server_name directive in Nginx.' >> mailcow.conf
  232. echo '# Comma separated list without spaces! Example: ADDITIONAL_SERVER_NAMES=a.b.c,d.e.f' >> mailcow.conf
  233. echo 'ADDITIONAL_SERVER_NAMES=' >> mailcow.conf
  234. ;;
  235. WEBAUTHN_ONLY_TRUSTED_VENDORS)
  236. echo "# WebAuthn device manufacturer verification" >> mailcow.conf
  237. echo '# After setting WEBAUTHN_ONLY_TRUSTED_VENDORS=y only devices from trusted manufacturers are allowed' >> mailcow.conf
  238. echo '# root certificates can be placed for validation under mailcow-dockerized/data/web/inc/lib/WebAuthn/rootCertificates' >> mailcow.conf
  239. echo 'WEBAUTHN_ONLY_TRUSTED_VENDORS=n' >> mailcow.conf
  240. ;;
  241. SPAMHAUS_DQS_KEY)
  242. echo "# Spamhaus Data Query Service Key" >> mailcow.conf
  243. echo '# Optional: Leave empty for none' >> mailcow.conf
  244. echo '# Enter your key here if you are using a blocked ASN (OVH, AWS, Cloudflare e.g) for the unregistered Spamhaus Blocklist.' >> mailcow.conf
  245. echo '# If empty, it will completely disable Spamhaus blocklists if it detects that you are running on a server using a blocked AS.' >> mailcow.conf
  246. echo '# Otherwise it will work as usual.' >> mailcow.conf
  247. echo 'SPAMHAUS_DQS_KEY=' >> mailcow.conf
  248. ;;
  249. WATCHDOG_VERBOSE)
  250. echo '# Enable watchdog verbose logging' >> mailcow.conf
  251. echo 'WATCHDOG_VERBOSE=n' >> mailcow.conf
  252. ;;
  253. SKIP_UNBOUND_HEALTHCHECK)
  254. echo '# Skip Unbound (DNS Resolver) Healthchecks (NOT Recommended!) - y/n' >> mailcow.conf
  255. echo 'SKIP_UNBOUND_HEALTHCHECK=n' >> mailcow.conf
  256. ;;
  257. DISABLE_NETFILTER_ISOLATION_RULE)
  258. echo '# Prevent netfilter from setting an iptables/nftables rule to isolate the mailcow docker network - y/n' >> mailcow.conf
  259. echo '# CAUTION: Disabling this may expose container ports to other neighbors on the same subnet, even if the ports are bound to localhost' >> mailcow.conf
  260. echo 'DISABLE_NETFILTER_ISOLATION_RULE=n' >> mailcow.conf
  261. ;;
  262. HTTP_REDIRECT)
  263. echo '# Redirect HTTP connections to HTTPS - y/n' >> mailcow.conf
  264. echo 'HTTP_REDIRECT=n' >> mailcow.conf
  265. ;;
  266. ENABLE_IPV6)
  267. echo '# IPv6 Controller Section' >> mailcow.conf
  268. echo '# This variable controls the usage of IPv6 within mailcow.' >> mailcow.conf
  269. echo '# Can either be true or false | Defaults to true' >> mailcow.conf
  270. echo '# WARNING: MAKE SURE TO PROPERLY CONFIGURE IPv6 ON YOUR HOST FIRST BEFORE ENABLING THIS AS FAULTY CONFIGURATIONS CAN LEAD TO OPEN RELAYS!' >> mailcow.conf
  271. echo '# A COMPLETE DOCKER STACK REBUILD (compose down && compose up -d) IS NEEDED TO APPLY THIS.' >> mailcow.conf
  272. echo ENABLE_IPV6=${IPV6_BOOL} >> mailcow.conf
  273. ;;
  274. SKIP_CLAMD)
  275. echo '# Skip ClamAV (clamd-mailcow) anti-virus (Rspamd will auto-detect a missing ClamAV container) - y/n' >> mailcow.conf
  276. echo 'SKIP_CLAMD=n' >> mailcow.conf
  277. ;;
  278. SKIP_OLEFY)
  279. echo '# Skip Olefy (olefy-mailcow) anti-virus for Office documents (Rspamd will auto-detect a missing Olefy container) - y/n' >> mailcow.conf
  280. echo 'SKIP_OLEFY=n' >> mailcow.conf
  281. ;;
  282. REDISPASS)
  283. echo "REDISPASS=$(LC_ALL=C </dev/urandom tr -dc A-Za-z0-9 2>/dev/null | head -c 28)" >> mailcow.conf
  284. ;;
  285. SOGO_URL_ENCRYPTION_KEY)
  286. echo '# SOGo URL encryption key (exactly 16 characters, limited to A–Z, a–z, 0–9)' >> mailcow.conf
  287. echo '# This key is used to encrypt email addresses within SOGo URLs' >> mailcow.conf
  288. echo "SOGO_URL_ENCRYPTION_KEY=$(LC_ALL=C </dev/urandom tr -dc A-Za-z0-9 2>/dev/null | head -c 16)" >> mailcow.conf
  289. ;;
  290. ACME_DNS_CHALLENGE)
  291. echo '# Enable DNS-01 challenge for ACME (acme-mailcow) - y/n' >> mailcow.conf
  292. echo '# This requires you to set ACME_DNS_PROVIDER and ACME_ACCOUNT_EMAIL below' >> mailcow.conf
  293. echo 'ACME_DNS_CHALLENGE=n' >> mailcow.conf
  294. ;;
  295. ACME_DNS_PROVIDER)
  296. echo '# DNS provider for DNS-01 challenge (e.g. dns_cf, dns_azure, dns_gd, etc.)' >> mailcow.conf
  297. echo '# See the dns-01 provider documentation for more information.' >> mailcow.conf
  298. echo 'ACME_DNS_PROVIDER=dns_xxx' >> mailcow.conf
  299. ;;
  300. ACME_ACCOUNT_EMAIL)
  301. echo '# Account email for ACME DNS-01 challenge registration' >> mailcow.conf
  302. echo '[email protected]' >> mailcow.conf
  303. ;;
  304. *)
  305. echo "${option}=" >> mailcow.conf
  306. ;;
  307. esac
  308. done
  309. }