본문 바로가기
IT이야기/리눅스

postfixをgmailへrelay

by somick 2020. 7. 30.

背景

家のインターネット回線をso-net光からNuroへ乗り換えた。結果的にすごく満足はしているけど、色々調べてもメール送信用サーバの設定方法がどこにもない。Nuroもso-net系なので設定方法は同じかなと思うけど、アカウントがないからな。。

自宅サーバのubuntuに直接smtpサーバを構築することも試してみたけど、SPFやDKIMの設定に限界があったので諦め、いい方法を探したところ、一部制約はあるけどgmailのsmtpを利用することにした。

やったこと

postfixとsaslを利用してgmailのsmtpサーバへrelayする方法を以下に記載する。

  • メールの受信やその他の設定は何も行っていない。
  • gmailのsmtpサーバへrelayすることしか行っていない
  • Nuroのプライベートネットワークは 192.168.0.0/24である
  • OSはubuntu 16.04を利用

パッケージの確認とインストール

必要なパッケージは以下の3つ。

  • postfix
  • libsasls-modules
  • ca-certificates

postfixとlibsaslsは「mailutils」に含まれているので以下のコマンドでインストールしよう。

sudo apt-get update
sudo apt-get install mailutils ca-certificates

main.cfの設定

googleのsmtpサーバへrelayするための最低限の設定しかしないので以下の項目で充分。

  • relayhost : relay対象サーバを指定する
  • smtpsaslauth_enable : SMTPのSASL認証を有効かする
  • smtpsaslpassword_maps : SMTP接続時のパスワードを指定する
  • smtpsaslsecurity_options : 認証オプションを指定する(外部に公開しないので問題ないけど念のためnoanonymousを指定して匿名ユーザのアクセスを拒否する)
  • smtpusetls : TLS暗号化を行う
  • smtptlsCAfile : TLS暗号化に利用するCAファイルを指定する
# See /usr/share/postfix/main.cf.dist for a commented, more complete version
 
# Debian specific:  Specifying a file name will cause the first
# line of that file to be used as the name.  The Debian default
# is /etc/mailname.
#myorigin = /etc/mailname
 
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
 
# 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_use_tls=yes  
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache  
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
 
# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.
 
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination  
myhostname = soday
alias_maps = hash:/etc/aliases  
alias_database = hash:/etc/aliases  
mydestination = /etc/mailname, $myhostnamex, soday.net, localhost.localdomain, localhost  
#relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 192.168.0.0/24
mailbox_size_limit = 0  
recipient_delimiter = +  
inet_interfaces = all  
inet_protocols = all
 
### Gmail用smtp設定
 
relayhost = [smtp.gmail.com]:587  
smtp_sasl_auth_enable = yes  
smtp_sasl_password_maps = hash:/etc/postfix/sasl/sasl_password
smtp_sasl_security_options = noanonymous  
smtp_use_tls = yes  
smtp_tls_CAfile = /etc/postfix/cacert.pem

Gmailのsmtpアカウント設定

main.cfの「smtp_sasl_password_maps」で指定してファイルを以下の形式で作成する。

[smtp.gmail.com]:587 アカウント名@gmail.com:パスワード

保存したファイルをpostmapコマンドでdbファイルを作成する

sudo postmap /etc/postfix/sasl/sasl_password

TLSのCAファイル配置

cp /etc/ssl/certs/Thawte_Premium_Server_CA.pem /etc/postfix/cacert.pem

Thawte_Premium_Server_CA.pemファイルが存在しない場合はgoogleで検索するとすぐ出てくるのでダウンロードしてファイルを作ってあげよう。

Thawte_Premium_Server_CA.pemファイルを探すのが面倒だったので追記しました。- 2019-07-05

-----BEGIN CERTIFICATE-----
MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkExFTATBgNVBAgT
DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3Vs
dGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UE
AxMYVGhhd3RlIFByZW1pdW0gU2VydmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZl
ckB0aGF3dGUuY29tMB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYT
AlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsGA1UEChMU
VGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2VydmljZXMgRGl2
aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNlcnZlciBDQTEoMCYGCSqGSIb3DQEJARYZ
cHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2
aovXwlue2oFBYo847kkEVdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIh
Udib0GfQug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMRuHM/
qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQFAAOBgQAm
SCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUIhfzJATj/Tb7yFkJD57taRvvBxhEf
8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JMpAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7t
UCemDaYj+bvLpgcUQg==
-----END CERTIFICATE-----

postfixの起動

service postfix start

設定が終わったのでpostfixを起動しよう。/var/log/mail.logを確認し、エラーが出てないことを確認したほうが良い。エラーがあったら原因を調べて対応する。

参考文書

댓글