Postfix
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はホームアドレス。
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 に変更。