Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| email:configure-dkim-spf-dmarc [2025/03/05 20:02] – willy | email:configure-dkim-spf-dmarc [2025/07/24 13:58] (current) – [DMARC (Domain-based Message Authentication, Reporting & Conformance)] willy | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== Configure proper mail delivery ====== | + | ====== |
| You need access to your domain DNS records, this is mandatory. | You need access to your domain DNS records, this is mandatory. | ||
| Line 37: | Line 37: | ||
| ===== DKIM (Domain Keys Identified Mail) ===== | ===== DKIM (Domain Keys Identified Mail) ===== | ||
| - | Run the following command to configure DKIM the first time: | + | OpenDKIM provides great documentation [[http:// |
| + | |||
| + | You need to choose a // | ||
| + | <code bash> | ||
| + | cd / | ||
| + | opendkim-genkey -s mydomain.com | ||
| + | </ | ||
| + | |||
| + | This will create two files: **mydomain.com.private**, | ||
| + | |||
| + | === DNS record === | ||
| + | |||
| + | As an example consider the following **mydomain.com.txt**: | ||
| + | < | ||
| + | mydomain.com._domainkey | ||
| + | " | ||
| + | </ | ||
| + | |||
| + | You need to create a new TXT record in your DNS zone with // | ||
| + | |||
| + | === Postfix setup === | ||
| + | |||
| + | OpenDKIM acts as a //milter//, which means a mail filter, for Postfix. The postfix configuration described [[email:configure-postfix|here]] already include the required lines under the OpenDKIM setup comment. | ||
| + | |||
| + | === Socket Setup === | ||
| + | |||
| + | For security reasons you want the DKIM keys not to be readable by Postfix, but you want Postfix capable to access | ||
| + | |||
| + | The solution is to add a new group, called **dkimsocket**, | ||
| + | <code bash> | ||
| + | groupadd dkimsocket | ||
| + | usermod --append --groups dkimsocket postfix | ||
| + | usermod --gid dkimsocket opendkim | ||
| + | usermod --append --groups opendkim opendkim | ||
| + | </ | ||
| + | |||
| + | === Final wrapup === | ||
| + | Let's wrap it all up with the following **/ | ||
| + | <file - opendkim.conf> | ||
| + | Syslog | ||
| + | SyslogSuccess | ||
| + | Canonicalization | ||
| + | SendReports | ||
| + | PidFile / | ||
| + | Socket local:/ | ||
| + | UMask 0117 | ||
| + | UserID opendkim: | ||
| + | AutoRestart | ||
| + | AutoRestartRate | ||
| + | Mode sv | ||
| + | # Use the following lines for a single domain/ | ||
| + | Domain | ||
| + | Selector | ||
| + | KeyFile | ||
| + | # Use the following lines for multiple domain/ | ||
| + | # | ||
| + | # | ||
| + | # | ||
| + | # | ||
| + | </ | ||
| + | |||
| + | If you want to use multiple domains and selectors, you need to create the table files and put the multiple references there. Check the official OpenDKIM documentation linked above. | ||
| + | |||
| + | === Start & Autostart OpenDKIM === | ||
| + | |||
| + | <code bash> | ||
| + | rc-update add opendkim default | ||
| + | / | ||
| + | </ | ||
| + | |||
| + | === Test your DKIM setup === | ||
| + | |||
| + | After your DNS record has propagated, you can test it with: | ||
| + | <code bash> | ||
| + | opendkim-testkey -d mydomain.com -s mydomain.com -k mydomain.com.private -vvv | ||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | ===== DMARC (Domain-based Message Authentication, | ||
| + | |||
| + | OpenDMARC sample configutation can be found [[https:// | ||
| + | |||
| + | This is pretty easy to setup, just edit the **/ | ||
| + | <file - opendmarc.conf> | ||
| + | AuthservID mydomain.com | ||
| + | FailureReports true | ||
| + | RejectFailures false | ||
| + | SPFSelfValidate yes | ||
| + | Socket local:/ | ||
| + | SoftwareHeader true | ||
| + | Syslog true | ||
| + | SyslogFacility mail | ||
| + | TrustedAuthservIDs mail.mydomain.com | ||
| + | HistoryFile / | ||
| + | UMask 0002 | ||
| + | UserID opendmarc | ||
| + | PidFile / | ||
| + | IgnoreAuthenticatedClients true | ||
| + | </ | ||
| + | |||
| + | === DNS record === | ||
| + | |||
| + | A DMARC DNS record can be pretty simple or pretty complex. [[https:// | ||
| + | |||
| + | The following is a simple example that you can start from: | ||
| + | < | ||
| + | _dmarc IN TXT ( " | ||
| + | </ | ||
| + | |||
| + | where: | ||
| + | * p: policy, you want reject here most probably | ||
| + | * rua: email address to sent aggregate reports to (optional) | ||
| + | * ruf: email address to sent failure reports to (optional) | ||
| + | |||
| + | === Postfix setup === | ||
| + | |||
| + | OpenDMARC acts as a //milter//, which means a mail filter, for Postfix. The postfix configuration described [[email: | ||
| + | |||
| + | === Start & Autostart OpenDMARC === | ||
| <code bash> | <code bash> | ||
| - | emerge | + | rc-update add opendmarc default |
| + | / | ||
| </ | </ | ||