うまいぼうぶろぐ

linuxとhttpdとperlのメモ

postfix 入門

config check

$ postfix check
$ postfix -v check # verbose

config 表示

設定されている内容を表示

$ postconf

show default parameter

$ postconf -d

default 値から変更されたparameterを表示

$ postconf -n

使えるtable type 表示

$ postconf -m

queue

  • 表示

postqueue -p

  • 再送

postqueue -f

  • 削除

postsuper -d queue_id
queue idはpostqueueで見る
postsuper -d ALL
で全削除

alias、accessなどのhash化

postmapで。(やっていることはmakemap hash)

postmap /etc/postfix/access

alias_maps の確認

postmap -s file # ファイルの中身全部表示
postmap -q key map_type:file # 指定したkey が見つかればそのvalueを表示

main.cf

  • 不明点?

smtpd_client_restrictions の check_client_accessのhashファイルはpostmap 更新後にpostfixのreload不要だけど、transport_maps のfileはpostmap後にreloadが必要だった。違いがわからん。とりあえず設定変更後はreloadしとけばいいか。

mailbox / mailsize
  • mailbox

defaulはmbox

  • maildir

maildir用のディレクトリが、各ユーザで作成できる権限下にあれば
勝手に作成してくれる。

    • ユーザのホームディレクトリ下に置く場合
home_mailbox = Maildir/

最後にスラッシュ必要。これで~username/Maildir/ の下にcur,new,tmpができる。この場合、ユーザのホームディレクトリ下に作成するので、ユーザ自身にMaildir ディレクトリの作成権限があるので勝手に作ってくれる。

    • 指定のディレクトリ下/username に置く場合
mail_spool_directory = /var/spool/maildir/

(home_mailboxは指定してはいけない) 最後にスラッシュ必要。これで/var/spool/maildir/username/ の下にcur,new,tmp が出来る。この場合は、/var/spool/maildir 直下にmaildir 用のusername のディレクトリをユーザ自身に作成する権限がない。(/var/spool/maildir は普通root )

mkdir /var/spool/maildir/username
chown username /var/spool/maildir/username

などを実行しておく必要があるとこのように色々面倒くさいので、userのホームディレクトリ自体をsymlinkしてしまうのがてっとり早いか。

ln -s /var/spool/maildir /home

このあとuseradd hoge -d /home/hoge のようにすればいい。
( /home/hoge/{cur,new,tmp} がmaildir用のディレクトリになる)

  • おまけ

dovecotと連携されるならdovecot.confの

mail_location = ~/

とする。(mail_location = ~/Maildir ではない)

  • mailsize

mailbox_size_limit mailboxのsize
message_size_limit 1mailのsize

log
  • debug_peer_level

clientがdebug_peer_list にmatchした場合のlog level
defaultは2

  • debug_peer_list

debug_peer_list = 127.0.0.1

  • inet_interfaces

localhost、allとか

acl
  • mynetworks

アクセス許可で利用する。
defaultはinet_interfacesとmynetworks_style で決定される

  • mynetwork_style

defaultはsubnet。classとかhostとか。

  • header_check

件名なども確認したい場合に。
main.cf

header_checks = regexp:/etc/postfix/header_checks
/^X-hoge:/ REJECT

等。

  • body_checks

bodyみたいとき
main.cf

body_checks   = regexp:/etc/postfix/body_checks
静的配送
  • relayhost

non-localなドメイン宛のメールを送信するサーバ (中継サーバ)
sendmailでいうsmarthost? relayhostは1つしか指定できない。

relayhostをIPアドレスで指定する場合、以下のsmtp_fallback_relayを使わないと冗長性がなくなる。hostnameで指定する場合はDNSラウンドロビンにしておけば、各hostに接続を試そうとするので冗長性は保たれる。

  • smtp_fallback_relay

配送先に到達できないときにrelayするhost。relayhostが死んだときの冗長用の設定などに。smtp_fallback_relayにはコンマ区切りで複数hostを設定でき、postfixは指定された順番で試していく。

  • transport_map
transport_maps = hash:/etc/postfix/transport

postmap後にpostfixのreloadが必要? sendmailでいうmailtertable。
宛先ごとに配送先サーバを変更したい場合などに。IPの場合は[]で囲むとこもmailertableと同じ。ただし、mailertableと違って、複数のhostを記述できない様子。

なので、master.cf のserviceに新規に追加をして対応する。既に設定されているrelay の項目を見ればわかるが、optionでmain.cfの設定を上書きできるので、

relay1    unix  -       -       n       -       -       smtp
  -o fallback_relay=[10.0.0.11]
relay2    unix  -       -       n       -       -       smtp
  -o fallback_relay=[10.0.0.12]

と設定しておいて、transportファイルに定義した、relay1, relay2 で設定をする。

relay1.localhost   relay1:[192.168.0.11]
relay2.localhost   relay2:[192.168.0.12]

これでrelay1.localhost には192.168.0.11 に送れなかった場合は10.0.0.11,
relay2.localhostには192.168.0.12に送れなかった場合は10.0.0.12 に配送される。

smtpd_cilent_restrictinos

smtp connection の制限: default 制限なし
client IP、domainなどの制限。

access fileで制限

  • permit_inet_interfaces

$inet_interfaces で定義しているclient IP (自分のIP) を許可

  • permit_mynetworks

$mynetworks を許可。 DMZとかを設定

  • permit_sasl_authenticated

sasl 認証したclientを許可

reject_rhsbl_clientはhostnameを使うほう。
DNSBLに乗っていれば拒否。 引数 rbl_domain=d.d.d.d で設定

  • reject_unknown_reverse_client_hostname

DNS 逆引きが出来なければ拒否。

  • reject_unknown_client_hostname

正逆引きが一致しなければ拒否。
reject_unknown_reverse_client_hostname よりも強い制限。

アクセスを拒否する。
上記のいろんな設定をしたあと、最後にこれをかけば
defaultを拒否するpolicyとして設定できる。

アクセスは拒否しないで、logに"reject_warning"と表示する。
policyを設定変更するときの確認などに。

smtpd_helo_required

そのまんま。最初にHELO/EHLO を要求する。これだけで少しSPAMを弾けるようなので設定する。

smtpd_helo_restrictions

HELO コマンドで指定されるdomainの制限 default 制限なし

helo/ehlo のdomain 名による制御

smtpd_sender_restrictions

MAIL FROM の制限 default 制限なし

from address/domain による制御

mail fromがFQDNでない場合は拒否

  • reject_unknown_sender_domain

smtpd_recipient_restrictions

RCPT TOの制限
defautl: permit_mynetworks, reject_unauth_destination

to address/domain による制御

rcpt toがFQDNでない場合は拒否

以下の2条件を満たさない場合は拒否する。配送先アドレスが $relay_domains 、及びそのサブドメインに含まれなくて送信者指定ルーティングに含まない。
postfixが最終の配送先の場合、アドレスがmydestination、virtual_alias_maps
などに含まれていない

smtpd_data_restrictions

DATA commandの制限。 default 制限なし

smtpd_etrn_restrictions

ETRN の制御 default 制限なし

virtual domain

virtual_alias_domains = aaa.example.com, bbb.example.com
virtual_alias_maps = hash:/etc/postfix/virtual
info@aaa.example.com  root
hoge@aaa.example.com  hoge
@bbb.example.com      root
hoge@bbb.example.com  hoge

@の前を指定しなかったら、そのdomainの全てのメールになる。指定したものはそのtableの値に。(↑だとhoge@bbb はhogeに、それ以外の@bbb はrootに)