Giter Site home page Giter Site logo

docker's Introduction

Anonymous Email Forwarding

This is the source code for self-hosting addy.io.

FAQ

Why is it called addy.io?

Addy is short for "Address". The word "Addy" is internet slang for an email address, e.g.

"My addy is being spammed. I should've kept it private."

Why did you make this site?

I made this service after trying a few other options that do a similar thing. I was really interested in how they worked and loved the thought of protecting my real email addresses from spam.

I also wanted to address some issues with other services such as:

  • Proprietary closed source code
  • Adverts, analytics and trackers used on the sites
  • No option to encrypt emails using a GPG/OpenPGP key
  • No option for multiple recipients

I made the code open-source to show everyone what was going on behind the scenes and to allow others to help improve the application.

I use this service myself for the vast majority of sites I'm signed up to.

Why should I use addy.io?

There are a number of reasons you should consider using this service:

  • Protect your real email address from spam by simply deactivating/deleting aliases that receive unsolicited emails
  • Identify who has sold your data by using a different email address for every site
  • Protect your identity in the event of a data breach by making it difficult for hackers to cross-reference your accounts
  • Prevent inbox snooping by encrypting all inbound emails using GPG/OpenPGP encryption
  • Update where emails are forwarded without having to go through and change your email address for each site individually
  • Reply to forwarded emails anonymously without revealing your true email address

Do you store emails?

Emails are only ever stored in the event of a failed delivery, and only if you have this option enabled in your account settings.

What is a shared domain alias?

A shared domain alias is any alias that has a domain name that is also shared with other users. For example anyone can generate an alias with the @anonaddy.me domain. Aliases with shared domain names must be pre-generated and cannot be created on-the-fly like standard aliases.

What is a standard alias?

A standard alias is any alias that can be created on-the-fly. Automatic on-the-fly alias creation is only available for domains that are unique to you. For example, your unique username subdomain, any additional usernames or any custom domains. So if you signed up with the username "johndoe", any alias you create using @johndoe.anonaddy.com would be a standard alias (even if you've generated a Random Character/Random Word one).

Can I use my own domain?

Yes you can use your own domain name so you can also have *@example.com as your aliases. To do so you simply need to add a TXT record to verify your ownership of the domain. Then you will need to add an MX record to your domain so that our server can handle incoming emails. You can then add a few other records to enable sending from your domain too.

Can I add a domain and also use it as a recipient?

No, you cannot use the same domain as a custom domain and also for a recipient on addy.io.

e.g if you add "example.com" as a custom domain, you cannot then add "[email protected]" as a recipient. This is because a domain cannot direct email to multiple locations simultaneously using MX records. So your email would arrive for "example.com" and then attempt to be forwarded to "[email protected]" which would create a loop.

You can instead use a subdomain for your custom domain, e.g. "mail.example.com" instead of "example.com", this would allow you to create *@mail.example.com for your aliases. More details can be found here.

Can I add a domain if I'm already using it for email somewhere else?

If you have a custom domain say example.com and you are already using it for email somewhere else e.g. ProtonMail or Namecheap then you cannot also use it simultaneously with addy.io.

This is because emails cannot be handled by multiple different mail servers at the same time, even if they have the same priority MX records. It can only be delivered to one mail server at a time which will typically be the MX record with the smallest number since this has the highest priority.

You can either:

  • Migrate your domain to addy.io by removing the current provider's MX records and adding addy.io's.
  • Or, if you would like to keep using your domain with your current email provider then I would recommend instead adding a subdomain of it to addy.io such as mail.example.com.

Using a subdomain will not interfere with your current email setup and you'll be able to create aliases *@mail.example.com through addy.io.

Why should I use this instead of a similar service?

Here are a few reasons I can think of:

  • Bring your own GPG/OpenPGP key to encrypt your forwarded emails (and the option to replace subjects)
  • No adverts
  • No analytics or trackers (just server access logs)
  • No third party content
  • Open-source application code
  • No limitation on the number of aliases that can be created
  • Generous monthly bandwidth
  • Multiple domains to choose for aliases (currently anonaddy.com, anonaddy.me and more for paid plan users)
  • Ability to generate random character and random word aliases at shared domains
  • Ability to add additional usernames to compartmentalise aliases
  • New features added regularly

Is there a browser extension?

Yes there is an open-source browser extension available to download for Firefox and Chrome (also available on other chromium based browsers such as Brave and Vivaldi). You can use the extension to generate new aliases remotely.

Is there an Android app?

Yes, there is an excellent open-source Android app created by Stjin that is available to download from the Play Store (paid) and F-Droid (free). The developer of this app has put in a lot of time and effort so if you would like to support him please purchase the Play Store version.

There is also another open-source Android app created by KhalidWar available on the Play Store.

Is there an iOS app?

Yes, KhalidWar's open-source app from above is also available on the App Store.

Is there a Raycast extension?

Yes, http.james' open-source extension is available on the Raycast Store.

How do I add my own GPG/OpenPGP key for encryption?

On the recipients page you simply need to click "Add public key" and paste in your public key data. Now all emails forwarded to you will be encrypted with your key. You can even hide and encrypt the subject as addy.io supports protected headers.

Are attachments encrypted too?

Yes attachments are part of the email body and are also encrypted if you have it enabled.

Are forwarded emails signed when encryption is enabled?

Yes when you have encryption enabled all forwarded emails are signed using our [email protected] private key.

You can add this key to your own keyring so that you can verify emails have come from us.

The fingerprint of the [email protected] key is "26A987650243B28802524E2F809FD0D502E2F695" you can find the key on https://keys.openpgp.org.

Can I reply/send from aliases using encryption?

  1. If the person you are sending your message to already uses GPG/OpenPGP encryption then you can simply encrypt your reply/send from your alias using their public key.

  2. If the person you are sending your message to does not use GPG/OpenPGP encryption then you can instead encrypt your reply/send with the [email protected] public key ("26A987650243B28802524E2F809FD0D502E2F695"). Your reply/send will then be automatically decrypted on the addy.io server before being sent on to the correct destination in clear text. This is useful if you wish to hide your replies/sends from your email provider such as Gmail.

Is my public GPG/OpenPGP key removed when I reply/send from an alias?

Yes, any attached GPG/OpenPGP public keys or GPG/OpenPGP signatures are automatically removed when replying or sending from an alias. This is to prevent you accidentally revealing your real email address which is usually shown as an identity in your public key.

Can I mark emails forwarded to me by addy.io as spam?

No, you must not mark messages forwarded to you by addy.io as spam as this can damage the reputation of the mail servers and is against the terms and conditions.

If an alias is receiving spam messages then please deactivate it or delete it.

addy.io is signed up to multiple feedback loops (FBLs) that trigger a notification when any messages are marked as spam. Repeatedly marking messages as spam will result in your account being disabled.

Can I use aliases to create multiple accounts on other websites and services?

No, you must not use addy.io to create large numbers of accounts on other websites/services as this is against the terms and conditions.

Can I have multiple Free accounts?

Having multiple Free accounts is not considered an acceptable use of our service. Any users found to be abusing this rule may have their accounts disabled. This does not apply to those with a paid subscription.

What if I don't want anyone to link ownership of my aliases together?

If you're concerned that your aliases are all linked by your username e.g. @johndoe.anonaddy.com, then you have a couple of options:

  1. You can generate random character or random word aliases instead, these are all under a shared domain and cannot be linked to a user.
  2. You can add additional usernames and separate your aliases under each of them. e.g. you could have one username for personal stuff, another for work, another for hobbies etc.

Where is the server located?

The server is located in Amsterdam, Netherlands with Greenhost.net. Greenhost focuses greatly on privacy and security and their servers run entirely on Dutch wind energy. The backup mail server is located in Warsaw, Poland with UpCloud.

What if I don't trust you?

It's good to keep your guard up when online so you should never trust anyone 100%. I'll try my best to be as honest and transparent as I can but if you still aren't convinced you can always just fire up your own server and self-host this application. You'll need to know about server administration and PHP. You can find more information here https://github.com/anonaddy/anonaddy#self-hosting.

What is the maximum number of recipients I can add to an alias?

The limit is currently set to 10 which should suffice in the vast majority of situations.

What happens when I delete my account?

When you delete your account the following happens:

  • All of your recipients are deleted from the database
  • All of your aliases that use a shared domain e.g. @anonaddy.me are soft deleted from the database (this is to prevent any chance of another user generating the same alias in the future) any identifying information e.g the alias description is removed
  • All of your other aliases are deleted from the database
  • All of your custom domains are deleted from the database
  • Your user details are deleted from the database
  • Your username and any additional usernames that you created are encrypted and added to a table in the database. This is to prevent anybody signing up with the same username in the future.
  • Any subscription information is deleted from the database

Does this work with any email provider?

Yes this will work with any provider, although I can't guarantee it won't land in spam initially.

How do I reply to a forwarded email?

Each forwarded email has a From: header set. This header will look something like this:

From: <[email protected]>

Where [email protected] is the address of the person who sent you the email and [email protected] is the alias that forwarded you the email.

All you need to do is click reply in your email client or web interface and it will automatically fill the To: field with the correct address.

To check if a reply has worked properly check in your dashboard if the reply count has been incremented for that alias.

For further details please see this help article - Replying to email using an alias.

I'm trying to reply/send from an alias but the email keeps coming back to me, what's wrong?

If you are trying to reply or send from an alias but the email keeps coming back to yourself then it is most likely because you are not sending the message from an email address that is not listed as a verified recipient on your addy.io account.

If you try to reply or send from an alias using an unverified email address then the message will simply be forwarded to you as it would be if it was sent by any other sender.

Please double check that you are indeed sending from a verified recipient email address by inspecting your sent items to see which address it was actually sent from.

I'm trying to reply/send from an alias but it is rejected, what's wrong?

If you see the rejection message 550 5.1.1 Recipient address rejected: Address does not exist then this means that the alias has either been deleted or does not yet exist (and you do not have catch-all enabled), you must restore (or create) it before you can send/reply from it.

If you receive an email notification with the subject "Attempted reply/send from alias has failed" then it is usually because you have a verified recipient that is using your own domain which does not have a DMARC policy.

Note: This is referring to your verified recipient address on your addy.io account and not any of your custom domains or the email address that you are replying / sending to

When replying or sending from an alias, additional checks are carried out to ensure it is not a spoofed email. Your addy.io recipient's email domain must pass DMARC checks in order to protect against spoofed emails and to make sure that the reply/send from attempt definitely came from your recipient.

For example if the verified recipient on your addy.io account is [email protected] and you get this email notification then it is because the domain "example.com" does not have a DMARC policy in place.

To resolve this you simply need to add a DMARC record, for example:

Type Host Value
TXT _dmarc "v=DMARC1; p=quarantine; adkim=s"

You should also have SPF and DKIM records in place.

To learn more about DMARC please see this site - https://dmarc.org/.

If your addy.io recipient is with a popular mail service provider for example: Gmail, Outlook, Tutanota, Mailbox.org, Protonmail etc. then they will already have a DMARC policy in place so you do not need to take any action.

I've been forwarded an email with a red warning banner saying it may have been spoofed, what does it mean?

If an incoming email looks like spam (for example, because it has failed its DMARC check) then a red warning banner is added by addy.io before forwarding the message on to you. This warning banner is added in order to help protect you from any potential phishing attempts, for example someone pretending to be your bank.

Most of the time this is nothing to worry about and is just because the sender has not correctly configured their DNS records.

To see why this banner was added you can view the headers of the received email and look for the header called 'X-AnonAddy-Authentication-Results'. This header shows the original email's authentication results and will show you why the email failed its DMARC checks.

Does addy.io strip out the banner information when I reply to an email?

Yes, the email banner "This email was sent to..." will be automatically removed when you reply to any messages. You can test this by replying to yourself from one of your aliases.

Make sure not to alter or edit the email banner as this may cause issues when trying to match and remove it. You can still remove it manually from the quoted message of your reply if you wish.

How do I send email from an alias?

This works in the same way as replying to an email.

Let's say that you have the alias [email protected] and you want to send an email to [email protected].

All you need to do is enter the following in the To: field.

<[email protected]>

Note: you must send the email from a verified recipient on your account.

Then send the email exactly as you would any other. To check that the email has sent successfully, look in your dashboard at the sent count column and see if it has been incremented for that alias.

If you want an easy way to construct the correct email address that you should send to you can click "Send from" next to any alias in the web application and after entering the destination address it will display the right email address to use.

This works exactly the same for shared domain aliases, additional usernames and custom domains.

You can even use the send from feature to create an alias on the fly that does not yet exist. This only works for standard aliases or those at custom domains that behave as a catch-all.

You must generate aliases that use shared domains (e.g. [email protected]) beforehand in order to be able to send from them.

If you need to send an email to an address with an extension e.g. [email protected] then it's exactly the same method:

<[email protected]>

Just enter the extension too!

For further details please see this help article - Sending email from an alias.

Will people see my real email if I reply to a forwarded one?

No, your real email will not be shown, the email will look as if it has come from us instead. Just make sure not to include anything that might identify you when composing the reply, i.e. your full name.

Can emails have attachments?

Yes you can add attachments to emails forwarded and replies. Attachments count towards your bandwidth.

What is the max email size limit?

The max email size is currently set to 25MB (including attachments).

What happens if I have a subscription but then cancel it?

If you cancel your subscription it will remain active until the end of your current billing cycle, you will still be able to use your paid plan features until the billing cycle ends.

A few days before your billing cycle ends you will receive an email letting you know the steps you need to take to prevent the loss of any emails. Shortly after ending the following will happen:

  • Any custom domains will be deactivated
  • Any additional usernames will be deactivated
  • If you have any more than 1 recipient they will be deleted
  • Paid account settings will be reverted to default values
  • Any aliases using paid plan only domains will be deactivated
  • If you have any more than 10 aliases using a shared domain e.g. anonaddy.me they will be deactivated
  • If your account username has catch-all disabled then it will be enabled

You will not be able to activate any of the above again until you resubscribe.

If I subscribe will Stripe see my real email address?

When you subscribe you can choose which email to provide to Stripe, feel free to use an alias. This email will be used for notifications from Stripe such as; if your card payment fails or if your card has expired.

How do you prevent spammers?

The following is in place to help prevent spam:

  • Rspamd - Fast, free and open-source spam filtering system
  • DNS blacklist checks - spamhaus.org
  • SPF, DKIM - to check the SPF record on the sender's domain
  • DMARC - to check for email spoofing and reject emails that fail
  • FQDN - the sender must be using a valid fully qualified domain name
  • PTR record check - if the sender has no valid PTR record it is rejected

What do you use to do DNS lookups on domain names?

The server is running a local DNS caching server to improve the speed of queries.

Is there a limit to how many emails I can forward?

Not unless you are really going to town. Each user is throttled to 200 emails per hour through the server.

Is there a limit to how many aliases I can create per hour?

Currently you are limited to creating 10 new aliases per hour on the free plan, 20 per hour on the Lite plan and 50 per hour on the Pro plan. If you try to create more than this the emails will be deferred until you are back below the limit.

How is my bandwidth calculated?

Each time a new email is received Postfix calculates its size in bytes. A column in the database is then simply incremented by that size when the email is forwarded or a reply is sent. At the start of each month your bandwidth is reset to 0.

I don't use rolling 30 day total as the only way to do this would be to log the date and size of every single email received.

Blocked emails do not count towards your bandwidth (e.g. if an alias is inactive or deleted).

How many emails can I receive before I go over my bandwidth limit?

The average email is about 76800 bytes (75KB), this is roughly equivalent to 7,000 words in plain text. So the 10MB monthly allowance would be around 140 emails and the Lite plan's 100MB would be almost 1,400 emails.

What happens if I go over my bandwidth limit in a given month?

If you get close to your limit (over 80%) you'll be sent an email letting you know. If you continue and go over your limit the server will respond to any delivery attempts to your aliases with the following: 552 5.2.2 Recipient address rejected: User over quota until your bandwidth resets the next month or you upgrade your plan.

Can I login using an additional username?

Yes, you can login with any of your usernames. You can add 1 additional username as a Lite user and up to 10 additional usernames as a Pro user for totals of 2 and 11 respectively (including the one you signed up with).

I'm not receiving any emails, what's wrong?

Please make sure to add [email protected] and any aliases you use to your address book and also to check your spam folder. Make sure to mark emails from addy.io as safe if they turn up in spam.

If an alias has been deleted and you try to send email to it, the emails will be rejected with an error message - "550 5.1.1 Recipient address rejected: Address does not exist".

Check that you have not deactivated the alias, custom domain or additional username. When any of these are deactivated, emails will be silently discarded, they will not be rejected or return any error message.

The sender of the email may be failing SPF, DMARC or DNS blacklist checks resulting in the email being rejected. The sender should also have correct reverse DNS setup and use a FQDN as their hostname.

If you are forwarding emails to an icloud.com email address some users are having issues with a small number of emails being rejected (often those from Facebook).

For some reason Apple seems to think these emails are spam/phishing and returns this error message:

Diagnostic-Code: smtp; 550 5.7.1 [CS01] Message rejected due to local policy.

If you are having issues with emails being rejected as "possibly spammy" by Google, iCloud or Microsoft then please try the following steps if you can:

  1. Replace the email subject by going to your settings in addy.io
  2. Try adding a GPG key and enabling encryption. This will prevent the email's content being scanned and reduce the chance of it being rejected.
  3. Enable the option to hide and encrypt the email subject
  4. Try disabling the banner information on forwarded emails
  5. Try adding the alias email (and/or domain) to your contact list (address book) or safe senders list if possible

For Outlook, Hotmail or MSN you can find instructions on how to add a domain to your safe senders list here.

I will also soon be adding an option to change the format of the display from part of the "From:" header.

If neither of the above options work then please try changing to another recipient so that you can continue to receive emails.

If you still aren't receiving emails please contact me.

I'm having trouble logging in, what's wrong?

If you are having trouble logging in it will likely fall under one of the following scenarios:

  1. Incorrect username

Please make sure you are using your account username (e.g. johndoe) and not your email address to try to login.

  1. Forgotten password

If you've forgotten your password you can reset it by entering your username here - https://app.addy.io/password/reset

  1. Forgotten username

If you've forgotten your username you can request a reminder by entering your email address here - https://app.addy.io/username/reminder

  1. Lost 2FA device

Please use the backup code that you were shown when you enabled 2FA.

  1. Errors with hardware security key

If you have a YubiKey and are using Windows and have an issue with your personal password/PIN you may need to reset the key using the YubiKey manager software.

How do I know this site won't disappear next month?

I am very passionate about this project. I use it myself every day and will be keeping it running indefinitely. The service also provides me with an income.

What happens to addy.io if you die?

I do have someone in place who can keep the service running in the event of me not being here. They are able to continue paying for the servers that host addy.io and the domains that it uses. All addy.io domains also always have over 5 years until they expire.

They would make a Twitter announcement informing all users that they would be keeping the service running. You would then be able to decide whether you'd like to continue using addy.io or start to update your email addresses.

Is the application tested?

Yes it has over 200 automated PHPUnit tests written.

How do I host this myself?

You will need to set up your own server with Postfix so that you can pipe the received mail to the application. You can find more information here https://github.com/anonaddy/anonaddy#self-hosting.

For those who prefer using Docker there is an image you can use here - github.com/anonaddy/docker.

Who's behind addy.io?

My name is Will Browning, I'm a web developer from the UK and an advocate for online privacy and open-source software. You can find me on Twitter although I don't tweet that much!

I couldn't find an answer to my question, how can I contact you?

For any other questions just send an email to - contact (at) help.addy.io (GPG Key)

Self Hosting

Software Requirements

  • Postfix (3.0.0+) (plus postfix-mysql for database queries and postfix-pcre)
  • PHP (8.2+) and the php-mailparse extension, the php-gnupg extension if you plan to encrypt forwarded emails, the php-imagick extension for generating 2FA QR codes
  • Port 25 unblocked and open
  • Redis (7.x+) for throttling and queues
  • FQDN as hostname e.g. mail.anonaddy.me
  • MariaDB / MySQL
  • Nginx
  • Rspamd
  • DNS records - MX, SPF, DKIM, DMARC
  • Reverse DNS
  • SSL/TLS Encryption - you can install a free certificate from Letโ€™s Encrypt.

For full details please see the self-hosting instructions file.

My sponsors

Thanks to Vlad Timofeev, Patrick Dobler, Luca Steeb, narolinus and Lukas for supporting me by sponsoring the project on GitHub!

Also an extra special thanks to CrazyMax for sponsoring me and also creating and maintaining the awesome addy.io Docker image!

Thanks

Huge thank you to Stjin and KhalidWar for their amazing mobile apps.

Also to https://gitlab.com/mailcare/mailcare and https://github.com/niftylettuce/forward-email for their awesome open-source projects that helped me along the way.

License

GNU Affero General Public License v3.0. Please see License File for more information.

docker's People

Contributors

bermudi avatar crazy-max avatar dependabot[bot] avatar eleith avatar fabiowidmer avatar flash1232 avatar hobgoblina avatar j4ns-r avatar kevinroebert avatar luckydonald avatar nogweii avatar peterdavehello avatar rehanone avatar rriski avatar slurdge avatar willbrowningme avatar zegorax avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

docker's Issues

"anonaddy": executable file not found anymore after update from 0.6.0

Behaviour

The anonaddy executable is not found anymore after upgrading the docker container from 0.6.0 to the current version 0.7.1.
Furthermore login via the website is not possible as well.
However, access via applications that are using API keys works as well as all normal operations for existing users.

Steps to reproduce this issue

  1. Setup a anonaddy docker image version 0.6.0
  2. Stop the container.
  3. Update the container with "docker-compose pull"
  4. Start the container again with docker-compose up -d

Expected behaviour

a) When executing "docker-compose exec anonaddy anonaddy list" the available administrative commands should be listed.
b) After calling the webapp in the browser and entering the correct credentials the user is forwarded to his status page etc.

Actual behaviour

a) The following error is displayed: "OCI runtime exec failed: exec failed: container_linux.go:370: starting container process caused: exec: "anonaddy": executable file not found in $PATH: unknown"

b) The login page is reloaded with no error message what so ever.

Configuration

  • Docker version (type docker --version) : Docker version 20.10.0, build 7287ab3
  • Docker compose version if applicable (type docker-compose --version) : docker-compose version 1.27.4, build 40524192
  • Platform (Debian 9, Ubuntu 18.04, ...) : Debian 10
  • System info (type uname -a) : Linux domain.com 4.19.0-13-amd64 #1 SMP Debian 4.19.160-2 (2020-11-28) x86_64 GNU/Linux

Logs

Syslog reports on container startup various times:

Feb 27 16:00:03 server sh[4901]: #33[36manonaddy |#33[0m /var/run/s6/etc/cont-init.d/04-svc-main.sh: line 7: /usr/local/bin/anonaddy: Permission denied
Feb 27 16:00:03 server sh[4901]: #33[36manonaddy |#33[0m /var/run/s6/etc/cont-init.d/04-svc-main.sh: line 8: /usr/local/bin/anonaddy: Permission denied
Feb 27 16:00:03 server sh[4901]: #33[36manonaddy |#33[0m /var/run/s6/etc/cont-init.d/04-svc-main.sh: line 9: /usr/local/bin/anonaddy: Permission denied
Feb 27 16:00:03 server sh[4901]: #33[36manonaddy |#33[0m /var/run/s6/etc/cont-init.d/04-svc-main.sh: line 10: /usr/local/bin/anonaddy: Permission denied
Feb 27 16:00:03 server sh[4901]: #33[36manonaddy |#33[0m /var/run/s6/etc/cont-init.d/04-svc-main.sh: line 11: /usr/local/bin/anonaddy: Permission denied

APP_NAME should be forwarded

Right now, the app name is always AnonAddy, but it will cause confusion with the real service (for example it will write ยฉ 2019 AnonAddy. All rights reserved. to the bottom of confirmation emails).
We should allow the use of another name in the env and forward it.

Some sender IPs are seen from docker and rejected

While doing tests, I had no problem forwarding emails. However, if I send an email from gmail to a forwarded address, the IP address that postfix sees is the internal docker address.

This creates the following error:

NOQUEUE: reject: RCPT from unknown[192.168.176.1]: 450 4.7.1 Client host rejected: cannot find your reverse hostname, [192.168.176.1]; from=<[email protected]> to=<[email protected]> proto=ESMTP helo=<mail-qv1-xf41.google.com>

I solved temporary by adding 192.168.176.* to allowed_networks but I'm not sure this is the right solution. Any idea on why some hosts will be seen with their external IPs and some other with the docker IP ?

ANONADDY_HOSTNAME environment variable is ignored in Postfix

Behaviour

The hostname in Postfix is always set to mail.${ANONADDY_DOMAIN}, and the ANONADDY_HOSTNAME environment variable is ignored.

Postfix always then shows the SMTP session banner as 220 mail.something.us ESMTP instead of the expected 220 mta08.something.us ESMTP, the configured hostname in anonaddy.env.

Likely issue

It looks like the issue is in Line 348 of 03-config.sh

cat >> /etc/postfix/main.cf <<EOL
myhostname = mail.${ANONADDY_DOMAIN}

Manually setting hostname

If the hostname is set manually by running postconf -e 'myhostname = mta08.something.us', the configuration line is duplicated, and errors appear in the logs upon restarting:

Jul 24 21:35:17 mail postfix/tlsmgr[1241]: warning: /etc/postfix/main.cf, line 772: overriding earlier entry: myhostname=mta08.something.us

blank page after login with 0.5.x

Behaviour

Impossible to display website when logged.

Steps to reproduce this issue

  1. install latest docker image (0.5.x)
  2. register new account
  3. verify email
  4. try to login

Expected behaviour

You should see Anonaddy page

Actual behaviour

I can register and verify email. After that, after login, i got blank page, no error, javascript is successfully load but the app seems to not be initialized

Allow (and default to) sendmail as driver for sending email

Right now, the default (hardcoded) driver is smtp but it doesn't make sense since anonaddy is well able to send emails.

MAIL_DRIVER should be forwarded (as per the config.sh file) and also, should default to sendmail. By changing this, then the confirmation email could be sent.
Also, the MAIL_FROM_ADDRESS, if empty, could default to anonaddy@{ANONADDY_HOSTNAME} instead of example.com.

Error 500 when i try to generate API token

Behaviour

Should be able to generate API Token

Steps to reproduce this issue

  1. Go to settings page
  2. Click on "Generate New Token"
  3. Fill the field and click on "Generate Token"

Expected behaviour

When i click on generate api token, i should show the new token

Actual behaviour

When i click on generate api token, i see no error message. I can see a 500 error in network tab.

Docker info

Logs

2020-10-26 10:45:00,stdout,crond: USER anonaddy pid 1013 cmd php /var/www/anonaddy/artisan schedule:run --no-ansi --no-interaction --quiet
2020-10-26 10:44:15,stdout,"172.17.0.1 - - [26/Oct/2020:10:44:15 +0000] \"POST /oauth/personal-access-tokens HTTP/1.1\" 500 14484 \"https://anonaddy.DOMAIN.com/settings\" \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36\"
2020-10-26 10:44:10,stdout,"172.17.0.1 - - [26/Oct/2020:10:44:10 +0000] \"GET /site.webmanifest HTTP/1.1\" 200 442 \"https://anonaddy.DOMAIN.com/settings\" \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36\"
2020-10-26 10:44:10,stdout,"172.17.0.1 - - [26/Oct/2020:10:44:10 +0000] \"GET /oauth/personal-access-tokens HTTP/1.1\" 200 33 \"https://anonaddy.DOMAIN.com/settings\" \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36\"
2020-10-26 10:44:10,stdout,"172.17.0.1 - - [26/Oct/2020:10:44:10 +0000] \"GET /settings HTTP/1.1\" 200 15659 \"https://anonaddy.DOMAIN.com/recipients\" \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36\"
2020-10-26 10:44:02,stdout,Oct 26 10:44:02 mail postfix/smtpd[1011]: disconnect from unknown[172.17.0.1] ehlo=1 auth=0/1 quit=1 commands=2/3
2020-10-26 10:44:02,stdout,Oct 26 10:44:02 mail postfix/smtpd[1011]: connect from unknown[172.17.0.1]
2020-10-26 10:44:00,stdout,crond: USER anonaddy pid 1004 cmd php /var/www/anonaddy/artisan schedule:run --no-ansi --no-interaction --quiet
2020-10-26 10:43:00,stdout,crond: USER anonaddy pid 997 cmd php /var/www/anonaddy/artisan schedule:run --no-ansi --no-interaction --quiet
2020-10-26 10:42:00,stdout,crond: USER anonaddy pid 990 cmd php /var/www/anonaddy/artisan schedule:run --no-ansi --no-interaction --quiet
2020-10-26 10:41:59,stdout,"172.17.0.1 - - [26/Oct/2020:10:41:59 +0000] \"POST /oauth/personal-access-tokens HTTP/1.1\" 500 14484 \"https://anonaddy.DOMAIN.com/settings\" \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36\"
2020-10-26 10:41:50,stdout,"172.17.0.1 - - [26/Oct/2020:10:41:50 +0000] \"POST /oauth/personal-access-tokens HTTP/1.1\" 500 14484 \"https://anonaddy.DOMAIN.com/settings\" \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36\"
2020-10-26 10:41:44,stdout,"172.17.0.1 - - [26/Oct/2020:10:41:44 +0000] \"GET /oauth/personal-access-tokens HTTP/1.1\" 200 33 \"https://anonaddy.DOMAIN.com/settings\" \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36\"

Split the postfix+php from the nginx+php

Since the cron is already a separate container, we should separate the postfix container from the nginx one, since their only link is through the database.

It should be possible to add all the spamassassin etc. to the postfix one later.

Alias domain is empty

Not sure if this is due to dockerisation, but when creating a UUID alias, the field for alias domain is empty.

The domain is correctly set everywhere else. I didn't find the root cause yet.

image

Support DMARC and DKIM

Thanks for the docker image.

Would like to know if it is possible to add support for DMARC and DKIM into docker image?
Currently, the email I reply to anonymously most likely will go to spam folder at the first time, till the receiver while-list the email address.
I manually add DKIM and DMARC to the image, but the DKIM always not been signed when I reply.
Or if there is a way that I can add this from the image?
Thanks.

User management & admin user

As far as I know, the first user isn't really "admin". Therefore the command to seed the db should probably renamed to "add users" and take user & password as arguments (or a file containing them).
It would also allow creation of user if the configuration of registration is "false" (the default)

Emails not sent in 0.6.0

Behaviour

Email are not sent. It's ok with the same docker configuration with 0.5.0 but KO in 0.6.0.

Steps to reproduce this issue

  1. Register a new account or validate a new recipient
  2. Send the verification email

Expected behaviour

should receive the email in mailbox

Actual behaviour

no postfix error, but no email.

If used with PUID=1001 and GUID=1001, the scripts fail to start

Behaviour

Steps to reproduce this issue

  1. Use the docker-compose file
  2. Change the PUID & GUID to 1001
  3. Execute docker-compose logs:
anonaddy    |   file_put_contents(/var/www/anonaddy/bootstrap/cache/config.php): failed to   
anonaddy    |   open stream: Permission denied                                               

anonaddy    |   copy(/var/www/anonaddy/config/trustedproxy.php): failed to open stream: Per  
anonaddy    |   mission denied                                                               

Expected behaviour

Instance should start

Configuration

  • Docker version (type docker --version) : Docker version 19.03.5, build 633a0ea838
  • Docker compose version if applicable (type docker-compose --version) : docker-compose version 1.23.2, build 1110ad01
  • Platform (Debian 9, Ubuntu 18.04, ...) : Debian 9
  • System info (type uname -a) : Linux 4.9.0-8-amd64 #1 SMP Debian 4.9.130-2 (2018-10-27) x86_64 GNU/Linux
  • Include all necessary configuration files : docker-compose.yml, .env, ...

Intermittent 504 Bad Gateway

Behaviour

Random 504 errors when trying to navigate through the app/pages

Steps to reproduce this issue

  1. Create new folder and files from templates
  2. Edit with my info
  3. sudo docker-compose up -d
  4. Go to URL of app

Expected behaviour

App/pages should not 504 all the time and just work normally navigating through app/pages

Actual behaviour

Page might load correctly. Attempt to do something on page (login, register, etc), get a 504 error. Reload page. Get 504 now. Reload again, page loads. Try to do previous thing again and page might load or it might 504 again.

Configuration

  • Docker version (type docker --version) : Docker version 19.03.8, build afacb8b7f0
  • Docker compose version if applicable (type docker-compose --version) : docker-compose version 1.25.0, build unknown
  • Platform (Debian 9, Ubuntu 18.04, ...) : Ubuntu 20.04.2 LTS
  • System info (type uname -a) : Linux sole 5.4.87-218 #1 SMP PREEMPT Wed Jan 6 16:24:35 EST 2021 armv7l armv7l armv7l GNU/Linux
  • Include all necessary configuration files : docker-compose.yml, .env, ...

docker-compose.yml


services:
  db:
    image: yobasystems/alpine-mariadb:latest
    container_name: anonaddy_db
    volumes:
      - "./db:/var/lib/mysql"
    environment:
      - "MYSQL_ALLOW_EMPTY_PASSWORD=yes"
      - "MYSQL_DATABASE"
      - "MYSQL_USER"
      - "MYSQL_PASSWORD"
    restart: always

  redis:
    image: redis:alpine
    container_name: anonaddy_redis
    restart: always

  anonaddy:
    image: anonaddy/anonaddy:latest
    container_name: anonaddy
    depends_on:
      - db
      - redis
    ports:
      - target: 25
        published: 25
        protocol: tcp
      - target: 8000
        published: 8000
        protocol: tcp
    volumes:
      - "./data:/data"
    env_file:
      - "./anonaddy.env"
    environment:
      - "DB_HOST=db"
      - "DB_DATABASE=${MYSQL_DATABASE}"
      - "DB_USERNAME=${MYSQL_USER}"
      - "DB_PASSWORD=${MYSQL_PASSWORD}"
      - "REDIS_HOST=redis"
    restart: always

anonaddy.env

TZ=Europe/Paris
PUID=1000
PGID=1000

MEMORY_LIMIT=256M
UPLOAD_MAX_SIZE=16M
OPCACHE_MEM_SIZE=128
REAL_IP_FROM=0.0.0.0/32
REAL_IP_HEADER=X-Forwarded-For
LOG_IP_VAR=remote_addr

APP_KEY=base64:generated val
APP_DEBUG=false
APP_URL=http://127.0.0.1:8000

[email protected]
ANONADDY_ADMIN_USERNAME=anonaddy
ANONADDY_ENABLE_REGISTRATION=true
ANONADDY_DOMAIN=example.com
ANONADDY_ALL_DOMAINS=example.com
ANONADDY_HOSTNAME=mail.example.com
ANONADDY_DNS_RESOLVER=127.0.0.1
ANONADDY_SECRET=random string
ANONADDY_LIMIT=200
ANONADDY_BANDWIDTH_LIMIT=104857600
ANONADDY_NEW_ALIAS_LIMIT=10
ANONADDY_ADDITIONAL_USERNAME_LIMIT=3

MAIL_FROM_NAME=AnonAddy
[email protected]

POSTFIX_DEBUG=false
POSTFIX_SMTPD_TLS=false
POSTFIX_SMTP_TLS=false

.env

MYSQL_DATABASE=anonaddy
MYSQL_USER=anonaddy
MYSQL_PASSWORD=anonaddy

Logs

This is constantly being outputted if I do sudo docker-compose logs -f

anonaddy_1   | s6-supervise nginx: warning: can't happen: timeout while the service is up!
anonaddy_1   | s6-supervise php-fpm: warning: can't happen: timeout while the service is up!
anonaddy_1   | s6-supervise socklog: warning: can't happen: timeout while the service is up!
anonaddy_1   | s6-supervise postfix: warning: can't happen: timeout while the service is up!
anonaddy_1   | s6-supervise cron: warning: can't happen: timeout while the service is up!
anonaddy_1   | s6-supervise socklog/log: warning: can't happen: timeout while the service is up!

[Enhancement] Add support scripts for starting/stopping as well as a systemd service

I recently set up an searx-docker instance and they deliver some simple but useful scripts to start/stop the compose process as well as setting up a systemd service for that.
Since the whole thing is mostly generic I thought it would be a nice idea to add it to this project as well.

Start: https://github.com/searx/searx-docker/blob/master/start.sh
Stop: https://github.com/searx/searx-docker/blob/master/stop.sh
Utility: https://github.com/searx/searx-docker/blob/master/util.sh
Service Template: https://github.com/searx/searx-docker/blob/master/searx-docker.service.template

Cheers.

Usage of nginx as reverse proxy possible?

Hello,

I just tried installing the app. Everything is working fine except the reverse proxy I tried to configure. I would like to use nginx.

So basically my nginx config looks like this:

server {

  server_name anon.mult1.com;

  location / {
      proxy_pass http://anon.mult1.com:8000/;
  }

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/anon.mult1.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/anon.mult1.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}
server {
    if ($host = anon.mult1.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


  listen 80;

  server_name anon.mult1.com;
    return 404; # managed by Certbot


}

I can access the website just fine. But if I try to register an account I do get forwarded to anon.mult1.com:8000 and I don't get why this happens. My anonaddy.env does include this line:

APP_URL=https://anon.mult1.com/

What am I missing?

Thanks in advance!

Only supported ciphers are AES-128 and AES-256

Hello,

When starting to self host anonaddy at home I am unsure of what to use in the ANONADDY_SECRET of my .env file.
Every time the docker container restarts and I attempt to access the web interface, I get the following error in the logs:

2021/07/28 06:42:55 [error] 932#932: *6 FastCGI sent in stderr: "PHP message: PHP Fatal error: Uncaught RuntimeException: The only supported ciphers are AES-128-CBC and AES-256-CBC with the correct key lengths. in /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Encryption/Encrypter.php:44
Stack trace:
#0 /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Encryption/EncryptionServiceProvider.php(32): Illuminate\Encryption\Encrypter->__construct()
#1 /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Container/Container.php(869): Illuminate\Encryption\EncryptionServiceProvider->Illuminate\Encryption\{closure}()

172.28.0.1 - - [28/Jul/2021:06:42:55 +0200] "GET / HTTP/1.1" 500 5 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:90.0) Gecko/20100101 Firefox/90.0"

#2 /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Container/Container.php(754): Illuminate\Container\Container->build()
#3 /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(841): Illuminate\Container\Container->resolve()
#4 /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Container/Container.php(692): Illuminate\Foundation\Application->resolve()
#5 /var/www/anonaddy/vendor/lara...

I have found a workaround by executing the following on my system, but needing to do so everytime the docker container restarts:

docker-compose exec anonaddy php artisan key:generate
docker-compose exec anonaddy php artisan config:clear

What am I supposed to put in the ANONADDY_SECRET field of my .env file. Am I doing something else wrong??

Thanks for your help in advance.

Email not flowing

Behaviour

After setup, it is unable to send verification emails. Manually verifying (changing column in DB) and sending to an alias with my email as the forwarded address doesn't seem to be sending either. None of the containers logs seem to show anything helpful (or that anything is happening at all).

Steps to reproduce this issue

  1. Fresh install, seed the DB
  2. Add a new recipient
  3. Send verification email (automatic)

Expected behaviour

Verification email should come to inbox (or at least spam?)

Actual behaviour

No email received, inbox or spam. Tried multiple email providers. Nothing signification (good or bad) in container logs.

Configuration

  • Docker version (type docker --version) : Docker version 19.03.6, build 369ce74a3c

  • Docker compose version if applicable (type docker-compose --version) : docker-compose version 1.21.2, build a133471

  • Platform (Debian 9, Ubuntu 18.04, ...) : Ubuntu 18.04

  • System info (type uname -a) : Linux 4.15.0-88-generic #88-Ubuntu SMP Tue Feb 11 20:11:34 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

  • Include all necessary configuration files : docker-compose.yml, .env, ...

docker-compose.yml

version: "3.5"
services:
  anonaddy:
    image: crazymax/anonaddy:latest
    container_name: anonaddy
    depends_on:
      - mariadb
      - anonaddy_redis
    volumes:
      - ${HOME}/docker/anonaddy:/data
    env_file:
      - ./anonaddy.env
    environment:
      - DB_HOST=mariadb
      - DB_DATABASE=anonaddy
      - DB_USERNAME=root
      - DB_PASSWORD=${MYSQL_ROOT_PASSWORD}
      - REDIS_HOST=anonaddy_redis
    restart: always
    ports:
      - 8080:8080

  anonaddy_postfix:
    image: crazymax/anonaddy:latest
    container_name: anonaddy_postfix
    depends_on:
      - anonaddy
    ports:
      - 2500:2500
    volumes:
      - ${HOME}/docker/anonaddy:/data
    env_file:
      - ./anonaddy.env
    environment:
      - DB_HOST=mariadb
      - DB_DATABASE=anonaddy
      - DB_USERNAME=root
      - DB_PASSWORD=${MYSQL_ROOT_PASSWORD}
      - REDIS_HOST=anonaddy_redis
      - SIDECAR_POSTFIX=1
    restart: always

  anonaddy_cron:
    image: crazymax/anonaddy:latest
    container_name: anonaddy_cron
    depends_on:
      - anonaddy
    volumes:
      - ${HOME}/docker/anonaddy:/data
    env_file:
      - ./anonaddy.env
    environment:
      - DB_HOST=mariadb
      - DB_DATABASE=anonaddy
      - DB_USERNAME=root
      - DB_PASSWORD=${MYSQL_ROOT_PASSWORD}
      - REDIS_HOST=anonaddy_redis
      - SIDECAR_CRON=1
    restart: always

  anonaddy_redis:
    image: redis:4.0-alpine
    container_name: anonaddy_redis
    restart: always

  mariadb:
    container_name: mariadb
    image: linuxserver/mariadb
    volumes:
      - ${HOME}/docker/mariadb:/config
    ports:
      - 3306:3306
    environment:
      PGID: ${PGID}
      PUID: ${PUID}
      TZ: ${TIMEZONE}
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}

anonaddy.env

TZ=America/New_York
PUID=1000
PGID=1000

MEMORY_LIMIT=256M
UPLOAD_MAX_SIZE=16M
OPCACHE_MEM_SIZE=128
REAL_IP_FROM=0.0.0.0/32
REAL_IP_HEADER=X-Forwarded-For
LOG_IP_VAR=remote_addr

APP_KEY=REDACTED
APP_DEBUG=false
APP_URL=https://anonaddy.MYDOMAIN.com

[email protected]
ANONADDY_ADMIN_USERNAME=anonaddy
ANONADDY_ENABLE_REGISTRATION=false
ANONADDY_DOMAIN=mydomain.com
ANONADDY_HOSTNAME=mail.mydomain.com
ANONADDY_DNS_RESOLVER=1.1.1.1
ANONADDY_SECRET=REDACTED
ANONADDY_LIMIT=200
ANONADDY_BANDWIDTH_LIMIT=104857600
ANONADDY_NEW_ALIAS_LIMIT=10
ANONADDY_ADDITIONAL_USERNAME_LIMIT=3

MAIL_FROM_NAME=AnonAddy
[email protected]

Docker info

Client:
 Debug Mode: false
 Plugins:
  app: Docker Application (Docker Inc., v0.8.0)
  buildx: Build with BuildKit (Docker Inc., v0.3.1-tp-docker)

Server:
 Containers: 87
  Running: 87
  Paused: 0
  Stopped: 0
 Images: 160
 Server Version: 19.03.6
 Storage Driver: overlay2
  Backing Filesystem: extfs
  Supports d_type: true
  Native Overlay Diff: true
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
 Swarm: inactive
 Runtimes: runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 35bd7a5f69c13e1563af8a93431411cd9ecf5021
 runc version: dc9208a3303feef5b3839f4323d9beb36df0a9dd
 init version: fec3683
 Security Options:
  apparmor
  seccomp
   Profile: default
 Kernel Version: 4.15.0-88-generic
 Operating System: Ubuntu 18.04.4 LTS
 OSType: linux
 Architecture: x86_64
 CPUs: 24
 Total Memory: 62.88GiB
 Name: localhost
 ID: 6XPE:ZETM:Y5D2:EZFD:DXJG:SXRK:7VEF:G5LV:OPNJ:TMHV:2CP7:2PII
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Username: alexphillips
 Registry: https://index.docker.io/v1/
 Labels:
 Experimental: false
 Insecure Registries:
  127.0.0.0/8
 Live Restore Enabled: false

WARNING: No swap limit support

Logs

anonaddy

s6-init] making user provided files available at /var/run/s6/etc...exited 0.
[s6-init] ensuring user provided files have correct perms...exited 0.
[fix-attrs.d] applying ownership & permissions fixes...
[fix-attrs.d] done.
[cont-init.d] executing container initialization scripts...
[cont-init.d] 00-fix-logs.sh: executing... 
[cont-init.d] 00-fix-logs.sh: exited 0.
[cont-init.d] 01-fix-uidgid.sh: executing... 
[cont-init.d] 01-fix-uidgid.sh: exited 0.
[cont-init.d] 02-fix-perms.sh: executing... 
Fixing perms...
[cont-init.d] 02-fix-perms.sh: exited 0.
[cont-init.d] 03-config.sh: executing... 
Setting timezone to America/New_York...
Setting PHP-FPM configuration...
Setting PHP INI configuration...
Setting OpCache configuration...
Setting Nginx configuration...
Initializing files and folders...
Checking database connection...
Waiting 60s for database to be ready...
Database ready!
Creating AnonAddy env file...
Copied File [/vendor/fideloper/proxy/config/trustedproxy.php] To [/config/trustedproxy.php]
Publishing complete.
[cont-init.d] 03-config.sh: exited 0.
[cont-init.d] 04-svc-main.sh: executing... 
Nothing to migrate.
Application cache cleared!
Configuration cache cleared!
Configuration cached successfully!
[cont-init.d] 04-svc-main.sh: exited 0.
[cont-init.d] 05-svc-postfix.sh: executing... 
[cont-init.d] 05-svc-postfix.sh: exited 0.
[cont-init.d] 06-svc-cron.sh: executing... 
[cont-init.d] 06-svc-cron.sh: exited 0.
[cont-init.d] 99-clean.sh: executing... 
[cont-init.d] 99-clean.sh: exited 0.
[cont-init.d] done.
[services.d] starting services
[services.d] done.
2020/03/16 11:55:29 [notice] 324#324: using the "epoll" event method
2020/03/16 11:55:29 [notice] 324#324: nginx/1.16.1
2020/03/16 11:55:29 [notice] 324#324: OS: Linux 4.15.0-88-generic
2020/03/16 11:55:29 [notice] 324#324: getrlimit(RLIMIT_NOFILE): 1048576:1048576
2020/03/16 11:55:29 [notice] 324#324: start worker processes
2020/03/16 11:55:29 [notice] 324#324: start worker process 339
2020/03/16 11:55:29 [notice] 324#324: start worker process 340
2020/03/16 11:55:29 [notice] 324#324: start worker process 341
2020/03/16 11:55:29 [notice] 324#324: start worker process 342
2020/03/16 11:55:29 [notice] 324#324: start worker process 343
2020/03/16 11:55:29 [notice] 324#324: start worker process 344
2020/03/16 11:55:29 [notice] 324#324: start worker process 345
2020/03/16 11:55:29 [notice] 324#324: start worker process 348
2020/03/16 11:55:29 [notice] 324#324: start worker process 355
2020/03/16 11:55:29 [notice] 324#324: start worker process 373
2020/03/16 11:55:29 [notice] 324#324: start worker process 389
2020/03/16 11:55:29 [notice] 324#324: start worker process 409
2020/03/16 11:55:29 [notice] 324#324: start worker process 431
2020/03/16 11:55:29 [notice] 324#324: start worker process 451
2020/03/16 11:55:29 [notice] 324#324: start worker process 477
2020/03/16 11:55:29 [notice] 324#324: start worker process 504
2020/03/16 11:55:29 [notice] 324#324: start worker process 535
2020/03/16 11:55:29 [notice] 324#324: start worker process 579
2020/03/16 11:55:29 [notice] 324#324: start worker process 607
2020/03/16 11:55:29 [notice] 324#324: start worker process 642
2020/03/16 11:55:29 [notice] 324#324: start worker process 700
2020/03/16 11:55:29 [notice] 324#324: start worker process 734
2020/03/16 11:55:29 [notice] 324#324: start worker process 756
2020/03/16 11:55:29 [notice] 324#324: start worker process 778
[16-Mar-2020 11:55:29] NOTICE: fpm is running, pid 325
[16-Mar-2020 11:55:29] NOTICE: ready to handle connections

anonaddy_postfix

[s6-init] making user provided files available at /var/run/s6/etc...exited 0.
[s6-init] ensuring user provided files have correct perms...exited 0.
[fix-attrs.d] applying ownership & permissions fixes...
[fix-attrs.d] done.
[cont-init.d] executing container initialization scripts...
[cont-init.d] 00-fix-logs.sh: executing... 
[cont-init.d] 00-fix-logs.sh: exited 0.
[cont-init.d] 01-fix-uidgid.sh: executing... 
[cont-init.d] 01-fix-uidgid.sh: exited 0.
[cont-init.d] 02-fix-perms.sh: executing... 
Fixing perms...
[cont-init.d] 02-fix-perms.sh: exited 0.
[cont-init.d] 03-config.sh: executing... 
Setting timezone to America/New_York...
Setting PHP-FPM configuration...
Setting PHP INI configuration...
Setting OpCache configuration...
Setting Nginx configuration...
Initializing files and folders...
Checking database connection...
Waiting 60s for database to be ready...
Database ready!
Creating AnonAddy env file...
Copied File [/vendor/fideloper/proxy/config/trustedproxy.php] To [/config/trustedproxy.php]
Publishing complete.
[cont-init.d] 03-config.sh: exited 0.
[cont-init.d] 04-svc-main.sh: executing... 
[cont-init.d] 04-svc-main.sh: exited 0.
[cont-init.d] 05-svc-postfix.sh: executing... 
Setting Postfix master configuration...
Setting Postfix main configuration...
Creating recipient access configuration...
Creating stored procedure...
[cont-init.d] 05-svc-postfix.sh: exited 0.
[cont-init.d] 06-svc-cron.sh: executing... 
[cont-init.d] 06-svc-cron.sh: exited 0.
[cont-init.d] 99-clean.sh: executing... 
[cont-init.d] 99-clean.sh: exited 0.
[cont-init.d] done.
[services.d] starting services
[services.d] done.
Mar 16 11:55:36 mydomain postfix/postfix-script[385]: starting the Postfix mail system
Mar 16 11:55:36 mydomain postfix/master[386]: daemon started -- version 3.4.7, configuration /etc/postfix

anonaddy_redis

1:C 16 Mar 15:55:22.168 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
1:C 16 Mar 15:55:22.168 # Redis version=4.0.14, bits=64, commit=00000000, modified=0, pid=1, just started
1:C 16 Mar 15:55:22.168 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
1:M 16 Mar 15:55:22.170 * Running mode=standalone, port=6379.
1:M 16 Mar 15:55:22.170 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
1:M 16 Mar 15:55:22.170 # Server initialized
1:M 16 Mar 15:55:22.170 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
1:M 16 Mar 15:55:22.170 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
1:M 16 Mar 15:55:22.170 * Ready to accept connections

mariadb

[cont-init.d] 10-adduser: exited 0.
[cont-init.d] 30-config: executing... 
[cont-init.d] 30-config: exited 0.
[cont-init.d] 40-initialise-db: executing... 
[cont-init.d] 40-initialise-db: exited 0.
[cont-init.d] 99-custom-scripts: executing... 
[custom-init] no custom files found exiting...
[cont-init.d] 99-custom-scripts: exited 0.
[cont-init.d] done.
[services.d] starting services
[services.d] done.
200311 20:07:01 mysqld_safe Logging to syslog.
200311 20:07:01 mysqld_safe Starting mysqld daemon with databases from /config/databases

[Improvement] Add a feature to see created users.

It is useful to see how many/when users are created.

Right now I have this script:

set -a
[ -f .env ] && . .env
set +a
docker-compose exec anonaddy mysql --host db --database $MYSQL_DATABASE --user $MYSQL_USER -p$MYSQL_PASSWORD -e "select id, username, created_at, updated_at from users;"

which does the job, but we could integrate it directly into the docker image in order to have a command like
docker-compose exec anonaddy get_users

My docker-fu is a bit lacking, but if pointed in to the right direction I can try a PR.

500 Server Error | Docker-Compose Instructions?

Behaviour

Steps to reproduce this issue

  1. Loaded the sample docker-compose.yml file with some of my own changes
  2. Loaded the sample .env file
  3. Ran Docker-compose

Expected behaviour

Fully running website

Tell me what should happen

Actual behaviour

Tell me what happens instead

I get a 500 Server error on page load

Configuration

  • Docker version (type docker --version) :
  • Docker compose version if applicable (type docker-compose --version) :
  • Platform (Debian 9, Ubuntu 18.04, ...) :
  • System info (type uname -a) :
  • Include all necessary configuration files : docker-compose.yml, .env, ...

Docker info

Client:
 Context:    default
 Debug Mode: false
 Plugins:
  app: Docker App (Docker Inc., v0.9.1-beta3)
  buildx: Build with BuildKit (Docker Inc., v0.5.1-docker)

Server:
 Containers: 10
  Running: 9
  Paused: 0
  Stopped: 1
 Images: 9
 Server Version: 20.10.2
 Storage Driver: overlay2
  Backing Filesystem: extfs
  Supports d_type: true
  Native Overlay Diff: true
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
 Cgroup Version: 1
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
 Swarm: inactive
 Runtimes: io.containerd.runtime.v1.linux runc io.containerd.runc.v2
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 269548fa27e0089a8b8278fc4fc781d7f65a939b
 runc version: ff819c7e9184c13b7c2607fe6c30ae19403a7aff
 init version: de40ad0
 Security Options:
  apparmor
  seccomp
   Profile: default
 Kernel Version: 5.8.0-25-generic
 Operating System: Ubuntu 20.10
 OSType: linux
 Architecture: x86_64
 CPUs: 1
 Total Memory: 977.5MiB
 Name: MMMauiServers
 ID: FGIA:JIZK:Q4HK:A6ME:QGC3:HWKO:T7HA:TZ6K:54OU:GTYJ:BSCW:JWAD
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Registry: https://index.docker.io/v1/
 Labels:
 Experimental: false
 Insecure Registries:
  127.0.0.0/8
 Live Restore Enabled: false

WARNING: No blkio weight support
WARNING: No blkio weight_device support

Below is my compose and .env files

version: "3.5"

services:

  Redis:
    image: redis:4.0-alpine
    container_name: AnonAddy_Redis
    hostname: redis
    restart: always

  AnonAddy:
    image: anonaddy/anonaddy:latest
    container_name: AnonAddy
    hostname: AnonAddy
    depends_on:
      - Redis
    ports:
      - "25:25"
      - "86:8000"
    volumes:
      - "/opt/anonaddy:/data"
    env_file:
      - "./anonaddy.env"
    environment:
      - "DB_HOST=MariaDB"
      - "DB_DATABASE=AnonAddy"
      - "DB_USERNAME=AnonAddy"
      - "DB_PASSWORD=password"
      - "REDIS_HOST=redis"
    restart: always

    networks:
      Network-Bridge:
        ipv4_address: 172.0.0.3

networks:
  Network-Bridge:
    driver: bridge
    name: Network-Bridge
    ipam:
     config:
       - subnet: 172.0.0.0/16

TZ=Pacific/Honolulu
PUID=1000
PGID=1000

MEMORY_LIMIT=256M
UPLOAD_MAX_SIZE=30M
OPCACHE_MEM_SIZE=128
REAL_IP_FROM=0.0.0.0/32
REAL_IP_HEADER=X-Forwarded-For
LOG_IP_VAR=remote_addr

APP_KEY=(Randomly generated 64 character string)
APP_DEBUG=false
APP_URL=https://mail.server.com

[email protected]
[email protected]
ANONADDY_ENABLE_REGISTRATION=true
ANONADDY_DOMAIN=server.com
ANONADDY_ALL_DOMAINS=mail.server.com
ANONADDY_HOSTNAME=mail.server.com
ANONADDY_DNS_RESOLVER=127.0.0.1
ANONADDY_SECRET=(Randomly generated 64 character string)
ANONADDY_LIMIT=200
ANONADDY_BANDWIDTH_LIMIT=104857600
ANONADDY_NEW_ALIAS_LIMIT=10
ANONADDY_ADDITIONAL_USERNAME_LIMIT=3

MAIL_FROM_NAME=AnonAddy
[email protected]

POSTFIX_DEBUG=false
POSTFIX_SMTPD_TLS=false
POSTFIX_SMTP_TLS=false

DKIM works only for subdomain

I got the whole setup to work with traefik on SwarmPit but there are some issues:
I don't get any logs even though I have APP_DEBUG set to true and DKIM/ DMARC_ENABLE as well. I also have my domain.tld.private and domain.tld.txt files inside /data/dkim/.

Everything seems to work fine including sending and receiving mail via the aliases except there are no DKIM Signatures present on the mails. I don't have any file inside storage/logs other than the .gitignore file (namely, no laravel.log). Also, sometimes after a re-deploy the web interface throws a Gateway Timeout (504) until I re-deploy again (seems to be similar to #48).

EDIT: The Gateway errors were caused by using traefik along with Tecnativa docker-proxy. Resolved.

I set up SPF, DKIM, DMARC and the MX records but I haven't been able to find a way to get the PTR yet. Might this be an issue for DKIM to not work properly?

EDIT 2: PTR created.

One more thing to note is that I am hosting the app on "domain.com" whereas I am using "otherdomain.xyz" for the mail addresses/ aliases.

EDIT 2: I am now hosting everything on "otherdomain.xyz". Configs are different but the issue has been partially resolved. Will follow up on that if I can't get it to work. DKIM headers are only present on mails forwarded for "[email protected]" but not for "[email protected]".

Container logs:

v3tc5  [s6-init] making user provided files available at /var/run/s6/etc...exited 0.
v3tc5  [s6-init] ensuring user provided files have correct perms...exited 0.
v3tc5  [fix-attrs.d] applying ownership & permissions fixes...
v3tc5  [fix-attrs.d] done.
v3tc5  [cont-init.d] executing container initialization scripts...
v3tc5  [cont-init.d] 00-fix-logs.sh: executing...
v3tc5  [cont-init.d] 00-fix-logs.sh: exited 0.
v3tc5  [cont-init.d] 01-fix-uidgid.sh: executing...
v3tc5  Switching to PGID 1100...
v3tc5  Switching to PUID 1100...
v3tc5  [cont-init.d] 01-fix-uidgid.sh: exited 0.
v3tc5  [cont-init.d] 02-fix-perms.sh: executing...
v3tc5  Fixing perms...
v3tc5  [cont-init.d] 02-fix-perms.sh: exited 0.
v3tc5  [cont-init.d] 03-config.sh: executing...
v3tc5  Setting timezone to Europe/Paris...
v3tc5  Init PHP extensions
v3tc5  Setting PHP-FPM configuration
v3tc5  Setting PHP INI configuration
v3tc5  Setting OpCache configuration
v3tc5  Setting Nginx configuration
v3tc5  Initializing files and folders
v3tc5  Checking database connection...
v3tc5  Waiting 60s for database to be ready...
v3tc5  Database ready!
v3tc5  Creating AnonAddy env file
v3tc5  Trust all proxies
v3tc5  Copied File [/vendor/fideloper/proxy/config/trustedproxy.php] To [/config/trustedproxy.php]
v3tc5  Publishing complete.
v3tc5  Copying OpenDKIM private key
v3tc5  Setting OpenDKIM configuration
v3tc5  Setting OpenDKIM trusted hosts
v3tc5  Setting OpenDKIM signing table
v3tc5  Setting OpenDKIM key table
v3tc5  Setting OpenDMARC configuration
v3tc5  Setting Postfix master configuration
v3tc5  Setting Postfix main configuration
v3tc5  Setting Postfix milter configuration
v3tc5  Creating Postfix virtual alias domains and subdomains configuration
v3tc5  Creating Postfix recipient access configuration
v3tc5  Checking Postfix hostname
v3tc5  myhostname = mail.ttl.wtf
v3tc5  Creating check_access stored procedure
v3tc5  [cont-init.d] 03-config.sh: exited 0.
v3tc5  [cont-init.d] 04-svc-main.sh: executing...
v3tc5  DB migration
v3tc5  Nothing to migrate.
v3tc5  Clear cache
v3tc5  Application cache cleared!
v3tc5  Configuration cache cleared!
v3tc5  Configuration cached successfully!
v3tc5  Compiled views cleared!
v3tc5  Blade templates cached successfully!
v3tc5  Route cache cleared!
v3tc5  Routes cached successfully!
v3tc5  Broadcasting queue restart signal.
v3tc5  [cont-init.d] 04-svc-main.sh: exited 0.
v3tc5  [cont-init.d] 05-svc-opendkim.sh: executing...
v3tc5  [cont-init.d] 05-svc-opendkim.sh: exited 0.
v3tc5  [cont-init.d] 06-svc-opendmarc.sh: executing...
v3tc5  [cont-init.d] 06-svc-opendmarc.sh: exited 0.
v3tc5  [cont-init.d] 07-svc-postfix.sh: executing...
v3tc5  [cont-init.d] 07-svc-postfix.sh: exited 0.
v3tc5  [cont-init.d] 08-svc-cron.sh: executing...
v3tc5  Fixing crontabs permissions...
v3tc5  [cont-init.d] 08-svc-cron.sh: exited 0.
v3tc5  [cont-init.d] 99-clean.sh: executing...
v3tc5  [cont-init.d] 99-clean.sh: exited 0.
v3tc5  [cont-init.d] ~-socklog: executing...
v3tc5  [cont-init.d] ~-socklog: exited 0.
v3tc5  [cont-init.d] done.
v3tc5  [services.d] starting services
v3tc5  2021/04/10 11:10:06 [notice] 853#853: using the "epoll" event method
v3tc5  2021/04/10 11:10:06 [notice] 853#853: nginx/1.18.0
v3tc5  2021/04/10 11:10:06 [notice] 853#853: OS: Linux 4.14.138-rancher
v3tc5  2021/04/10 11:10:06 [notice] 853#853: getrlimit(RLIMIT_NOFILE): 1000000:1000000
v3tc5  2021/04/10 11:10:06 [notice] 853#853: start worker processes
v3tc5  2021/04/10 11:10:06 [notice] 853#853: start worker process 865
v3tc5  2021/04/10 11:10:06 [notice] 853#853: start worker process 866
v3tc5  2021/04/10 11:10:06 [notice] 853#853: start worker process 867
v3tc5  2021/04/10 11:10:06 [notice] 853#853: start worker process 868
v3tc5  2021/04/10 11:10:06 [notice] 853#853: start worker process 869
v3tc5  2021/04/10 11:10:06 [notice] 853#853: start worker process 870
v3tc5  crond: crond (busybox 1.32.1) started, log level 8
v3tc5  2021/04/10 11:10:06 [notice] 853#853: start worker process 871
v3tc5  2021/04/10 11:10:06 [notice] 853#853: start worker process 873
v3tc5  2021/04/10 11:10:06 [notice] 853#853: start worker process 874
v3tc5  2021/04/10 11:10:06 [notice] 853#853: start worker process 877
v3tc5  2021/04/10 11:10:06 [notice] 853#853: start worker process 884
v3tc5  2021/04/10 11:10:06 [notice] 853#853: start worker process 895
v3tc5  2021/04/10 11:10:06 [notice] 853#853: start worker process 912
v3tc5  2021/04/10 11:10:06 [notice] 853#853: start worker process 927
v3tc5  2021/04/10 11:10:06 [notice] 853#853: start worker process 948
v3tc5  2021/04/10 11:10:06 [notice] 853#853: start worker process 978
v3tc5  [services.d] done.
v3tc5  [10-Apr-2021 11:10:06] NOTICE: fpm is running, pid 849
v3tc5  [10-Apr-2021 11:10:06] NOTICE: ready to handle connections
v3tc5  Apr 10 11:10:07 mail postfix/postfix-script[1471]: starting the Postfix mail system
v3tc5  Apr 10 11:10:07 mail postfix/master[1472]: daemon started -- version 3.5.9, configuration /etc/postfix
v3tc5  crond: USER anonaddy pid 1476 cmd php /var/www/anonaddy/artisan schedule:run --no-ansi --no-interaction --quiet

docker-compose.yml:

version: '3.3'
services:
  anonaddy:
    image: anonaddy/anonaddy:latest
    labels:
      traefik.enable: 'true'
      traefik.http.routers.anonaddy.entrypoints: web-secured
      traefik.http.routers.anonaddy.rule: Host(`anonaddy.domain.com`)
      traefik.http.routers.anonaddy.tls: 'true'
      traefik.http.routers.anonaddy.tls.certresolver: dnschallenge
      traefik.http.services.anonaddy.loadbalancer.server.port: '8000'
    environment:
      ANONADDY_ADDITIONAL_USERNAME_LIMIT: '3'
      ANONADDY_ADMIN_USERNAME: anonaddy
      ANONADDY_ALL_DOMAINS: otherdomain.xyz
      ANONADDY_BANDWIDTH_LIMIT: '104857600'
      ANONADDY_DNS_RESOLVER: 127.0.0.1
      ANONADDY_DOMAIN: otherdomain.xyz
      ANONADDY_ENABLE_REGISTRATION: 'false'
      ANONADDY_HOSTNAME: mail.otherdomain.xyz
      ANONADDY_LIMIT: '200'
      ANONADDY_NEW_ALIAS_LIMIT: '10'
      ANONADDY_RETURN_PATH: [email protected]
      ANONADDY_SECRET: [REDACTED]
      APP_DEBUG: 'true'
      APP_KEY: base64:[REDACTED]
      APP_URL: https://anonaddy.domain.com
      DB_DATABASE: anonaddy
      DB_HOST: db
      DB_PASSWORD: anonaddy
      DB_USERNAME: anonaddy
      DKIM_ENABLE: 'true'
      DMARC_ENABLE: 'true'
      LISTEN_IPV6: 'false'
      LOG_IP_VAR: http_x_forwarded_for
      MAIL_FROM_ADDRESS: [email protected]
      MAIL_FROM_NAME: AnonAddy
      MEMORY_LIMIT: 256M
      OPCACHE_MEM_SIZE: '128'
      PGID: '1100'
      POSTFIX_DEBUG: 'true'
      POSTFIX_SMTPD_TLS: 'false'
      POSTFIX_SMTP_TLS: 'false'
      PUID: '1100'
      REAL_IP_FROM: 0.0.0.0/32
      REAL_IP_HEADER: X-Forwarded-For
      REDIS_HOST: redis
      TZ: Europe/Paris
      UPLOAD_MAX_SIZE: 16M
    ports:
     - '25:25'
    volumes:
     - /home/rancher/anonaddy:/data
    networks:
     - default
     - traefik
    logging:
      driver: json-file
  db:
    image: mariadb:10.5
    environment:
      MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
      MYSQL_DATABASE: anonaddy
      MYSQL_PASSWORD: anonaddy
      MYSQL_USER: anonaddy
    volumes:
     - /tmp/db:/var/lib/mysql
    networks:
     - default
    logging:
      driver: json-file
  redis:
    image: redis:4.0-alpine
    networks:
     - default
    logging:
      driver: json-file
networks:
  default:
    driver: overlay
  traefik:
    external: true

Incorrect OpenDMARC configuration causes mails to be silently discarded

Hello,

while testing self-hosted AnonAddy I came across a peculiar issue. Some mails (in my case confirmation mails from GitHub and Twitch) did not get delivered to my configured recipients, while others arrived without issue.

After having this bother me for a while, I noticed something strange in the logs:

anonaddy    | Oct 07 20:18:48 s01 postfix/smtpd[1492]: connect from out-26.smtp.github.com[192.30.252.209]
anonaddy    | Oct 07 20:18:48 s01 postfix/smtpd[1492]: Anonymous TLS connection established from out-26.smtp.github.com[192.30.252.209]: TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)
anonaddy    | Oct 07 20:18:56 s01 postfix/smtpd[1492]: warning: 209.252.30.192.zen.spamhaus.org: RBL lookup error: Host or domain name not found. Name service error for name=209.252.30.192.zen.spamhaus.org type=A: Host not found, try again
anonaddy    | Oct 07 20:18:56 s01 postfix/smtpd[1492]: EC92B3C1C2E: client=out-26.smtp.github.com[192.30.252.209]
anonaddy    | Oct 07 20:18:57 s01 postfix/cleanup[1498]: EC92B3C1C2E: message-id=<******@github-highworker-15b14be.va3-iad.github.net.mail>
anonaddy    | mail.info: Oct  7 18:18:57 opendkim[697]: EC92B3C1C2E: out-26.smtp.github.com [192.30.252.209] not internal
anonaddy    | mail.info: Oct  7 18:18:57 opendkim[697]: EC92B3C1C2E: not authenticated
anonaddy    | mail.info: Oct  7 18:18:57 opendkim[697]: EC92B3C1C2E: DKIM verification successful
anonaddy    | mail.debug: Oct  7 18:18:57 opendmarc[701]: EC92B3C1C2E ignoring Authentication-Results at 0 from s01.example.com
anonaddy    | mail.info: Oct  7 18:18:57 opendmarc[701]: EC92B3C1C2E: SPF(mailfrom): github.com none
anonaddy    | mail.info: Oct  7 18:18:57 opendmarc[701]: EC92B3C1C2E: github.com fail
anonaddy    | Oct 07 20:18:57 s01 postfix/cleanup[1498]: EC92B3C1C2E: milter-reject: END-OF-MESSAGE from out-26.smtp.github.com[192.30.252.209]: 5.7.1 rejected by DMARC policy for github.com; from=<[email protected]> to=<******@example.com> proto=ESMTP helo=<smtp.github.com>

It seemed like the OpenDMARC milter was ignoring the results generated by the OpenDKIM milter running before it, causing the mail to be rejected.

anonaddy    | mail.debug: Oct  7 18:18:57 opendmarc[701]: EC92B3C1C2E ignoring Authentication-Results at 0 from s01.example.com

A little bit of Google finally got me on the right track. This is the problematic line I identified in the code:

TrustedAuthservIDs mail.${ANONADDY_DOMAIN}

As you can see, this is hardcoded to a value of mail.example.com, instead of using the actual host name (that is used by the OpenDKIM milter). This of course can only work, when the server operates using that name.
My configuration looks like this, hence it triggered the issue:

ANONADDY_DOMAIN=example.com
ANONADDY_ALL_DOMAINS=example.com
ANONADDY_HOSTNAME=s01.example.com

To offer more flexibility, I suggest changing the line to the following:

AuthservID                  OpenDMARC
TrustedAuthservIDs          ${ANONADDY_HOSTNAME}

This should allow using arbitrary hostnames as configured for the rest of the system using ANONADDY_HOSTNAME.
To my understanding, this should conform with intended usage described in https://manpages.debian.org/bullseye/opendmarc/opendmarc.conf.5.en.html

Let me know what you think.

[Feature Request] DoH and/or DoT

Currently, outbound DNS queries are insecurely sent over the internet. Support for DoH and/or DoT would improve this situation drastically.

Email receiving (and sending) broken since 0.8.0-r0

Behaviour

Steps to reproduce this issue

  1. Upgrade from anonaddy/anonaddy:0.7.5 to anonaddy/anonaddy:0.8.0
  2. Receive Mail
  3. Optional: Set ANONADDY_DNS_RESOLVER to any public DNS resolver, e.g., 1.1.1.1 or 8.8.8.8 (Tried with the following settings: 127.0.0.1, 1.1.1.1, 8.8.8.8)
  4. Hostname resolution no longer works. Mails are rejected due to missing reverse hostname resolution.

Expected behaviour

Emails should be able to be received and sent via the "Reply" function. In addition, tIn addition, the name resolution should work.

Actual behaviour

Emails can no longer be received because the name resolution does not work. This also leads to the fact that you can no longer reply to emails that have already been received because the mail does not go directly to the sender, but first via AnonAddy to hide the original email address.

Configuration

  • Docker version (type docker --version) : Docker version 20.10.7, build f0df350
  • Docker compose version if applicable (type docker-compose --version) : docker-compose version 1.27.4, build 40524192
  • Platform (Debian 9, Ubuntu 18.04, ...) : Ubuntu 20.04.2 LTS
  • System info (type uname -a) : Linux *********.eu 5.4.0-77-generic #86-Ubuntu SMP Thu Jun 17 02:35:03 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
  • Include all necessary configuration files : docker-compose.yml, .env, ...

anonaddy.env.txt
docker-compose.yml.txt

Docker info

Client:
 Context:    default
 Debug Mode: false
 Plugins:
  app: Docker App (Docker Inc., v0.9.1-beta3)
  buildx: Build with BuildKit (Docker Inc., v0.5.1-docker)
  scan: Docker Scan (Docker Inc., v0.8.0)

Server:
 Containers: 26
  Running: 18
  Paused: 0
  Stopped: 8
 Images: 99
 Server Version: 20.10.7
 Storage Driver: overlay2
  Backing Filesystem: extfs
  Supports d_type: true
  Native Overlay Diff: true
  userxattr: false
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
 Cgroup Version: 1
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
 Swarm: inactive
 Runtimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 7eba5930496d9bbe375fdf71603e610ad737d2b2
 runc version: v1.0.0-0-g84113ee
 init version: de40ad0
 Security Options:
  apparmor
  seccomp
   Profile: default
 Kernel Version: 5.4.0-77-generic
 Operating System: Ubuntu 20.04.2 LTS
 OSType: linux
 Architecture: x86_64
 CPUs: 4
 Total Memory: 7.775GiB
 Name: **********.eu
 ID: V4TL:AQXJ:UBLT:RUIV:TT7X:CUZK:MCRW:4IDG:4W7H:YN4A:AU5I:A6UQ
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Registry: https://index.docker.io/v1/
 Labels:
 Experimental: false
 Insecure Registries:
  127.0.0.0/8
 Live Restore Enabled: false

Logs

Jul 29 16:15:10 ******** postfix/smtpd[1023]: connect from unknown[91.216.***.***]

Jul 29 16:15:40 ******** postfix/smtpd[1023]: NOQUEUE: reject: RCPT from unknown[91.216.***.***]: 450 4.7.1 Client host rejected: cannot find your reverse hostname, [91.216.***.***]; from=<mail@********.de> to=<test@********.eu> proto=ESMTP helo=<mail-out.********.de>

Jul 29 16:15:40 ******** postfix/cleanup[1041]: 3A8639A0989: message-id=<20210729141540.3A8639A0989@.********..eu>

Jul 29 16:15:40 ******** postfix/qmgr[933]: 3A8639A0989: from=<double-bounce@********.eu>, size=1145, nrcpt=1 (queue active)

Jul 29 16:15:40 ******** postfix/smtpd[1023]: disconnect from unknown[91.216.***.***] ehlo=1 starttls=0/1 mail=1 rcpt=0/1 data=0/1 rset=1 quit=1 commands=4/7

Jul 29 16:15:40 ******** postfix/error[1042]: 3A8639A0989: to=<postmaster@/etc/mailname>, orig_to=<postmaster>, relay=none, delay=0.03, delays=0.02/0.01/0/0.01, dsn=5.1.3, status=bounced (bad address syntax)

Jul 29 16:15:40 ******** postfix/bounce[1043]: warning: 3A8639A0989: undeliverable postmaster notification discarded

Jul 29 16:15:40 ******** postfix/qmgr[933]: 3A8639A0989: removed

Any way for anonaddy and mailcow to coexist?

Hi there,

I'd be thrilled to host anonaddy on my own server thanks to your work. However, since I'm already hosting mailcow and as smtp port cannot be shared, I guess I cannot,

Would you think there might be a trick to manage that? Or a way to plug anonaddy with mailcow?

Thanks.

Only UUID alias works

Behaviour

Steps to reproduce this issue

  1. Use the official and latest anonaddy docker image with traefik
  2. Use ANON.example.com as root domain
  3. Try to send an email to [email protected]
  4. Try also to create new alias in the "random words" format and try sending this alias a mail

Expected behaviour

The email to the ad-hoc alias should create automatically a mailbox as it is written in the doc and should be received.
The created alias in the "random words" format shut receive mails.

Actual behaviour

No mailbox is created automatically and both mails do not arrive.

A mail arrives only if an alias in the UUID format was created before. It does not work for ad-hoc mails and also not for alias in the "random words" format.

Configuration

  • Docker version: Docker version 19.03.12, build 48a66213fe
  • Docker compose version: docker-compose version 1.25.0, build unknown
  • Platform: Ubuntu 20.04.1 LTS
  • System info: Linux 5.4.0-45-generic #49-Ubuntu SMP Wed Aug 26 13:38:52 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
  • Include all necessary configuration files :

anonaddy.env

TZ=Europe/Berlin
PUID=1000
PGID=1000

MEMORY_LIMIT=256M
UPLOAD_MAX_SIZE=16M
OPCACHE_MEM_SIZE=128
REAL_IP_FROM=0.0.0.0/32
REAL_IP_HEADER=X-Forwarded-For
LOG_IP_VAR=http_x_forwarded_for

APP_KEY=base64:*******
APP_DEBUG=false
APP_URL=https://anon.example.com

[email protected]
ANONADDY_ADMIN_USERNAME=kevin
ANONADDY_ENABLE_REGISTRATION=false
ANONADDY_DOMAIN=ANON.example.com
ANONADDY_HOSTNAME=anon.example.com
ANONADDY_DNS_RESOLVER=127.0.0.1
ANONADDY_SECRET=**************************************
ANONADDY_LIMIT=200
ANONADDY_BANDWIDTH_LIMIT=10737418240
ANONADDY_NEW_ALIAS_LIMIT=10000
ANONADDY_ADDITIONAL_USERNAME_LIMIT=1000

MAIL_FROM_NAME="Roebert Anonymous Email Forwarding"
[email protected]

POSTFIX_DEBUG=false
POSTFIX_SMTPD_TLS=false
POSTFIX_SMTP_TLS=false

docker-compose.yml

version: "3.5"

networks:
  proxy:
    external:
      name: proxy_default
  app-network:
      driver: bridge

services:
  db:
    image: mariadb:10.4
    container_name: anonaddy_db
    volumes:
      - "./db:/var/lib/mysql"
    environment:
      - "MYSQL_ALLOW_EMPTY_PASSWORD=yes"
      - "MYSQL_DATABASE"
      - "MYSQL_USER"
      - "MYSQL_PASSWORD"
    restart: always
    networks:
      - app-network

  redis:
    image: redis:4.0-alpine
    container_name: anonaddy_redis
    restart: always
    networks:
      - app-network

  anonaddy:
    image: anonaddy/anonaddy:latest
    container_name: anonaddy
    depends_on:
      - db
      - redis
    ports:
      - target: 25
        published: 25
        protocol: tcp
    volumes:
      - "./data:/data"
    dns:
      - 1.1.1.1
    networks:
      - proxy
      - app-network
    labels:
      - "traefik.enable=true"
      - "traefik.docker.network=proxy_default"
      - "traefik.http.routers.anon.rule=Host(`anon.example.com`)"
      - "traefik.http.routers.anon.entrypoints=https"
      - "traefik.http.routers.anon.tls.certresolver=http"
      - "traefik.http.routers.anon.middlewares=ratelimit@file,compress@file,security-headers@file"
      - "traefik.http.services.anon.loadbalancer.server.port=8000"
      - "traefik.http.routers.anon.service=anon"
    env_file:
      - "./anonaddy.env"
    environment:
      - "DB_HOST=db"
      - "DB_DATABASE=${MYSQL_DATABASE}"
      - "DB_USERNAME=${MYSQL_USER}"
      - "DB_PASSWORD=${MYSQL_PASSWORD}"
      - "REDIS_HOST=redis"
    restart: always

Docker info

Client:
 Debug Mode: false

Server:
 Containers: 13
  Running: 13
  Paused: 0
  Stopped: 0
 Images: 32
 Server Version: 19.03.12
 Storage Driver: overlay2
  Backing Filesystem: extfs
  Supports d_type: true
  Native Overlay Diff: true
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
 Swarm: inactive
 Runtimes: runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 7ad184331fa3e55e52b890ea95e65ba581ae3429
 runc version: dc9208a3303feef5b3839f4323d9beb36df0a9dd
 init version: fec3683
 Security Options:
  apparmor
  seccomp
   Profile: default
 Kernel Version: 5.4.0-45-generic
 Operating System: Ubuntu 20.04.1 LTS
 OSType: linux
 Architecture: x86_64
 CPUs: 4
 Total Memory: 7.775GiB
 Name: host54.example.com
 ID: V4TL:AQXJ:UBLT:RUIV:TT7X:CUZK:MCRW:4IDG:4W7H:YN4A:AU5I:A6UQ
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Registry: https://index.docker.io/v1/
 Labels:
 Experimental: false
 Insecure Registries:
  127.0.0.0/8
 Live Restore Enabled: false

Logs

Random Words alias:
Screenshot_2020-09-11 AnonAddy(1)

Sep 11 15:05:10 mail postfix/postfix-script[815]: starting the Postfix mail system
Sep 11 15:05:10 mail postfix/master[816]: daemon started -- version 3.5.7, configuration /etc/postfix
31.17.192.187 - - [11/Sep/2020:15:05:10 +0200] "GET / HTTP/1.1" 200 2505 "https://anon.example.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:80.0) Gecko/20100101 Firefox/80.0"
crond: USER anonaddy pid 820 cmd php /var/www/anonaddy/artisan schedule:run --no-ansi --no-interaction --quiet
Sep 11 15:06:10 mail postfix/smtpd[827]: connect from mout.gmx.net[212.227.17.21]
31.17.192.187 - - [11/Sep/2020:15:06:14 +0200] "GET / HTTP/1.1" 200 2505 "https://anon.example.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:80.0) Gecko/20100101 Firefox/80.0"
Sep 11 15:06:14 mail postfix/smtpd[827]: 2FB8DC202E8: client=mout.gmx.net[212.227.17.21]
Sep 11 15:06:14 mail postfix/cleanup[830]: 2FB8DC202E8: message-id=<[email protected]>
Sep 11 15:06:14 mail postfix/qmgr[818]: 2FB8DC202E8: from=<[email protected]>, size=4941, nrcpt=1 (queue active)
Sep 11 15:06:14 mail postfix/smtpd[827]: disconnect from mout.foo.com[212.227.17.21] ehlo=1 mail=1 rcpt=1 data=1 quit=1 commands=5
Sep 11 15:06:14 mail postfix/pipe[831]: 2FB8DC202E8: to=<[email protected]>, relay=anonaddy, delay=4.7, delays=4.1/0.01/0/0.52, dsn=2.0.0, status=sent (delivered via anonaddy service)

ad-hoc alias:

Sep 11 15:32:49 mail postfix/smtpd[1043]: connect from a.mail-out.mailprovider.com[91.216.xxx.xxx]
Sep 11 15:32:49 mail postfix/smtpd[1043]: 89544C202EE: client=a.mail-out.mailprovider.com[91.216.xxx.xxx]
Sep 11 15:32:49 mail postfix/cleanup[1053]: 89544C202EE: message-id=<!&!AAAAAAAAAAAuAAAAAAAAAOpuiTElajNIt+C2zC2l+DgBADStdhh1kZdNv2xPdpUchzoBAAAAAAAAABAAAABGRu4aVMWTTpBBclDVmv0kAQAAAAA=@other.com>
Sep 11 15:32:49 mail postfix/qmgr[818]: 89544C202EE: from=<[email protected]>, size=3397, nrcpt=1 (queue active)
Sep 11 15:32:49 mail postfix/smtpd[1043]: disconnect from a.mail-out.mailprovider.com[91.216.xxx.xxx] ehlo=1 mail=1 rcpt=1 data=1 quit=1 commands=5
Sep 11 15:32:50 mail postfix/pipe[1054]: 89544C202EE: to=<[email protected]>, relay=anonaddy, delay=0.7, delays=0.06/0/0/0.64, dsn=2.0.0, status=sent (delivered via anonaddy service)
Sep 11 15:32:50 mail postfix/cleanup[1053]: 35F36C20348: message-id=<[email protected]>
Sep 11 15:32:50 mail postfix/bounce[1063]: 89544C202EE: sender delivery status notification: 35F36C20348
Sep 11 15:32:50 mail postfix/qmgr[818]: 35F36C20348: from=<>, size=3447, nrcpt=1 (queue active)
Sep 11 15:32:50 mail postfix/qmgr[818]: 89544C202EE: removed
Sep 11 15:32:50 mail postfix/smtp[1064]: 35F36C20348: to=<[email protected]>, relay=mail.mailprovider.com[212.83.45.134]:25, delay=0.36, delays=0/0/0.06/0.29, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as 49647D02DFB)
Sep 11 15:32:50 mail postfix/qmgr[818]: 35F36C20348: removed
crond: USER anonaddy pid 1072 cmd php /var/www/anonaddy/artisan schedule:run --no-ansi --no-interaction --quiet

Traefik Configs

Screenshot_2020-09-11 Traefik
Screenshot_2020-09-11 Traefik(1)
Screenshot_2020-09-11 Traefik(3)
Screenshot_2020-09-11 Traefik(2)

Cannot send emails

Right after setting up AnonAddy and registering for an account, AnonAddy wants to verify the user's real email address. I setup a dummy account using a 10 min mail real address but noticed that no verification email is being sent. In the logs I get this error message:

Jul 28 11:42:05 mail postfix/smtp[1155]: connect to mail.hyprhost.com[206.189.253.136]:25: Connection refused

What's going on with this? I've also tried it with my gmail account but got the same error. Does this have something to do with my ports? (I am forwarding port 52 to my docker container)

Thanks for your help in advance

EDIT: here are some more descriptive error messages:

Jul 28 13:08:39 mail postfix/pickup[925]: 9B4F08886: uid=1000 from=<[REDACTED EMAIL]>
Jul 28 13:08:39 mail postfix/cleanup[1006]: 9B4F08886: message-id=<[email protected]>
Jul 28 13:08:39 mail postfix/qmgr[926]: 9B4F08886: from=<[REDACTED EMAIL]>, size=14646, nrcpt=1 (queue active)
Jul 28 13:09:02 mail postfix/smtp[1009]: connect to [REDACTED EMAIL SERVICE] Connection refused
Jul 28 13:09:23 mail postfix/smtp[1009]: 9B4F08886: to=<[REDACTED EMAIL]>, relay=none, delay=44, delays=0.23/0.01/44/0, dsn=4.4.1, status=deferred (connect to [REDACTED EMAIL SERVICE] Connection refused)

UPDATE:
Does this have something to do with my reverse DNS records? Im starting to think it does...

[feature request] support relayhost

Currently

postfix relayhost and a user/pass need to be manually added to enable support of using an external smtp relay for outgoing emails (useful, since port 25 is blocked on some cloud providers)

Request

instead of manually adding, these could be configured by environmental variables

for example, add the following environmental variables

POSTFIX_RELAYHOST
POSTFIX_RELAYUSER
POSTFIX_RELAYPASSWORD

if those are set, then in the postfix shell scripts

cat the following into /etc/postfix/main.cf

relayhost=${POSTFIX_RELAYHOST}

then cat the following into /etc/postfix/sasl_password

${POSTFIX_RELAYHOST} ${POSTFIX_RELAYUSER}:${POSTFIX_RELAYPASSWORD}

then run the following command

postmap /etc/postfix/sasl_passwd

Illegal mix of collations error after upgrade to 0.7.3

Behaviour

Steps to reproduce this issue

  1. Do an upgrade as stated in https://github.com/anonaddy/docker#upgrade to version 0.7.3.
  2. Try to receive a mail with an alias.

Expected behaviour

Mail should be forwarded to recipient address.

Actual behaviour

Mail gets rejected. If I downgrade to anonaddy/anonaddy:0.7.2 everything works again.
See LOGS

Configuration

  • Docker version (type docker --version) : Docker version 20.10.7, build f0df350
  • Docker compose version if applicable (type docker-compose --version) : docker-compose version 1.29.2, build 5becea4c
  • Platform (Debian 9, Ubuntu 18.04, ...) : Ubuntu 20.04.2 LTS
  • System info (type uname -a) : Linux 5.4.0-73-generic #82-Ubuntu SMP Wed Apr 14 17:39:42 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
  • docker-compose.yml:
---
    version: "2.1"
    services:
      #----------------------------------------------------------------------------------------------------------------
      [...]
      #----------------------------------------------------------------------------------------------------------------
    
      db:
        image: mariadb:10.5
        container_name: anonaddy_db
        command:
          - "mysqld"
          - "--character-set-server=utf8mb4"
          - "--collation-server=utf8mb4_unicode_ci"
        volumes:
          - "/srv/dcserver/appdata/anonaddy_db:/var/lib/mysql"
        environment:
          - "MYSQL_ALLOW_EMPTY_PASSWORD=yes"
          - "MYSQL_DATABASE"
          - "MYSQL_USER"
          - "MYSQL_PASSWORD"
        restart: unless-stopped
    
      redis:
        image: redis:4.0-alpine
        container_name: anonaddy_redis
        restart: unless-stopped
    
      anonaddy:
        image: anonaddy/anonaddy
        container_name: anonaddy
        depends_on:
          - db
          - redis
        ports:
          - 25:25/tcp
        dns:
            - 8.8.8.8
        volumes:
          - "/srv/dcserver/appdata/anonaddy:/data"
          - "/srv/dcserver/appdata/swag/etc/letsencrypt/archive/XXX:/certs"
        env_file:
          - "/srv/dcserver/anonaddy.env"
        environment:
          - "DB_HOST=db"
          - "DB_DATABASE"
          - "DB_USERNAME"
          - "DB_PASSWORD"
          - "REDIS_HOST=redis"
        restart: unless-stopped
    
      #----------------------------------------------------------------------------------------------------------------
      [...]
      #----------------------------------------------------------------------------------------------------------------

Docker info

Client:
 Context:    default
 Debug Mode: false
 Plugins:
  app: Docker App (Docker Inc., v0.9.1-beta3)
  buildx: Build with BuildKit (Docker Inc., v0.5.1-docker)

Server:
 Containers: 7
  Running: 7
  Paused: 0
  Stopped: 0
 Images: 9
 Server Version: 20.10.7
 Storage Driver: overlay2
  Backing Filesystem: extfs
  Supports d_type: true
  Native Overlay Diff: true
  userxattr: false
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
 Cgroup Version: 1
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
 Swarm: inactive
 Runtimes: runc io.containerd.runc.v2 io.containerd.runtime.v1.linux
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: d71fcd7d8303cbf684402823e425e9dd2e99285d
 runc version: b9ee9c6314599f1b4a7f497e1f1f856fe433d3b7
 init version: de40ad0
 Security Options:
  apparmor
  seccomp
   Profile: default
 Kernel Version: 5.4.0-73-generic
 Operating System: Ubuntu 20.04.2 LTS
 OSType: linux
 Architecture: x86_64
 CPUs: 1
 Total Memory: 1.894GiB
 Name: XXX
 ID: 7K2I:VXDD:HBF3:TC2S:ZXWW:7UHE:BSID:RV7R:Q5OH:2J7S:C6AF:K5E6
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Registry: https://index.docker.io/v1/
 Labels:
 Experimental: false
 Insecure Registries:
  127.0.0.0/8
 Live Restore Enabled: false

Logs

postfix/smtpd[866]: warning: mysql:/etc/postfix/mysql-recipient-access.cf: query failed: Illegal mix of collations (utf8mb4_unicode_ci,IMPLICIT) and (utf8mb4_general_ci,IMPLICIT) for operation '='
postfix/smtpd[866]: NOQUEUE: reject: RCPT from mail-out23.ewetel.de[212.6.122.23]: 451 4.3.5 <XXX>: Recipient address rejected: Server configuration error; from=<XXX> to=<XXX> proto=ESMTP helo=<mail-out.ewetel.de>

DNS configuration

Can you create section about DNS record to set?
with examples for MX SPF DMARC DKIM and others that are required for optimal operation
not to be consider as SPAM sender

email forwarding does not work when it is to a recipient with encryption turned on

Behaviour

Steps to reproduce this issue

  1. create a recipient
  2. turn on encryption for that recipient
  3. assign an alias to that recipient
  4. send email to the alias

Expected behaviour

an encrypted email should be forwarded to the recipient

Actual behaviour

the email is never forwarded, laravel logs shows the following error

Connection to 127.0.0.1:25 Timed Out (code: 0) {"exception":"[object] (Swift_TransportException(code: 0): Connection to 127.0.0.1:25 Timed Out

Configuration

running 0.8.10 and emails to non-encrypted aliases do forward properly. i followed gpg instructions

i would have guessed the errors would be related to pgp and signing but nothing stands out yet. the timeout indicates there is an smtp error though postfix logs just say the email was deferred with no exact error.

is there a set of debug steps i can take to ensure gpg works locally? any other logs i can look at?

Swift_TransportException: Expected response code 220 but got code "502"

Behaviour

Steps to reproduce this issue

  1. click resent email address for validation

Expected behaviour

enabling accont

Actual behaviour

Swift_TransportException:
Expected response code 220 but got code "502", with message "502 5.5.1 Error: command not implemented
"

  at /var/www/anonaddy/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php:459
  at Swift_Transport_AbstractSmtpTransport->assertResponseCode()
     (/var/www/anonaddy/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php:344)
  at Swift_Transport_AbstractSmtpTransport->executeCommand()
     (/var/www/anonaddy/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/EsmtpTransport.php:305)
  at Swift_Transport_EsmtpTransport->executeCommand()
     (/var/www/anonaddy/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/EsmtpTransport.php:346)
  at Swift_Transport_EsmtpTransport->doHeloCommand()
     (/var/www/anonaddy/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php:148)
  at Swift_Transport_AbstractSmtpTransport->start()
     (/var/www/anonaddy/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mailer.php:65)
  at Swift_Mailer->send()
     (/var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Mail/Mailer.php:521)
  at Illuminate\Mail\Mailer->sendSwiftMessage()
     (/var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Mail/Mailer.php:288)
  at Illuminate\Mail\Mailer->send()
     (/var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Notifications/Channels/MailChannel.php:65)
  at Illuminate\Notifications\Channels\MailChannel->send()
     (/var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Notifications/NotificationSender.php:148)
  at Illuminate\Notifications\NotificationSender->sendToNotifiable()
     (/var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Notifications/NotificationSender.php:106)
  at Illuminate\Notifications\NotificationSender->Illuminate\Notifications\{closure}()
     (/var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Support/Traits/Localizable.php:19)
  at Illuminate\Notifications\NotificationSender->withLocale()
     (/var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Notifications/NotificationSender.php:109)
  at Illuminate\Notifications\NotificationSender->sendNow()
     (/var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Notifications/NotificationSender.php:79)
  at Illuminate\Notifications\NotificationSender->send()
     (/var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Notifications/ChannelManager.php:39)
  at Illuminate\Notifications\ChannelManager->send()
     (/var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Notifications/RoutesNotifications.php:18)
  at App\Models\User->notify()
     (/var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Auth/MustVerifyEmail.php:38)
  at Illuminate\Foundation\Auth\User->sendEmailVerificationNotification()
     (/var/www/anonaddy/vendor/laravel/ui/auth-backend/VerifiesEmails.php:89)
  at App\Http\Controllers\Auth\VerificationController->resend()
     (/var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Routing/Controller.php:54)
  at Illuminate\Routing\Controller->callAction()
     (/var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php:45)
  at Illuminate\Routing\ControllerDispatcher->dispatch()
     (/var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Routing/Route.php:254)
  at Illuminate\Routing\Route->runController()
     (/var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Routing/Route.php:197)
  at Illuminate\Routing\Route->run()
     (/var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Routing/Router.php:695)
  at Illuminate\Routing\Router->Illuminate\Routing\{closure}()
     (/var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:128)
  at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
     (/var/www/anonaddy/vendor/laravel/passport/src/Http/Middleware/CreateFreshApiToken.php:50)
  at Laravel\Passport\Http\Middleware\CreateFreshApiToken->handle()
     (/var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167)
  at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
     (/var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php:50)
  at Illuminate\Routing\Middleware\SubstituteBindings->handle()
     (/var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167)
  at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
     (/var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php:78)
  at Illuminate\Foundation\Http\Middleware\VerifyCsrfToken->handle()
     (/var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167)
  at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
     (/var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Session/Middleware/AuthenticateSession.php:58)
  at Illuminate\Session\Middleware\AuthenticateSession->handle()
     (/var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167)
  at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
     (/var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php:127)
  at Illuminate\Routing\Middleware\ThrottleRequests->handleRequest()
     (/var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php:63)
  at Illuminate\Routing\Middleware\ThrottleRequests->handle()
     (/var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167)
  at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
     (/var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php:44)
  at Illuminate\Auth\Middleware\Authenticate->handle()
     (/var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167)
  at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
     (/var/www/anonaddy/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php:49)
  at Illuminate\View\Middleware\ShareErrorsFromSession->handle()
     (/var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167)
  at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
     (/var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php:121)
  at Illuminate\Session\Middleware\StartSession->handleStatefulRequest()
     (/var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php:64)
  at Illuminate\Session\Middleware\StartSession->handle()
     (/var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167)
  at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
     (/var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php:37)
  at Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse->handle()
     (/var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167)
  at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
     (/var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php:67)
  at Illuminate\Cookie\Middleware\EncryptCookies->handle()
     (/var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167)
  at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
     (/var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:103)
  at Illuminate\Pipeline\Pipeline->then()
     (/var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Routing/Router.php:697)
  at Illuminate\Routing\Router->runRouteWithinStack()
     (/var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Routing/Router.php:672)
  at Illuminate\Routing\Router->runRoute()
     (/var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Routing/Router.php:636)
  at Illuminate\Routing\Router->dispatchToRoute()
     (/var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Routing/Router.php:625)
  at Illuminate\Routing\Router->dispatch()
     (/var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php:166)
  at Illuminate\Foundation\Http\Kernel->Illuminate\Foundation\Http\{closure}()
     (/var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:128)
  at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
     (/var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php:21)
  at Illuminate\Foundation\Http\Middleware\TransformsRequest->handle()
     (/var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php:31)
  at Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull->handle()
     (/var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167)
  at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
     (/var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php:21)
  at Illuminate\Foundation\Http\Middleware\TransformsRequest->handle()
     (/var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php:40)
  at Illuminate\Foundation\Http\Middleware\TrimStrings->handle()
     (/var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167)
  at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
     (/var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php:27)
  at Illuminate\Foundation\Http\Middleware\ValidatePostSize->handle()
     (/var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167)
  at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
     (/var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php:86)
  at Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance->handle()
     (/var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167)
  at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
     (/var/www/anonaddy/vendor/fruitcake/laravel-cors/src/HandleCors.php:38)
  at Fruitcake\Cors\HandleCors->handle()
     (/var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167)
  at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
     (/var/www/anonaddy/vendor/fideloper/proxy/src/TrustProxies.php:57)
  at Fideloper\Proxy\TrustProxies->handle()
     (/var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167)
  at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
     (/var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:103)
  at Illuminate\Pipeline\Pipeline->then()
     (/var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php:141)
  at Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter()
     (/var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php:110)
  at Illuminate\Foundation\Http\Kernel->handle()
     (/var/www/anonaddy/public/index.php:52) 

Configuration

  • Docker version (type docker --version) : Docker version 20.10.7, build f0df350
  • Docker compose version if applicable (type docker-compose --version) : docker-compose version 1.21.0, build unknown
  • Platform (Debian 9, Ubuntu 18.04, ...) : Raspberry Pi OS
  • System info (type uname -a) : Linux kalipso 5.10.17-v8+ #1421 SMP PREEMPT Thu May 27 14:01:37 BST 2021 aarch64 GNU/Linux
  • Include all necessary configuration files : docker-compose.yml, .env, ...
version: "3.5"

services:
  db:
    image: sagu/mariadb-alpine
    volumes:
      - db_data:/var/lib/mysql
    environment:
      - MYSQL_DATABASE=anonaddy
      - MYSQL_USER=anonaddy
      - MYSQL_PASSWORD=anonaddy
      - MYSQL_CHARSET=utf8mb4
      - MYSQL_COLLATION=utf8mb4_unicode_ci
    networks:
      - internal
    deploy:
      replicas: 1
      restart_policy:
        delay: 5s


  redis:
    image: redis:alpine
    volumes:
      - redis_data:/data
    networks:
      - internal
    deploy:
      replicas: 1
      restart_policy:
        delay: 5s


  anonaddy:
    image: anonaddy/anonaddy:latest
    ports:
      - target: 25
        published: ${PUBLIC25}
        protocol: tcp
    volumes:
      - anonaddy_data:/data
    environment:
      - DB_HOST=db
      - DB_DATABASE=anonaddy
      - DB_USERNAME=anonaddy
      - DB_PASSWORD=anonaddy
      - REDIS_HOST=redis
      
      - TZ=Etc/UTC
      - PUID=1000
      - PGID=1000
      
      - MEMORY_LIMIT=256M
      - UPLOAD_MAX_SIZE=16M
      - OPCACHE_MEM_SIZE=128
      - REAL_IP_FROM=0.0.0.0/32
      - REAL_IP_HEADER=X-Forwarded-For
      - LOG_IP_VAR=http_x_forwarded_for
      
      - APP_KEY=base64:#####
      - APP_DEBUG=true
      - APP_URL=https://${HOST}
      
      - ANONADDY_RETURN_PATH=bounces@${HOST}
#      - ANONADDY_ADMIN_USERNAME=proteus
      - ANONADDY_ENABLE_REGISTRATION=true
      - ANONADDY_DOMAIN=${HOST}
      - ANONADDY_ALL_DOMAINS=${HOST}
      - ANONADDY_HOSTNAME=${HOST}
      - ANONADDY_DNS_RESOLVER=${DNS_RESOLVER}
      - ANONADDY_SECRET=###
      - ANONADDY_LIMIT=200
      - ANONADDY_BANDWIDTH_LIMIT=104857600
      - ANONADDY_NEW_ALIAS_LIMIT=10
      - ANONADDY_ADDITIONAL_USERNAME_LIMIT=10

      - MAIL_FROM_NAME=AnonAddy
      - MAIL_FROM_ADDRESS=anonaddy@${HOST}

      - POSTFIX_DEBUG=false
      - POSTFIX_SMTPD_TLS=false
      - POSTFIX_SMTP_TLS=false
      
    networks:
      - internal
      - external
      - traefik-net
    deploy:
      mode: replicated
      replicas: 1
      restart_policy:
        delay: 5s
      labels:
        traefik.enable: "true"
        traefik.frontend.rule: "Host:${HOST}"
        traefik.port: 8000
        traefik.docker.network: traefik-net
        traefik.frontend.headers.STSSeconds: 63072000
        traefik.frontend.headers.STSIncludeSubdomains: "true"
        traefik.frontend.headers.STSPreload: "true"


volumes:
  db_data:
  anonaddy_data:
  redis_data:
  
networks:
  external:
  internal:
    driver: overlay
    internal: true
  traefik-net:
    external: true
### Environment variables
# HOST
# PUBLIC25
# DNS_RESOLVER

Docker info

Client:
 Context:    default
 Debug Mode: false
 Plugins:
  app: Docker App (Docker Inc., v0.9.1-beta3)
  buildx: Build with BuildKit (Docker Inc., v0.5.1-docker)

Server:
 Containers: 337
  Running: 70
  Paused: 0
  Stopped: 267
 Images: 117
 Server Version: 20.10.7
 Storage Driver: overlay2
  Backing Filesystem: extfs
  Supports d_type: true
  Native Overlay Diff: true
  userxattr: false
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
 Cgroup Version: 1
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
 Swarm: active
  NodeID: ljuxjq2iirndgysesdl5ecpdn
  Is Manager: true
  ClusterID: ojek930vs1gao0y2d2ofiu7ve
  Managers: 1
  Nodes: 1
  Default Address Pool: 10.0.0.0/8
  SubnetSize: 24
  Data Path Port: 4789
  Orchestration:
   Task History Retention Limit: 5
  Raft:
   Snapshot Interval: 10000
   Number of Old Snapshots to Retain: 0
   Heartbeat Tick: 1
   Election Tick: 10
  Dispatcher:
   Heartbeat Period: 5 seconds
  CA Configuration:
   Expiry Duration: 3 months
   Force Rotate: 0
  Autolock Managers: false
  Root Rotation In Progress: false
  Node Address: 192.168.172.38
  Manager Addresses:
   192.168.172.38:2377
 Runtimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 7eba5930496d9bbe375fdf71603e610ad737d2b2
 runc version: v1.0.0-0-g84113ee
 init version: de40ad0
 Security Options:
  seccomp
   Profile: default
 Kernel Version: 5.10.17-v8+
 Operating System: Raspbian GNU/Linux 10 (buster)
 OSType: linux
 Architecture: aarch64
 CPUs: 4
 Total Memory: 7.642GiB
 Name: kalipso
 ID: 7EAH:W6Y3:VW4E:VUMI:3DEP:EBDU:RDXP:U3L5:KJA2:D4A5:5T5Z:UA3S
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Registry: https://index.docker.io/v1/
 Labels:
 Experimental: true
 Insecure Registries:
  127.0.0.0/8
 Live Restore Enabled: false

Logs

[2021-08-07 15:43:16] production.ERROR: Expected response code 220 but got code "502", with message "502 5.5.1 Error: command not implemented
" {"exception":"[object] (Swift_TransportException(code: 502): Expected response code 220 but got code \"502\", with message \"502 5.5.1 Error: command not implemented
\" at /var/www/anonaddy/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php:459)
[stacktrace]
#0 /var/www/anonaddy/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php(344): Swift_Transport_AbstractSmtpTransport->assertResponseCode()
#1 /var/www/anonaddy/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/EsmtpTransport.php(305): Swift_Transport_AbstractSmtpTransport->executeCommand()
#2 /var/www/anonaddy/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/EsmtpTransport.php(346): Swift_Transport_EsmtpTransport->executeCommand()
#3 /var/www/anonaddy/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php(148): Swift_Transport_EsmtpTransport->doHeloCommand()
#4 /var/www/anonaddy/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mailer.php(65): Swift_Transport_AbstractSmtpTransport->start()
#5 /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Mail/Mailer.php(521): Swift_Mailer->send()
#6 /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Mail/Mailer.php(288): Illuminate\\Mail\\Mailer->sendSwiftMessage()
#7 /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Notifications/Channels/MailChannel.php(65): Illuminate\\Mail\\Mailer->send()
#8 /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Notifications/NotificationSender.php(148): Illuminate\\Notifications\\Channels\\MailChannel->send()
#9 /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Notifications/NotificationSender.php(106): Illuminate\\Notifications\\NotificationSender->sendToNotifiable()
#10 /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Support/Traits/Localizable.php(19): Illuminate\\Notifications\\NotificationSender->Illuminate\\Notifications\\{closure}()
#11 /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Notifications/NotificationSender.php(109): Illuminate\\Notifications\\NotificationSender->withLocale()
#12 /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Notifications/NotificationSender.php(79): Illuminate\\Notifications\\NotificationSender->sendNow()
#13 /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Notifications/ChannelManager.php(39): Illuminate\\Notifications\\NotificationSender->send()
#14 /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Notifications/RoutesNotifications.php(18): Illuminate\\Notifications\\ChannelManager->send()
#15 /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Auth/MustVerifyEmail.php(38): App\\Models\\User->notify()
#16 /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Auth/Listeners/SendEmailVerificationNotification.php(19): Illuminate\\Foundation\\Auth\\User->sendEmailVerificationNotification()
#17 /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Events/Dispatcher.php(412): Illuminate\\Auth\\Listeners\\SendEmailVerificationNotification->handle()
#18 /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Events/Dispatcher.php(237): Illuminate\\Events\\Dispatcher->Illuminate\\Events\\{closure}()
#19 /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Foundation/helpers.php(450): Illuminate\\Events\\Dispatcher->dispatch()
#20 /var/www/anonaddy/vendor/laravel/ui/auth-backend/RegistersUsers.php(34): event()
#21 /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): App\\Http\\Controllers\\Auth\\RegisterController->register()
#22 /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(45): Illuminate\\Routing\\Controller->callAction()
#23 /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Routing/Route.php(254): Illuminate\\Routing\\ControllerDispatcher->dispatch()
#24 /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Routing/Route.php(197): Illuminate\\Routing\\Route->runController()
#25 /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Routing/Router.php(695): Illuminate\\Routing\\Route->run()
#26 /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\\Routing\\Router->Illuminate\\Routing\\{closure}()
#27 /var/www/anonaddy/app/Http/Middleware/RedirectIfAuthenticated.php(29): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#28 /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): App\\Http\\Middleware\\RedirectIfAuthenticated->handle()
#29 /var/www/anonaddy/vendor/laravel/passport/src/Http/Middleware/CreateFreshApiToken.php(50): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#30 /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Laravel\\Passport\\Http\\Middleware\\CreateFreshApiToken->handle()
#31 /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(50): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#32 /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Routing\\Middleware\\SubstituteBindings->handle()
#33 /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php(78): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#34 /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken->handle()
#35 /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Session/Middleware/AuthenticateSession.php(39): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#36 /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Session\\Middleware\\AuthenticateSession->handle()
#37 /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php(49): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#38 /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\View\\Middleware\\ShareErrorsFromSession->handle()
#39 /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(121): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#40 /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(64): Illuminate\\Session\\Middleware\\StartSession->handleStatefulRequest()
#41 /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Session\\Middleware\\StartSession->handle()
#42 /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php(37): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#43 /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse->handle()
#44 /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(67): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#45 /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Cookie\\Middleware\\EncryptCookies->handle()
#46 /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#47 /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Routing/Router.php(697): Illuminate\\Pipeline\\Pipeline->then()
#48 /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Routing/Router.php(672): Illuminate\\Routing\\Router->runRouteWithinStack()
#49 /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Routing/Router.php(636): Illuminate\\Routing\\Router->runRoute()
#50 /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Routing/Router.php(625): Illuminate\\Routing\\Router->dispatchToRoute()
#51 /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(166): Illuminate\\Routing\\Router->dispatch()
#52 /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}()
#53 /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#54 /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php(31): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle()
#55 /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull->handle()
#56 /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#57 /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(40): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle()
#58 /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle()
#59 /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#60 /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize->handle()
#61 /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(86): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#62 /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle()
#63 /var/www/anonaddy/vendor/fruitcake/laravel-cors/src/HandleCors.php(38): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#64 /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Fruitcake\\Cors\\HandleCors->handle()
#65 /var/www/anonaddy/vendor/fideloper/proxy/src/TrustProxies.php(57): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#66 /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Fideloper\\Proxy\\TrustProxies->handle()
#67 /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#68 /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(141): Illuminate\\Pipeline\\Pipeline->then()
#69 /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(110): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter()
#70 /var/www/anonaddy/public/index.php(52): Illuminate\\Foundation\\Http\\Kernel->handle()
#71 {main}
"} 

Customize self-hosted environment

Hi Thank you very much for the application. Is there a way to edit or modify self-hosted environment? I wanted to include

  1. Upload custom logo
  2. Modify mail templates to include custom logo and footer notes
  3. Include custom terms page in registration page

sasl_passwd file has repeat entries after multiple container restarts

Behaviour

/ets/postfix/sasl_passwd has repeat entries after multiple docker-compose start and docker-compose up -d

Steps to reproduce this issue

  1. set POSTFIX_RELAYHOST POSTFIX_RELAYHOST_AUTH_ENABLE POSTFIX_RELAYHOST_USERNAME and POSTFIX_RELAYHOST_PASSWORD in anonaddy.env
  2. run docker-compose stop and docker-compose up -d a few times

Expected behaviour

/ets/postfix/sasl_passwd does not contain duplicate entries and remains stable

Actual behaviour

sometimes a new line gets added on top and sometimes a duplicate entry will appear (in fact, i think they alternate).

Default AnonAddy instance is open relay :/

Hello,

This is not a bug but a misconfiguration on my setting, however, i don't find many documentation about my issue.

Behaviour

Steps to reproduce this issue

  1. Setup AnonAddy (docker-compose)
  2. Configure DNS & mail security (DKIM etc)
  3. Test to check if the server is open relay

Expected behaviour

SMTP Server should not be open relay.

Actual behaviour

I did some test and my server is open relay (so I can't expose it :p ).

Configuration

  • Docker version (type docker --version) : Docker version 20.10.5, build 55c4c88 (I do some tests on MacOS)
  • Docker compose version if applicable (type docker-compose --version) : docker-compose version 1.29.0, build 07737305
  • Platform (Debian 9, Ubuntu 18.04, ...) : MacOS BigSur 11.5.2 (20G95)
  • System info (type uname -a) : Darwin redacted.local 20.6.0 Darwin Kernel Version 20.6.0: Wed Jun 23 00:26:31 PDT 2021; root:xnu-7195.141.2~5/RELEASE_X86_64 x86_64
  • Include all necessary configuration files : docker-compose.yml, .env, ...

docker-compose.yml and .env are based on the template without many change.

Docker info

N/A

Logs

~$ telnet my.domain 25
Trying xx.xx.xx.xx...
Connected to *******.
Escape character is '^]'.
220 my.domain ESMTP
helo .
250 my.domain
MAIL FROM:<[email protected]>
250 2.1.0 Ok
RCPT TO:<*******@protonmail.com>
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
Hello!
.
250 2.0.0 Ok: queued as D440F1027C4
quit
221 2.0.0 Bye
Connection closed by foreign host.

What are the setting to use AnonAddy without having the server as open relay?

Thank you!

HTTP error

UI not accessible

when navigating to http://ip:8000 I receive HTTP ERROR 500

within the container logs I see the below, but am unsure how to solve this


2021/09/24 16:14:24 [error] 694#694: *9 FastCGI sent in stderr: "PHP message: PHP Fatal error:  Uncaught RuntimeException: Unsupported cipher or incorrect key length. Supported ciphers are: aes-128-cbc, aes-256-cbc, aes-128-gcm, aes-256-gcm. in /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Encryption/Encrypter.php:55 
Stack trace: 
#0 /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Encryption/EncryptionServiceProvider.php(32): Illuminate\Encryption\Encrypter->__construct() 
#1 /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Container/Container.php(869): Illuminate\Encryption\EncryptionServiceProvider->Illuminate\Encryption\{closure}() 
#2 /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Container/Container.php(754): Illuminate\Container\Container->build() 
#3 /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(841): Illuminate\Container\Container->resolve() 
#4 /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Container/Container.php(692): Illuminate\Foundation\Application->resolve() 
#5...PHP message: PHP Fatal error:  Uncaught RuntimeException: Unsupported cipher or incorrect key length. Supported ciphers are: aes-128-cbc, aes-256-cbc, aes-128-gcm, aes-256-gcm. in /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Encryption/Encrypter.php:55 
Stack trace: 
#0 /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Encryption/EncryptionServiceProvider.php(32): Illuminate\Encryption\Encrypter->__construct() 
#1 /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Container/Container.php(869): Illuminate\Encryption\EncryptionServiceProvider->Illuminate\Encryption\{closure}() 
#2 /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Container/Container.php(754): Illuminate\Container\Container->build() 
#3 /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(841): Illuminate\Container\Container->resolve() 
#4 /var/www/anonaddy/vendor/laravel/framework/src/Illuminate/Container/Container.php(692): Il 
192.168.1.98 - - [24/Sep/2021:16:14:24 +0100] "GET / HTTP/1.1" 500 5 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.36" 

[enhancement] allow for optional use of rspamd (instead of opendkim / opendmarc)

opendkim and opendmarc are used for dmarc/dkim verification.

however, anonaddy self hosting docs suggests rspamd as an alternative.

this alternative may be valuable to some users since opendkim (mostly unmaintained as this point in time) actually behaves differently in alpine vs other OSes like debian. because of the different glibc compiler in alpine, i've been able to reproduce a number of dkim verification failures that only occur when using the alpine container.

rspamd is a bit more current, aligned with anonaddy's own documentation, works in an alpine container and integrates nicely as a side car container if you use docker-compose.

the following modifications are needed to implement this suggestion:

  1. using mailprotector/rspamd image in coordination with the other containers
  rspamd:
    image: mailprotector/rspamd:0.1
    container_name: anonaddy_rspamd
    restart: unless-stopped
    volumes:
      - ./data/rspamd:/etc/rspamd/override.d
      - ./data/dkim:/etc/dkim
    environment:
      - RSPAMD_ARC_ENABLE=true
      - RSPAMD_DKIM_SIGNING_ENABLE=true
      - RSPAMD_GREYLIST_ENABLE=true
      - RSPAMD_LOG_LEVEL=error
      - RSPAMD_REDIS_SERVERS=redis
      - RSPAMD_WEBUI_PASSWORD= xyz           
    depends_on:
      - anonaddy
      - redis
  1. turn off opendkim/opendmarc in anonaddy.env
DKIM_ENABLE=false
DMARC_ENABLE=false
  1. manually modifying smtpd milter to point to rspamd in postfix/main.cf as described in anonaddy's self hosted doc
# Milter configuration
milter_default_action = accept
milter_protocol = 6
smtpd_milters = inet:rspamd:11332
non_smtpd_milters = $smtpd_milters
milter_mail_macros =  i {mail_addr} {client_addr} {client_name} {auth_authen}
  1. add all the files suggested in the self hosted docs with the correct domains and with proper access to the dkim keys. below is one such example for ./data/rspamd/dkim_signing.conf
signing_table = [
"*@example.com example.com",
"*@*.example.com example.com",
];

key_table = [
"example.com example.com:default:/etc/rspamd/override.d/dkim/example.com.default.key",
];

use_domain = "envelope";
allow_hdrfrom_mismatch = true;
allow_hdrfrom_mismatch_sign_networks = true;
allow_username_mismatch = true;
use_esld = true;
sign_authenticated = false;

Multi domains from ANONADDY_ALL_DOMAINS should be reflected in postfix virtual_mailbox_domains configuration

I didn't realize, but I have a local fix that is not upstream I believe.
Here this line virtual_mailbox_domains should include all the domains from ANONADDY_ALL_DOMAINS

virtual_mailbox_domains = \$mydomain, unsubscribe.\$mydomain, mysql:/etc/postfix/mysql-virtual-alias-domains-and-subdomains.cf

This is already the case for the first domain through $mydomain, but the subsequent domains aren't put in this list and therefore will be rejected.

A simple sed is fixing this issue, e.g.:

docker-compose exec anonaddy sed -i 's/virtual_mailbox_domains = $mydomain, unsubscribe.$mydomain,/virtual_mailbox_domains = $mydomain, unsubscribe.$mydomain, example.net, unsubscribe.example.net,/' /etc/postfix/main.cf
docker-compose exec anonaddy postfix reload

But it would be better to include it in the config.sh script.

Getting "The MAC is invalid" error after server reboot

Behaviour

Getting "The MAC is invalid" error after server reboot

Steps to reproduce this issue

  1. Create configuration files in /opt/anonaddy
  2. sudo docker-compose up -d
  3. Launch APP URL. Got "The only supported ciphers are AES-128-CBC and AES-256-CBC with the correct key lengths."
  4. Run sudo docker exec -ti anonaddy-container-id bash to log to Anonaddy docker container
  5. Run below commands after login to anonaddy container
    1. anonaddy key:generate --show
    2. php artisan key:generate
    3. php artisan config:clear
    4. gen-dkim
  6. Now able to launch APP and register an account
  7. Reboot the server
  8. After server came back online, open APP URL. Got "The MAC is invalid" error

Expected behaviour

App should work with the previously created account.

Actual behaviour

Getting "The MAC is invalid" error

Configuration

  • Docker version (type docker --version) : Docker version 20.10.6, build 370c289
  • Docker compose version if applicable (type docker-compose --version) : docker-compose version 1.28.5, build c4eb3a1f
  • Platform (Debian 9, Ubuntu 18.04, ...) : Ubuntu 20.14 LTS
  • System info (type uname -a) : Linux mail.mydomain 5.4.0-66-generic #74-Ubuntu SMP Wed Jan 27 22:54:38 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
  • Include all necessary configuration files : docker-compose.yml, .env, ...

docker-compose.yml

version: "3.7"

services:
  caddy:
    image: caddy:alpine
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    networks:
      - caddy
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile
      - ./caddydata:/data
      - ./caddyconfig:/config
      - ./caddylogs:/var/log/caddy
      
  anonaddy:
    image: anonaddy/anonaddy
    container_name: anonaddy
    restart: unless-stopped
    depends_on:
      - anonaddydb
      - redis
    volumes:
      - ./data:/data
    env_file:
      - "./anonaddy.env"
    environment:
      - DB_HOST=anonaddydb
      - DB_USERNAME=anonaddy
      - DB_NAME=anonaddy
      - DB_PASSWORD=somesecrethere
      - REDIS_HOST=redis
    networks:
      - caddy
    ports:
      - "25:25"
      - "8000:8000"

  redis:
    image: redis:alpine
    container_name: redis
    restart: unless-stopped
    networks:
      - caddy
      
  anonaddydb:
    image: mariadb:latest
    container_name: anonaddydb
    restart: unless-stopped
    volumes:
      - ./db:/var/lib/mysql
    environment:
      - MYSQL_USER=anonaddy
      - MYSQL_DATABASE=anonaddy
      - MYSQL_PASSWORD=somescrethere
      - MYSQL_ROOT_PASSWORD=anothersecret
    command: ["mysqld", "--wait_timeout=28800", "--interactive_timeout=28800", "--max_allowed_packet=256M", "--transaction-isolation=READ-COMMITTED", "--binlog-format=ROW"]
    networks:
      - caddy    
volumes:
  data:
  db:
  caddydata:
  caddyconfig:
  caddylogs:
networks:
  caddy:
    driver: bridge

anonaddy.env

TZ=Europe/Paris
PUID=1000
PGID=1000

MEMORY_LIMIT=256M
UPLOAD_MAX_SIZE=16M
OPCACHE_MEM_SIZE=128
REAL_IP_FROM=0.0.0.0/32
REAL_IP_HEADER=X-Forwarded-For
LOG_IP_VAR=http_x_forwarded_for

APP_NAME=Anonaddy
APP_ENV=production
APP_KEY=app-key
APP_DEBUG=true
APP_LOG_LEVEL=debug
APP_URL=https://app.mydomain

ANONADDY_RETURN_PATH=mailer@mydomain
ANONADDY_ADMIN_USERNAME=johnde
ANONADDY_ENABLE_REGISTRATION=true
ANONADDY_DOMAIN=mydomain
ANONADDY_ALL_DOMAINS=mydomain
ANONADDY_HOSTNAME=mail.mydomain
#ANONADDY_ALL_DOMAINS=example.com,example2.com
ANONADDY_DNS_RESOLVER=127.0.0.1
ANONADDY_SECRET=somethingsecrethere
ANONADDY_LIMIT=200
ANONADDY_BANDWIDTH_LIMIT=104857600
ANONADDY_NEW_ALIAS_LIMIT=10
ANONADDY_ADDITIONAL_USERNAME_LIMIT=3
ANONADDY_DKIM_SIGNING_KEY=/data/dkim/mydomain.private
ANONADDY_DKIM_SELECTOR=default

MAIL_FROM_NAME=Johnde
MAIL_FROM_ADDRESS=admin@mydomain

DKIM_ENABLE=true
DKIM_REPORT_ADDRESS=postmaster@${ANONADDY_DOMAIN}

PASSPORT_PERSONAL_ACCESS_CLIENT_ID=3
PASSPORT_PERSONAL_ACCESS_CLIENT_SECRET=passport-secret

Caddyfile

{
    email mymail@mail
    cert_issuer acme
    acme_ca https://acme-v02.api.letsencrypt.org/directory
    servers {
        protocol {
            experimental_http3
            allow_h2c
        }
}

app.mydomain {
    log {
        output file /var/log/caddy/anonaddy.log {
            roll_size 20mb
            roll_keep 2
            roll_keep_for 6h
        }
        format console
        level error
    }
    reverse_proxy anonaddy:8000
   encode gzip zstd
}

Docker info

> Client:
 Context:    default
 Debug Mode: false
 Plugins:
  app: Docker App (Docker Inc., v0.9.1-beta3)
  buildx: Build with BuildKit (Docker Inc., v0.5.1-docker)
  scan: Docker Scan (Docker Inc., v0.7.0)

Server:
 Containers: 4
  Running: 4
  Paused: 0
  Stopped: 0
 Images: 4
 Server Version: 20.10.6
 Storage Driver: overlay2
  Backing Filesystem: extfs
  Supports d_type: true
  Native Overlay Diff: true
  userxattr: false
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
 Cgroup Version: 1
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
 Swarm: inactive
 Runtimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 05f951a3781f4f2c1911b05e61c160e9c30eaa8e
 runc version: 12644e614e25b05da6fd08a38ffa0cfe1903fdec
 init version: de40ad0
 Security Options:
  apparmor
  seccomp
   Profile: default
 Kernel Version: 5.4.0-66-generic
 Operating System: Ubuntu 20.04.2 LTS
 OSType: linux
 Architecture: x86_64
 CPUs: 1
 Total Memory: 1.941GiB
 Name: mail.mydomain
 ID: KF3E:KUFM:QHCD:DOUH:MX5N:G62V:W4WS:CKSF:4ZK4:SRAI:OLK3:ADGX
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Registry: https://index.docker.io/v1/
 Labels:
 Experimental: false
 Insecure Registries:
  127.0.0.0/8
 Live Restore Enabled: false

WARNING: No swap limit support

Logs

> [s6-init] making user provided files available at /var/run/s6/etc...exited 0.
[s6-init] ensuring user provided files have correct perms...exited 0.
[fix-attrs.d] applying ownership & permissions fixes...
[fix-attrs.d] done.
[cont-init.d] executing container initialization scripts...
[cont-init.d] 00-fix-logs.sh: executing...
[cont-init.d] 00-fix-logs.sh: exited 0.
[cont-init.d] 01-fix-uidgid.sh: executing...
[cont-init.d] 01-fix-uidgid.sh: exited 0.
[cont-init.d] 02-fix-perms.sh: executing...
Fixing perms...
[cont-init.d] 02-fix-perms.sh: exited 0.
[cont-init.d] 03-config.sh: executing...
Setting timezone to Europe/Paris...
Init PHP extensions
Setting PHP-FPM configuration
Setting PHP INI configuration
Setting OpCache configuration
Setting Nginx configuration
Initializing files and folders
Checking database connection...
Waiting 60s for database to be ready...
Database ready!
Creating AnonAddy env file
Trust all proxies
Copied File [/vendor/fideloper/proxy/config/trustedproxy.php] To [/config/trustedproxy.php]
Publishing complete.
Copying OpenDKIM private key
Setting OpenDKIM configuration
Setting OpenDKIM trusted hosts
Setting OpenDKIM signing table
Setting OpenDKIM key table
Setting Postfix master configuration
Setting Postfix main configuration
Setting Postfix milter configuration
Creating Postfix virtual alias domains and subdomains configuration
Creating Postfix recipient access configuration
Checking Postfix hostname
myhostname = mail.mydomain
Creating check_access stored procedure
[cont-init.d] 03-config.sh: exited 0.
[cont-init.d] 04-svc-main.sh: executing...
DB migration
Nothing to migrate.
Clear cache
Application cache cleared!
Configuration cache cleared!
Configuration cached successfully!
Compiled views cleared!
Blade templates cached successfully!
Route cache cleared!
Routes cached successfully!
Broadcasting queue restart signal.
[cont-init.d] 04-svc-main.sh: exited 0.
[cont-init.d] 05-svc-opendkim.sh: executing...
[cont-init.d] 05-svc-opendkim.sh: exited 0.
[cont-init.d] 06-svc-opendmarc.sh: executing...
INFO: OpenDMARC service disabled.
[cont-init.d] 06-svc-opendmarc.sh: exited 0.
[cont-init.d] 07-svc-postfix.sh: executing...
[cont-init.d] 07-svc-postfix.sh: exited 0.
[cont-init.d] 08-svc-cron.sh: executing...
Fixing crontabs permissions...
[cont-init.d] 08-svc-cron.sh: exited 0.
[cont-init.d] 99-clean.sh: executing...
[cont-init.d] 99-clean.sh: exited 0.
[cont-init.d] ~-socklog: executing...
[cont-init.d] ~-socklog: exited 0.
[cont-init.d] done.
[services.d] starting services
crond: crond (busybox 1.32.1) started, log level 8
2021/04/13 08:58:48 [notice] 834#834: using the "epoll" event method
2021/04/13 08:58:48 [notice] 834#834: nginx/1.18.0
2021/04/13 08:58:48 [notice] 834#834: OS: Linux 5.4.0-66-generic
2021/04/13 08:58:48 [notice] 834#834: getrlimit(RLIMIT_NOFILE): 1048576:1048576
2021/04/13 08:58:48 [notice] 834#834: start worker processes
2021/04/13 08:58:48 [notice] 834#834: start worker process 844
[services.d] done.
[13-Apr-2021 08:58:48] NOTICE: fpm is running, pid 828
[13-Apr-2021 08:58:48] NOTICE: ready to handle connections
Apr 13 08:58:48 mail postfix/postfix-script[952]: starting the Postfix mail system
Apr 13 08:58:48 mail postfix/master[953]: daemon started -- version 3.5.9, configuration /etc/postfix
crond: USER anonaddy pid 957 cmd php /var/www/anonaddy/artisan schedule:run --no-ansi --no-interaction --quiet
27.6.61.201 - - [13/Apr/2021:08:59:19 +0200] "GET /login HTTP/1.1" 500 263411 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36 Edg/89.0.774.75"
27.6.61.201 - - [13/Apr/2021:08:59:23 +0200] "GET / HTTP/1.1" 500 263458 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36 Edg/89.0.774.75"
crond: USER anonaddy pid 964 cmd php /var/www/anonaddy/artisan schedule:run --no-ansi --no-interaction --quiet
27.6.61.201 - - [13/Apr/2021:09:00:47 +0200] "GET / HTTP/1.1" 302 382 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36 Edg/89.0.774.75"
27.6.61.201 - - [13/Apr/2021:09:00:47 +0200] "GET /login HTTP/1.1" 200 1356 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36 Edg/89.0.774.75"
crond: USER anonaddy pid 984 cmd php /var/www/anonaddy/artisan schedule:run --no-ansi --no-interaction --quiet
crond: USER anonaddy pid 991 cmd php /var/www/anonaddy/artisan schedule:run --no-ansi --no-interaction --quiet
27.6.61.201 - - [13/Apr/2021:09:02:27 +0200] "GET /register HTTP/1.1" 200 1610 "https://app.mydomain/login" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36 Edg/89.0.774.75"
27.6.61.201 - - [13/Apr/2021:09:02:28 +0200] "GET /captcha/mini?Ye1WshL8 HTTP/1.1" 200 3820 "https://app.mydomain/register" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36 Edg/89.0.774.75"
27.6.61.201 - - [13/Apr/2021:09:02:47 +0200] "POST /register HTTP/1.1" 302 358 "https://app.mydomain/register" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36 Edg/89.0.774.75"
Apr 13 09:02:47 mail postfix/pickup[954]: 89A6D5F8C1: uid=1000 from=<admin@mydomain>
Apr 13 09:02:47 mail postfix/cleanup[1000]: 89A6D5F8C1: message-id=<[email protected]>
Apr 13 09:02:47 mail postfix/qmgr[955]: 89A6D5F8C1: from=<admin@mydomain>, size=14630, nrcpt=1 (queue active)
27.6.61.201 - - [13/Apr/2021:09:02:47 +0200] "GET / HTTP/1.1" 302 410 "https://app.mydomain/register" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36 Edg/89.0.774.75"
Apr 13 09:02:48 mail postfix/smtp[1004]: 89A6D5F8C1: to=<[email protected]>, relay=gmail-smtp-in.l.google.com[173.194.204.27]:25, delay=0.58, delays=0.06/0.01/0.21/0.29, dsn=2.0.0, status=sent (250 2.0.0 OK  1618297368 i12si9449854qtx.247 - gsmtp)
Apr 13 09:02:48 mail postfix/qmgr[955]: 89A6D5F8C1: removed
27.6.61.201 - - [13/Apr/2021:09:02:48 +0200] "GET /email/verify HTTP/1.1" 200 1778 "https://app.mydomain/register" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36 Edg/89.0.774.75"
crond: USER anonaddy pid 1005 cmd php /var/www/anonaddy/artisan schedule:run --no-ansi --no-interaction --quiet
27.6.61.201 - - [13/Apr/2021:09:03:40 +0200] "GET /email/verify/a2acf180-ce50-4ae5-b286-a00e6fb7f09e/f8c72a649b7d46743175296ec48babd238a765e2?expires=1618300967&signature=e64c2e7460ec9acb043cd0260c8a59aa41adae278702796473d16d893a686690 HTTP/1.1" 302 382 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36"
27.6.61.201 - - [13/Apr/2021:09:03:40 +0200] "GET /login HTTP/1.1" 200 1432 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36"
27.6.61.201 - - [13/Apr/2021:09:03:53 +0200] "POST /login HTTP/1.1" 302 358 "https://app.mydomain/login" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36"
27.6.61.201 - - [13/Apr/2021:09:03:53 +0200] "GET / HTTP/1.1" 200 1717 "https://app.mydomain/login" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36"
27.6.61.201 - - [13/Apr/2021:09:04:00 +0200] "POST /logout HTTP/1.1" 302 358 "https://app.mydomain/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36"
crond: USER anonaddy pid 1012 cmd php /var/www/anonaddy/artisan schedule:run --no-ansi --no-interaction --quiet
27.6.61.201 - - [13/Apr/2021:09:04:00 +0200] "GET / HTTP/1.1" 302 382 "https://app.mydomain/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36"
27.6.61.201 - - [13/Apr/2021:09:04:01 +0200] "GET /login HTTP/1.1" 200 1357 "https://app.mydomain/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36"
27.6.61.201 - - [13/Apr/2021:09:04:35 +0200] "GET /email/verify HTTP/1.1" 302 358 "https://app.mydomain/register" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36 Edg/89.0.774.75"
27.6.61.201 - - [13/Apr/2021:09:04:35 +0200] "GET / HTTP/1.1" 200 1718 "https://app.mydomain/register" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36 Edg/89.0.774.75"
27.6.61.201 - - [13/Apr/2021:09:04:39 +0200] "POST /logout HTTP/1.1" 302 358 "https://app.mydomain/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36 Edg/89.0.774.75"
27.6.61.201 - - [13/Apr/2021:09:04:40 +0200] "GET / HTTP/1.1" 302 382 "https://app.mydomain/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36 Edg/89.0.774.75"
27.6.61.201 - - [13/Apr/2021:09:04:40 +0200] "GET /login HTTP/1.1" 200 1358 "https://app.mydomain/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36 Edg/89.0.774.75"
2021/04/13 09:04:59 [notice] 834#834: signal 15 (SIGTERM) received from 820, exiting
2021/04/13 09:04:59 [notice] 844#844: exiting
[13-Apr-2021 09:04:59] NOTICE: Terminating ...
2021/04/13 09:04:59 [notice] 844#844: exit
2021/04/13 09:04:59 [notice] 834#834: signal 17 (SIGCHLD) received from 844
2021/04/13 09:04:59 [notice] 834#834: worker process 844 exited with code 0
2021/04/13 09:04:59 [notice] 834#834: exit
[13-Apr-2021 09:04:59] NOTICE: exiting, bye-bye!
[cont-finish.d] executing container finish scripts...
[cont-finish.d] done.
[s6-finish] waiting for services.
[s6-finish] sending all processes the TERM signal.
[s6-finish] sending all processes the KILL signal and exiting.
[s6-init] making user provided files available at /var/run/s6/etc...exited 0.
[s6-init] ensuring user provided files have correct perms...exited 0.
[fix-attrs.d] applying ownership & permissions fixes...
[fix-attrs.d] done.
[cont-init.d] executing container initialization scripts...
[cont-init.d] 00-fix-logs.sh: executing...
[cont-init.d] 00-fix-logs.sh: exited 0.
[cont-init.d] 01-fix-uidgid.sh: executing...
[cont-init.d] 01-fix-uidgid.sh: exited 0.
[cont-init.d] 02-fix-perms.sh: executing...
Fixing perms...
[cont-init.d] 02-fix-perms.sh: exited 0.
[cont-init.d] 03-config.sh: executing...
Setting timezone to Europe/Paris...
Init PHP extensions
Setting PHP-FPM configuration
Setting PHP INI configuration
Setting OpCache configuration
Setting Nginx configuration
Initializing files and folders
cp: can't create '/data/storage': File exists
Checking database connection...
Waiting 60s for database to be ready...
Database ready!
Creating AnonAddy env file
Trust all proxies
Publishing complete.
Copying OpenDKIM private key
Setting OpenDKIM configuration
Setting OpenDKIM trusted hosts
Setting OpenDKIM signing table
Setting OpenDKIM key table
Setting Postfix master configuration
Setting Postfix main configuration
Setting Postfix milter configuration
Creating Postfix virtual alias domains and subdomains configuration
Creating Postfix recipient access configuration
Checking Postfix hostname
myhostname = mail.mydomain
Creating check_access stored procedure
[cont-init.d] 03-config.sh: exited 0.
[cont-init.d] 04-svc-main.sh: executing...
DB migration
Nothing to migrate.
Clear cache
Application cache cleared!
Configuration cache cleared!
Configuration cached successfully!
Compiled views cleared!
Blade templates cached successfully!
Route cache cleared!
Routes cached successfully!
Broadcasting queue restart signal.
[cont-init.d] 04-svc-main.sh: exited 0.
[cont-init.d] 05-svc-opendkim.sh: executing...
mkdir: can't create directory '/var/spool/postfix/opendkim': File exists
[cont-init.d] 05-svc-opendkim.sh: exited 0.
[cont-init.d] 06-svc-opendmarc.sh: executing...
INFO: OpenDMARC service disabled.
[cont-init.d] 06-svc-opendmarc.sh: exited 0.
[cont-init.d] 07-svc-postfix.sh: executing...
[cont-init.d] 07-svc-postfix.sh: exited 0.
[cont-init.d] 08-svc-cron.sh: executing...
Fixing crontabs permissions...
[cont-init.d] 08-svc-cron.sh: exited 0.
[cont-init.d] 99-clean.sh: executing...
[cont-init.d] 99-clean.sh: exited 0.
[cont-init.d] ~-socklog: executing...
[cont-init.d] ~-socklog: exited 0.
[cont-init.d] done.
[services.d] starting services
crond: crond (busybox 1.32.1) started, log level 8
[services.d] done.
2021/04/13 09:06:24 [notice] 1081#1081: using the "epoll" event method
2021/04/13 09:06:24 [notice] 1081#1081: nginx/1.18.0
2021/04/13 09:06:24 [notice] 1081#1081: OS: Linux 5.4.0-66-generic
2021/04/13 09:06:24 [notice] 1081#1081: getrlimit(RLIMIT_NOFILE): 1048576:1048576
2021/04/13 09:06:24 [notice] 1081#1081: start worker processes
2021/04/13 09:06:24 [notice] 1081#1081: start worker process 1104
[13-Apr-2021 09:06:24] NOTICE: fpm is running, pid 1076
[13-Apr-2021 09:06:24] NOTICE: ready to handle connections
Apr 13 09:06:24 mail postfix/postfix-script[1200]: starting the Postfix mail system
Apr 13 09:06:24 mail postfix/master[1201]: warning: duplicate master.cf entry for service "anonaddy" (private/anonaddy) -- using the last entry
Apr 13 09:06:24 mail postfix/master[1201]: daemon started -- version 3.5.9, configuration /etc/postfix
crond: USER anonaddy pid 1205 cmd php /var/www/anonaddy/artisan schedule:run --no-ansi --no-interaction --quiet
27.6.61.201 - - [13/Apr/2021:09:07:15 +0200] "GET / HTTP/1.1" 500 263458 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36 Edg/89.0.774.75"
27.6.61.201 - - [13/Apr/2021:09:07:52 +0200] "GET / HTTP/1.1" 302 382 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36 Edg/89.0.774.75"
27.6.61.201 - - [13/Apr/2021:09:07:52 +0200] "GET /login HTTP/1.1" 200 1359 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36 Edg/89.0.774.75"
crond: USER anonaddy pid 1226 cmd php /var/www/anonaddy/artisan schedule:run --no-ansi --no-interaction --quiet
27.6.61.201 - - [13/Apr/2021:09:08:00 +0200] "POST /login HTTP/1.1" 302 358 "https://app.mydomain/login" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36 Edg/89.0.774.75"
27.6.61.201 - - [13/Apr/2021:09:08:01 +0200] "GET / HTTP/1.1" 500 367589 "https://app.mydomain/login" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36 Edg/89.0.774.75"
crond: USER anonaddy pid 1233 cmd php /var/www/anonaddy/artisan schedule:run --no-ansi --no-interaction --quiet
27.6.61.201 - - [13/Apr/2021:09:09:54 +0200] "GET / HTTP/1.1" 500 367589 "https://app.mydomain/login" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36 Edg/89.0.774.75"
crond: USER anonaddy pid 1248 cmd php /var/www/anonaddy/artisan schedule:run --no-ansi --no-interaction --quiet
27.6.61.201 - - [13/Apr/2021:09:10:21 +0200] "GET / HTTP/1.1" 302 382 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36"
27.6.61.201 - - [13/Apr/2021:09:10:21 +0200] "GET /login HTTP/1.1" 200 1358 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36"
27.6.61.201 - - [13/Apr/2021:09:10:36 +0200] "POST /login HTTP/1.1" 302 358 "https://app.mydomain/login" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36"
27.6.61.201 - - [13/Apr/2021:09:10:36 +0200] "GET / HTTP/1.1" 500 367589 "https://app.mydomain/login" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36"
crond: USER anonaddy pid 1255 cmd php /var/www/anonaddy/artisan schedule:run --no-ansi --no-interaction --quiet
27.6.61.201 - - [13/Apr/2021:09:11:51 +0200] "GET / HTTP/1.1" 500 367511 "https://app.mydomain/login" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36 Edg/89.0.774.75"
crond: USER anonaddy pid 1262 cmd php /var/www/anonaddy/artisan schedule:run --no-ansi --no-interaction --quiet

Mail forwarding does no longer work in 0.6.0

Behaviour

Steps to reproduce this issue

  1. Do an upgrade as stated in https://github.com/anonaddy/docker#upgrade to version 0.6.0.

Expected behavior

Anon should work as before.

Actual behaviour

No email is forwarded to the actual inbox. If I downgrade to anonaddy/anonaddy:0.5.0 everything works again.

Configuration

  • Docker version (type docker --version) : Docker version 19.03.13, build 4484c46d9d
  • Docker compose version if applicable (type docker-compose --version) : docker-compose version 1.25.0, build unknown
  • Platform (Debian 9, Ubuntu 18.04, ...) : Ubuntu 20.04.1 LTS
  • System info (type uname -a) : Linux 5.4.0-45-generic #49-Ubuntu SMP Wed Aug 26 13:38:52 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
  • Include all necessary configuration files : docker-compose.yml, .env, ...

docker-compose.yml

version: "3.5"

networks:
  proxy:
    external:
      name: proxy_default
  app-network:
      driver: bridge

services:
  db:
    image: mariadb:10.4
    container_name: anonaddy_db
    volumes:
      - "./db:/var/lib/mysql"
    environment:
      - "MYSQL_ALLOW_EMPTY_PASSWORD=yes"
      - "MYSQL_DATABASE"
      - "MYSQL_USER"
      - "MYSQL_PASSWORD"
    restart: always
    networks:
      - app-network

  redis:
    image: redis:4.0-alpine
    container_name: anonaddy_redis
    restart: always
    networks:
      - app-network

  anonaddy:
    image: anonaddy/anonaddy:latest
    container_name: anonaddy
    depends_on:
      - db
      - redis
    ports:
      - target: 25
        published: 25
        protocol: tcp
    volumes:
      - "./data:/data"
    dns:
      - 1.1.1.1
    networks:
      - proxy
      - app-network
    labels:
      - "traefik.enable=true"
      - "traefik.docker.network=proxy_default"
      - "traefik.http.routers.anon.rule=Host(`anon.example.com`)"
      - "traefik.http.routers.anon.entrypoints=https"
      - "traefik.http.routers.anon.tls.certresolver=http"
      - "traefik.http.routers.anon.middlewares=ratelimit@file,compress@file,security-headers@file"
      - "traefik.http.services.anon.loadbalancer.server.port=8000"
      - "traefik.http.routers.anon.service=anon"
    env_file:
      - "./anonaddy.env"
    environment:
      - "DB_HOST=db"
      - "DB_DATABASE=${MYSQL_DATABASE}"
      - "DB_USERNAME=${MYSQL_USER}"
      - "DB_PASSWORD=${MYSQL_PASSWORD}"
      - "REDIS_HOST=redis"
    restart: always

Docker info

Client:
 Debug Mode: false

Server:
 Containers: 13
  Running: 13
  Paused: 0
  Stopped: 0
 Images: 32
 Server Version: 19.03.12
 Storage Driver: overlay2
  Backing Filesystem: extfs
  Supports d_type: true
  Native Overlay Diff: true
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
 Swarm: inactive
 Runtimes: runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 7ad184331fa3e55e52b890ea95e65ba581ae3429
 runc version: dc9208a3303feef5b3839f4323d9beb36df0a9dd
 init version: fec3683
 Security Options:
  apparmor
  seccomp
   Profile: default
 Kernel Version: 5.4.0-45-generic
 Operating System: Ubuntu 20.04.1 LTS
 OSType: linux
 Architecture: x86_64
 CPUs: 4
 Total Memory: 7.775GiB
 Name: host54.example.com
 ID: V4TL:AQXJ:UBLT:RUIV:TT7X:CUZK:MCRW:4IDG:4W7H:YN4A:AU5I:A6UQ
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Registry: https://index.docker.io/v1/
 Labels:
 Experimental: false
 Insecure Registries:
  127.0.0.0/8
 Live Restore Enabled: false

Logs

[s6-init] making user provided files available at /var/run/s6/etc...exited 0.
[s6-init] ensuring user provided files have correct perms...exited 0.
[fix-attrs.d] applying ownership & permissions fixes...
[fix-attrs.d] done.
[cont-init.d] executing container initialization scripts...
[cont-init.d] 00-fix-logs.sh: executing...
[cont-init.d] 00-fix-logs.sh: exited 0.
[cont-init.d] 01-fix-uidgid.sh: executing...
[cont-init.d] 01-fix-uidgid.sh: exited 0.
[cont-init.d] 02-fix-perms.sh: executing...
Fixing perms...
[cont-init.d] 02-fix-perms.sh: exited 0.
[cont-init.d] 03-config.sh: executing...
Setting timezone to Europe/Berlin...
Setting PHP-FPM configuration
Setting PHP INI configuration
Setting OpCache configuration
Setting Nginx configuration
Initializing files and folders
Checking database connection...
Waiting 60s for database to be ready...
Database ready!
Creating AnonAddy env file
Trust all proxies
Copied File [/vendor/fideloper/proxy/config/trustedproxy.php] To [/config/trustedproxy.php]
Publishing complete.
Setting Postfix master configuration
Setting Postfix main configuration
Creating Postfix virtual alias domains and subdomains configuration
Creating Postfix recipient access configuration
Checking Postfix hostname
myhostname = mail.anon.example.com
Creating check_access stored procedure
[cont-init.d] 03-config.sh: exited 0.
[cont-init.d] 04-svc-main.sh: executing...
DB migration
Migrating: 2020_10_07_141852_add_catch_all_to_domains_table
Migrated:  2020_10_07_141852_add_catch_all_to_domains_table (12.11ms)
Migrating: 2020_10_09_115344_add_catch_all_to_additional_usernames_table
Migrated:  2020_10_09_115344_add_catch_all_to_additional_usernames_table (3.93ms)
Migrating: 2020_10_13_091421_add_catch_all_to_users_table
Migrated:  2020_10_13_091421_add_catch_all_to_users_table (3.46ms)
Clear cache
Application cache cleared!
Configuration cache cleared!
Configuration cached successfully!
[cont-init.d] 04-svc-main.sh: exited 0.
[cont-init.d] 05-svc-postfix.sh: executing...
[cont-init.d] 05-svc-postfix.sh: exited 0.
[cont-init.d] 06-svc-cron.sh: executing...
Fixing crontabs permissions...
[cont-init.d] 06-svc-cron.sh: exited 0.
[cont-init.d] 99-clean.sh: executing...
[cont-init.d] 99-clean.sh: exited 0.
[cont-init.d] ~-socklog: executing...
[cont-init.d] ~-socklog: exited 0.
[cont-init.d] done.
[services.d] starting services
crond: crond (busybox 1.31.1) started, log level 8
2020/10/25 14:05:57 [notice] 571#571: using the "epoll" event method
2020/10/25 14:05:57 [notice] 571#571: nginx/1.18.0
2020/10/25 14:05:57 [notice] 571#571: OS: Linux 5.4.0-45-generic
2020/10/25 14:05:57 [notice] 571#571: getrlimit(RLIMIT_NOFILE): 1048576:1048576
2020/10/25 14:05:57 [notice] 571#571: start worker processes
2020/10/25 14:05:57 [notice] 571#571: start worker process 582
2020/10/25 14:05:57 [notice] 571#571: start worker process 583
2020/10/25 14:05:57 [notice] 571#571: start worker process 584
2020/10/25 14:05:57 [notice] 571#571: start worker process 585
2020/10/25 14:05:57 [crit] 584#584: *1 connect() to unix:/var/run/php-fpm/php-fpm7.sock failed (2: No such file or directory) while connecting to upstream, client: 172.22.0.3, server: , request: "GET /login HTTP/1.1", upstream: "fastcgi://unix:/var/run/php-fpm/php-fpm7.sock:", host: "anon.example.com"
31.17.192.74 - - [25/Oct/2020:14:05:57 +0100] "GET /login HTTP/1.1" 502 150 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:84.0) Gecko/20100101 Firefox/84.0"
[services.d] done.
[25-Oct-2020 14:05:57] NOTICE: fpm is running, pid 567
[25-Oct-2020 14:05:57] NOTICE: ready to handle connections
Oct 25 14:05:57 mail postfix/postfix-script[814]: starting the Postfix mail system
Oct 25 14:05:57 mail postfix/master[815]: daemon started -- version 3.5.7, configuration /etc/postfix
31.17.192.74 - - [25/Oct/2020:14:05:59 +0100] "GET /login HTTP/1.1" 200 1389 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:84.0) Gecko/20100101 Firefox/84.0"
crond: USER anonaddy pid 819 cmd php /var/www/anonaddy/artisan schedule:run --no-ansi --no-interaction --quiet
31.17.192.74 - - [25/Oct/2020:14:06:00 +0100] "POST /login HTTP/1.1" 302 350 "https://anon.example.com/login" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:84.0) Gecko/20100101 Firefox/84.0"
31.17.192.74 - - [25/Oct/2020:14:06:00 +0100] "GET / HTTP/1.1" 200 1327 "https://anon.example.com/login" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:84.0) Gecko/20100101 Firefox/84.0"
31.17.192.74 - - [25/Oct/2020:14:06:06 +0100] "POST /login/2fa HTTP/1.1" 302 350 "https://anon.example.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:84.0) Gecko/20100101 Firefox/84.0"
31.17.192.74 - - [25/Oct/2020:14:06:06 +0100] "GET / HTTP/1.1" 200 3176 "https://anon.example.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:84.0) Gecko/20100101 Firefox/84.0"
Oct 25 14:06:27 mail postfix/smtpd[826]: connect from mout.gmx.net[212.227.15.18]
Oct 25 14:06:27 mail postfix/trivial-rewrite[828]: warning: mysql:/etc/postfix/mysql-virtual-alias-domains-and-subdomains.cf: query failed (mysql_store_result): Subquery returns more than 1 row
Oct 25 14:06:27 mail postfix/trivial-rewrite[828]: warning: virtual_mailbox_domains: mysql:/etc/postfix/mysql-virtual-alias-domains-and-subdomains.cf: table lookup problem
Oct 25 14:06:27 mail postfix/trivial-rewrite[828]: warning: virtual_mailbox_domains lookup failure
Oct 25 14:06:27 mail postfix/trivial-rewrite[828]: warning: virtual_mailbox_domains: mysql:/etc/postfix/mysql-virtual-alias-domains-and-subdomains.cf: table lookup problem
Oct 25 14:06:27 mail postfix/trivial-rewrite[828]: warning: virtual_mailbox_domains lookup failure
Oct 25 14:06:27 mail postfix/smtpd[826]: NOQUEUE: reject: RCPT from mout.gmx.net[212.227.15.18]: 451 4.3.0 <[email protected]>: Temporary lookup failure; from=<[email protected]> to=<[email protected]> proto=ESMTP helo=<mout.gmx.net>
Oct 25 14:06:27 mail postfix/smtpd[826]: disconnect from mout.gmx.net[212.227.15.18] ehlo=1 mail=1 rcpt=0/1 data=0/1 quit=1 commands=3/5
crond: USER anonaddy pid 829 cmd php /var/www/anonaddy/artisan schedule:run --no-ansi --no-interaction --quiet

Traefik can't find IP adress for container

Hello guys,

I just tried to use the example from this repository to setup anonaddy with docker. I used the given example in the traefik folder.

But I do encounter the following error again and again no matter what I try:

anonaddy    | [s6-init] making user provided files available at /var/run/s6/etc...exited 0.
anonaddy    | [s6-init] ensuring user provided files have correct perms...exited 0.
anonaddy    | [fix-attrs.d] applying ownership & permissions fixes...
anonaddy    | [fix-attrs.d] done.
anonaddy    | [cont-init.d] executing container initialization scripts...
anonaddy    | [cont-init.d] 00-env: executing...
anonaddy    | [cont-init.d] 00-env: exited 0.
anonaddy    | [cont-init.d] 00-fix-logs.sh: executing...
anonaddy    | [cont-init.d] 00-fix-logs.sh: exited 0.
anonaddy    | [cont-init.d] 01-fix-uidgid.sh: executing...
anonaddy    | [cont-init.d] 01-fix-uidgid.sh: exited 0.
anonaddy    | [cont-init.d] 02-fix-perms.sh: executing...
anonaddy    | Fixing perms...
anonaddy    | [cont-init.d] 02-fix-perms.sh: exited 0.
anonaddy    | [cont-init.d] 10-config.sh: executing...
anonaddy    | ERROR: Rspamd and OpenDKIM/OpenDMARC are mutually exclusive
anonaddy    | [cont-init.d] 10-config.sh: exited 1.
anonaddy    | [cont-finish.d] executing container finish scripts...
anonaddy    | [cont-finish.d] done.
anonaddy    | [s6-finish] waiting for services.
anonaddy    | [s6-finish] sending all processes the TERM signal.
anonaddy    | [s6-finish] sending all processes the KILL signal and exiting.
anonaddy exited with code 1
traefik     | time="2022-01-22T21:35:35Z" level=error msg="service \"anonaddy\" error: unable to find the IP address for the container \"/anonaddy\": the server is ignored" container=anonaddy-home-4c8c65187cf700d3716f2e26c55046af7ab86d4e9c28fe360dd38d092caedd1a providerName=docker

I basically do use the default config. I was able to make it work on one test machine but on the other it fails with the given error.

My config:

My docker-compose.yml (Spoiler)
version: "3.5"

services:
traefik:
  image: traefik:2.5
  container_name: traefik
  command:
    - "--global.checknewversion=false"
    - "--global.sendanonymoususage=false"
    - "--log=true"
    - "--log.level=INFO"
    - "--entrypoints.http=true"
    - "--entrypoints.http.address=:80"
    - "--entrypoints.http.http.redirections.entrypoint.to=https"
    - "--entrypoints.http.http.redirections.entrypoint.scheme=https"
    - "--entrypoints.https=true"
    - "--entrypoints.https.address=:443"
    - "--certificatesresolvers.letsencrypt"
    - "--certificatesresolvers.letsencrypt.acme.storage=acme.json"
    - "[email protected]"
    - "--certificatesresolvers.letsencrypt.acme.httpchallenge"
    - "--certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=http"
    - "--providers.docker"
    - "--providers.docker.watch=true"
    - "--providers.docker.exposedbydefault=false"
  ports:
    - target: 80
      published: 80
      protocol: tcp
    - target: 443
      published: 443
      protocol: tcp
  volumes:
    - "./acme.json:/acme.json"
    - "/var/run/docker.sock:/var/run/docker.sock"
  restart: always

db:
  image: mariadb:10.5
  container_name: anonaddy_db
  command:
    - "mysqld"
    - "--character-set-server=utf8mb4"
    - "--collation-server=utf8mb4_unicode_ci"
  volumes:
    - "./db:/var/lib/mysql"
  environment:
    - "MYSQL_ALLOW_EMPTY_PASSWORD=yes"
    - "MYSQL_DATABASE"
    - "MYSQL_USER"
    - "MYSQL_PASSWORD"
  restart: always

redis:
  image: redis:4.0-alpine
  container_name: anonaddy_redis
  restart: always

anonaddy:
  image: anonaddy/anonaddy:latest
  container_name: anonaddy
  depends_on:
    - db
    - redis
  ports:
    - target: 25
      published: 25
      protocol: tcp
  volumes:
    - "./data:/data"
  labels:
    - "traefik.enable=true"
    - "traefik.http.routers.anonaddy.entrypoints=https"
    - "traefik.http.routers.anonaddy.rule=Host(`mydomain.tld`)"
    - "traefik.http.routers.anonaddy.tls=true"
    - "traefik.http.routers.anonaddy.tls.certresolver=letsencrypt"
    - "traefik.http.routers.anonaddy.tls.domains[0].main=mydomain.tld"
    - "traefik.http.services.anonaddy.loadbalancer.server.port=8000"
  env_file:
    - "./anonaddy.env"
  environment:
    - "DB_HOST=db"
    - "DB_DATABASE=${MYSQL_DATABASE}"
    - "DB_USERNAME=${MYSQL_USER}"
    - "DB_PASSWORD=${MYSQL_PASSWORD}"
    - "REDIS_HOST=redis"
  restart: always
anonaddy.env
TZ=Europe/Berlin
PUID=1000
PGID=1000

MEMORY_LIMIT=256M
UPLOAD_MAX_SIZE=16M
OPCACHE_MEM_SIZE=128
LISTEN_IPV6=true
REAL_IP_FROM=0.0.0.0/32
REAL_IP_HEADER=X-Forwarded-For
LOG_IP_VAR=http_x_forwarded_for

APP_KEY=base64:TZqfhgtADCJavbKJyA8Iqr3oNRDZZ1b7f91TiNkqM+M=
APP_DEBUG=false
APP_URL=https://mydomain.tld

[email protected]
ANONADDY_ADMIN_USERNAME=multi
ANONADDY_ENABLE_REGISTRATION=false
ANONADDY_DOMAIN=mydomain.tld
ANONADDY_ALL_DOMAINS=mydomain.tld
ANONADDY_HOSTNAME=mydomain.tld
ANONADDY_DNS_RESOLVER=127.0.0.1
ANONADDY_SECRET=okevkZxAwFqxrlmpepDpBniBenQjHrDiaRoHVTfcrLKABGb8tZf0U
ANONADDY_LIMIT=50
ANONADDY_BANDWIDTH_LIMIT=104857600
ANONADDY_NEW_ALIAS_LIMIT=50
ANONADDY_ADDITIONAL_USERNAME_LIMIT=0
ANONADDY_DKIM_SIGNING_KEY=/data/dkim/mydomain.tld.private
ANONADDY_DKIM_SELECTOR=default

MAIL_FROM_NAME=Spam-Mail
[email protected]

POSTFIX_DEBUG=false
POSTFIX_SMTPD_TLS=false
POSTFIX_SMTP_TLS=false

DKIM_ENABLE=true

RSPAMD_ENABLE=true
RSPAMD_WEB_PASSWORD=E9IxAwoksA4Zv5eiZV

EDIT:

Whole log incase that helps
docker-compose up
Starting anonaddy_redis ... done
Starting anonaddy_db    ... done
Starting traefik        ... done
Starting anonaddy       ... done
Attaching to anonaddy_db, anonaddy_redis, traefik, anonaddy
anonaddy_db | 2022-01-22 21:47:11+00:00 [Note] [Entrypoint]: Entrypoint script for MariaDB Server 1:10.5.13+maria~focal started.
anonaddy_db | 2022-01-22 21:47:12+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
anonaddy_db | 2022-01-22 21:47:12+00:00 [Note] [Entrypoint]: Entrypoint script for MariaDB Server 1:10.5.13+maria~focal started.
anonaddy_db | 2022-01-22 21:47:12 0 [Note] mysqld (mysqld 10.5.13-MariaDB-1:10.5.13+maria~focal) starting as process 1 ...
anonaddy_db | 2022-01-22 21:47:12 0 [Note] InnoDB: Uses event mutexes
anonaddy_db | 2022-01-22 21:47:12 0 [Note] InnoDB: Compressed tables use zlib 1.2.11
anonaddy_db | 2022-01-22 21:47:12 0 [Note] InnoDB: Number of pools: 1
anonaddy_db | 2022-01-22 21:47:12 0 [Note] InnoDB: Using crc32 + pclmulqdq instructions
anonaddy_db | 2022-01-22 21:47:12 0 [Note] mysqld: O_TMPFILE is not supported on /tmp (disabling future attempts)
anonaddy_db | 2022-01-22 21:47:12 0 [Note] InnoDB: Using Linux native AIO
anonaddy_db | 2022-01-22 21:47:12 0 [Note] InnoDB: Initializing buffer pool, total size = 134217728, chunk size = 134217728
anonaddy_db | 2022-01-22 21:47:12 0 [Note] InnoDB: Completed initialization of buffer pool
anonaddy_db | 2022-01-22 21:47:12 0 [Note] InnoDB: 128 rollback segments are active.
anonaddy_db | 2022-01-22 21:47:12 0 [Note] InnoDB: Creating shared tablespace for temporary tables
anonaddy_db | 2022-01-22 21:47:12 0 [Note] InnoDB: Setting file './ibtmp1' size to 12 MB. Physically writing the file full; Please wait ...
anonaddy_db | 2022-01-22 21:47:12 0 [Note] InnoDB: File './ibtmp1' size is now 12 MB.
anonaddy_db | 2022-01-22 21:47:12 0 [Note] InnoDB: 10.5.13 started; log sequence number 45118; transaction id 20
anonaddy_db | 2022-01-22 21:47:12 0 [Note] Plugin 'FEEDBACK' is disabled.
anonaddy_db | 2022-01-22 21:47:12 0 [Note] InnoDB: Loading buffer pool(s) from /var/lib/mysql/ib_buffer_pool
anonaddy_db | 2022-01-22 21:47:12 0 [Note] InnoDB: Buffer pool(s) load completed at 220122 21:47:12
anonaddy_db | 2022-01-22 21:47:13 0 [Note] Server socket created on IP: '::'.
anonaddy_db | 2022-01-22 21:47:13 0 [Warning] 'proxies_priv' entry '@% root@dcfe60fb80a3' ignored in --skip-name-resolve mode.
anonaddy_db | 2022-01-22 21:47:13 0 [Note] Reading of all Master_info entries succeeded
anonaddy_db | 2022-01-22 21:47:13 0 [Note] Added new Master_info '' to hash table
anonaddy_db | 2022-01-22 21:47:13 0 [Note] mysqld: ready for connections.
anonaddy_db | Version: '10.5.13-MariaDB-1:10.5.13+maria~focal'  socket: '/run/mysqld/mysqld.sock'  port: 3306  mariadb.org binary distribution
anonaddy_redis | 1:C 22 Jan 21:47:11.754 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
anonaddy_redis | 1:C 22 Jan 21:47:11.754 # Redis version=4.0.14, bits=64, commit=00000000, modified=0, pid=1, just started
anonaddy_redis | 1:C 22 Jan 21:47:11.754 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
anonaddy_redis | 1:M 22 Jan 21:47:11.756 * Running mode=standalone, port=6379.
anonaddy_redis | 1:M 22 Jan 21:47:11.756 # Server initialized
anonaddy_redis | 1:M 22 Jan 21:47:11.756 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
anonaddy_redis | 1:M 22 Jan 21:47:11.757 * DB loaded from disk: 0.001 seconds
anonaddy_redis | 1:M 22 Jan 21:47:11.757 * Ready to accept connections
traefik     | time="2022-01-22T21:47:12Z" level=info msg="Configuration loaded from flags."
traefik     | time="2022-01-22T21:47:12Z" level=info msg="Traefik version 2.5.7 built on 2022-01-20T16:16:23Z"
traefik     | time="2022-01-22T21:47:12Z" level=info msg="\nStats collection is disabled.\nHelp us improve Traefik by turning this feature on :)\nMore details on: https://doc.traefik.io/traefik/contributing/data-collection/\n"
traefik     | time="2022-01-22T21:47:12Z" level=info msg="Starting provider aggregator.ProviderAggregator {}"
traefik     | time="2022-01-22T21:47:12Z" level=info msg="Starting provider *traefik.Provider {}"
traefik     | time="2022-01-22T21:47:12Z" level=info msg="Starting provider *docker.Provider {\"watch\":true,\"endpoint\":\"unix:///var/run/docker.sock\",\"defaultRule\":\"Host(`{{ normalize .Name }}`)\",\"swarmModeRefreshSeconds\":\"15s\"}"
traefik     | time="2022-01-22T21:47:12Z" level=info msg="Starting provider *acme.ChallengeTLSALPN {\"Timeout\":4000000000}"
traefik     | time="2022-01-22T21:47:12Z" level=info msg="Starting provider *acme.Provider {\"email\":\"[email protected]\",\"caServer\":\"https://acme-v02.api.letsencrypt.org/directory\",\"storage\":\"acme.json\",\"keyType\":\"RSA4096\",\"httpChallenge\":{\"entryPoint\":\"http\"},\"ResolverName\":\"letsencrypt\",\"store\":{},\"TLSChallengeProvider\":{\"Timeout\":4000000000},\"HTTPChallengeProvider\":{}}"
traefik     | time="2022-01-22T21:47:12Z" level=info msg="Testing certificate renew..." providerName=letsencrypt.acme
anonaddy    | [s6-init] making user provided files available at /var/run/s6/etc...exited 0.
anonaddy    | [s6-init] ensuring user provided files have correct perms...exited 0.
anonaddy    | [fix-attrs.d] applying ownership & permissions fixes...
anonaddy    | [fix-attrs.d] done.
anonaddy    | [cont-init.d] executing container initialization scripts...
anonaddy    | [cont-init.d] 00-env: executing...
anonaddy    | [cont-init.d] 00-env: exited 0.
anonaddy    | [cont-init.d] 00-fix-logs.sh: executing...
anonaddy    | [cont-init.d] 00-fix-logs.sh: exited 0.
anonaddy    | [cont-init.d] 01-fix-uidgid.sh: executing...
anonaddy    | [cont-init.d] 01-fix-uidgid.sh: exited 0.
anonaddy    | [cont-init.d] 02-fix-perms.sh: executing...
anonaddy    | Fixing perms...
anonaddy    | [cont-init.d] 02-fix-perms.sh: exited 0.
anonaddy    | [cont-init.d] 10-config.sh: executing...
anonaddy    | ERROR: Rspamd and OpenDKIM/OpenDMARC are mutually exclusive
anonaddy    | [cont-init.d] 10-config.sh: exited 1.
anonaddy    | [cont-finish.d] executing container finish scripts...
anonaddy    | [cont-finish.d] done.
anonaddy    | [s6-finish] waiting for services.
anonaddy    | [s6-finish] sending all processes the TERM signal.
anonaddy    | [s6-finish] sending all processes the KILL signal and exiting.
traefik     | time="2022-01-22T21:47:18Z" level=error msg="service \"anonaddy\" error: unable to find the IP address for the container \"/anonaddy\": the server is ignored" container=anonaddy-home-4c8c65187cf700d3716f2e26c55046af7ab86d4e9c28fe360dd38d092caedd1a providerName=docker
anonaddy    | [s6-init] making user provided files available at /var/run/s6/etc...exited 0.
anonaddy    | [s6-init] ensuring user provided files have correct perms...exited 0.
anonaddy    | [fix-attrs.d] applying ownership & permissions fixes...
anonaddy    | [fix-attrs.d] done.
anonaddy    | [cont-init.d] executing container initialization scripts...
anonaddy    | [cont-init.d] 00-env: executing...
anonaddy    | [cont-init.d] 00-env: exited 0.
anonaddy    | [cont-init.d] 00-fix-logs.sh: executing...
anonaddy    | [cont-init.d] 00-fix-logs.sh: exited 0.
anonaddy    | [cont-init.d] 01-fix-uidgid.sh: executing...
anonaddy    | [cont-init.d] 01-fix-uidgid.sh: exited 0.
anonaddy    | [cont-init.d] 02-fix-perms.sh: executing...
anonaddy    | Fixing perms...
anonaddy    | [cont-init.d] 02-fix-perms.sh: exited 0.
anonaddy    | [cont-init.d] 10-config.sh: executing...
anonaddy    | ERROR: Rspamd and OpenDKIM/OpenDMARC are mutually exclusive
anonaddy    | [cont-init.d] 10-config.sh: exited 1.
anonaddy    | [cont-finish.d] executing container finish scripts...
anonaddy    | [cont-finish.d] done.
anonaddy    | [s6-finish] waiting for services.
anonaddy    | [s6-finish] sending all processes the TERM signal.
anonaddy    | [s6-finish] sending all processes the KILL signal and exiting.
anonaddy exited with code 1
anonaddy    | [s6-init] making user provided files available at /var/run/s6/etc...exited 0.
anonaddy    | [s6-init] ensuring user provided files have correct perms...exited 0.
anonaddy    | [fix-attrs.d] applying ownership & permissions fixes...
anonaddy    | [fix-attrs.d] done.
anonaddy    | [cont-init.d] executing container initialization scripts...
anonaddy    | [cont-init.d] 00-env: executing...
anonaddy    | [cont-init.d] 00-env: exited 0.
anonaddy    | [cont-init.d] 00-fix-logs.sh: executing...
anonaddy    | [cont-init.d] 00-fix-logs.sh: exited 0.
anonaddy    | [cont-init.d] 01-fix-uidgid.sh: executing...
anonaddy    | [cont-init.d] 01-fix-uidgid.sh: exited 0.
anonaddy    | [cont-init.d] 02-fix-perms.sh: executing...
anonaddy    | Fixing perms...
anonaddy    | [cont-init.d] 02-fix-perms.sh: exited 0.
anonaddy    | [cont-init.d] 10-config.sh: executing...
anonaddy    | ERROR: Rspamd and OpenDKIM/OpenDMARC are mutually exclusive
anonaddy    | [cont-init.d] 10-config.sh: exited 1.
anonaddy    | [cont-finish.d] executing container finish scripts...
anonaddy    | [cont-finish.d] done.
anonaddy    | [s6-finish] waiting for services.
anonaddy    | [s6-finish] sending all processes the TERM signal.
anonaddy    | [s6-finish] sending all processes the KILL signal and exiting.
anonaddy exited with code 1
anonaddy    | [s6-init] making user provided files available at /var/run/s6/etc...exited 0.
anonaddy    | [s6-init] ensuring user provided files have correct perms...exited 0.
anonaddy    | [fix-attrs.d] applying ownership & permissions fixes...
anonaddy    | [fix-attrs.d] done.
anonaddy    | [cont-init.d] executing container initialization scripts...
anonaddy    | [cont-init.d] 00-env: executing...
anonaddy    | [cont-init.d] 00-env: exited 0.
anonaddy    | [cont-init.d] 00-fix-logs.sh: executing...
anonaddy    | [cont-init.d] 00-fix-logs.sh: exited 0.
anonaddy    | [cont-init.d] 01-fix-uidgid.sh: executing...
anonaddy    | [cont-init.d] 01-fix-uidgid.sh: exited 0.
anonaddy    | [cont-init.d] 02-fix-perms.sh: executing...
anonaddy    | Fixing perms...
anonaddy    | [cont-init.d] 02-fix-perms.sh: exited 0.
anonaddy    | [cont-init.d] 10-config.sh: executing...
anonaddy    | ERROR: Rspamd and OpenDKIM/OpenDMARC are mutually exclusive
anonaddy    | [cont-init.d] 10-config.sh: exited 1.
anonaddy    | [cont-finish.d] executing container finish scripts...
anonaddy    | [cont-finish.d] done.
anonaddy    | [s6-finish] waiting for services.
anonaddy    | [s6-finish] sending all processes the TERM signal.
anonaddy    | [s6-finish] sending all processes the KILL signal and exiting.
anonaddy exited with code 1
traefik     | time="2022-01-22T21:47:34Z" level=error msg="service \"anonaddy\" error: unable to find the IP address for the container \"/anonaddy\": the server is ignored" providerName=docker container=anonaddy-home-4c8c65187cf700d3716f2e26c55046af7ab86d4e9c28fe360dd38d092caedd1a
anonaddy    | [s6-init] making user provided files available at /var/run/s6/etc...exited 0.
anonaddy    | [s6-init] ensuring user provided files have correct perms...exited 0.
anonaddy    | [fix-attrs.d] applying ownership & permissions fixes...
anonaddy    | [fix-attrs.d] done.
anonaddy    | [cont-init.d] executing container initialization scripts...
anonaddy    | [cont-init.d] 00-env: executing...
anonaddy    | [cont-init.d] 00-env: exited 0.
anonaddy    | [cont-init.d] 00-fix-logs.sh: executing...
anonaddy    | [cont-init.d] 00-fix-logs.sh: exited 0.
anonaddy    | [cont-init.d] 01-fix-uidgid.sh: executing...
anonaddy    | [cont-init.d] 01-fix-uidgid.sh: exited 0.
anonaddy    | [cont-init.d] 02-fix-perms.sh: executing...
anonaddy    | Fixing perms...
anonaddy    | [cont-init.d] 02-fix-perms.sh: exited 0.
anonaddy    | [cont-init.d] 10-config.sh: executing...
anonaddy    | ERROR: Rspamd and OpenDKIM/OpenDMARC are mutually exclusive
anonaddy    | [cont-init.d] 10-config.sh: exited 1.
anonaddy    | [cont-finish.d] executing container finish scripts...
anonaddy    | [cont-finish.d] done.
anonaddy    | [s6-finish] waiting for services.
anonaddy    | [s6-finish] sending all processes the TERM signal.
anonaddy    | [s6-finish] sending all processes the KILL signal and exiting.
anonaddy exited with code 1
traefik     | time="2022-01-22T21:47:39Z" level=error msg="service \"anonaddy\" error: unable to find the IP address for the container \"/anonaddy\": the server is ignored" providerName=docker container=anonaddy-home-4c8c65187cf700d3716f2e26c55046af7ab86d4e9c28fe360dd38d092caedd1a

Maybe you guys have an idea where to look at? Thanks in advance!

Container immediately shuts itself down on Synology NAS

Behaviour

When I start the container, within a second it shuts itself down.

Steps to reproduce this issue

  1. Add anonaddy image to docker
  2. Create container with anonaddy image
  3. Configure anonaddy container volumes
  4. Launch anonaddy container

Configuration

  • Docker version (type docker --version) : Docker version 18.09.8, build bfed4f5
  • Docker compose version if applicable (type docker-compose --version) : docker-compose version 1.24.0, build 0aa59064
  • Platform (Debian 9, Ubuntu 18.04, ...) : Synology DSM
  • System info (type uname -a) : 4.4.59+ #25426 SMP PREEMPT Wed Jul 8 03:21:27 CST 2020 x86_64 GNU/Linux synology_geminilake_920+
  • Include all necessary configuration files : docker-compose.yml, .env, ...

Docker info

Password:
Containers: 2
 Running: 1
 Paused: 0
 Stopped: 1
Images: 3
Server Version: 18.09.8
Storage Driver: btrfs
Logging Driver: db
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: bridge host macvlan null overlay
 Log: awslogs db fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 0cf16177dbb234350dc27dd2bbd1d7cebd098108
runc version: 6cc9d3f2cd512eeb3d548e2f6b75bcdebc779d4d
init version: e01de58 (expected: fec3683)
Security Options:
 apparmor
Kernel Version: 4.4.59+
OSType: linux
Architecture: x86_64
CPUs: 4
Total Memory: 19.39GiB
Name: [REDACTED]
ID: [REDACTED]
Docker Root Dir: /volume1/@docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
 127.0.0.0/8
Live Restore Enabled: false

WARNING: No kernel memory limit support
WARNING: No cpu cfs quota support
WARNING: No cpu cfs period support

Logs

[s6-init] making user provided files available at /var/run/s6/etc...exited 0.
[s6-init] ensuring user provided files have correct perms...exited 0.
[fix-attrs.d] applying ownership & permissions fixes...
[fix-attrs.d] done.
[cont-init.d] executing container initialization scripts...
[cont-init.d] 00-fix-logs.sh: executing... 
[cont-init.d] 00-fix-logs.sh: exited 0.
[cont-init.d] 01-fix-uidgid.sh: executing... 
[cont-init.d] 01-fix-uidgid.sh: exited 0.
[cont-init.d] 02-fix-perms.sh: executing... 
Fixing perms...
[cont-init.d] 02-fix-perms.sh: exited 0.
[cont-init.d] 03-config.sh: executing... 
Setting timezone to UTC...
Setting PHP-FPM configuration
Setting PHP INI configuration
Setting OpCache configuration
Setting Nginx configuration
Initializing files and folders
Checking database connection...
ERROR: DB_HOST must be defined
[cont-init.d] 03-config.sh: exited 1.
[cont-finish.d] executing container finish scripts...
[cont-finish.d] done.
[s6-finish] waiting for services.
[s6-finish] sending all processes the TERM signal.
[s6-finish] sending all processes the KILL signal and exiting.

secondary domains added via GUI not being signed by DKIM

Behaviour

Steps to reproduce this issue

  1. add ANONADDY_DKIM_SIGNING_KEY=/data/dkim/domain.com.private to .env as per self-install wiki to allow signing of additional domains
  2. add additional domain via UI
  3. create new alias under said domain
  4. send test email to said alias

Expected behaviour

DKIM signing of outgoing emails

Actual behaviour

mail.info: Aug 9 20:54:09 opendkim[681]: 07C80A4647: no signing table match for '15a03b0d-24b7-4dc6-a265-xxxxxx@xxxxxx'

Configuration

  • Docker version (type docker --version) :
  • Docker version 20.10.7, build f0df350
  • Docker compose version if applicable (type docker-compose --version) :
  • docker-compose version 1.25.0, build unknown
  • Platform (Debian 9, Ubuntu 18.04, ...) :
  • Ubuntu 20.04
  • System info (type uname -a) :
  • Linux mail.xxxxx.com 5.4.0-80-generic #90-Ubuntu SMP Fri Jul 9 22:49:44 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
  • Include all necessary configuration files : docker-compose.yml, .env, ...
version: "3.5"

services:
  traefik:
    image: traefik:2.3
    container_name: traefik
    command:
      - "--global.checknewversion=false"
      - "--global.sendanonymoususage=false"
      - "--log=true"
      - "--log.level=INFO"
      - "--entrypoints.http=true"
      - "--entrypoints.http.address=:80"
      - "--entrypoints.http.http.redirections.entrypoint.to=https"
      - "--entrypoints.http.http.redirections.entrypoint.scheme=https"
      - "--entrypoints.https=true"
      - "--entrypoints.https.address=:443"
      - "--certificatesresolvers.letsencrypt"
      - "--certificatesresolvers.letsencrypt.acme.storage=acme.json"
      - "--certificatesresolvers.letsencrypt.acme.email=webmaster@XXXXXX.com"
      - "--certificatesresolvers.letsencrypt.acme.httpchallenge"
      - "--certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=http"
      - "--providers.docker"
      - "--providers.docker.watch=true"
      - "--providers.docker.exposedbydefault=false"
    ports:
      - target: 80
        published: 80
        protocol: tcp
      - target: 443
        published: 443
        protocol: tcp
    volumes:
      - "./acme.json:/acme.json"
      - "/var/run/docker.sock:/var/run/docker.sock"
    restart: always

  db:
    image: mariadb:10.5
    container_name: anonaddy_db
    command:
      - "mysqld"
      - "--character-set-server=utf8mb4"
      - "--collation-server=utf8mb4_unicode_ci"
    volumes:
      - "./db:/var/lib/mysql"
    environment:
      - "MYSQL_ALLOW_EMPTY_PASSWORD=yes"
      - "MYSQL_DATABASE=XXXX"
      - "MYSQL_USER=XXXX"
      - "MYSQL_PASSWORD=XXXX"
    restart: always

  redis:
    image: redis:4.0-alpine
    container_name: anonaddy_redis
    restart: always

  anonaddy:
    #image: anonaddy/anonaddy:latest
    image: anonaddy/anonaddy:pr-76
    container_name: anonaddy
    depends_on:
      - db
      - redis
    ports:
      - target: 25
        published: 25
        protocol: tcp
    volumes:
      - "./data:/data"
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.anonaddy.entrypoints=https"
      - "traefik.http.routers.anonaddy.rule=Host(`anonaddy.XXXXXX.com`)"
      - "traefik.http.routers.anonaddy.tls=true"
      - "traefik.http.routers.anonaddy.tls.certresolver=letsencrypt"
      - "traefik.http.routers.anonaddy.tls.domains[0].main=anonaddy.XXXXXX.com"
      - "traefik.http.services.anonaddy.loadbalancer.server.port=8000"
    env_file:
      - "./anonaddy.env"
    environment:
      - "DB_HOST=db"
      - "DB_DATABASE=${MYSQL_DATABASE}"
      - "DB_USERNAME=${MYSQL_USER}"
      - "DB_PASSWORD=${MYSQL_PASSWORD}"
      - "REDIS_HOST=redis"
    restart: always
TZ=Australia/Melbourne
PUID=1000
PGID=1000

MEMORY_LIMIT=256M
UPLOAD_MAX_SIZE=16M
OPCACHE_MEM_SIZE=128
REAL_IP_FROM=0.0.0.0/32
REAL_IP_HEADER=X-Forwarded-For
LOG_IP_VAR=http_x_forwarded_for

APP_KEY=XXXXXX
APP_DEBUG=false
APP_URL=https://anonaddy.XXXXXX.com

[email protected]
ANONADDY_ADMIN_USERNAME=dgc1980
ANONADDY_ENABLE_REGISTRATION=false
ANONADDY_DOMAIN=XXXXXX.com
ANONADDY_ALL_DOMAINS=XXXXXX.com
ANONADDY_HOSTNAME=anonaddy.XXXXXX.com
ANONADDY_DNS_RESOLVER=1.1.1.1
ANONADDY_SECRET=XXXXXX
ANONADDY_LIMIT=50
ANONADDY_BANDWIDTH_LIMIT=1073741824
#ANONADDY_BANDWIDTH_LIMIT=104857600
ANONADDY_NEW_ALIAS_LIMIT=20
ANONADDY_ADDITIONAL_USERNAME_LIMIT=3
#ANONADDY_SIGNING_KEY_FINGERPRINT=XXXXXX
ANONADDY_DKIM_SIGNING_KEY=/data/dkim/XXXXXX.com.private
#ANONADDY_DKIM_SIGNING_KEY=/var/db/dkim/XXXXXX.com.private
#ANONADDY_DKIM_SIGNING_KEY=/data/dkim/XXXXXX.com.txt

DKIM_ENABLE=true

MAIL_FROM_NAME=AnonAddy
[email protected]

POSTFIX_DEBUG=false
POSTFIX_SMTPD_TLS=false
POSTFIX_SMTP_TLS=false

Docker info

> Output of command `docker info`

Logs

> Container logs (set LOG_LEVEL to debug if applicable)

Add support for binding docker ports to 'localhost'

The current setup automatically binds port 25 for postfix and 8000 for the webapp to the hosts external IP address.
However, in my scenario I want only port 25 to bind directly to the hosts IP whereas the webapp should be available only on localhost in order to expose it through an additional reverse proxy.

I achieved that by editing "docker-compse.yml":
ports: - "25:25" - "127.0.0.1:8000:8000"
For some reason the "mode: host" option did not working to support the long variant of the port description you chose.
Anyway, there should be an config option available to set the binding ip address without the need to edit the compose yml.

Cheers.

Url is set to http even though it should be https

Behaviour

The URL written by Laravel Framework are in http but they should be https.

Configuration

docker-compose with a traefik.
Traefix has the following configuration:
labels:
- "traefik.enable=true"
- "traefik.backend=anonaddy"
- "traefik.port=8000"
- "traefik.docker.network=proxy"
- "traefik.frontend.rule=Host:anonaddy.example.com"
- "traefik.frontend.headers.customRequestHeaders=X-Forwarded-Proto:https"
- "traefik.frontend.headers.customResponseHeaders=Content-Security-Policy: upgrade-insecure-requests;"

The X-Forwarded-Proto is correctly forwarded too by nginx as far as I understand, however the app is missing an important config.

To fix it, I used the following command

 docker exec -it anonaddy php artisan vendor:publish

And activated the Fideloper\Proxy\TrustedProxyServiceProvider .
After that, I put "*" as acceptable IPs and cleared config&cache.

From that point, the URLs are correctly written as https.

Postfix logs

I couldn't find the postfix logs inside /var/log or other locations.

Output of postconf -n:

command_directory = /usr/sbin
compatibility_level = 2
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
debug_peer_level = 2
debugger_command = PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin ddd $daemon_directory/$process_name $process_id & sleep 5
html_directory = no
inet_protocols = ipv4
local_recipient_maps =
mail_owner = postfix
mailq_path = /usr/bin/mailq
manpage_directory = /usr/share/man
meta_directory = /etc/postfix
myhostname = example.com
newaliases_path = /usr/bin/newaliases
queue_directory = /var/spool/postfix
readme_directory = /usr/share/doc/postfix/readme
sample_directory = /etc/postfix
sendmail_path = /usr/sbin/sendmail
setgid_group = postdrop
shlib_directory = /usr/lib/postfix
smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination, check_recipient_access mysql:/etc/postfix/mysql-recipient-access.cf
unknown_local_recipient_reject_code = 550

(Related to this, I can't use the embedded sendmail to send emails, but it's hard to debug without finding the logs...)

500 error while adding public key

Behaviour

I get an error while adding my public GPG key to anonaddy.

Steps to reproduce this issue

  1. Generated a gpg key following this
  2. Click on add public key
  3. Adding this from my generated key
-----BEGIN PGP PUBLIC KEY BLOCK-----

mQGNBF+xWfABDADeNU+eGhOUNkVVanVYVmrehuR7HjQe+X/HuQoFIWcglZnLP0Iw
/p1hMXhnvgvqQRRLtQ23hWwG5uhs5jOeAlAry2LJ1fTnmUfTwBqVKMcFwazGf1bc
...
zEMMkNT4EGh8c64hk0jvOO4=
=E2E0
-----END PGP PUBLIC KEY BLOCK-----

Expected behaviour

The key is added

Actual behaviour

I get a generic error popup

Error
{ "message": "Server Error" }

My emails are not encrypted and are sent to the spam folder by gmail, I hope that by solving this they'll stop getting blacklisted...

Configuration

  • Docker version (type docker --version) : Docker version 19.03.13, build 4484c46d9d
  • Docker compose version if applicable (type docker-compose --version) : docker-compose version 1.26.0, build d4451659
  • Platform (Debian 9, Ubuntu 18.04, ...) : ubuntu 20
  • System info (type uname -a) : Linux v2202005122621119251 5.4.0-52-generic #57-Ubuntu SMP Thu Oct 15 10:57:00 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
  • Include all necessary configuration files : docker-compose.yml, .env, ...

Logs

[15/Nov/2020:18:55:24 +0100] "PATCH /api/v1/recipient-keys/8d9665cd-5a26-4fda-8c3b-9e06d5374c5d HTTP/1.1" 500 44 "https://mail.domain.tld/recipients" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:82.0) Gecko/20100101 Firefox/82.0"

docker-compose.yml

version: "3.5"

services:
  db:
    image: mariadb:10.4
    container_name: anonaddy_db
    volumes:
      - "/data/anonaddy/db:/var/lib/mysql"
    environment:
      - "MYSQL_ALLOW_EMPTY_PASSWORD=yes"
      - "MYSQL_DATABASE=${MYSQL_DATABASE}"
      - "MYSQL_USER=${MYSQL_USER}"
      - "MYSQL_PASSWORD=${MYSQL_PASSWORD}"
    restart: unless-stopped

  redis:
    image: redis:4.0-alpine
    container_name: anonaddy_redis
    restart: unless-stopped

  anonaddy:
    image: anonaddy/anonaddy:latest
    container_name: anonaddy
    depends_on:
      - db
      - redis
    ports:
      - target: 25
        published: 25
        protocol: tcp
#      - target: 8000
#        published: 8000
#        protocol: tcp
    volumes:
      - "/data/anonaddy/data:/data"
    env_file:
      - "./anonaddy.env"
    environment:
      - "DB_HOST=db"
      - "DB_DATABASE=${MYSQL_DATABASE}"
      - "DB_USERNAME=${MYSQL_USER}"
      - "DB_PASSWORD=${MYSQL_PASSWORD}"
      - "REDIS_HOST=redis"
    restart: unless-stopped

anonaddy.env (partial)

TZ=Europe/Berlin
PUID=1000
PGID=1000

MEMORY_LIMIT=256M
UPLOAD_MAX_SIZE=16M
OPCACHE_MEM_SIZE=128
REAL_IP_FROM=0.0.0.0/32
REAL_IP_HEADER=X-Forwarded-For
LOG_IP_VAR=remote_addr

APP_KEY=base64:generated key
APP_DEBUG=false
APP_URL=mail.domain.tld

ANONADDY_RETURN_PATH=mail@domain.tld
ANONADDY_DOMAIN=domain.tld
ANONADDY_ALL_DOMAINS=domain.tld
ANONADDY_HOSTNAME=mail.domain.tld
ANONADDY_DNS_RESOLVER=127.0.0.1
ANONADDY_SECRET=random string. I'd like some pointers on this
ANONADDY_LIMIT=200
ANONADDY_BANDWIDTH_LIMIT=104857600
ANONADDY_NEW_ALIAS_LIMIT=10
ANONADDY_ADDITIONAL_USERNAME_LIMIT=3
ANONADDY_SIGNING_KEY_FINGERPRINT=gpg short signature

MAIL_FROM_NAME=Admin
MAIL_FROM_ADDRESS=mail@domain.tld

POSTFIX_DEBUG=false
POSTFIX_SMTPD_TLS=false
POSTFIX_SMTP_TLS=false

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.