Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| email:configure-postfix [2025/03/05 15:50] – [Testing] willy | email:configure-postfix [2025/03/13 13:30] (current) – [Configuration: postfix] willy | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== Configuration: | + | ====== |
| Postfix is the Mail Transfer Agent, the tool that actually **moves** your email messages from a the sender to the destination (recipient). It speak the Simple Mail Transport Protocol (SMTP) and it has some serious responsibilities which are: | Postfix is the Mail Transfer Agent, the tool that actually **moves** your email messages from a the sender to the destination (recipient). It speak the Simple Mail Transport Protocol (SMTP) and it has some serious responsibilities which are: | ||
| Line 45: | Line 45: | ||
| ===== Mail Security ===== | ===== Mail Security ===== | ||
| - | The SMTP protocol by itself is unencrypted and unsecure. This was maybe ok at the beginning of Internet, but not today. Today you need to enable both authentication and encryption. | + | The SMTP protocol by itself is unencrypted and unsecured. This was maybe ok at the beginning of Internet, but not today. Today you need to enable both authentication and encryption. |
| Encryption is performed using TLS, but for legacy reasons you cannot **require** it. There are three types of SMTP connections: | Encryption is performed using TLS, but for legacy reasons you cannot **require** it. There are three types of SMTP connections: | ||
| * Plain, no TLS (port 25) | * Plain, no TLS (port 25) | ||
| - | * STARTTLS, connection starts unencrypted and can be __upgraded__ to a TLS connection if both parties support it | + | * STARTTLS, connection starts unencrypted and can be __upgraded__ to a TLS connection if both parties support it (port 587) |
| - | * SSL/TLS, connection must be extablished | + | * SSL/TLS, connection must be established |
| Plain must always be provided, but you can at least prohibit authentication on non-encrypted connections. | Plain must always be provided, but you can at least prohibit authentication on non-encrypted connections. | ||
| - | The [[https:// | + | The [[https:// |
| - | Postfix does not provide a SASL authenticator, this is demanded to Dovecot SASL implementation. The added value of this choice is to have the same background for both SMTP and IMAP servers. | + | Postfix does not provide a SASL authentication, this is demanded to Dovecot SASL implementation. The added value of this choice is to have the same background for both SMTP and IMAP servers. |
| ===== Postfix documentation resources ===== | ===== Postfix documentation resources ===== | ||
| Line 163: | Line 163: | ||
| smtpd_reject_unlisted_sender = yes | smtpd_reject_unlisted_sender = yes | ||
| - | # Client connection | + | # Client connection |
| - | smtpd_client_restrictions = permit_sasl_authenticated, reject | + | smtpd_client_restrictions = permit_sasl_authenticated |
| # HELO / EHLO filtering | # HELO / EHLO filtering | ||
| smtpd_helo_restrictions = permit_sasl_authenticated, | smtpd_helo_restrictions = permit_sasl_authenticated, | ||
| Line 173: | Line 173: | ||
| # DATA | # DATA | ||
| smtpd_data_restrictions = reject_unauth_pipelining | smtpd_data_restrictions = reject_unauth_pipelining | ||
| - | # RCPT TO: (after relay) add here spam checks (blacklists etc) | + | # R * |
| - | smtpd_recipient_restrictions = permit_sasl_authenticated | + | |
| + | smtpd_recipient_restrictions = permit_sasl_authenticated | ||
| + | |||
| + | # OpenDKIM & OpenDMARC setup | ||
| + | smtpd_milters | ||
| + | non_smtpd_milters = unix:/ | ||
| + | milter_default_action = accept | ||
| </ | </ | ||
| + | |||
| Line 182: | Line 190: | ||
| The master.cf contains a list of the services (and ports) managed by Postfix on startup: | The master.cf contains a list of the services (and ports) managed by Postfix on startup: | ||
| <file - master.cf> | <file - master.cf> | ||
| + | |||
| + | # Port 25 listener | ||
| smtp inet n | smtp inet n | ||
| + | # Port 587 listener (STARTTLS) | ||
| + | smtps inet n | ||
| + | -o smtpd_tls_wrappermode=yes | ||
| + | |||
| + | # Port 465 listener (pure TLS) | ||
| submission inet n | submission inet n | ||
| + | # SPF inbound check filter | ||
| + | policy-spf | ||
| + | | ||
| + | |||
| pickup | pickup | ||
| cleanup | cleanup | ||
| Line 275: | Line 294: | ||
| 250 2.1.0 Ok | 250 2.1.0 Ok | ||
| RCPT TO:< | RCPT TO:< | ||
| + | 250 2.1.5 Ok | ||
| + | DATA | ||
| + | 354 End data with < | ||
| + | Subject: My Test Email | ||
| + | Test email body | ||
| + | . | ||
| + | 250 2.0.0 Ok: queued as 194869C1AB | ||
| + | quit | ||
| + | 221 2.0.0 Bye | ||
| + | QUIT | ||
| </ | </ | ||
| Double check that you have that **250-AUTH PLAIN LOGIN**, this means that you have properly setup SASL authentication using TLS. | Double check that you have that **250-AUTH PLAIN LOGIN**, this means that you have properly setup SASL authentication using TLS. | ||
| - | To tets TLS without STARTLS, repeat the same command above without //-starttls smtp//. | + | To tets TLS without STARTLS, repeat the same command above without //-starttls smtp//, but remember to use port 465 instead of 587! |
| You should now test that: | You should now test that: | ||