diff --git a/stack/node/mail/.env.dist b/stack/node/mail/.env.dist new file mode 100644 index 0000000..1c4ca23 --- /dev/null +++ b/stack/node/mail/.env.dist @@ -0,0 +1,4 @@ +NODE_MAILSERVER_ENABLE_MANAGESIEVE=1 +NODE_MAILSERVER_SPOOF_PROTECTION=1 +NODE_MAILSERVER_SSL_TYPE=letsencrypt +NODE_MAILSERVER_UPDATE_CHECK=0 diff --git a/stack/node/mail/mail.yml b/stack/node/mail/mail.yml new file mode 100644 index 0000000..9047a84 --- /dev/null +++ b/stack/node/mail/mail.yml @@ -0,0 +1,155 @@ +version: '2' +services: + mailserver: + image: mailserver/docker-mailserver:11.2 + cap_add: + - NET_ADMIN + container_name: ${NODE_COMPOSE_PROJECT_NAME}-mailserver + cpus: 0.5 + domainname: ${DOMAIN} + environment: + - OVERRIDE_HOSTNAME=${NODE_MAILSERVER_OVERRIDE_HOSTNAME:-} + - DMS_DEBUG=${NODE_MAILSERVER_DMS_DEBUG:-0} + - LOG_LEVEL=${NODE_MAILSERVER_LOG_LEVEL:-info} + - SUPERVISOR_LOGLEVEL=${NODE_MAILSERVER_SUPERVISOR_LOGLEVEL:-} + - ONE_DIR=${NODE_MAILSERVER_ONE_DIR:-1} + - ACCOUNT_PROVISIONER=${NODE_MAILSERVER_ACCOUNT_PROVISIONER:-} + - POSTMASTER_ADDRESS=${NODE_MAILSERVER_POSTMASTER_ADDRESS:-} + - ENABLE_UPDATE_CHECK=${NODE_MAILSERVER_ENABLE_UPDATE_CHECK:-1} + - UPDATE_CHECK_INTERVAL=${NODE_MAILSERVER_UPDATE_CHECK_INTERVAL:-1d} + - PERMIT_DOCKER=${NODE_MAILSERVER_PERMIT_DOCKER:-none} + - TZ=${NODE_MAILSERVER_TZ:-} + - NETWORK_INTERFACE=${NODE_MAILSERVER_NETWORK_INTERFACE:-} + - TLS_LEVEL=${NODE_MAILSERVER_TLS_LEVEL:-} + - SPOOF_PROTECTION=${NODE_MAILSERVER_SPOOF_PROTECTION:-} + - ENABLE_SRS=${NODE_MAILSERVER_ENABLE_SRS:-0} + - ENABLE_POP3=${NODE_MAILSERVER_ENABLE_POP3:-} + - ENABLE_CLAMAV=${NODE_MAILSERVER_ENABLE_CLAMAV:-0} + - ENABLE_AMAVIS=${NODE_MAILSERVER_ENABLE_AMAVIS:-1} + - AMAVIS_LOGLEVEL=${NODE_MAILSERVER_AMAVIS_LOGLEVEL:-0} + - ENABLE_DNSBL=${NODE_MAILSERVER_ENABLE_DNSBL:-0} + - ENABLE_FAIL2BAN=${NODE_MAILSERVER_ENABLE_FAIL2BAN:-0} + - FAIL2BAN_BLOCKTYPE=${NODE_MAILSERVER_FAIL2BAN_BLOCKTYPE:-drop} + - ENABLE_MANAGESIEVE=${NODE_MAILSERVER_ENABLE_MANAGESIEVE:-} + - POSTSCREEN_ACTION=${NODE_MAILSERVER_POSTSCREEN_ACTION:-enforce} + - SMTP_ONLY=${NODE_MAILSERVER_SMTP_ONLY:-} + - SSL_TYPE=${NODE_MAILSERVER_SSL_TYPE:-} + - SSL_CERT_PATH=${NODE_MAILSERVER_SSL_CERT_PATH:-} + - SSL_KEY_PATH=${NODE_MAILSERVER_SSL_KEY_PATH:-} + - SSL_ALT_CERT_PATH=${NODE_MAILSERVER_SSL_ALT_CERT_PATH:-} + - SSL_ALT_KEY_PATH=${NODE_MAILSERVER_SSL_ALT_KEY_PATH:-} + - VIRUSMAILS_DELETE_DELAY=${NODE_MAILSERVER_VIRUSMAILS_DELETE_DELAY:-} + - ENABLE_POSTFIX_VIRTUAL_TRANSPORT=${NODE_MAILSERVER_ENABLE_POSTFIX_VIRTUAL_TRANSPORT:-} + - POSTFIX_DAGENT=${NODE_MAILSERVER_POSTFIX_DAGENT:-} + - POSTFIX_MAILBOX_SIZE_LIMIT=${NODE_MAILSERVER_POSTFIX_MAILBOX_SIZE_LIMIT:-} + - ENABLE_QUOTAS=${NODE_MAILSERVER_ENABLE_QUOTAS:-1} + - POSTFIX_MESSAGE_SIZE_LIMIT=${NODE_MAILSERVER_POSTFIX_MESSAGE_SIZE_LIMIT:-} + - CLAMAV_MESSAGE_SIZE_LIMIT=${NODE_MAILSERVER_CLAMAV_MESSAGE_SIZE_LIMIT:-} + - PFLOGSUMM_TRIGGER=${NODE_MAILSERVER_PFLOGSUMM_TRIGGER:-} + - PFLOGSUMM_RECIPIENT=${NODE_MAILSERVER_PFLOGSUMM_RECIPIENT:-} + - PFLOGSUMM_SENDER=${NODE_MAILSERVER_PFLOGSUMM_SENDER:-} + - LOGWATCH_INTERVAL=${NODE_MAILSERVER_LOGWATCH_INTERVAL:-} + - LOGWATCH_RECIPIENT=${NODE_MAILSERVER_LOGWATCH_RECIPIENT:-} + - LOGWATCH_SENDER=${NODE_MAILSERVER_LOGWATCH_SENDER:-} + - REPORT_RECIPIENT=${NODE_MAILSERVER_REPORT_RECIPIENT:-} + - REPORT_SENDER=${NODE_MAILSERVER_REPORT_SENDER:-} + - LOGROTATE_INTERVAL=${NODE_MAILSERVER_LOGROTATE_INTERVAL:-weekly} + - POSTFIX_INET_PROTOCOLS=${NODE_MAILSERVER_POSTFIX_INET_PROTOCOLS:-all} + - DOVECOT_INET_PROTOCOLS=${NODE_MAILSERVER_DOVECOT_INET_PROTOCOLS:-all} + - ENABLE_SPAMASSASSIN=${NODE_MAILSERVER_ENABLE_SPAMASSASSIN:-0} + - SPAMASSASSIN_SPAM_TO_INBOX=${NODE_MAILSERVER_SPAMASSASSIN_SPAM_TO_INBOX:-1} + - ENABLE_SPAMASSASSIN_KAM=${NODE_MAILSERVER_ENABLE_SPAMASSASSIN_KAM:-0} + - MOVE_SPAM_TO_JUNK=${NODE_MAILSERVER_MOVE_SPAM_TO_JUNK:-1} + - SA_TAG=${NODE_MAILSERVER_SA_TAG:-2.0} + - SA_TAG2=${NODE_MAILSERVER_SA_TAG2:-6.31} + - SA_KILL=${NODE_MAILSERVER_SA_KILL:-6.31} + - SA_SPAM_SUBJECT=${NODE_MAILSERVER_SA_SPAM_SUBJECT:-***SPAM*****} + - ENABLE_FETCHMAIL=${NODE_MAILSERVER_ENABLE_FETCHMAIL:-0} + - FETCHMAIL_POLL=${NODE_MAILSERVER_FETCHMAIL_POLL:-300} + - ENABLE_LDAP=${NODE_MAILSERVER_ENABLE_LDAP:-} + - LDAP_START_TLS=${NODE_MAILSERVER_LDAP_START_TLS:-} + - LDAP_SERVER_HOST=${NODE_MAILSERVER_LDAP_SERVER_HOST:-} + - LDAP_SEARCH_BASE=${NODE_MAILSERVER_LDAP_SEARCH_BASE:-} + - LDAP_BIND_DN=${NODE_MAILSERVER_LDAP_BIND_DN:-} + - LDAP_BIND_PW=${NODE_MAILSERVER_LDAP_BIND_PW:-} + - LDAP_QUERY_FILTER_USER=${NODE_MAILSERVER_LDAP_QUERY_FILTER_USER:-} + - LDAP_QUERY_FILTER_GROUP=${NODE_MAILSERVER_LDAP_QUERY_FILTER_GROUP:-} + - LDAP_QUERY_FILTER_ALIAS=${NODE_MAILSERVER_LDAP_QUERY_FILTER_ALIAS:-} + - LDAP_QUERY_FILTER_DOMAIN=${NODE_MAILSERVER_LDAP_QUERY_FILTER_DOMAIN:-} + - DOVECOT_TLS=${NODE_MAILSERVER_DOVECOT_TLS:-} + - DOVECOT_USER_FILTER=${NODE_MAILSERVER_DOVECOT_USER_FILTER:-} + - DOVECOT_PASS_FILTER=${NODE_MAILSERVER_DOVECOT_PASS_FILTER:-} + - DOVECOT_MAILBOX_FORMAT=${NODE_MAILSERVER_DOVECOT_MAILBOX_FORMAT:-maildir} + - DOVECOT_AUTH_BIND=${NODE_MAILSERVER_DOVECOT_AUTH_BIND:-} + - ENABLE_POSTGREY=${NODE_MAILSERVER_ENABLE_POSTGREY:-0} + - POSTGREY_DELAY=${NODE_MAILSERVER_POSTGREY_DELAY:-300} + - POSTGREY_MAX_AGE=${NODE_MAILSERVER_POSTGREY_MAX_AGE:-35} + - POSTGREY_TEXT=${NODE_MAILSERVER_POSTGREY_TEXT:-"Delayed by Postgrey"} + - POSTGREY_AUTO_WHITELIST_CLIENTS=${NODE_MAILSERVER_POSTGREY_AUTO_WHITELIST_CLIENTS:-5} + - ENABLE_SASLAUTHD=${NODE_MAILSERVER_ENABLE_SASLAUTHD:-0} + - SASLAUTHD_MECHANISMS=${NODE_MAILSERVER_SASLAUTHD_MECHANISMS:-} + - SASLAUTHD_MECH_OPTIONS=${NODE_MAILSERVER_SASLAUTHD_MECH_OPTIONS:-} + - SASLAUTHD_LDAP_SERVER=${NODE_MAILSERVER_SASLAUTHD_LDAP_SERVER:-} + - SASLAUTHD_LDAP_BIND_DN=${NODE_MAILSERVER_SASLAUTHD_LDAP_BIND_DN:-} + - SASLAUTHD_LDAP_PASSWORD=${NODE_MAILSERVER_SASLAUTHD_LDAP_PASSWORD:-} + - SASLAUTHD_LDAP_SEARCH_BASE=${NODE_MAILSERVER_SASLAUTHD_LDAP_SEARCH_BASE:-} + - SASLAUTHD_LDAP_FILTER=${NODE_MAILSERVER_SASLAUTHD_LDAP_FILTER:-} + - SASLAUTHD_LDAP_START_TLS=${NODE_MAILSERVER_SASLAUTHD_LDAP_START_TLS:-} + - SASLAUTHD_LDAP_TLS_CHECK_PEER=${NODE_MAILSERVER_SASLAUTHD_LDAP_TLS_CHECK_PEER:-} + - SASLAUTHD_LDAP_TLS_CACERT_FILE=${NODE_MAILSERVER_SASLAUTHD_LDAP_TLS_CACERT_FILE:-} + - SASLAUTHD_LDAP_TLS_CACERT_DIR=${NODE_MAILSERVER_SASLAUTHD_LDAP_TLS_CACERT_DIR:-} + - SASLAUTHD_LDAP_PASSWORD_ATTR=${NODE_MAILSERVER_SASLAUTHD_LDAP_PASSWORD_ATTR:-} + - SASL_PASSWD=${NODE_MAILSERVER_SASL_PASSWD:-} + - SASLAUTHD_LDAP_AUTH_METHOD=${NODE_MAILSERVER_SASLAUTHD_LDAP_AUTH_METHOD:-} + - SASLAUTHD_LDAP_MECH=${NODE_MAILSERVER_SASLAUTHD_LDAP_MECH:-} + - SRS_SENDER_CLASSES=${NODE_MAILSERVER_SRS_SENDER_CLASSES:-envelope_sender} + - SRS_EXCLUDE_DOMAINS=${NODE_MAILSERVER_SRS_EXCLUDE_DOMAINS:-} + - SRS_SECRET=${NODE_MAILSERVER_SRS_SECRET:-} + - DEFAULT_RELAY_HOST=${NODE_MAILSERVER_DEFAULT_RELAY_HOST:-} + - RELAY_HOST=${NODE_MAILSERVER_RELAY_HOST:-} + - RELAY_PORT=${NODE_MAILSERVER_RELAY_PORT:-25} + - RELAY_USER=${NODE_MAILSERVER_RELAY_USER:-} + - RELAY_PASSWORD=${NODE_MAILSERVER_RELAY_PASSWORD:-} + healthcheck: + test: "ss --listening --tcp | grep -P 'LISTEN.+:smtp' || exit 1" + timeout: 3s + retries: 0 + hostname: ${HOSTNAME} + labels: + - SERVICE_25_CHECK_TCP=true + - SERVICE_25_NAME=${NODE_COMPOSE_SERVICE_NAME}-mailserver-25 + - SERVICE_110_IGNORE=true + - SERVICE_143_CHECK_TCP=true + - SERVICE_143_NAME=${NODE_COMPOSE_SERVICE_NAME}-mailserver-143 + - SERVICE_465_CHECK_TCP=true + - SERVICE_465_NAME=${NODE_COMPOSE_SERVICE_NAME}-mailserver-465 + - SERVICE_587_CHECK_TCP=true + - SERVICE_587_NAME=${NODE_COMPOSE_SERVICE_NAME}-mailserver-587 + - SERVICE_993_CHECK_TCP=true + - SERVICE_993_NAME=${NODE_COMPOSE_SERVICE_NAME}-mailserver-993 + - SERVICE_995_IGNORE=true + - SERVICE_4190_CHECK_TCP=true + - SERVICE_4190_NAME=${NODE_COMPOSE_SERVICE_NAME}-mailserver-4190 + ports: + - "25:25" + - "143:143" + - "465:465" + - "587:587" + - "993:993" + volumes: + - /etc/localtime:/etc/localtime:ro + - mailserver-config:/tmp/docker-mailserver/ + - mailserver-data:/var/mail + - mailserver-logs:/var/log/mail + - mailserver-state:/var/mail-state + - myos:/etc/letsencrypt:ro + restart: always + stop_grace_period: 1m +volumes: + mailserver-config: + mailserver-data: + mailserver-logs: + mailserver-state: + myos: + external: true + name: ${NODE_DOCKER_VOLUME}