From ea7348ef46837ecc9ec1718c917ed322f954f5e9 Mon Sep 17 00:00:00 2001 From: timo Date: Sat, 6 May 2017 21:59:23 +0200 Subject: [PATCH 01/18] Added chapter on 'Common Problems' --- docs/images/mailcow-backupmx.png | Bin 0 -> 6740 bytes docs/troubles.md | 54 +++++++++++++++++++++++++++++++ mkdocs.yml | 1 + 3 files changed, 55 insertions(+) create mode 100644 docs/images/mailcow-backupmx.png create mode 100644 docs/troubles.md diff --git a/docs/images/mailcow-backupmx.png b/docs/images/mailcow-backupmx.png new file mode 100644 index 0000000000000000000000000000000000000000..889b2f7a1212b02bc3aa8954db4dedda8d9a6144 GIT binary patch literal 6740 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 literal 0 HcmV?d00001 diff --git a/docs/troubles.md b/docs/troubles.md new file mode 100644 index 000000000..d39ee7579 --- /dev/null +++ b/docs/troubles.md @@ -0,0 +1,54 @@ +Here we list common problems and possible solutions: + +## Mail loops back to myself + +Please check in your mailcow UI if you made the domain a **backup MX**: + +![Check your MX Backup settings](images/mailcow-backupmx.png) + +## I can receive but not send mails + +There are a lot of things that could prevent you from sending mail: + +- Check if your IP is on any blacklists. You could use [dnsbl.info](http://www.dnsbl.info/) or any other similar service to check for your IP. +- There are some consumer ISP routers out there, that block mailports for non whitelisted domains. Please check if you can reach your server on the ports `465` or `587`: + +``` +# telnet 74.125.133.27 465 +Trying 74.125.133.27... +Connected to 74.125.133.27. +Escape character is '^]'. +``` + +## My mails are identified as Spam + +Please read our guide on [DNS configuration](dns.md). + +## docker-compose throws weird erros + +... like: + +- `ERROR: Invalid interpolation format ...` +- `AttributeError: 'NoneType' object has no attribute 'keys'`. +- `ERROR: In file './docker-compose.yml' service 'version' doesn't have any configuration options`. + +When you encounter one or similar messages while trying to run mailcow: dockerized please check if you have the **latest** version of **Docker** and **docker-compose** + +## Container XY is unhealthy + +This error tries to tell you that one of the (health) conditions for a certain container are not met. Therefore it can't be started. This can have several reasons, the most common one is an updated git clone but old docker image or vice versa. + +A wrong configured firewall could also cause such a failure. The containers need to be able to talk to each other over the network 172.22.1.1/24. + +It might also be wrongly linked file (i.e. SSL certificate) that prevents a crucial container (nginx) from starting, so always check your logs to get an Idea where your problem is coming from. + + +## Address already in use + +If you get an error message like: + +``` +ERROR: for postfix-mailcow Cannot start service postfix-mailcow: driver failed programming external connectivity on endpoint mailcowdockerized_postfix-mailcow_1: Error starting userland proxy: listen tcp 0.0.0.0:25: bind: address already in use +``` + +while trying to start / install mailcow: dockerized, make sure you've followed our section on the [prerequisites](requirements/#firewall-ports). diff --git a/mkdocs.yml b/mkdocs.yml index 4632fb050..186fbe284 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -34,6 +34,7 @@ pages: - 'Attach a Container': 'attach_service.md' - 'Reset Passwords': 'reset_pw.md' - 'Remove Persistent Data': 'rm_volumes.md' + - 'Common Problems': 'troubles.md' - 'Usage & Examples': - 'mailcow UI': - 'Configuration': 'mailcow_ui.md' From 8e4920857e6c0bc6f94f9a69fb433d57744478f2 Mon Sep 17 00:00:00 2001 From: broedli Date: Sat, 6 May 2017 22:09:28 +0200 Subject: [PATCH 02/18] Clarified storage needs --- docs/requirements.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/requirements.md b/docs/requirements.md index 5a3a0b4af..1d0a71334 100644 --- a/docs/requirements.md +++ b/docs/requirements.md @@ -12,12 +12,12 @@ Before you run **mailcow: dockerized**, there are a few requirements that you sh Please make sure that your system has at least the following resources: -| Resource | mailcow: dockerized | -| ----------------------- | ------------------- | -| CPU | 1 GHz | -| RAM                     | 1 GiB         | -| Disk | 5 GiB | -| System Type | x86_64 | +| Resource | mailcow: dockerized | +| ----------------------- | --------------------- | +| CPU | 1 GHz | +| RAM                     | 1 GiB         | +| Disk | 5 GiB (without mails) | +| System Type | x86_64 | ## Firewall & Ports From 5cc5190f6b4b5e04de8e32f0e7b99cb71b81d854 Mon Sep 17 00:00:00 2001 From: timo Date: Sat, 6 May 2017 22:32:10 +0200 Subject: [PATCH 03/18] Added missing TFA section --- docs/reset_pw.md | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/docs/reset_pw.md b/docs/reset_pw.md index 0e1cfe705..e4b2b6513 100644 --- a/docs/reset_pw.md +++ b/docs/reset_pw.md @@ -7,12 +7,6 @@ cd mailcow_path bash mailcow-reset-admin.sh ``` -## Remove Two-Factor Authentication - -``` - -``` - ## Reset MySQL Passwords Stop the stack by running `docker-compose stop`. @@ -26,6 +20,8 @@ docker-compose run --rm --entrypoint '/bin/sh -c "gosu mysql mysqld --skip-grant ### 1\. Find database name ``` +# source mailcow.conf +# docker-compose exec mysql-mailcow mysql -u${DBUSER} -p${DBPASS} ${DBNAME} MariaDB [(none)]> show databases; +--------------------+ | Database | @@ -57,3 +53,12 @@ MariaDB [(none)]> UPDATE mysql.user SET authentication_string = PASSWORD('gotr00 MariaDB [(none)]> UPDATE mysql.user SET authentication_string = PASSWORD('mookuh'), password = PASSWORD('mookuh') WHERE User = 'mailcow' AND Host = '%'; MariaDB [(none)]> FLUSH PRIVILEGES; ``` + +## Remove Two-Factor Authentication + +This works similar to resetting a MySQL password, now we do it from the host without connecting to the MySQL cli: + +``` +source mailcow.conf +docker-compose exec mysql-mailcow mysql -u${DBUSER} -p${DBPASS} ${DBNAME} -e DELETE FROM tfa WHERE username='YOUR_USERNAME' +``` From ead346bccd1bb7d65dc40455dac23b85abdf825b Mon Sep 17 00:00:00 2001 From: timo Date: Sat, 6 May 2017 22:51:39 +0200 Subject: [PATCH 04/18] Renamed files --- ...ach_service.md => debug-attach_service.md} | 0 .../{troubles.md => debug-common_problems.md} | 0 docs/{debug_logs.md => debug-logs.md} | 0 docs/{reset_pw.md => debug-reset_pw.md} | 0 docs/{rm_volumes.md => debug-rm_volumes.md} | 0 .../{local_mta.md => firststeps-local_mta.md} | 0 .../{relayhost.md => firststeps-relayhost.md} | 0 docs/{rp.md => firststeps-rp.md} | 0 .../{rspamd_ui.md => firststeps-rspamd_ui.md} | 0 ...sender_rcv.md => firststeps-sender_rcv.md} | 0 docs/{ssl.md => firststeps-ssl.md} | 0 docs/{syslog.md => firststeps-syslog.md} | 0 docs/{update.md => install-update.md} | 0 docs/{mc14_migrate.md => migrate-mc014.md} | 0 docs/{dns.md => prerequesite-dns.md} | 0 ...requirements.md => prerequesite-system.md} | 0 docs/{gogs.md => third_party-gogs.md} | 0 ...{portainer.md => third_party-portainer.md} | 0 ...{roundcube.md => third_party-roundcube.md} | 0 docs/{80_to_443.md => u_e-80_to_443.md} | 0 ...r_config.md => u_e-autodiscover_config.md} | 0 ...ildir.md => u_e-backup_restore-maildir.md} | 0 .../{mysql.md => u_e-backup_restore-mysql.md} | 0 ...{change_config.md => u_e-change_config.md} | 0 docs/{deinstall.md => u_e-deinstall.md} | 0 ...iles.md => u_e-docker-cust_dockerfiles.md} | 0 ...h_compl.md => u_e-docker-dc_bash_compl.md} | 0 docs/{bl_wl.md => u_e-mailcow_ui-bl_wl.md} | 0 ...mailcow_ui.md => u_e-mailcow_ui-config.md} | 0 ...amalias.md => u_e-mailcow_ui-spamalias.md} | 0 ...filter.md => u_e-mailcow_ui-spamfilter.md} | 0 .../{tagging.md => u_e-mailcow_ui-tagging.md} | 0 docs/{tfa.md => u_e-mailcow_ui-tfa.md} | 0 ...aders.md => u_e-postfix-anonym_headers.md} | 0 ..._e-postfix-disable_sender_verification.md} | 0 docs/{redis.md => u_e-redis.md} | 0 docs/{rspamd.md => u_e-rspamd.md} | 0 docs/{why_bind9.md => u_e-why_bind9.md} | 0 mkdocs.yml | 71 ++++++++++--------- 39 files changed, 36 insertions(+), 35 deletions(-) rename docs/{attach_service.md => debug-attach_service.md} (100%) rename docs/{troubles.md => debug-common_problems.md} (100%) rename docs/{debug_logs.md => debug-logs.md} (100%) rename docs/{reset_pw.md => debug-reset_pw.md} (100%) rename docs/{rm_volumes.md => debug-rm_volumes.md} (100%) rename docs/{local_mta.md => firststeps-local_mta.md} (100%) rename docs/{relayhost.md => firststeps-relayhost.md} (100%) rename docs/{rp.md => firststeps-rp.md} (100%) rename docs/{rspamd_ui.md => firststeps-rspamd_ui.md} (100%) rename docs/{sender_rcv.md => firststeps-sender_rcv.md} (100%) rename docs/{ssl.md => firststeps-ssl.md} (100%) rename docs/{syslog.md => firststeps-syslog.md} (100%) rename docs/{update.md => install-update.md} (100%) rename docs/{mc14_migrate.md => migrate-mc014.md} (100%) rename docs/{dns.md => prerequesite-dns.md} (100%) rename docs/{requirements.md => prerequesite-system.md} (100%) rename docs/{gogs.md => third_party-gogs.md} (100%) rename docs/{portainer.md => third_party-portainer.md} (100%) rename docs/{roundcube.md => third_party-roundcube.md} (100%) rename docs/{80_to_443.md => u_e-80_to_443.md} (100%) rename docs/{autodiscover_config.md => u_e-autodiscover_config.md} (100%) rename docs/{backup_maildir.md => u_e-backup_restore-maildir.md} (100%) rename docs/{mysql.md => u_e-backup_restore-mysql.md} (100%) rename docs/{change_config.md => u_e-change_config.md} (100%) rename docs/{deinstall.md => u_e-deinstall.md} (100%) rename docs/{cust_dockerfiles.md => u_e-docker-cust_dockerfiles.md} (100%) rename docs/{dc_bash_compl.md => u_e-docker-dc_bash_compl.md} (100%) rename docs/{bl_wl.md => u_e-mailcow_ui-bl_wl.md} (100%) rename docs/{mailcow_ui.md => u_e-mailcow_ui-config.md} (100%) rename docs/{spamalias.md => u_e-mailcow_ui-spamalias.md} (100%) rename docs/{spamfilter.md => u_e-mailcow_ui-spamfilter.md} (100%) rename docs/{tagging.md => u_e-mailcow_ui-tagging.md} (100%) rename docs/{tfa.md => u_e-mailcow_ui-tfa.md} (100%) rename docs/{anonym_headers.md => u_e-postfix-anonym_headers.md} (100%) rename docs/{disable_sender_verification.md => u_e-postfix-disable_sender_verification.md} (100%) rename docs/{redis.md => u_e-redis.md} (100%) rename docs/{rspamd.md => u_e-rspamd.md} (100%) rename docs/{why_bind9.md => u_e-why_bind9.md} (100%) diff --git a/docs/attach_service.md b/docs/debug-attach_service.md similarity index 100% rename from docs/attach_service.md rename to docs/debug-attach_service.md diff --git a/docs/troubles.md b/docs/debug-common_problems.md similarity index 100% rename from docs/troubles.md rename to docs/debug-common_problems.md diff --git a/docs/debug_logs.md b/docs/debug-logs.md similarity index 100% rename from docs/debug_logs.md rename to docs/debug-logs.md diff --git a/docs/reset_pw.md b/docs/debug-reset_pw.md similarity index 100% rename from docs/reset_pw.md rename to docs/debug-reset_pw.md diff --git a/docs/rm_volumes.md b/docs/debug-rm_volumes.md similarity index 100% rename from docs/rm_volumes.md rename to docs/debug-rm_volumes.md diff --git a/docs/local_mta.md b/docs/firststeps-local_mta.md similarity index 100% rename from docs/local_mta.md rename to docs/firststeps-local_mta.md diff --git a/docs/relayhost.md b/docs/firststeps-relayhost.md similarity index 100% rename from docs/relayhost.md rename to docs/firststeps-relayhost.md diff --git a/docs/rp.md b/docs/firststeps-rp.md similarity index 100% rename from docs/rp.md rename to docs/firststeps-rp.md diff --git a/docs/rspamd_ui.md b/docs/firststeps-rspamd_ui.md similarity index 100% rename from docs/rspamd_ui.md rename to docs/firststeps-rspamd_ui.md diff --git a/docs/sender_rcv.md b/docs/firststeps-sender_rcv.md similarity index 100% rename from docs/sender_rcv.md rename to docs/firststeps-sender_rcv.md diff --git a/docs/ssl.md b/docs/firststeps-ssl.md similarity index 100% rename from docs/ssl.md rename to docs/firststeps-ssl.md diff --git a/docs/syslog.md b/docs/firststeps-syslog.md similarity index 100% rename from docs/syslog.md rename to docs/firststeps-syslog.md diff --git a/docs/update.md b/docs/install-update.md similarity index 100% rename from docs/update.md rename to docs/install-update.md diff --git a/docs/mc14_migrate.md b/docs/migrate-mc014.md similarity index 100% rename from docs/mc14_migrate.md rename to docs/migrate-mc014.md diff --git a/docs/dns.md b/docs/prerequesite-dns.md similarity index 100% rename from docs/dns.md rename to docs/prerequesite-dns.md diff --git a/docs/requirements.md b/docs/prerequesite-system.md similarity index 100% rename from docs/requirements.md rename to docs/prerequesite-system.md diff --git a/docs/gogs.md b/docs/third_party-gogs.md similarity index 100% rename from docs/gogs.md rename to docs/third_party-gogs.md diff --git a/docs/portainer.md b/docs/third_party-portainer.md similarity index 100% rename from docs/portainer.md rename to docs/third_party-portainer.md diff --git a/docs/roundcube.md b/docs/third_party-roundcube.md similarity index 100% rename from docs/roundcube.md rename to docs/third_party-roundcube.md diff --git a/docs/80_to_443.md b/docs/u_e-80_to_443.md similarity index 100% rename from docs/80_to_443.md rename to docs/u_e-80_to_443.md diff --git a/docs/autodiscover_config.md b/docs/u_e-autodiscover_config.md similarity index 100% rename from docs/autodiscover_config.md rename to docs/u_e-autodiscover_config.md diff --git a/docs/backup_maildir.md b/docs/u_e-backup_restore-maildir.md similarity index 100% rename from docs/backup_maildir.md rename to docs/u_e-backup_restore-maildir.md diff --git a/docs/mysql.md b/docs/u_e-backup_restore-mysql.md similarity index 100% rename from docs/mysql.md rename to docs/u_e-backup_restore-mysql.md diff --git a/docs/change_config.md b/docs/u_e-change_config.md similarity index 100% rename from docs/change_config.md rename to docs/u_e-change_config.md diff --git a/docs/deinstall.md b/docs/u_e-deinstall.md similarity index 100% rename from docs/deinstall.md rename to docs/u_e-deinstall.md diff --git a/docs/cust_dockerfiles.md b/docs/u_e-docker-cust_dockerfiles.md similarity index 100% rename from docs/cust_dockerfiles.md rename to docs/u_e-docker-cust_dockerfiles.md diff --git a/docs/dc_bash_compl.md b/docs/u_e-docker-dc_bash_compl.md similarity index 100% rename from docs/dc_bash_compl.md rename to docs/u_e-docker-dc_bash_compl.md diff --git a/docs/bl_wl.md b/docs/u_e-mailcow_ui-bl_wl.md similarity index 100% rename from docs/bl_wl.md rename to docs/u_e-mailcow_ui-bl_wl.md diff --git a/docs/mailcow_ui.md b/docs/u_e-mailcow_ui-config.md similarity index 100% rename from docs/mailcow_ui.md rename to docs/u_e-mailcow_ui-config.md diff --git a/docs/spamalias.md b/docs/u_e-mailcow_ui-spamalias.md similarity index 100% rename from docs/spamalias.md rename to docs/u_e-mailcow_ui-spamalias.md diff --git a/docs/spamfilter.md b/docs/u_e-mailcow_ui-spamfilter.md similarity index 100% rename from docs/spamfilter.md rename to docs/u_e-mailcow_ui-spamfilter.md diff --git a/docs/tagging.md b/docs/u_e-mailcow_ui-tagging.md similarity index 100% rename from docs/tagging.md rename to docs/u_e-mailcow_ui-tagging.md diff --git a/docs/tfa.md b/docs/u_e-mailcow_ui-tfa.md similarity index 100% rename from docs/tfa.md rename to docs/u_e-mailcow_ui-tfa.md diff --git a/docs/anonym_headers.md b/docs/u_e-postfix-anonym_headers.md similarity index 100% rename from docs/anonym_headers.md rename to docs/u_e-postfix-anonym_headers.md diff --git a/docs/disable_sender_verification.md b/docs/u_e-postfix-disable_sender_verification.md similarity index 100% rename from docs/disable_sender_verification.md rename to docs/u_e-postfix-disable_sender_verification.md diff --git a/docs/redis.md b/docs/u_e-redis.md similarity index 100% rename from docs/redis.md rename to docs/u_e-redis.md diff --git a/docs/rspamd.md b/docs/u_e-rspamd.md similarity index 100% rename from docs/rspamd.md rename to docs/u_e-rspamd.md diff --git a/docs/why_bind9.md b/docs/u_e-why_bind9.md similarity index 100% rename from docs/why_bind9.md rename to docs/u_e-why_bind9.md diff --git a/mkdocs.yml b/mkdocs.yml index 186fbe284..0e6293d46 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -14,50 +14,51 @@ markdown_extensions: pages: - 'Information & Support': 'index.md' - 'Prerequisites': - - 'Prepare Your System': 'requirements.md' - - 'DNS Setup': 'dns.md' -- 'Migrating from mailcow 0.14': 'mc14_migrate.md' + - 'Prepare Your System': 'prerequesite-system.md' + - 'DNS Setup': 'prerequesite-dns.md' +- 'Migrating from mailcow 0.14': 'migrate-mc014.md' - 'Installation & Update': - 'Installation': 'install.md' - - 'Update': 'update.md' + - 'Update': 'install-update.md' - 'First Steps (optional)': - - 'SSL': 'ssl.md' - - 'Rspamd Web UI': 'rspamd_ui.md' - - 'Reverse Proxy': 'rp.md' - - 'Setup a relayhost': 'relayhost.md' - - 'Log to Syslog': 'syslog.md' - - 'Local MTA on Docker host': 'local_mta.md' - - 'Sender and receiver model': 'sender_rcv.md' + - 'SSL': 'fiststeps-ssl.md' + - 'Rspamd Web UI': 'fiststeps-rspamd_ui.md' + - 'Reverse Proxy': 'fiststeps-rp.md' + - 'Setup a relayhost': 'fiststeps-relayhost.md' + - 'Log to Syslog': 'fiststeps-syslog.md' + - 'Local MTA on Docker host': 'fiststeps-local_mta.md' + - 'Sender and receiver model': 'fiststeps-sender_rcv.md' - 'Debugging & Troubleshooting': - 'Introduction': debug.md - - 'Logs': 'debug_logs.md' - - 'Attach a Container': 'attach_service.md' - - 'Reset Passwords': 'reset_pw.md' - - 'Remove Persistent Data': 'rm_volumes.md' - - 'Common Problems': 'troubles.md' + - 'Logs': 'debug-logs.md' + - 'Attach a Container': 'debug-attach_service.md' + - 'Reset Passwords': 'debug-reset_pw.md' + - 'Remove Persistent Data': 'debug-rm_volumes.md' + - 'Common Problems': 'debug-common_problems.md' - 'Usage & Examples': - 'mailcow UI': - - 'Configuration': 'mailcow_ui.md' - - 'Blacklist / Whitelist': 'bl_wl.md' - - 'Spamfilter': 'spamfilter.md' - - 'Temporary email aliase': 'spamalias.md' - - 'Tagging': 'tagging.md' - - 'Two-Factor Authentication': 'tfa.md' - - 'Redis': 'redis.md' - - 'Rspamd': 'rspamd.md' + - 'Configuration': 'u_e-mailcow_ui-config.md' + - 'Blacklist / Whitelist': 'u_e-mailcow_ui-bl_wl.md' + - 'Spamfilter': 'u_e-mailcow_ui-spamfilter.md' + - 'Temporary email aliase': 'u_e-mailcow_ui-spamalias.md' + - 'Tagging': 'u_e-mailcow_ui-tagging.md' + - 'Two-Factor Authentication': 'u_e-mailcow_ui-tfa.md' + - 'Redis': 'u_e-redis.md' + - 'Rspamd': 'u_e-rspamd.md' - 'Postfix': - - 'Anonymize Headers': 'anonym_headers.md' - - 'Disable Sender Addresses Verification': 'disable_sender_verification.md' - - 'Why bind9?': 'why_bind9.md' + - 'Anonymize Headers': 'u_e-postfix-anonym_headers.md' + - 'Disable Sender Addresses Verification': 'u_e-postfix-disable_sender_verification.md' + - 'Docker': + - 'Customize Dockerfiles': 'u_e-docker-cust_dockerfiles.md' + - 'Docker Compose Bash Completion': 'u_e-docker-dc_bash_compl.md' + - 'Why bind9?': 'u_e-why_bind9.md' - 'Backup & Restore': - - 'Backup Maildir': 'backup_maildir.md' - - 'MySQL': 'mysql.md' - - 'Autodiscover / Autoconfig': 'autodiscover_config.md' - - 'Redirect HTTP to HTTPS': '80_to_443.md' - - 'Adjust Service Configurations': 'change_config.md' - - 'Customize Dockerfiles': 'cust_dockerfiles.md' - - 'Docker Compose Bash Completion': 'dc_bash_compl.md' - - 'Deinstall': 'deinstall.md' + - 'Backup Maildir': 'u_e-backup_restore-maildir.md' + - 'MySQL': 'u_e-backup_restore-mysql.md' + - 'Autodiscover / Autoconfig': 'u_e-autodiscover_config.md' + - 'Redirect HTTP to HTTPS': 'u_e-80_to_443.md' + - 'Adjust Service Configurations': 'u_e-change_config.md' + - 'Deinstall': 'u_e-deinstall.md' - 'Third party apps': - 'Roundcube': 'roundcube.md' - 'Portainer': 'portainer.md' From 218deadaf4f366344b9d1a9ae9da3b02744d83e8 Mon Sep 17 00:00:00 2001 From: timo Date: Sat, 6 May 2017 23:00:41 +0200 Subject: [PATCH 05/18] Corrected some links --- docs/debug-common_problems.md | 4 ++-- docs/firststeps-sender_rcv.md | 2 +- docs/migrate-mc014.md | 2 +- docs/prerequesite-system.md | 2 +- docs/u_e-mailcow_ui-bl_wl.md | 2 +- docs/u_e-mailcow_ui-spamfilter.md | 4 ++-- docs/u_e-redis.md | 2 +- mkdocs.yml | 20 ++++++++++---------- 8 files changed, 19 insertions(+), 19 deletions(-) diff --git a/docs/debug-common_problems.md b/docs/debug-common_problems.md index d39ee7579..8f8d1cafc 100644 --- a/docs/debug-common_problems.md +++ b/docs/debug-common_problems.md @@ -22,7 +22,7 @@ Escape character is '^]'. ## My mails are identified as Spam -Please read our guide on [DNS configuration](dns.md). +Please read our guide on [DNS configuration](prerequesite-dns.md). ## docker-compose throws weird erros @@ -51,4 +51,4 @@ If you get an error message like: ERROR: for postfix-mailcow Cannot start service postfix-mailcow: driver failed programming external connectivity on endpoint mailcowdockerized_postfix-mailcow_1: Error starting userland proxy: listen tcp 0.0.0.0:25: bind: address already in use ``` -while trying to start / install mailcow: dockerized, make sure you've followed our section on the [prerequisites](requirements/#firewall-ports). +while trying to start / install mailcow: dockerized, make sure you've followed our section on the [prerequisites](prerequesite-system/#firewall-ports). diff --git a/docs/firststeps-sender_rcv.md b/docs/firststeps-sender_rcv.md index dd3e2e5db..abbc2acfe 100644 --- a/docs/firststeps-sender_rcv.md +++ b/docs/firststeps-sender_rcv.md @@ -1,6 +1,6 @@ When a mailbox is created, a user is allowed to send mail from and receive mail for his own mailbox address. - Mailbox me@example.org is created. example.org is a primary domain. + Mailbox me@example.org is created. example.org is a primary domain. Note: a mailbox cannot be created in an alias domain. me@example.org is only known as me@example.org. diff --git a/docs/migrate-mc014.md b/docs/migrate-mc014.md index 73b95059d..818837844 100644 --- a/docs/migrate-mc014.md +++ b/docs/migrate-mc014.md @@ -4,7 +4,7 @@ !!! info Also note that this guide doesn't touch on the users settings like *Spamlevels*, *TLS Settings*, etc. nor the export / import of your roundcube or SOGo settings. - Lastly please check the section on how to [import / restore](backup_maildir/#restore) your maildir backup to get an idea how to migrate your mails. + Lastly please check the section on how to [import / restore](u_e-backup_restore-maildir/#restore) your maildir backup to get an idea how to migrate your mails. ## Create mailcow db backups diff --git a/docs/prerequesite-system.md b/docs/prerequesite-system.md index 5a3a0b4af..253f0787e 100644 --- a/docs/prerequesite-system.md +++ b/docs/prerequesite-system.md @@ -5,7 +5,7 @@ Before you run **mailcow: dockerized**, there are a few requirements that you sh !!! info - Mailcow: dockerized requires [some ports](#default-ports) to be open for incomming connections, so make sure that your firewall is not bloking these. Also make sure that no other application is interferring with mailcow's configuration. - - A correct DNS setup is crucial to every good mailserver setup, so please make sure you got at least the [basics](dns/#the-minimal-dns-configuration) covered bevore you begin! + - A correct DNS setup is crucial to every good mailserver setup, so please make sure you got at least the [basics](prerequesite-dns/#the-minimal-dns-configuration) covered bevore you begin! - Make sure that your system has a correct date and [time setup](#date-and-time). This is crucial for stuff like two factor TOTP authentication. ## Minimum System Resources diff --git a/docs/u_e-mailcow_ui-bl_wl.md b/docs/u_e-mailcow_ui-bl_wl.md index c7ac71790..e78e7f53d 100644 --- a/docs/u_e-mailcow_ui-bl_wl.md +++ b/docs/u_e-mailcow_ui-bl_wl.md @@ -4,4 +4,4 @@ To add or edit an entry to your **domain wide** filter table, login to your *mai !!! info - Be aware that a user [may override](spamfilter.md) this setting by setting his own black- and whitelist! + Be aware that a user [may override](u_e-mailcow_ui-spamalias.md) this setting by setting his own black- and whitelist! diff --git a/docs/u_e-mailcow_ui-spamfilter.md b/docs/u_e-mailcow_ui-spamfilter.md index 37c39b490..e41d4b19f 100644 --- a/docs/u_e-mailcow_ui-spamfilter.md +++ b/docs/u_e-mailcow_ui-spamfilter.md @@ -3,6 +3,6 @@ A mailbox user may adjust the spam filter and black- / whitelist settings for hi ![Where to adjust the users spam, black- and whitelist settings](images/mailcow-spamfilter.png) !!! info - For global adjustments on your spam filter please check our section on [Rspamd](rspamd.md). + For global adjustments on your spam filter please check our section on [Rspamd](u_e-rspamd.md). - For a domain wide black- and whitelist please check our guide on [Black / Whitelist](bl_wl.md) + For a domain wide black- and whitelist please check our guide on [Black / Whitelist](u_e-mailcow_ui-bl_wl.md) diff --git a/docs/u_e-redis.md b/docs/u_e-redis.md index 4f9d3be42..d3f23b303 100644 --- a/docs/u_e-redis.md +++ b/docs/u_e-redis.md @@ -30,7 +30,7 @@ OK Get all keys matching your pattern: ``` - +KEYS * ``` ##### PING diff --git a/mkdocs.yml b/mkdocs.yml index 0e6293d46..be973b7c8 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -21,13 +21,13 @@ pages: - 'Installation': 'install.md' - 'Update': 'install-update.md' - 'First Steps (optional)': - - 'SSL': 'fiststeps-ssl.md' - - 'Rspamd Web UI': 'fiststeps-rspamd_ui.md' - - 'Reverse Proxy': 'fiststeps-rp.md' - - 'Setup a relayhost': 'fiststeps-relayhost.md' - - 'Log to Syslog': 'fiststeps-syslog.md' - - 'Local MTA on Docker host': 'fiststeps-local_mta.md' - - 'Sender and receiver model': 'fiststeps-sender_rcv.md' + - 'SSL': 'firststeps-ssl.md' + - 'Rspamd Web UI': 'firststeps-rspamd_ui.md' + - 'Reverse Proxy': 'firststeps-rp.md' + - 'Setup a relayhost': 'firststeps-relayhost.md' + - 'Log to Syslog': 'firststeps-syslog.md' + - 'Local MTA on Docker host': 'firststeps-local_mta.md' + - 'Sender and receiver model': 'firststeps-sender_rcv.md' - 'Debugging & Troubleshooting': - 'Introduction': debug.md - 'Logs': 'debug-logs.md' @@ -60,9 +60,9 @@ pages: - 'Adjust Service Configurations': 'u_e-change_config.md' - 'Deinstall': 'u_e-deinstall.md' - 'Third party apps': - - 'Roundcube': 'roundcube.md' - - 'Portainer': 'portainer.md' - - 'Gogs': 'gogs.md' + - 'Roundcube': 'third_party-roundcube.md' + - 'Portainer': 'third_party-portainer.md' + - 'Gogs': 'third_party-gogs.md' extra: logo: 'images/logo.svg' palette: From 3b977e5186ee4a94c394c868a8c220457f2a882f Mon Sep 17 00:00:00 2001 From: Aleksandr Kliushenok Date: Sun, 7 May 2017 11:37:54 +0300 Subject: [PATCH 06/18] Fixed DKIM selector in example In the current version the choice DKIM selector is not available. And when you create a DKIM key, it is created with a selector "dkim" --- docs/prerequesite-dns.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/prerequesite-dns.md b/docs/prerequesite-dns.md index ef573eb06..7064584c4 100644 --- a/docs/prerequesite-dns.md +++ b/docs/prerequesite-dns.md @@ -37,7 +37,7 @@ In the example DNS zone file snippet below, a simple **SPF** TXT record is used It is highly recommended to create a **DKIM** TXT record in your mailcow UI and set the corresponding TXT record in your DNS records. Please refer to [OpenDKIM](http://www.opendkim.org) for further reading. ``` -default._domainkey IN TXT "v=DKIM1; k=rsa; t=s; s=email; p=..." +dkim._domainkey IN TXT "v=DKIM1; k=rsa; t=s; s=email; p=..." ``` The last step in protecting yourself and others is the implementation of a **DMARC** TXT record, for example by using the [DMARC Assistant](http://www.kitterman.com/dmarc/assistant.html) ([check](https://dmarcian.com/dmarc-inspector/google.com)). From 0b13f1d8dc03a4ea0c6f1fb0c3f351aec9e0ee06 Mon Sep 17 00:00:00 2001 From: Brad Date: Mon, 8 May 2017 13:47:45 +0100 Subject: [PATCH 07/18] Fix missing https:// in forum link --- docs/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/index.md b/docs/index.md index dadf351d3..1d36fa715 100644 --- a/docs/index.md +++ b/docs/index.md @@ -17,7 +17,7 @@ For commercial support contact [info@servercow.de](mailto:info@servercow.de). ### Community support - IRC @ [Freenode, #mailcow](irc://irc.freenode.org:6667/mailcow) -- Forum @ [forum.mailcow.email](forum.mailcow.email) +- Forum @ [forum.mailcow.email](https://forum.mailcow.email) - GitHub @ [mailcow/mailcow-dockerized](https://github.com/mailcow/mailcow-dockerized) ## Screenshots From 5b693efe18b6ee94fdd1ea407b754107c6a1aade Mon Sep 17 00:00:00 2001 From: James Smith Date: Mon, 8 May 2017 17:18:53 +0100 Subject: [PATCH 08/18] Update debug-reset_pw.md Dose not work without the sql in quote's --- docs/debug-reset_pw.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/debug-reset_pw.md b/docs/debug-reset_pw.md index e4b2b6513..c92d9de0a 100644 --- a/docs/debug-reset_pw.md +++ b/docs/debug-reset_pw.md @@ -60,5 +60,5 @@ This works similar to resetting a MySQL password, now we do it from the host wit ``` source mailcow.conf -docker-compose exec mysql-mailcow mysql -u${DBUSER} -p${DBPASS} ${DBNAME} -e DELETE FROM tfa WHERE username='YOUR_USERNAME' +docker-compose exec mysql-mailcow mysql -u${DBUSER} -p${DBPASS} ${DBNAME} -e "DELETE FROM tfa WHERE username='YOUR_USERNAME';" ``` From 23fd8721610c1976016157807a34e7e64273bf9f Mon Sep 17 00:00:00 2001 From: timo Date: Tue, 9 May 2017 16:21:28 +0200 Subject: [PATCH 09/18] Added Chapters on Dovecot and Troubleshooting --- docs/debug-common_problems.md | 17 +++++++++++++ docs/u_e-dovecot-expunge.md | 44 ++++++++++++++++++++++++++++++++ docs/u_e-dovecot-more.md | 48 +++++++++++++++++++++++++++++++++++ mkdocs.yml | 7 +++-- 4 files changed, 114 insertions(+), 2 deletions(-) create mode 100644 docs/u_e-dovecot-expunge.md create mode 100644 docs/u_e-dovecot-more.md diff --git a/docs/debug-common_problems.md b/docs/debug-common_problems.md index 8f8d1cafc..66d79ef86 100644 --- a/docs/debug-common_problems.md +++ b/docs/debug-common_problems.md @@ -52,3 +52,20 @@ ERROR: for postfix-mailcow Cannot start service postfix-mailcow: driver failed ``` while trying to start / install mailcow: dockerized, make sure you've followed our section on the [prerequisites](prerequesite-system/#firewall-ports). + +## XYZ can't connect to ... + +Please check your local firewall! + +If you experience connection problems from home, please check your ISP router's firewall too, some of them block mail traffic on the *SMTP* (587) or *SMTPS* (465) ports. It could also be, that your ISP is blocking the ports for *SUBMISSION* (25). + +While Linux users can chose from a variety of tools[^1] to check if a port is open, the Windows user has only the command `telnet host port` available by default (and it has to be activated since Windows Vista). + +To enable telnet on a Windows after Vista please check this [guide](https://social.technet.microsoft.com/wiki/contents/articles/910.windows-7-enabling-telnet-client.aspx) or enter the following command in an terminal **with administrator priviliges**: + +``` +dism /online /Enable-Feature /FeatureName:TelnetClient +``` + + +[^1]: [netcat](https://linux.die.net/man/1/nc), [nmap](https://linux.die.net/man/1/nmap), [openssl](https://wiki.openssl.org/index.php/Manual:S_client(1)), [telnet](https://linux.die.net/man/1/telnet), etc. diff --git a/docs/u_e-dovecot-expunge.md b/docs/u_e-dovecot-expunge.md new file mode 100644 index 000000000..19cd21a14 --- /dev/null +++ b/docs/u_e-dovecot-expunge.md @@ -0,0 +1,44 @@ +If you want to delete old mails out of the `.Junk` or `.Trash` folders or maybe delete all read mails that are older than a certain amount of time you may use dovecot's tool doveadm [man doveadm-expunge](https://wiki.dovecot.org/Tools/Doveadm/Expunge). + +## The manual way + +That said, let's dive in: + +Delete a user's mails inside the junk folder that **are read** and **older** than 4 hours + +``` +docker-compose exec dovecot-mailcow doveadm expunge -u 'mailbox@example.com' mailbox 'Junk' SEEN not SINCE 4h +``` + +Delete **all** user's mails in the junk folder that are **older** than 7 days + +``` +docker-compose exec dovecot-mailcow doveadm expunge -A mailbox 'Junk' savedbefore 7d +``` + +Delete mails inside a custom folder **inside** a user's inbox that are **not** flagged and **older** than 2 weeks + +``` +docker-compose exec dovecot-mailcow doveadm expunge -u 'mailbox@example.com' mailbox 'INBOX/custom-folder' not FLAGGED not SINCE 2w +``` + +!!! info + For possible [time spans](https://wiki.dovecot.org/Tools/Doveadm/SearchQuery#section_date_specification) or [search keys](https://wiki.dovecot.org/Tools/Doveadm/SearchQuery#section_search_keys) have a look at [man doveadm-search-query](https://wiki.dovecot.org/Tools/Doveadm/SearchQuery) + +## Make it automatic + +If you want to automate such a task you can create a cron job on your host that calls a script like the one below: + +``` +#!/bin/bash +/usr/local/bin/docker-compose exec -T doveadm dovecot-mailcow doveadm expunge -A mailbox 'Junk' savedbefore 2w +/usr/local/bin/docker-compose exec -T doveadm expunge -A mailbox 'Junk' SEEN not SINCE 12h +[...] +``` + +To create a cron job you may execute `crontab -e` and insert something like the following to execute a script: + +``` +# Execute everyday at 04:00 A.M. +0 4 * * * /path/to/your/expunge_mailboxes.sh +``` diff --git a/docs/u_e-dovecot-more.md b/docs/u_e-dovecot-more.md new file mode 100644 index 000000000..09d0856ac --- /dev/null +++ b/docs/u_e-dovecot-more.md @@ -0,0 +1,48 @@ +Here is just an unsorted list of useful `doveadm` commands that could be useful. + +## doveadm quota + +The `quota get` and `quota recalc`[^1] commands are used to display or recalculate the current user's quota usage. The reported values are in *kilobytes*. + +To list the current quota status for a user / mailbox, do: + +``` +doveadm quota get -u 'mailbox@example.org' +``` + +To list the quota storage value for **all** users, do: + +``` +doveadm quota get -A |grep "STORAGE" +``` + +Recalculate a single user's quota usage: + +``` +doveadm quota recalc -u 'mailbox@example.org' +``` + +## doveadm search + +The `doveadm search`[^2] command is used to find messages matching your query. It can return the username, mailbox-GUID / -UID and message-GUIDs / -UIDs. + +To view the number of messages, by user, in their **.Trash** folder: + +``` +doveadm search -A mailbox 'Trash' | awk '{print $1}' | sort | uniq -c +``` + +Show all messages in a user's **inbox** older then 90 days: + +``` +doveadm search -u 'mailbox@example.org' mailbox 'INBOX' savedbefore 90d +``` + +Show **all messages** in **any folder** that are **older** then 30 days for `mailbox@example.org`: + +``` +doveadm search -u 'mailbox@example.org' mailbox "*" savedbefore 30d +``` + +[^1]:https://wiki.dovecot.org/Tools/Doveadm/Quota +[^2]:https://wiki.dovecot.org/Tools/Doveadm/Search diff --git a/mkdocs.yml b/mkdocs.yml index be973b7c8..6c327d105 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -43,11 +43,14 @@ pages: - 'Temporary email aliase': 'u_e-mailcow_ui-spamalias.md' - 'Tagging': 'u_e-mailcow_ui-tagging.md' - 'Two-Factor Authentication': 'u_e-mailcow_ui-tfa.md' - - 'Redis': 'u_e-redis.md' - - 'Rspamd': 'u_e-rspamd.md' - 'Postfix': - 'Anonymize Headers': 'u_e-postfix-anonym_headers.md' - 'Disable Sender Addresses Verification': 'u_e-postfix-disable_sender_verification.md' + - 'Dovecot': + - "Expunge a User's Mails": 'u_e-dovecot-expunge.md' + - 'More Examples with DOVEADM': 'u_e-dovecot-more.md' + - 'Redis': 'u_e-redis.md' + - 'Rspamd': 'u_e-rspamd.md' - 'Docker': - 'Customize Dockerfiles': 'u_e-docker-cust_dockerfiles.md' - 'Docker Compose Bash Completion': 'u_e-docker-dc_bash_compl.md' From 7ce0537ce829f5715c3ef39584406e3f5bf4c2c1 Mon Sep 17 00:00:00 2001 From: timo Date: Tue, 9 May 2017 16:30:35 +0200 Subject: [PATCH 10/18] Formatting --- docs/migrate-mc014.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/docs/migrate-mc014.md b/docs/migrate-mc014.md index 818837844..564118c3a 100644 --- a/docs/migrate-mc014.md +++ b/docs/migrate-mc014.md @@ -85,19 +85,19 @@ MariaDB [mailcow]> show tables; ## Import your backups: - ``` - # source mailcow.conf - # docker exec -i $(docker-compose ps -q mysql-mailcow) mysql -u${DBUSER} -p${DBPASS} ${DBNAME} < backup_mailcow.sql - ``` +``` +# source mailcow.conf +# docker exec -i $(docker-compose ps -q mysql-mailcow) mysql -u${DBUSER} -p${DBPASS} ${DBNAME} < backup_mailcow.sql +``` - Recalculate used quota with `doveadm`: +Recalculate used quota with `doveadm`: - ``` - # docker-compose exec dovecot-mailcow doveadm quota recalc -A - ``` +``` +# docker-compose exec dovecot-mailcow doveadm quota recalc -A +``` - Restart services: +Restart services: - ``` - # docker-compose restart - ``` +``` +# docker-compose restart +``` From 8d66bf093e2cee9ef09828ed989c57f411ba51d9 Mon Sep 17 00:00:00 2001 From: timo Date: Tue, 9 May 2017 17:20:59 +0200 Subject: [PATCH 11/18] Added check on SSL --- docs/firststeps-ssl.md | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/docs/firststeps-ssl.md b/docs/firststeps-ssl.md index ea0f1895b..3827ead10 100644 --- a/docs/firststeps-ssl.md +++ b/docs/firststeps-ssl.md @@ -1,4 +1,5 @@ -mailcow dockerized comes with a snakeoil CA "mailcow" and a server certificate in `data/assets/ssl`. Please use your own trusted certificates. +!!! warning + mailcow dockerized comes with a snakeoil CA "mailcow" and a server certificate in `data/assets/ssl`. Please use your own trusted certificates. mailcow uses **at least** 3 domain names that should be covered by your new certificate: @@ -6,21 +7,21 @@ mailcow uses **at least** 3 domain names that should be covered by your new cert - autodiscover.**example.org** - autoconfig.**example.org** -### Let's Encrypt +## Let's Encrypt This is just an example of how to obtain certificates with certbot. There are several methods! -1\. Get the certbot client: +### 1\. Get the certbot client: ``` bash wget https://dl.eff.org/certbot-auto -O /usr/local/sbin/certbot && chmod +x /usr/local/sbin/certbot ``` -2\. Make sure you set `HTTP_BIND=0.0.0.0` and `HTTP_PORT=80` in `mailcow.conf` or setup a reverse proxy to enable connections to port 80. If you changed HTTP_BIND, then rebuild Nginx: +### 2\. Make sure you set `HTTP_BIND=0.0.0.0` and `HTTP_PORT=80` in `mailcow.conf` or setup a reverse proxy to enable connections to port 80. If you changed HTTP_BIND, then rebuild Nginx: ``` bash docker-compose up -d ``` -3\. Request the certificate with the webroot method: +### 3\. Request the certificate with the webroot method: ``` bash cd /path/to/git/clone/mailcow-dockerized source mailcow.conf @@ -37,7 +38,7 @@ certbot certonly \ !!! warning Remember to replace the example.org domain with your own domain, this command will not work if you dont. -4\. Create hard links to the full path of the new certificates. Assuming you are still in the mailcow root folder: +### 4\. Create hard links to the full path of the new certificates. Assuming you are still in the mailcow root folder: ``` bash mv data/assets/ssl/cert.{pem,pem.backup} mv data/assets/ssl/key.{pem,pem.backup} @@ -45,9 +46,24 @@ ln $(readlink -f /etc/letsencrypt/live/${MAILCOW_HOSTNAME}/fullchain.pem) data/a ln $(readlink -f /etc/letsencrypt/live/${MAILCOW_HOSTNAME}/privkey.pem) data/assets/ssl/key.pem ``` -5\. Restart affected containers: +### 5\. Restart affected containers: ``` docker-compose restart postfix-mailcow dovecot-mailcow nginx-mailcow ``` When renewing certificates, run the last two steps (link + restart) as post-hook in a script. + +## Check your configuration + +To check if nginx serves the correct certificate, simply use a browser of your choice and check the displayed certificate. + +To check the certificate served by dovecot or postfix we will use `openssl`: + +``` +# Connect via SMTP (25) +openssl s_client -starttls smtp -crlf -connect mx.mailcow.email:25 +# Connect via SMTPS (465) +openssl s_client -showcerts -connect mx.mailcow.email:465 +# Connect via SUBMISSION (587) +openssl s_client -starttls smtp -crlf -connect mx.mailcow.email:587 +``` From d03241e95d9f5837897247abb9234a6b3b18f6de Mon Sep 17 00:00:00 2001 From: timo Date: Tue, 9 May 2017 17:23:05 +0200 Subject: [PATCH 12/18] Spelling --- docs/debug-attach_service.md | 2 +- docs/debug-logs.md | 2 +- docs/debug.md | 2 +- docs/u_e-mailcow_ui-bl_wl.md | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/debug-attach_service.md b/docs/debug-attach_service.md index a45a10ce6..51729e8d3 100644 --- a/docs/debug-attach_service.md +++ b/docs/debug-attach_service.md @@ -8,7 +8,7 @@ docker-compose exec $Service_Name /bin/bash ### Connecting to Services -If you whant to connect to a service / application directly it is always a good idea to `source mailcow.conf` to get all relevant variables in your environment. +If you whant to connect to a service / application directly it is always a good idea to `source mailcow.conf` to get all relevant variables into your environment. #### MySQL diff --git a/docs/debug-logs.md b/docs/debug-logs.md index d3ec41f0c..1926ce420 100644 --- a/docs/debug-logs.md +++ b/docs/debug-logs.md @@ -1,4 +1,4 @@ -To view the logs of all mailcow: dockerized related containers, you can use `docker-compose logs` inside your mailcow-dockerized folder that contains your `mailcow.conf`. This is usually a bit mutch but you could trim the output with `--tail=100` to the last 100 lines, or add a `-f` to follow the live output of all your services. +To view the logs of all mailcow: dockerized related containers, you can use `docker-compose logs` inside your mailcow-dockerized folder that contains your `mailcow.conf`. This is usually a bit much, but you could trim the output with `--tail=100` to the last 100 lines per container, or add a `-f` to follow the live output of all your services. To view the logs of a specific service you can use `docker-compose logs [options] $Service_Name` diff --git a/docs/debug.md b/docs/debug.md index 5cfba7c4b..e17b3ab47 100644 --- a/docs/debug.md +++ b/docs/debug.md @@ -2,7 +2,7 @@ When a problem occurs, then always for a reason! What you want to do in such a c 1. Read your logs; follow them to see what the reason for your problem is. 2. Follow the leads given to you in your logfiles and start investigating. -3. Restarting the troubled service or the whole stack to see if the problem persists. +3. Restart the troubled service or the whole stack to see if the problem persists. 4. Read the documentation of the troubled service and search it's bugtracker for your problem. 5. Search our [issues](https://github.com/mailcow/mailcow-dockerized/issues) and [forum](https://forum.mailcow.email/) for topics related to your problem. 6. [Create an issue](https://github.com/mailcow/mailcow-dockerized/issues) over at our GitHub repository if you think your problem might be a bug or a missing feature you badly need. But please make sure, that you include **all the logs** and a full description to your problem. diff --git a/docs/u_e-mailcow_ui-bl_wl.md b/docs/u_e-mailcow_ui-bl_wl.md index e78e7f53d..2c39b1112 100644 --- a/docs/u_e-mailcow_ui-bl_wl.md +++ b/docs/u_e-mailcow_ui-bl_wl.md @@ -4,4 +4,4 @@ To add or edit an entry to your **domain wide** filter table, login to your *mai !!! info - Be aware that a user [may override](u_e-mailcow_ui-spamalias.md) this setting by setting his own black- and whitelist! + Be aware that a user [may override](u_e-mailcow_ui-spamfilter.md) this setting by setting his own black- and whitelist! From 6e4a19e7957f8f8b44d55fe61c3909adfc52bb19 Mon Sep 17 00:00:00 2001 From: timo Date: Tue, 9 May 2017 17:36:04 +0200 Subject: [PATCH 13/18] Added Footnote --- docs/u_e-mailcow_ui-config.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/u_e-mailcow_ui-config.md b/docs/u_e-mailcow_ui-config.md index 885e4b6e7..5b19433ab 100644 --- a/docs/u_e-mailcow_ui-config.md +++ b/docs/u_e-mailcow_ui-config.md @@ -4,11 +4,11 @@ The local configuration file is persistent over updates of mailcow. Try not to c mailcow UI configuration parameters can be to... -- ...change the default language* +- ...change the default language[^1] - ...change the default bootstrap theme - ...set a password complexity regex - ...add mailcow app buttons to the login screen - ...set a pagination trigger - ...set action after submitting forms (stay in form, return to previous page) -\* To change SOGos default language, you will need to edit `data/conf/sogo/sogo.conf` and replace "English" by your preferred language. +[^1]: To change SOGos default language, you will need to edit `data/conf/sogo/sogo.conf` and replace "English" by your preferred language. From 7e5d924d27528aadf8eb14ece168bfe40f6aa4e7 Mon Sep 17 00:00:00 2001 From: timo Date: Tue, 9 May 2017 17:36:16 +0200 Subject: [PATCH 14/18] Spelling --- docs/u_e-postfix-anonym_headers.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/u_e-postfix-anonym_headers.md b/docs/u_e-postfix-anonym_headers.md index edd6283c1..0fc959b11 100644 --- a/docs/u_e-postfix-anonym_headers.md +++ b/docs/u_e-postfix-anonym_headers.md @@ -1,4 +1,4 @@ -Save as `data/conf/postfix/mailcow_anonymize_headers.pcre`: +To disguise your users details like IP, email client, etc. we have to create a new file in `data/conf/postfix/mailcow_anonymize_headers.pcre` and insert the following: ``` /^\s*Received:[^\)]+\)\s+\(Authenticated sender:(.+)/ @@ -10,7 +10,8 @@ Save as `data/conf/postfix/mailcow_anonymize_headers.pcre`: /^\s*X-Forward/ IGNORE ``` -Add this to `data/conf/postfix/main.cf`: +Next we need to add the following to `data/conf/postfix/main.cf`: + ``` smtp_header_checks = pcre:/opt/postfix/conf/mailcow_anonymize_headers.pcre ``` From 44f05358fc841683d66154b790d6ec683405cd59 Mon Sep 17 00:00:00 2001 From: timo Date: Tue, 9 May 2017 17:43:26 +0200 Subject: [PATCH 15/18] More spelling and tweaking --- docs/u_e-backup_restore-mysql.md | 5 ++--- docs/u_e-docker-dc_bash_compl.md | 2 ++ docs/u_e-postfix-disable_sender_verification.md | 2 +- docs/u_e-redis.md | 2 +- docs/u_e-rspamd.md | 4 ++-- 5 files changed, 8 insertions(+), 7 deletions(-) diff --git a/docs/u_e-backup_restore-mysql.md b/docs/u_e-backup_restore-mysql.md index 27d4c9bda..817d7b3b5 100644 --- a/docs/u_e-backup_restore-mysql.md +++ b/docs/u_e-backup_restore-mysql.md @@ -1,5 +1,3 @@ -MySQL is used to store the settings and / or usertables of the whole mail-stack (mailcow UI, SOGo, dovecot, postfix). - ## Backup ``` @@ -11,7 +9,8 @@ docker-compose exec mysql-mailcow mysqldump --default-character-set=utf8mb4 -u${ ## Restore -You should redirect the sql dump without Docker-Compose to prevent parsing errors. +!!! warning + You should redirect the SQL dump without `docker-compose` to prevent parsing errors. ``` cd /path/to/mailcow-dockerized diff --git a/docs/u_e-docker-dc_bash_compl.md b/docs/u_e-docker-dc_bash_compl.md index 3b82321dc..071e8fb3a 100644 --- a/docs/u_e-docker-dc_bash_compl.md +++ b/docs/u_e-docker-dc_bash_compl.md @@ -1,3 +1,5 @@ +To get some sexy bash completion inside your containers simply execute the following: + ``` curl -L https://raw.githubusercontent.com/docker/compose/$(docker-compose version --short)/contrib/completion/bash/docker-compose -o /etc/bash_completion.d/docker-compose ``` diff --git a/docs/u_e-postfix-disable_sender_verification.md b/docs/u_e-postfix-disable_sender_verification.md index 4d2546096..73e35c9b8 100644 --- a/docs/u_e-postfix-disable_sender_verification.md +++ b/docs/u_e-postfix-disable_sender_verification.md @@ -1,4 +1,4 @@ -This option is not best-practice and should only be implemented when there is no other option available to archive whatever you are trying to do. +This option is not best-practice and should only be implemented when there is no other option available to achieve whatever you are trying to do. Simply create a file `data/conf/postfix/check_sasl_access` and enter the following content. This user must exist in your installation and needs to authenticate before sending mail. ``` diff --git a/docs/u_e-redis.md b/docs/u_e-redis.md index d3f23b303..5f5fa6834 100644 --- a/docs/u_e-redis.md +++ b/docs/u_e-redis.md @@ -1,4 +1,4 @@ -Redis is used as a key-value store for (some of) mailcow's and rspamd's settings and data. If you are unfamilliar with redis please read the [introduction to redis](https://redis.io/topics/introduction) and maybe visit this [wonderfull guide](http://try.redis.io/) on how to use it. +Redis is used as a key-value store for rspamd's and (some of) mailcow's settings and data. If you are familiar with redis please read the [introduction to redis](https://redis.io/topics/introduction) and maybe visit this [wonderfull guide](http://try.redis.io/) on how to use it. ## Client diff --git a/docs/u_e-rspamd.md b/docs/u_e-rspamd.md index a98bee23b..fb536a1a8 100644 --- a/docs/u_e-rspamd.md +++ b/docs/u_e-rspamd.md @@ -1,4 +1,4 @@ -Rspamd is used for av handling, dkim signing and spam handling. It's a powerfull and fast filter system. For a more in-depth documentation on Rspamd please visit it's [own documentation](https://rspamd.com/doc/index.html). +Rspamd is used for AV handling, DKIM signing and SPAM handling. It's a powerful and fast filter system. For a more in-depth documentation on Rspamd please visit it's [own documentation](https://rspamd.com/doc/index.html). ## Learn Spam & Ham @@ -9,7 +9,7 @@ Rspamd also auto-learns mail when a high or low score is detected (see https://r The bayes statistics are written to Redis as keys `BAYES_HAM` and `BAYES_SPAM`. -You can also use Rspamd's web ui to learn ham and/or spam. +You can also use Rspamd's web UI to learn ham and / or spam or to adjust certain settings of Rspamd. ### Learn Spam or Ham from existing directory From 9a0ab9c5e386ca8157be4d421a3246b2e9b4f0ba Mon Sep 17 00:00:00 2001 From: timo Date: Tue, 9 May 2017 17:54:50 +0200 Subject: [PATCH 16/18] Spelling --- docs/debug-attach_service.md | 4 ++-- docs/debug-common_problems.md | 4 ++-- docs/debug-reset_pw.md | 2 +- docs/debug-rm_volumes.md | 2 +- docs/debug.md | 4 ++-- docs/firststeps-ssl.md | 4 ++-- docs/index.md | 8 ++++---- docs/install-update.md | 8 ++++---- docs/install.md | 2 +- docs/prerequesite-dns.md | 6 +++--- docs/prerequesite-system.md | 6 +++--- docs/third_party-gogs.md | 4 ++-- docs/u_e-deinstall.md | 4 ++-- docs/u_e-mailcow_ui-spamalias.md | 2 +- docs/u_e-mailcow_ui-tagging.md | 4 ++-- docs/u_e-mailcow_ui-tfa.md | 4 ++-- 16 files changed, 34 insertions(+), 34 deletions(-) diff --git a/docs/debug-attach_service.md b/docs/debug-attach_service.md index 51729e8d3..826c66207 100644 --- a/docs/debug-attach_service.md +++ b/docs/debug-attach_service.md @@ -8,7 +8,7 @@ docker-compose exec $Service_Name /bin/bash ### Connecting to Services -If you whant to connect to a service / application directly it is always a good idea to `source mailcow.conf` to get all relevant variables into your environment. +If you want to connect to a service / application directly it is always a good idea to `source mailcow.conf` to get all relevant variables into your environment. #### MySQL @@ -33,7 +33,7 @@ Here is a brief overview of what container / service does what: | mysql-mailcow | Stores SOGo's and most of mailcow's settings | | postfix-mailcow | Receives and sends mails | | dovecot-mailcow | User logins and sieve filter | -| redis-mailcow | Storage backend for DKIM keys, Rmilter and Rspamd | +| redis-mailcow | Storage back-end for DKIM keys, Rmilter and Rspamd | | rspamd-mailcow | Mail filtering system. Used for av handling, dkim signing, spam handling | | rmilter-mailcow | Integrates Rspamd into postfix | | clamd-mailcow | Scans attachments for viruses | diff --git a/docs/debug-common_problems.md b/docs/debug-common_problems.md index 66d79ef86..cf712e11c 100644 --- a/docs/debug-common_problems.md +++ b/docs/debug-common_problems.md @@ -11,7 +11,7 @@ Please check in your mailcow UI if you made the domain a **backup MX**: There are a lot of things that could prevent you from sending mail: - Check if your IP is on any blacklists. You could use [dnsbl.info](http://www.dnsbl.info/) or any other similar service to check for your IP. -- There are some consumer ISP routers out there, that block mailports for non whitelisted domains. Please check if you can reach your server on the ports `465` or `587`: +- There are some consumer ISP routers out there, that block mail ports for non whitelisted domains. Please check if you can reach your server on the ports `465` or `587`: ``` # telnet 74.125.133.27 465 @@ -24,7 +24,7 @@ Escape character is '^]'. Please read our guide on [DNS configuration](prerequesite-dns.md). -## docker-compose throws weird erros +## docker-compose throws weird errors ... like: diff --git a/docs/debug-reset_pw.md b/docs/debug-reset_pw.md index c92d9de0a..d0c305331 100644 --- a/docs/debug-reset_pw.md +++ b/docs/debug-reset_pw.md @@ -56,7 +56,7 @@ MariaDB [(none)]> FLUSH PRIVILEGES; ## Remove Two-Factor Authentication -This works similar to resetting a MySQL password, now we do it from the host without connecting to the MySQL cli: +This works similar to resetting a MySQL password, now we do it from the host without connecting to the MySQL CLI: ``` source mailcow.conf diff --git a/docs/debug-rm_volumes.md b/docs/debug-rm_volumes.md index 74ed50280..3bdbb52a0 100644 --- a/docs/debug-rm_volumes.md +++ b/docs/debug-rm_volumes.md @@ -1,4 +1,4 @@ -You may want to remove a set of persistend data to resolve a conflict or to start over: +You may want to remove a set of persistent data to resolve a conflict or to start over: ``` docker volume rm mailcowdockerized_${VOLUME_NAME} diff --git a/docs/debug.md b/docs/debug.md index e17b3ab47..ded7f14f1 100644 --- a/docs/debug.md +++ b/docs/debug.md @@ -1,9 +1,9 @@ When a problem occurs, then always for a reason! What you want to do in such a case is: 1. Read your logs; follow them to see what the reason for your problem is. -2. Follow the leads given to you in your logfiles and start investigating. +2. Follow the leads given to you in your log files and start investigating. 3. Restart the troubled service or the whole stack to see if the problem persists. -4. Read the documentation of the troubled service and search it's bugtracker for your problem. +4. Read the documentation of the troubled service and search it's bug tracker for your problem. 5. Search our [issues](https://github.com/mailcow/mailcow-dockerized/issues) and [forum](https://forum.mailcow.email/) for topics related to your problem. 6. [Create an issue](https://github.com/mailcow/mailcow-dockerized/issues) over at our GitHub repository if you think your problem might be a bug or a missing feature you badly need. But please make sure, that you include **all the logs** and a full description to your problem. 7. If you need help with a problem on a configuration or a setup, or got a question please head over to our [forum](https://forum.mailcow.email/) and open a thread. diff --git a/docs/firststeps-ssl.md b/docs/firststeps-ssl.md index 3827ead10..07405f848 100644 --- a/docs/firststeps-ssl.md +++ b/docs/firststeps-ssl.md @@ -1,5 +1,5 @@ !!! warning - mailcow dockerized comes with a snakeoil CA "mailcow" and a server certificate in `data/assets/ssl`. Please use your own trusted certificates. + mailcow dockerized comes with a snake-oil CA "mailcow" and a server certificate in `data/assets/ssl`. Please use your own trusted certificates. mailcow uses **at least** 3 domain names that should be covered by your new certificate: @@ -36,7 +36,7 @@ certbot certonly \ ``` !!! warning - Remember to replace the example.org domain with your own domain, this command will not work if you dont. + Remember to replace the example.org domain with your own domain, this command will not work if you don't. ### 4\. Create hard links to the full path of the new certificates. Assuming you are still in the mailcow root folder: ``` bash diff --git a/docs/index.md b/docs/index.md index 1d36fa715..4467d19dd 100644 --- a/docs/index.md +++ b/docs/index.md @@ -4,7 +4,7 @@ Let us know about your ideas in #mailcow @ Freenode. -[Servercow](https://www.servercow.de) - hosted mailcow, KVM based virtual servers, webhosting and more. +[Servercow](https://www.servercow.de) - hosted mailcow, KVM based virtual servers, web-hosting and more. [![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=JWBSYHF4SMC68) @@ -30,13 +30,13 @@ The integrated **mailcow UI** allows administrative work on your mail server ins - DKIM key management - Black- and whitelists per domain and per user -- Spam score managment per-user (reject spam, mark spam, greylist) +- Spam score management per-user (reject spam, mark spam, greylist) - Allow mailbox users to create temporary spam aliases -- Prepend mail tags to subject or move mail to subfolder (per-user) +- Prepend mail tags to subject or move mail to sub folder (per-user) - Allow mailbox users to toggle incoming and outgoing TLS enforcement - Allow users to reset SOGo ActiveSync device caches - imapsync to migrate or pull remote mailboxes regularly -- TFA: Yubi OTP and U2F USB (Google Chrome and derivates only), TOTP +- TFA: Yubi OTP and U2F USB (Google Chrome and derivatives only), TOTP - Add domains, mailboxes, aliases, domain aliases and SOGo resources - Add whitelisted hosts to forward mail to mailcow diff --git a/docs/install-update.md b/docs/install-update.md index ee3d97891..2329b3f8e 100644 --- a/docs/install-update.md +++ b/docs/install-update.md @@ -13,7 +13,7 @@ git stash pop ``` ### Step 1, method 2 -Fetch new data from GitHub, commit changes and merge remote repository: +Fetch new data from GitHub, commit changes and merge remote repository: ``` # Get updates/changes @@ -21,7 +21,7 @@ git fetch # Add all changed files to local clone git add -A # Commit changes, ignore git complaining about username and mail address -git commit -m "Local config aat $(date)" +git commit -m "Local config at $(date)" # Merge changes git merge ``` @@ -45,9 +45,9 @@ Keep in mind that all local changes _to configuration files_ will be lost. Howev - Stop and remove mailcow containers: `docker-compose down` - Delete the directory or rename it - Clone the remote repository again (`git clone https://github.com/andryyy/mailcow-dockerized && cd mailcow-dockerized`). **Pay attention** to this step - the folder must have the same name of the previous one! -- Copy back your previous `mailcow.conf` into the mailcow-dockerizd folder +- Copy back your previous `mailcow.conf` into the mailcow-dockerizd folder -If you forgot to stop Docker before deleting the cloned directoy, you can use the following commands: +If you forgot to stop Docker before deleting the cloned directory, you can use the following commands: ``` docker stop $(docker ps -a -q) docker rm $(docker ps -a -q) diff --git a/docs/install.md b/docs/install.md index dc5bcbd4d..d3af20da1 100644 --- a/docs/install.md +++ b/docs/install.md @@ -35,7 +35,7 @@ If you plan to use a reverse proxy, you can, for example, bind HTTPS to 127.0.0. You may need to stop an existing pre-installed MTA which blocks port 25/tcp. See [this chapter](https://andryyy.github.io/mailcow-dockerized/first_steps/#install-a-local-mta) to learn how to reconfigure Postfix to run besides mailcow after a successful installation. -5\. Pull the images and run the composer file. The paramter `-d` will start mailcow: dockerized detached: +5\. Pull the images and run the composer file. The parameter `-d` will start mailcow: dockerized detached: ``` docker-compose pull docker-compose up -d diff --git a/docs/prerequesite-dns.md b/docs/prerequesite-dns.md index 7064584c4..ebaf53114 100644 --- a/docs/prerequesite-dns.md +++ b/docs/prerequesite-dns.md @@ -3,9 +3,9 @@ Below you can find a list of **recommended DNS records**. While some are mandato ## References - A good article covering all relevant topics: - ["3 DNS Records Every Email Marketer Must Know"](https://www.rackaid.com/blog/email-dns-records) + ["3 DNS Records Every Email Marketer Must Know"](https://www.rackaid.com/blog/email-dns-records) - Another great one, but Zimbra as an example platform: - ["Best Practices on Email Protection: SPF, DKIM and DMARC"](https://wiki.zimbra.com/wiki/Best_Practices_on_Email_Protection:_SPF,_DKIM_and_DMARC) + ["Best Practices on Email Protection: SPF, DKIM and DMARC"](https://wiki.zimbra.com/wiki/Best_Practices_on_Email_Protection:_SPF,_DKIM_and_DMARC) - An in-depth discussion of SPF, DKIM and DMARC: ["How to eliminate spam and protect your name with DMARC"](https://www.skelleton.net/2015/03/21/how-to-eliminate-spam-and-protect-your-name-with-dmarc/) @@ -77,4 +77,4 @@ If you are interested in statistics, you can additionally register with the [Pos @ IN TXT "google-site-verification=..." ``` -[^1]: A **Fully Qualified Domain Name** (**FQDN**) is the complete (absolute) domain name for a specific computer or host, on the Internet. The FQDN consists of at least three parts devided by a dot: the hostname (myhost), the domain name (mydomain) and the toplevel domain in short **tld** (com). In the example of `mx.mailcow.email` the hostname would be `mx`, the domain name 'mailcow' and the tld `email`. +[^1]: A **Fully Qualified Domain Name** (**FQDN**) is the complete (absolute) domain name for a specific computer or host, on the Internet. The FQDN consists of at least three parts divided by a dot: the hostname (myhost), the domain name (mydomain) and the top level domain in short **tld** (com). In the example of `mx.mailcow.email` the hostname would be `mx`, the domain name 'mailcow' and the tld `email`. diff --git a/docs/prerequesite-system.md b/docs/prerequesite-system.md index 18b5e9f0a..c70742c6d 100644 --- a/docs/prerequesite-system.md +++ b/docs/prerequesite-system.md @@ -4,7 +4,7 @@ Before you run **mailcow: dockerized**, there are a few requirements that you sh When you want to run the dockerized version on your Debian 8 (Jessie) box you should [switch to the kernel 4.9 from jessie backports](https://packages.debian.org/jessie-backports/linux-image-amd64) because there is a bug (kernel panic) with the kernel 3.16 when running docker containers with *healthchecks*! For more details read: [github.com/docker/docker/issues/30402](https://github.com/docker/docker/issues/30402) and [forum.mailcow.email/t/solved-mailcow-docker-causes-kernel-panic-edit/448](https://forum.mailcow.email/t/solved-mailcow-docker-causes-kernel-panic-edit/448) !!! info - - Mailcow: dockerized requires [some ports](#default-ports) to be open for incomming connections, so make sure that your firewall is not bloking these. Also make sure that no other application is interferring with mailcow's configuration. + - Mailcow: dockerized requires [some ports](#default-ports) to be open for incoming connections, so make sure that your firewall is not blocking these. Also make sure that no other application is interfering with mailcow's configuration. - A correct DNS setup is crucial to every good mailserver setup, so please make sure you got at least the [basics](prerequesite-dns/#the-minimal-dns-configuration) covered bevore you begin! - Make sure that your system has a correct date and [time setup](#date-and-time). This is crucial for stuff like two factor TOTP authentication. @@ -31,7 +31,7 @@ If this command returns any results please remove or stop the application runnin ### Default Ports -If you have a firewall already up and running please make sure that these ports are open for incomming connections: +If you have a firewall already up and running please make sure that these ports are open for incoming connections: | Service | Protocol | Port | Container | Variable | | --------------------|:--------:|:-------|:----------------|--------------------------------| @@ -67,7 +67,7 @@ NTP synchronized: yes Sun 2017-10-29 02:00:00 CET ``` -The lines `NTP enabled: yes` and `NTP synchronized: yes` indicate wether you have NTP enabled and if it's syncronized. +The lines `NTP enabled: yes` and `NTP synchronized: yes` indicate wether you have NTP enabled and if it's synchronized. To enable NTP you need to run the command `timedatectl set-ntp true`. You also need to edit your `/etc/systemd/timesyncd.conf`: diff --git a/docs/third_party-gogs.md b/docs/third_party-gogs.md index b196ccf37..2aa744dcb 100644 --- a/docs/third_party-gogs.md +++ b/docs/third_party-gogs.md @@ -1,6 +1,6 @@ With Gogs' ability to authenticate over SMTP it is trivial to integrate it with mailcow. Few changes are needed: -1\. Open `docker-compose.yml` and add gogs: +1\. Open `docker-compose.yml` and add Gogs: ``` gogs-mailcow: @@ -27,7 +27,7 @@ location /gogs/ { } ``` -3\. Open `mailcow.conf` and define ports you want gogs to open, as well as future database password. Example: +3\. Open `mailcow.conf` and define ports you want Gogs to open, as well as future database password. Example: ``` GOGS_WWW_PORT=3000 diff --git a/docs/u_e-deinstall.md b/docs/u_e-deinstall.md index 09954536b..696351b67 100644 --- a/docs/u_e-deinstall.md +++ b/docs/u_e-deinstall.md @@ -7,5 +7,5 @@ docker-compose down -v --rmi all --remove-orphans !!! info - **-v** Remove named volumes declared in the `volumes` section of the Compose file and anonymous volumes attached to containers. - **--rmi ** Remove images. Type must be one of: `all`: Remove all images used by any service. `local`: Remove only images that don't have a custom tag set by the `image` field. - - **--remove-orphans** Remove containsers for services not defined in the compose file. - - By default `docker-compose down` only removes currently active containers and networks devinded in the `docker-compose.yml`. + - **--remove-orphans** Remove containers for services not defined in the compose file. + - By default `docker-compose down` only removes currently active containers and networks defined in the `docker-compose.yml`. diff --git a/docs/u_e-mailcow_ui-spamalias.md b/docs/u_e-mailcow_ui-spamalias.md index 40e225a1a..17fd11d9b 100644 --- a/docs/u_e-mailcow_ui-spamalias.md +++ b/docs/u_e-mailcow_ui-spamalias.md @@ -1,5 +1,5 @@ These temporary email aliases are mostly used for places where we need to provide an email address but don't want future correspondence with. They are also called spam alias. -To create, delete or extend a temporary email aliase you need to login to mailcow's UI as a mailbox user and navigate to the tab **Temporary email aliases**: +To create, delete or extend a temporary email aliases you need to login to mailcow's UI as a mailbox user and navigate to the tab **Temporary email aliases**: ![How to set spam- or temporary email aliases in mailcow](images/mailcow-spamalias.png) diff --git a/docs/u_e-mailcow_ui-tagging.md b/docs/u_e-mailcow_ui-tagging.md index 74110e46d..b3d5ad0a8 100644 --- a/docs/u_e-mailcow_ui-tagging.md +++ b/docs/u_e-mailcow_ui-tagging.md @@ -1,9 +1,9 @@ -Mailbox users can tag their mail address like in `me+facebook@example.org`. They can control the taghandling in the users **mailcow UI** panel. +Mailbox users can tag their mail address like in `me+facebook@example.org`. They can control the tag handling in the users **mailcow UI** panel. ![mailcow mail tagging settings](images/mailcow-tagging.png) ### Available Actions -1\. Move this message to a subfolder "facebook" (will be created lower case if not existing) +1\. Move this message to a sub folder "facebook" (will be created lower case if not existing) 2\. Prepend the tag to the subject: "[facebook] Subject" diff --git a/docs/u_e-mailcow_ui-tfa.md b/docs/u_e-mailcow_ui-tfa.md index c1961a46f..403bd8daa 100644 --- a/docs/u_e-mailcow_ui-tfa.md +++ b/docs/u_e-mailcow_ui-tfa.md @@ -4,7 +4,7 @@ So far three methods for *Two-Factor Authentication* are implemented: U2F, Yubi - Both U2F and Yubi OTP work well with the fantastic [Yubikey](https://www.yubico.com). - While Yubi OTP needs an active internet connection and an API ID + key, U2F will work with any FIDO U2F USB key out of the box, but can only be used when mailcow is accessed over HTTPS. - U2F and Yubi OTP support multiple keys per user. -- As the third TFA method mailcow uses TOTP: time-based one-time passwords. Those psaswords can be generated with apps like "Google Authenticator" after initially scanning a QR code or entering the given secret manually. +- As the third TFA method mailcow uses TOTP: time-based one-time passwords. Those passwords can be generated with apps like "Google Authenticator" after initially scanning a QR code or entering the given secret manually. As administrator you are able to temporary disable a domain administrators TFA login until they successfully logged in. @@ -17,7 +17,7 @@ The API ID, API key and the first 12 characters (your YubiKeys ID in modhex) are ### U2F -Only Google Chrome (+derivates) and Opera support U2F authentication to this day natively. +Only Google Chrome (+derivatives) and Opera support U2F authentication to this day natively. For Firefox you will need to install the "U2F Support Add-on" as provided on [mozilla.org](https://addons.mozilla.org/en-US/firefox/addon/u2f-support-add-on/). U2F works without an internet connection. From 572d0f924ae8d99cdc6007aa2b123756b2bf53c7 Mon Sep 17 00:00:00 2001 From: timo Date: Tue, 9 May 2017 19:21:51 +0200 Subject: [PATCH 17/18] Mama ist fertig! --- docs/firststeps-ssl.md | 10 +++++----- docs/u_e-redis.md | 2 +- docs/u_e-why_bind9.md | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/firststeps-ssl.md b/docs/firststeps-ssl.md index 07405f848..96c20a8f6 100644 --- a/docs/firststeps-ssl.md +++ b/docs/firststeps-ssl.md @@ -11,17 +11,17 @@ mailcow uses **at least** 3 domain names that should be covered by your new cert This is just an example of how to obtain certificates with certbot. There are several methods! -### 1\. Get the certbot client: +1\. Get the certbot client: ``` bash wget https://dl.eff.org/certbot-auto -O /usr/local/sbin/certbot && chmod +x /usr/local/sbin/certbot ``` -### 2\. Make sure you set `HTTP_BIND=0.0.0.0` and `HTTP_PORT=80` in `mailcow.conf` or setup a reverse proxy to enable connections to port 80. If you changed HTTP_BIND, then rebuild Nginx: +2\. Make sure you set `HTTP_BIND=0.0.0.0` and `HTTP_PORT=80` in `mailcow.conf` or setup a reverse proxy to enable connections to port 80. If you changed HTTP_BIND, then rebuild Nginx: ``` bash docker-compose up -d ``` -### 3\. Request the certificate with the webroot method: +3\. Request the certificate with the webroot method: ``` bash cd /path/to/git/clone/mailcow-dockerized source mailcow.conf @@ -38,7 +38,7 @@ certbot certonly \ !!! warning Remember to replace the example.org domain with your own domain, this command will not work if you don't. -### 4\. Create hard links to the full path of the new certificates. Assuming you are still in the mailcow root folder: +4\. Create hard links to the full path of the new certificates. Assuming you are still in the mailcow root folder: ``` bash mv data/assets/ssl/cert.{pem,pem.backup} mv data/assets/ssl/key.{pem,pem.backup} @@ -46,7 +46,7 @@ ln $(readlink -f /etc/letsencrypt/live/${MAILCOW_HOSTNAME}/fullchain.pem) data/a ln $(readlink -f /etc/letsencrypt/live/${MAILCOW_HOSTNAME}/privkey.pem) data/assets/ssl/key.pem ``` -### 5\. Restart affected containers: +5\. Restart affected containers: ``` docker-compose restart postfix-mailcow dovecot-mailcow nginx-mailcow ``` diff --git a/docs/u_e-redis.md b/docs/u_e-redis.md index 5f5fa6834..850cb981f 100644 --- a/docs/u_e-redis.md +++ b/docs/u_e-redis.md @@ -1,4 +1,4 @@ -Redis is used as a key-value store for rspamd's and (some of) mailcow's settings and data. If you are familiar with redis please read the [introduction to redis](https://redis.io/topics/introduction) and maybe visit this [wonderfull guide](http://try.redis.io/) on how to use it. +Redis is used as a key-value store for rspamd's and (some of) mailcow's settings and data. If you are unfamiliar with redis please read the [introduction to redis](https://redis.io/topics/introduction) and maybe visit this [wonderfull guide](http://try.redis.io/) on how to use it. ## Client diff --git a/docs/u_e-why_bind9.md b/docs/u_e-why_bind9.md index c7d43a5d7..d0676d25a 100644 --- a/docs/u_e-why_bind9.md +++ b/docs/u_e-why_bind9.md @@ -1,6 +1,6 @@ For DNS blacklist lookups and DNSSEC. Most systems use either a public or a local caching DNS resolver. -That's a very bad idea when it comes to filter spam using DNS-based blackhole lists (DNSBL) or similar technics. +That's a very bad idea when it comes to filter spam using DNS-based black hole lists (DNSBL) or similar technics. Most if not all providers apply a rate limit based on the DNS resolver that is used to query their service. Using a public resolver like Googles 4x8, OpenDNS or any other shared DNS resolver like your ISPs will hit that limit very soon. From 13f0e0a150cfdfbb68f9aea05e3299d346415091 Mon Sep 17 00:00:00 2001 From: Steve Divskinsy Date: Sat, 13 May 2017 19:50:33 +0930 Subject: [PATCH 18/18] Fix backup command --- docs/migrate-mc014.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/migrate-mc014.md b/docs/migrate-mc014.md index 564118c3a..ae64fc9ae 100644 --- a/docs/migrate-mc014.md +++ b/docs/migrate-mc014.md @@ -57,7 +57,7 @@ DBPASS=$(grep database_pass /var/www/mail/inc/vars.inc.php | cut -d'"' -f2) # Backup your tables mysqldump --replace --no-create-info --default-character-set=utf8mb4 \ - --host &{DBHOST}-u${DBUSER} -p${DBPASS} ${DBNAME} \ + --host ${DBHOST} -u${DBUSER} -p${DBPASS} ${DBNAME} \ alias alias_domain domain domain_admins mailbox quota2 sender_acl > backup_mailcow.sql ```