Hi all , unfortunately i have to ask for your help. For quite some time i’m struggling with renewing certs. on my Mailcow instance . First cert install was all well and good but now i can’t get it to work . If someone faced that issue will be super happy if you can give me some guide how to fix this. What i’m getting is :
acme-mailcow-1 | ValueError: Challenge did not pass for mail.ilieff.bg: {'identifier': {'type': 'dns', 'value': 'mail.ilieff.bg'}, 'status': 'invalid', 'expires': '2024-04-13T18:58:26Z', 'challenges': [{'type': 'http-01', 'status': 'invalid', 'error': {'type': 'urn:ietf:params:acme:error:unauthorized', 'detail': '77.85.43.119: Invalid response from http://mail.ilieff.bg/.well-known/acme-challenge/9oMszecZzzSDkx2djwG4bZRHDwGGHYZq1E-GAgSmOqQ: 404', 'status': 403}, 'url': 'https://acme-v02.api.letsencrypt.org/acme/chall-v3/335359137257/nfaM3g', 'token': '9oMszecZzzSDkx2djwG4bZRHDwGGHYZq1E-GAgSmOqQ', 'validationRecord': [{'url': 'http://mail.ilieff.bg/.well-known/acme-challenge/9oMszecZzzSDkx2djwG4bZRHDwGGHYZq1E-GAgSmOqQ', 'hostname': 'mail.ilieff.bg', 'port': '80', 'addressesResolved': ['77.85.43.119', '2a01:5a8:308:4eb:c82d:2eff:fe59:1704'], 'addressUsed': '2a01:5a8:308:4eb:c82d:2eff:fe59:1704', 'resolverAddrs': ['A:10.0.12.87:22300', 'AAAA:10.0.12.81:27875']}, {'url': 'http://mail.ilieff.bg/.well-known/acme-challenge/9oMszecZzzSDkx2djwG4bZRHDwGGHYZq1E-GAgSmOqQ', 'hostname': 'mail.ilieff.bg', 'port': '80', 'addressesResolved': ['77.85.43.119', '2a01:5a8:308:4eb:c82d:2eff:fe59:1704'], 'addressUsed': '77.85.43.119', 'resolverAddrs': ['A:10.0.12.87:22300', 'AAAA:10.0.12.81:27875']}], 'validated': '2024-04-06T18:58:29Z'}]}
acme-mailcow-1 | Sat Apr 6 21:58:43 EEST 2024 - Failed to obtain certificate /var/lib/acme/mail.ilieff.bg/cert.pem for domains 'mail.ilieff.bg'
Bellow i will attach my config :
`# ——————————
mailcow web ui configuration
——————————
example.org is not a valid hostname, use a fqdn here.
Default admin user is “admin”
Default password is “moohoo”
MAILCOW_HOSTNAME=mail.ilieff.bg
Password hash algorithm
Only certain password hash algorithm are supported. For a fully list of supported schemes,
MAILCOW_PASS_SCHEME=BLF-CRYPT
——————————
SQL database configuration
——————————
DBNAME=mailcow
DBUSER=mailcow
Please use long, random alphanumeric strings (A-Za-z0-9)
DBPASS=
DBROOT=
——————————
HTTP/S Bindings
——————————
You should use HTTPS, but in case of SSL offloaded reverse proxies:
Might be important: This will also change the binding within the container.
If you use a proxy within Docker, point it to the ports you set below.
Do not use IP😛ORT in HTTP(S)BIND or HTTP(S)PORT
IMPORTANT: Do not use port 8081, 9081 or 65510!
Example: HTTP_BIND=1.2.3.4
For IPv4 leave it as it is: HTTP_BIND= & HTTPS_PORT=
HTTP_PORT=80
HTTP_BIND=
HTTPS_PORT=443
HTTPS_BIND=
——————————
Other bindings
——————————
You should leave that alone
Format: 11.22.33.44:25 or 12.34.56.78:465 etc.
SMTP_PORT=25
SMTPS_PORT=465
SUBMISSION_PORT=587
IMAP_PORT=143
IMAPS_PORT=993
POP_PORT=110
POPS_PORT=995
SIEVE_PORT=4190
DOVEADM_PORT=127.0.0.1:19991
SQL_PORT=127.0.0.1:13306
SOLR_PORT=127.0.0.1:18983
REDIS_PORT=127.0.0.1:7654
Your timezone
Use the column named ‘TZ identifier’ + pay attention for the column named ‘Notes’
TZ=Europe/Sofia
Fixed project name
Please use lowercase letters only
COMPOSE_PROJECT_NAME=mailcowdockerized
Used Docker Compose version
Switch here between native (compose plugin) and standalone
For more informations take a look at the mailcow docs regarding the configuration options.
Normally this should be untouched but if you decided to use either of those you can switch it manually here.
Please be aware that at least one of those variants should be installed on your machine or mailcow will fail.
DOCKER_COMPOSE_VERSION=standalone
Set this to “allow” to enable the anyone pseudo user. Disabled by default.
When enabled, ACL can be created, that apply to “All authenticated users”
This should probably only be activated on mail hosts, that are used exclusivly by one organisation.
Otherwise a user might share data with too many other users.
ACL_ANYONE=disallow
Garbage collector cleanup
Deleted domains and mailboxes are moved to /var/vmail/_garbage/timestamp_sanitizedstring
How long should objects remain in the garbage until they are being deleted? (value in minutes)
Check interval is hourly
MAILDIR_GC_TIME=7200
Additional SAN for the certificate
#
You can use wildcard records to create specific names for every domain you add to mailcow.
Example: Add domains “example.com” and “example.net” to mailcow, change ADDITIONAL_SAN to a value like:
#ADDITIONAL_SAN=imap.,smtp.
This will expand the certificate to “imap.example.com”, “smtp.example.com”, “imap.example.net”, “smtp.example.net”
plus every domain you add in the future.
#
You can also just add static names…
#ADDITIONAL_SAN=srv1.example.net
…or combine wildcard and static names:
#ADDITIONAL_SAN=imap.*,srv1.example.com
#
#ADDITIONAL_SAN=ilieff.bg,smtp.ilieff.bg,mail.ilieff.bg
ADDITIONAL_SAN=
Additional server names for mailcow UI
#
Specify alternative addresses for the mailcow UI to respond to
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.
If the server name does not match a known site, Nginx decides by best-guess and may redirect users to the wrong web root.
You can understand this as server_name directive in Nginx.
Comma separated list without spaces! Example: ADDITIONAL_SERVER_NAMES=a.b.c,d.e.f
ADDITIONAL_SERVER_NAMES=
Skip running ACME (acme-mailcow, Let’s Encrypt certs) - y/n
SKIP_LETS_ENCRYPT=n
Create seperate certificates for all domains - y/n
this will allow adding more than 100 domains, but some email clients will not be able to connect with alternative hostnames
ENABLE_SSL_SNI=n
Skip IPv4 check in ACME container - y/n
SKIP_IP_CHECK=y
Skip HTTP verification in ACME container - y/n
SKIP_HTTP_VERIFICATION=y
Skip ClamAV (clamd-mailcow) anti-virus (Rspamd will auto-detect a missing ClamAV container) - y/n
SKIP_CLAMD=n
Skip SOGo: Will disable SOGo integration and therefore webmail, DAV protocols and ActiveSync support (experimental, unsupported, not fully implemented) - y/n
SKIP_SOGO=n
Skip Solr on low-memory systems or if you do not want to store a readable index of your mails in solr-vol-1.
SKIP_SOLR=n
Solr heap size in MB, there is no recommendation, please see Solr docs.
Solr is a prone to run OOM and should be monitored. Unmonitored Solr setups are not recommended.
SOLR_HEAP=2048
Allow admins to log into SOGo as email user (without any password)
ALLOW_ADMIN_EMAIL_LOGIN=n
Enable watchdog (watchdog-mailcow) to restart unhealthy containers
USE_WATCHDOG=y
Send watchdog notifications by mail (sent from watchdog@MAILCOW_HOSTNAME)
CAUTION:
1. You should use external recipients
2. Mails are sent unsigned (no DKIM)
3. If you use DMARC, create a separate DMARC policy (“v=DMARC1; p=none;” in _dmarc.MAILCOW_HOSTNAME)
Multiple rcpts allowed, NO quotation marks, NO spaces
#WATCHDOG_NOTIFY_EMAIL=a@example.com,b@example.com,c@example.com
WATCHDOG_NOTIFY_EMAIL=chris@ilieff.bg,tony@ilieff.bg
Notify about banned IP (includes whois lookup)
WATCHDOG_NOTIFY_BAN=y
Subject for watchdog mails. Defaults to “Watchdog ALERT” followed by the error message.
#WATCHDOG_SUBJECT=
Checks if mailcow is an open relay. Requires a SAL. More checks will follow.
No data is collected. Opt-in and anonymous.
Will only work with unmodified mailcow setups.
WATCHDOG_EXTERNAL_CHECKS=y
Enable watchdog verbose logging
WATCHDOG_VERBOSE=n
Max log lines per service to keep in Redis logs
LOG_LINES=9999
Internal IPv4 /24 subnet, format n.n.n (expands to n.n.n.0/24)
IPV4_NETWORK=172.22.1
Internal IPv6 subnet in fc00::/7
IPV6_NETWORK=fd4d:6169:6c63:6f77::/64
Use this IPv4 for outgoing connections (SNAT)
#SNAT_TO_SOURCE=
Use this IPv6 for outgoing connections (SNAT)
#SNAT6_TO_SOURCE=
Create or override an API key for the web UI
You must define API_ALLOW_FROM, which is a comma separated list of IPs
An API key defined as API_KEY has read-write access
An API key defined as API_KEY_READ_ONLY has read-only access
Allowed chars for API_KEY and API_KEY_READ_ONLY: a-z, A-Z, 0-9, -
You can define API_KEY and/or API_KEY_READ_ONLY
#API_KEY=
#API_KEY_READ_ONLY=
#API_ALLOW_FROM=172.22.1.1,127.0.0.1
mail_home is ~/Maildir
MAILDIR_SUB=Maildir
SOGo session timeout in minutes
SOGO_EXPIRE_SESSION=60
DOVECOT_MASTER_USER and DOVECOT_MASTER_PASS must both be provided. No special chars.
Empty by default to auto-generate master user and password on start.
LEAVE EMPTY IF UNSURE
DOVECOT_MASTER_USER=
LEAVE EMPTY IF UNSURE
DOVECOT_MASTER_PASS=
Let’s Encrypt registration contact information
Optional: Leave empty for none
This value is only used on first order!
Setting it at a later point will require the following steps:
ACME_CONTACT=chris@ilieff.bg,tony@ilieff.bg
WebAuthn device manufacturer verification
After setting WEBAUTHN_ONLY_TRUSTED_VENDORS=y only devices from trusted manufacturers are allowed
root certificates can be placed for validation under mailcow-dockerized/data/web/inc/lib/WebAuthn/rootCertificates
WEBAUTHN_ONLY_TRUSTED_VENDORS=n
Spamhaus Data Query Service Key
Optional: Leave empty for none
Enter your key here if you are using a blocked ASN (OVH, AWS, Cloudflare e.g) for the unregistered Spamhaus Blocklist.
If empty, it will completely disable Spamhaus blocklists if it detects that you are running on a server using a blocked AS.
Otherwise it will work normally.
SPAMHAUS_DQS_KEY=
Send notifications to a webhook URL that receives a POST request with the content type “application/json”.
You can use this to send notifications to services like Discord, Slack and others.
#WATCHDOG_NOTIFY_WEBHOOK=https://discord.com/api/webhooks/XXXXXXXXXXXXXXXXXXX/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
JSON body included in the webhook POST request. Needs to be in single quotes.
Following variables are available: SUBJECT, BODY
#WATCHDOG_NOTIFY_WEBHOOK_BODY=‘{“username”: “mailcow Watchdog”, “content”: “${SUBJECT}\n${BODY}”}’
Send a notification when the watchdog is started.
WATCHDOG_NOTIFY_START=y
Skip Unbound (DNS Resolver) Healthchecks (NOT Recommended!) - y/n
SKIP_UNBOUND_HEALTHCHECK=n
Prevent netfilter from setting an iptables/nftables rule to isolate the mailcow docker network - y/n
CAUTION: Disabling this may expose container ports to other neighbors on the same subnet, even if the ports are bound to localhost
DISABLE_NETFILTER_ISOLATION_RULE=n
`