「Postfix」の版間の差分

提供: fukudat.net
ナビゲーションに移動検索に移動
 
(同じ利用者による、間の17版が非表示)
26行目: 26行目:
 
myorigin = $mydomain
 
myorigin = $mydomain
 
inet_interfaces = all
 
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain, fukudat.com
+
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain, fukudat.com # <- ここに宛先ホスト/ドメインを並べる
 
local_recipient_maps = unix:passwd.byname $alias_maps
 
local_recipient_maps = unix:passwd.byname $alias_maps
 
alias_maps = hash:/etc/aliases
 
alias_maps = hash:/etc/aliases
49行目: 49行目:
 
smtpd_sasl_security_options = noanonymous
 
smtpd_sasl_security_options = noanonymous
 
smtpd_recipient_restrictions = permit_mynetworks,permit_auth_destination,permit_sasl_authenticated,reject
 
smtpd_recipient_restrictions = permit_mynetworks,permit_auth_destination,permit_sasl_authenticated,reject
smtpd_relay_restrictions = permit_mynetworks,permit_sasl_authenticated,defer_unauth_destination
+
smtpd_relay_restrictions = permit_mynetworks,permit_auth_destination,permit_sasl_authenticated,reject
 
smtpd_use_tls = yes                               
 
smtpd_use_tls = yes                               
smtpd_tls_cert_file = /etc/ssl/certs/fukudat.net.crt    # SSL Certificate
+
smtpd_tls_cert_file = /etc/ssl/certs/postfix.fukudat.net.crt    # SSL Certificate
 
smtpd_tls_key_file = /etc/ssl/private/fukudat.net.key # SSL Private Key
 
smtpd_tls_key_file = /etc/ssl/private/fukudat.net.key # SSL Private Key
 
</pre>
 
</pre>
これで fukudat.net と fukudat.com 両方のメールをさばく。この設定だと、ユーザーは共通になってしまう。
+
これで fukudat.net と fukudat.com 両方のメールをさばく。この設定だと、ユーザーは共通になる(それが今回の目的なのでこれで良い)。
  
 
ユーザをちゃんと分けたい場合は、[http://www.postfix-jp.info/trans-2.3/jhtml/VIRTUAL_README.html virtual domain] の設定を頑張る。
 
ユーザをちゃんと分けたい場合は、[http://www.postfix-jp.info/trans-2.3/jhtml/VIRTUAL_README.html virtual domain] の設定を頑張る。
60行目: 60行目:
 
同じディレクトリの master.cf を編集して以下のような変更を加える。
 
同じディレクトリの master.cf を編集して以下のような変更を加える。
 
<pre>
 
<pre>
submission inet n      -      y      -      -      smtpd
+
smtp      inet  n      -      y      -      -      smtpd # これで smtp port 25 が開く
 +
submission inet n      -      y      -      -      smtpd # これで submission port 587 が開く
 
   -o syslog_name=postfix/submission
 
   -o syslog_name=postfix/submission
 
   -o smtpd_tls_security_level=encrypt
 
   -o smtpd_tls_security_level=encrypt
smtps    inet  n      -      y      -      -      smtpd
+
smtps    inet  n      -      y      -      -      smtpd # これで smtps port 465 が開く
 
   -o syslog_name=postfix/smtps
 
   -o syslog_name=postfix/smtps
 
   -o smtpd_tls_wrappermode=yes
 
   -o smtpd_tls_wrappermode=yes
125行目: 126行目:
 
</pre>
 
</pre>
 
ただしfukudatはユーザ名、1000はUID、/home/fukudatはホームアドレス。
 
ただしfukudatはユーザ名、1000はUID、/home/fukudatはホームアドレス。
 +
 +
=== メールの最大サイズの変更 ===
 +
postfix が受け付けるメールの最大サイズは、デフォルトで 10MB。これは、添付ファイルを含めた大きさ。
 +
今時の画像付きのメールは大きいので、これを拡大しておかないと、メールがエラーで弾かれてしまう。
 +
 +
main.cf を編集して、以下の行を加える。(これは 30MB の例)
 +
 +
<pre>
 +
message_size_limit = 31457280
 +
</pre>
 +
 +
その後、リロード
 +
 +
<pre>
 +
$ sudo service postfix reload
 +
</pre>
 +
 +
== Alias設定 ==
 +
/etc/aliasesにaliasを記述
 +
<pre>
 +
mailer-daemon: postmaster
 +
postmaster: root
 +
gm10: fukudat
 +
...
 +
</pre>
 +
 +
変更したら、次のコマンドで更新。
 +
<pre>
 +
$ sudo newaliases
 +
</pre>
 +
 +
== 転送設定 ==
 +
最後に、実際にメールを読むサーバーに転送する設定を、~/.forward に書く。
 +
<pre>
 +
"| /home/fukudat/bin/mail-saver.pl"
 +
xxxxxx@gmail.com
 +
</pre>
 +
 +
/home/fukudat/bin/mail-server.pl は標準入力から入力されるテキストをメールボックスファイルに追加していくスクリプト。例えば、こんな感じ。
 +
<pre>
 +
#!/usr/bin/perl
 +
use strict;
 +
use File::Basename;
 +
my $mailfile = "$ENV{'HOME'}/mail/mbox";
 +
binmode(STDIN,  ":utf8");
 +
open(my $out, ">>:utf8", $mailfile) || die "$mailfile: $!";
 +
while (<>) {
 +
    print $out $_;
 +
}
 +
print $out "\n";
 +
close($out);
 +
1;
 +
</pre>
 +
 +
== Commands ==
 +
 +
=== Mail queue のチェック ===
 +
<pre>
 +
$ mailq
 +
</pre>
 +
 +
=== Mail queue からメールを読む ===
 +
<pre>
 +
$ sudo postcat -q QUEUE_ID | less
 +
</pre>
 +
 +
=== Mail queue からの削除 ===
 +
<pre>
 +
$ sudo postsuper -d QUEUE_ID
 +
$ sudo postsuper -d ALL            # 全削除
 +
</pre>
 +
 +
=== Mail queue の flush ===
 +
<pre>
 +
$ sudo postfix flush
 +
</pre>
 +
 +
== SSL Certificate の設定 ==
 +
証明書の入手は [[SSL Certificate|SSL証明書の更新]]を参照。
 +
安さで [https://www.ssl-store.jp/system/service.php/ SSLストア] を利用。
 +
 +
/etc/postfix/main.cf に以下の行を追加。
 +
<pre>
 +
smtpd_use_tls = yes
 +
smtpd_tls_cert_file = /etc/ssl/certs/postfix.fukudat.net.crt
 +
smtpd_tls_key_file = /etc/ssl/private/fukudat.net.key
 +
</pre>
 +
ここで、postfix.fukudat.net.crt は、fukudat.net の証明書と、 中間CA証明書を連結したファイル。改行コードに注意する。
 +
 +
== DNSの設定 ==
 +
プロバイダ or name.com で自分のドメインのMXレコードを MTA に変更。
  
 
== 参考文献 ==
 
== 参考文献 ==
130行目: 222行目:
 
* [https://jsapachehtml.hatenablog.com/entry/2014/01/26/184604 ubuntuでSMTPサーバの構築(SMTP-AUTHの設定)]
 
* [https://jsapachehtml.hatenablog.com/entry/2014/01/26/184604 ubuntuでSMTPサーバの構築(SMTP-AUTHの設定)]
 
* [https://centossrv.com/postfix.shtml メールサーバー構築(Postfix+Dovecot)]
 
* [https://centossrv.com/postfix.shtml メールサーバー構築(Postfix+Dovecot)]
 +
* [http://www.wheel.gr.jp/~dai/software/postfix/config.html Postfixにおける迷惑メール対策のための設定]
 +
* [http://www.postfix-jp.info/trans-2.3/jhtml/VIRTUAL_README.html Postfix バーチャルドメインホスティング Howto]
  
 
== 脚注 ==
 
== 脚注 ==

2021年6月23日 (水) 19:20時点における最新版

Ubuntu上でMail Transfer Agent (MTA) サービスを postfix で作成する覚書。

Install

$ sudo apt-get install -y postfix

configurator が走るので、

  • メール設定の一般形式 = インターネットサイト
  • システムメール名 = fukudat.net

としておく。

SASL認証のために dovecot (POP3/IMAP サーバー)を入れる。

$ sudo apt-get install -y dovecot-core

でも POP3/IMAP は使わない。

Configure

/etc/postfix にある main.cf を編集して、以下の変更を加える。

mail_owner = postfix
myhostname = fukudat.net
mydomain = fukudat.net
myorigin = $mydomain
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain, fukudat.com # <- ここに宛先ホスト/ドメインを並べる
local_recipient_maps = unix:passwd.byname $alias_maps
alias_maps = hash:/etc/aliases
smtpd_banner = $myhostname ESMTP
sendmail_path = /usr/sbin/postfix
newaliases_path = /usr/bin/newaliases
mailq_path = /usr/bin/mailq
setgid_group = postdrop
#html_directory =
#manpage_directory =
#sample_directory =
#readme_directory =
message_size_limit = 10485760
mailbox_size_limit = 1073741824
disable_vrfy_command = yes
smtpd_banner = $myhostname ESMTP
smtpd_helo_required = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $mydomain
smtpd_sasl_security_options = noanonymous
smtpd_recipient_restrictions = permit_mynetworks,permit_auth_destination,permit_sasl_authenticated,reject
smtpd_relay_restrictions = permit_mynetworks,permit_auth_destination,permit_sasl_authenticated,reject
smtpd_use_tls = yes                               
smtpd_tls_cert_file = /etc/ssl/certs/postfix.fukudat.net.crt     # SSL Certificate
smtpd_tls_key_file = /etc/ssl/private/fukudat.net.key # SSL Private Key

これで fukudat.net と fukudat.com 両方のメールをさばく。この設定だと、ユーザーは共通になる(それが今回の目的なのでこれで良い)。

ユーザをちゃんと分けたい場合は、virtual domain の設定を頑張る。

同じディレクトリの master.cf を編集して以下のような変更を加える。

smtp      inet  n       -       y       -       -       smtpd # これで smtp port 25 が開く
submission inet n       -       y       -       -       smtpd # これで submission port 587 が開く
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt
smtps     inet  n       -       y       -       -       smtpd # これで smtps port 465 が開く
  -o syslog_name=postfix/smtps
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject

/etc/dovecot/conf.d ディレクトリの 10-master.conf を編集して、以下の変更を加える。

service auth {
...
  # Postfix smtp-auth
  unix_listener /var/spool/postfix/private/auth {
    mode = 0666
    user = postfix
    group = postfix
  }
...
}

同じディレクトリの 10-ssl.conf を編集して、以下の変更を加える。

ssl = yes
ssl_cert = </etc/ssl/certs/fukudat.net.crt
ssl_key = </etc/ssl/private/fukudat.net.key

同じディレクトリの 10-auth.conf を編集して、以下の変更を加える。

disable_plaintext_auth = no
auth_mechanisms = plain
!include auth-passwdfile.conf.ext

同じディレクトリの auth-passwdfile.conf.ext を編集して、以下の変更を加える。

passdb {
  driver = passwd-file
  args = /etc/dovecot/passwd
}

userdb {
  driver = passwd-file
  args = /etc/dovecot/passwd
}

doveadm /etc/dovecot/passwd ファイルは以下のようにして作る。

$ doveadm pw -s SHA512-CRYPT
Enter new password: <パスワードをタイプ>
Retype ew password: <もう一度パスワードをタイプ> 
{SHA512-CRYPT}$6$xxxxxxxxxxxxxxxxxxx

と出るのでそれをコピーして、

fukudat:{SHA512-CRYPT}$6$xxxxxxxxxxxxxxxxxxx:1000:::/home/fukudat

ただしfukudatはユーザ名、1000はUID、/home/fukudatはホームアドレス。

メールの最大サイズの変更

postfix が受け付けるメールの最大サイズは、デフォルトで 10MB。これは、添付ファイルを含めた大きさ。 今時の画像付きのメールは大きいので、これを拡大しておかないと、メールがエラーで弾かれてしまう。

main.cf を編集して、以下の行を加える。(これは 30MB の例)

message_size_limit = 31457280

その後、リロード

$ sudo service postfix reload

Alias設定

/etc/aliasesにaliasを記述

mailer-daemon: postmaster
postmaster: root
gm10: fukudat
...

変更したら、次のコマンドで更新。

$ sudo newaliases

転送設定

最後に、実際にメールを読むサーバーに転送する設定を、~/.forward に書く。

"| /home/fukudat/bin/mail-saver.pl"
xxxxxx@gmail.com

/home/fukudat/bin/mail-server.pl は標準入力から入力されるテキストをメールボックスファイルに追加していくスクリプト。例えば、こんな感じ。

#!/usr/bin/perl
use strict;
use File::Basename;
my $mailfile = "$ENV{'HOME'}/mail/mbox";
binmode(STDIN,  ":utf8");
open(my $out, ">>:utf8", $mailfile) || die "$mailfile: $!";
while (<>) {
    print $out $_;
}
print $out "\n";
close($out);
1;

Commands

Mail queue のチェック 

$ mailq

Mail queue からメールを読む

$ sudo postcat -q QUEUE_ID | less

Mail queue からの削除

$ sudo postsuper -d QUEUE_ID
$ sudo postsuper -d ALL             # 全削除

Mail queue の flush

$ sudo postfix flush

SSL Certificate の設定

証明書の入手は SSL証明書の更新を参照。 安さで SSLストア を利用。

/etc/postfix/main.cf に以下の行を追加。

smtpd_use_tls = yes
smtpd_tls_cert_file = /etc/ssl/certs/postfix.fukudat.net.crt
smtpd_tls_key_file = /etc/ssl/private/fukudat.net.key

ここで、postfix.fukudat.net.crt は、fukudat.net の証明書と、 中間CA証明書を連結したファイル。改行コードに注意する。

DNSの設定

プロバイダ or name.com で自分のドメインのMXレコードを MTA に変更。

参考文献

脚注