|
|
|
---
|
|
|
|
|
|
|
|
Alias: ["Postfix"]
|
|
|
|
Tag: ["Server", "Email"]
|
|
|
|
Date: 2021-09-10
|
|
|
|
DocType: "Personal"
|
|
|
|
Hierarchy: "NonRoot"
|
|
|
|
TimeStamp:
|
|
|
|
location: [51.514678599999996, -0.18378583926867909]
|
|
|
|
CollapseMetaTable: Yes
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
Parent:: [[Selfhosting]], [[Alias Server]], [[Cloud Server]], [[Tools Server]]
|
|
|
|
|
|
|
|
 
|
|
|
|
|
|
|
|
```button
|
|
|
|
name Save
|
|
|
|
type command
|
|
|
|
action Save current file
|
|
|
|
id Save
|
|
|
|
```
|
|
|
|
^button-TNSave
|
|
|
|
|
|
|
|
 
|
|
|
|
|
|
|
|
# Configuring Postfix
|
|
|
|
|
|
|
|
 
|
|
|
|
|
|
|
|
```ad-abstract
|
|
|
|
title: Summary
|
|
|
|
collapse: open
|
|
|
|
This note goes through the installation of Postfix, an email-handling solution for servers.
|
|
|
|
```
|
|
|
|
|
|
|
|
 
|
|
|
|
|
|
|
|
```toc
|
|
|
|
style: number
|
|
|
|
```
|
|
|
|
|
|
|
|
 
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
 
|
|
|
|
|
|
|
|
### Installation
|
|
|
|
|
|
|
|
 
|
|
|
|
|
|
|
|
Installation is simple and opens a dialogue box. Steps are described below:
|
|
|
|
|
|
|
|
1. **Install Postfix**
|
|
|
|
|
|
|
|
`sudo apt-get install -y postfix postfix-pgsql -y`
|
|
|
|
|
|
|
|
2. **Configuration screen**
|
|
|
|
|
|
|
|
Choose 'Internet Site'
|
|
|
|
|
|
|
|
3. **System mail name**
|
|
|
|
|
|
|
|
Define a name and make a note of it for further use.
|
|
|
|
|
|
|
|
 
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
 
|
|
|
|
|
|
|
|
### Generic configuration
|
|
|
|
|
|
|
|
 
|
|
|
|
|
|
|
|
```ad-note
|
|
|
|
title: Documentation
|
|
|
|
[Basic config](https://github.com/simple-login/app)
|
|
|
|
```
|
|
|
|
|
|
|
|
The basic configuration is run in detail below.
|
|
|
|
|
|
|
|
 
|
|
|
|
|
|
|
|
#### Main.cf
|
|
|
|
|
|
|
|
```ad-info
|
|
|
|
title: File path
|
|
|
|
/etc/postfix/main.cf
|
|
|
|
```
|
|
|
|
|
|
|
|
Edit the file whilst editing the following values:
|
|
|
|
1. myhostname (current server)
|
|
|
|
2. mydomain (associated domain)
|
|
|
|
3. my origin (associated domain)
|
|
|
|
|
|
|
|
> ###### POSTFIX config file, adapted for SimpleLogin
|
|
|
|
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
|
|
|
|
biff = no
|
|
|
|
>
|
|
|
|
>###### appending .domain is the MUA's job.
|
|
|
|
append_dot_mydomain = no
|
|
|
|
>
|
|
|
|
>###### Uncomment the next line to generate "delayed mail" warnings
|
|
|
|
>######## delay_warning_time = 4h
|
|
|
|
>
|
|
|
|
>readme_directory = no
|
|
|
|
>
|
|
|
|
>###### See http://www.postfix.org/COMPATIBILITY_README.html -- default to 2 on fresh installs.
|
|
|
|
compatibility_level = 2
|
|
|
|
>
|
|
|
|
>###### TLS parameters
|
|
|
|
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
|
|
|
|
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
|
|
|
|
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
|
|
|
|
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
|
|
|
|
smtp_tls_security_level = may
|
|
|
|
smtpd_tls_security_level = may
|
|
|
|
>
|
|
|
|
>###### See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
|
|
|
|
>###### information on enabling SSL in the smtp client.
|
|
|
|
>
|
|
|
|
>alias_maps = hash:/etc/aliases
|
|
|
|
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 240.0.0.0/24
|
|
|
|
>
|
|
|
|
>###### Set your domain here
|
|
|
|
mydestination =
|
|
|
|
myhostname = app.mydomain.com
|
|
|
|
mydomain = mydomain.com
|
|
|
|
myorigin = mydomain.com
|
|
|
|
>
|
|
|
|
>relay_domains = pgsql:/etc/postfix/pgsql-relay-domains.cf
|
|
|
|
transport_maps = pgsql:/etc/postfix/pgsql-transport-maps.cf
|
|
|
|
>
|
|
|
|
>###### HELO restrictions
|
|
|
|
smtpd_delay_reject = yes
|
|
|
|
smtpd_helo_required = yes
|
|
|
|
smtpd_helo_restrictions =
|
|
|
|
> permit_mynetworks,
|
|
|
|
> reject_non_fqdn_helo_hostname,
|
|
|
|
> reject_invalid_helo_hostname,
|
|
|
|
> permit
|
|
|
|
>
|
|
|
|
>###### Sender restrictions:
|
|
|
|
smtpd_sender_restrictions =
|
|
|
|
> permit_mynetworks,
|
|
|
|
> reject_non_fqdn_sender,
|
|
|
|
> reject_unknown_sender_domain,
|
|
|
|
> permit
|
|
|
|
>
|
|
|
|
>###### Recipient restrictions:
|
|
|
|
smtpd_recipient_restrictions =
|
|
|
|
> reject_unauth_pipelining,
|
|
|
|
> reject_non_fqdn_recipient,
|
|
|
|
> reject_unknown_recipient_domain,
|
|
|
|
> permit_mynetworks,
|
|
|
|
> reject_unauth_destination,
|
|
|
|
> reject_rbl_client zen.spamhaus.org,
|
|
|
|
> reject_rbl_client bl.spamcop.net,
|
|
|
|
> permit
|
|
|
|
|
|
|
|
|
|
|
|
 
|
|
|
|
|
|
|
|
#### relay domains
|
|
|
|
|
|
|
|
```ad-info
|
|
|
|
title: File path
|
|
|
|
/etc/postfix/pgsql-relay-domains.cf
|
|
|
|
```
|
|
|
|
|
|
|
|
Below is the default config for the file (replace mydomain.com with relevant value):
|
|
|
|
|
|
|
|
>###### postgres config
|
|
|
|
hosts = localhost
|
|
|
|
user = myuser
|
|
|
|
password = mypassword
|
|
|
|
dbname = simplelogin
|
|
|
|
>
|
|
|
|
query = SELECT domain FROM custom_domain WHERE domain='%s' AND verified=true
|
|
|
|
> UNION SELECT '%s' WHERE '%s' = 'mydomain.com' LIMIT 1;
|
|
|
|
|
|
|
|
|
|
|
|
 
|
|
|
|
|
|
|
|
#### transport maps
|
|
|
|
|
|
|
|
```ad-info
|
|
|
|
title: File path
|
|
|
|
/etc/postfix/pgsql-transport-maps.cf
|
|
|
|
```
|
|
|
|
|
|
|
|
Below is the standard declaration of the file (replace mydomain.com with the relevant value):
|
|
|
|
|
|
|
|
>###### postgres config
|
|
|
|
hosts = localhost
|
|
|
|
user = myuser
|
|
|
|
password = mypassword
|
|
|
|
dbname = simplelogin
|
|
|
|
>
|
|
|
|
>###### forward to smtp:127.0.0.1:20381 for custom domain AND email domain
|
|
|
|
query = SELECT 'smtp:127.0.0.1:20381' FROM custom_domain WHERE domain = '%s' AND verified=true
|
|
|
|
> UNION SELECT 'smtp:127.0.0.1:20381' WHERE '%s' = 'mydomain.com' LIMIT 1;
|
|
|
|
|
|
|
|
 
|
|
|
|
|
|
|
|
#### Generic commands
|
|
|
|
|
|
|
|
##### Restart the service
|
|
|
|
|
|
|
|
`sudo systemctl restart postfix`
|
|
|
|
|
|
|
|
 
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
 
|
|
|
|
|
|
|
|
### Allow external connections
|
|
|
|
|
|
|
|
 
|
|
|
|
|
|
|
|
```ad-note
|
|
|
|
title: Documentation
|
|
|
|
[Fwd to external smtp](https://github.com/simple-login/app/discussions/612)
|
|
|
|
```
|
|
|
|
|
|
|
|
 
|
|
|
|
|
|
|
|
#### Incoming
|
|
|
|
|
|
|
|
1. **Ports**
|
|
|
|
|
|
|
|
Ports (25, 465, 587) need to be opened by the firewall:
|
|
|
|
|
|
|
|
`sudo ufw allow (port)/tcp`
|
|
|
|
|
|
|
|
 
|
|
|
|
|
|
|
|
2. **Networks**
|
|
|
|
|
|
|
|
Definition of permitted networks to restrict access (in [[Postfix config#Main cf|main.cf]]).
|
|
|
|
|
|
|
|
 
|
|
|
|
|
|
|
|
3. **Submission/SMTPD**
|
|
|
|
|
|
|
|
```ad-info
|
|
|
|
title: File path
|
|
|
|
/etc/postfix/master.cf
|
|
|
|
```
|
|
|
|
|
|
|
|
Options are coded in the file by default. Uncheck necessary directives.
|
|
|
|
|
|
|
|
 
|
|
|
|
|
|
|
|
4. **SSL cert**
|
|
|
|
|
|
|
|
Postfix SSL certs need to match that of the server (in [[Postfix config#Main cf|main.cf]]).
|
|
|
|
|
|
|
|
 
|
|
|
|
|
|
|
|
5. **SASL**
|
|
|
|
|
|
|
|
[Tutorial](https://github.com/webmin/webmin/issues/58)
|
|
|
|
|
|
|
|
 
|
|
|
|
|
|
|
|
#### Outgoing
|
|
|
|
|
|
|
|
 
|
|
|
|
 
|