---
# System prepended metadata

title: 自建 SMTP Server on sles15-sp5
tags: [work]

---

# 自建 SMTP Server on sles15-sp5
* 產生 SMTP Server 憑證檔
```
# Generate a Certificate Authority Certificate
## Generate a CA certificate private key.
$ openssl genrsa -out ca.key 4096

## Generate the CA certificate.
$ openssl req -x509 -new -nodes -sha512 -days 3650 \
 -subj "/C=TW/ST=Taiwan/L=Taipei/O=example/OU=lab/CN=smtp.cooloo9871.com" \
 -key ca.key \
 -out ca.crt

# Generate a Server Certificate
## Generate a private key.
$ openssl genrsa -out server.key 4096

## Generate a certificate signing request (CSR).
$ openssl req -sha512 -new \
    -subj "/C=TW/ST=Taiwan/L=Taipei/O=example/OU=lab/CN=smtp.cooloo9871.com" \
    -key server.key \
    -out server.csr

## Generate an x509 v3 extension file.
$ cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[alt_names]
DNS.1=smtp.cooloo9871.com
DNS.2=cooloo9871.com
DNS.3=smtp
EOF

## Use the v3.ext file to generate a certificate for your Harbor host.
$ openssl x509 -req -sha512 -days 3650 \
    -extfile v3.ext \
    -CA ca.crt -CAkey ca.key -CAcreateserial \
    -in server.csr \
    -out server.crt

$ pwd
/home/rancher/SelfSigned-RootCA
```


## 安裝與設定 SMTP Server
* Install Postfix.
```
$ sudo zypper -n install postfix
```
* rename to disable
```
$ sudo mv /etc/sysconfig/postfix /etc/sysconfig/postfix.org
```
```
$ sudo nano -l /etc/postfix/main.cf
# line 114: uncomment and specify domain name
mydomain = lab.com
# line 130: uncomment
myorigin = $mydomain
# line 294: uncomment and specify local network
mynetworks = 192.168.11.0/24
# line 451: uncomment to move Maildir
home_mailbox = Maildir/
# line 714: change
inet_interfaces = all
# line 719: add
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
# line 720: specify hostname
myhostname = lab.com
# line 735
# limit a message size if need (example below means 10M limit)
message_size_limit = 10485760
# line 747: change
smtpd_recipient_restrictions = permit_mynetworks, permit_auth_destination, permit_sasl_authenticated, reject
# Configure SSL/TLS to encrypt connections
# line 782: change
smtpd_use_tls = yes

# line 788: specify certificates
smtpd_tls_cert_file = /home/rancher/SelfSigned-RootCA/server.crt
smtpd_tls_key_file = /home/rancher/SelfSigned-RootCA/server.key

# line 793: add
smtp_tls_mandatory_protocols = !SSLv2, !SSLv3
smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3
smtpd_tls_session_cache_database = btree:/var/lib/postfix/smtpd_scache
```

```
$ sudo nano -l /etc/postfix/master.cf
### line: 24 取消註解
submission inet n       -       n       -       -       smtpd

### line: 25,26,28 取消註解
submission inet n       -       n       -       -       smtpd
    -o syslog_name=postfix/submission
    -o smtpd_tls_security_level=encrypt
#    -o content_filter=smtp:[127.0.0.1]:10024
    -o smtpd_sasl_auth_enable=yes

### line: 43-45 取消註解
submissions     inet  n       -       n       -       -       smtpd
     -o syslog_name=postfix/submissions
     -o smtpd_tls_wrappermode=yes
     
### line: 64 取消註解
tlsmgr    unix  -       -       n       1000?   1       tlsmgr
```
## 啟動 SMTP Server
```
$ sudo systemctl enable --now postfix
```

## 測試
```
# 本地測試寄信
$ echo "Test1 Postfix Gmail https://example.com" | mail -s "Postfix Gmail" "<your email address>"

# 在別台機器寄信
$ echo "Test2 Postfix Gmail https://example.com" | mail -S smtp=192.168.11.90 -s "Postfix Gmail" "<your email address>"
```

## 參考

https://hackmd.io/@QI-AN/rJgIEoCJ0a

