「Postfix」の版間の差分
細 |
|||
(同じ利用者による、間の23版が非表示) | |||
1行目: | 1行目: | ||
Ubuntu上で[[google:MTA|Mail Transfer Agent (MTA)]] サービスを [[google:postfix|postfix]] で作成する覚書。 | Ubuntu上で[[google:MTA|Mail Transfer Agent (MTA)]] サービスを [[google:postfix|postfix]] で作成する覚書。 | ||
− | == | + | == Install == |
<pre> | <pre> | ||
$ sudo apt-get install -y postfix | $ sudo apt-get install -y postfix | ||
</pre> | </pre> | ||
+ | configurator が走るので、 | ||
* メール設定の一般形式 = インターネットサイト | * メール設定の一般形式 = インターネットサイト | ||
* システムメール名 = fukudat.net | * システムメール名 = fukudat.net | ||
+ | |||
+ | としておく。 | ||
+ | |||
+ | SASL認証のために dovecot (POP3/IMAP サーバー)を入れる。 | ||
+ | <pre> | ||
+ | $ sudo apt-get install -y dovecot-core | ||
+ | </pre> | ||
+ | でも POP3/IMAP は使わない。 | ||
+ | |||
+ | == Configure == | ||
+ | /etc/postfix にある main.cf を編集して、以下の変更を加える。 | ||
+ | <pre> | ||
+ | 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 | ||
+ | </pre> | ||
+ | これで fukudat.net と fukudat.com 両方のメールをさばく。この設定だと、ユーザーは共通になる(それが今回の目的なのでこれで良い)。 | ||
+ | |||
+ | ユーザをちゃんと分けたい場合は、[http://www.postfix-jp.info/trans-2.3/jhtml/VIRTUAL_README.html virtual domain] の設定を頑張る。 | ||
+ | |||
+ | 同じディレクトリの master.cf を編集して以下のような変更を加える。 | ||
+ | <pre> | ||
+ | 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 | ||
+ | </pre> | ||
+ | |||
+ | /etc/dovecot/conf.d ディレクトリの 10-master.conf を編集して、以下の変更を加える。 | ||
+ | <pre> | ||
+ | service auth { | ||
+ | ... | ||
+ | # Postfix smtp-auth | ||
+ | unix_listener /var/spool/postfix/private/auth { | ||
+ | mode = 0666 | ||
+ | user = postfix | ||
+ | group = postfix | ||
+ | } | ||
+ | ... | ||
+ | } | ||
+ | </pre> | ||
+ | |||
+ | 同じディレクトリの 10-ssl.conf を編集して、以下の変更を加える。 | ||
+ | <pre> | ||
+ | ssl = yes | ||
+ | ssl_cert = </etc/ssl/certs/fukudat.net.crt | ||
+ | ssl_key = </etc/ssl/private/fukudat.net.key | ||
+ | </pre> | ||
+ | |||
+ | 同じディレクトリの 10-auth.conf を編集して、以下の変更を加える。 | ||
+ | <pre> | ||
+ | disable_plaintext_auth = no | ||
+ | auth_mechanisms = plain | ||
+ | !include auth-passwdfile.conf.ext | ||
+ | </pre> | ||
+ | |||
+ | 同じディレクトリの auth-passwdfile.conf.ext を編集して、以下の変更を加える。 | ||
+ | <pre> | ||
+ | passdb { | ||
+ | driver = passwd-file | ||
+ | args = /etc/dovecot/passwd | ||
+ | } | ||
+ | |||
+ | userdb { | ||
+ | driver = passwd-file | ||
+ | args = /etc/dovecot/passwd | ||
+ | } | ||
+ | </pre> | ||
+ | |||
+ | doveadm | ||
+ | /etc/dovecot/passwd ファイルは以下のようにして作る。 | ||
+ | <pre> | ||
+ | $ doveadm pw -s SHA512-CRYPT | ||
+ | Enter new password: <パスワードをタイプ> | ||
+ | Retype ew password: <もう一度パスワードをタイプ> | ||
+ | {SHA512-CRYPT}$6$xxxxxxxxxxxxxxxxxxx | ||
+ | </pre> | ||
+ | と出るのでそれをコピーして、 | ||
+ | |||
+ | <pre> | ||
+ | fukudat:{SHA512-CRYPT}$6$xxxxxxxxxxxxxxxxxxx:1000:::/home/fukudat | ||
+ | </pre> | ||
+ | ただし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 に変更。 | ||
== 参考文献 == | == 参考文献 == | ||
* [https://server-setting.info/debian/debian-postfix-setting.html Debian(Ubuntu)で postfix を使ってみる] | * [https://server-setting.info/debian/debian-postfix-setting.html Debian(Ubuntu)で postfix を使ってみる] | ||
+ | * [https://jsapachehtml.hatenablog.com/entry/2014/01/26/184604 ubuntuでSMTPサーバの構築(SMTP-AUTHの設定)] | ||
+ | * [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 に変更。
参考文献
- Debian(Ubuntu)で postfix を使ってみる
- ubuntuでSMTPサーバの構築(SMTP-AUTHの設定)
- メールサーバー構築(Postfix+Dovecot)
- Postfixにおける迷惑メール対策のための設定
- Postfix バーチャルドメインホスティング Howto