Postfix を chroot 環境で動作することによってセキュリティを高めます。
|
|
■プロセスの確認
まず、chrootの状態でない場合のPostfix のプロセスを確認してみます。以下は、メールの送信直後に、psでプロセスを表示させたものです。chroot
で動作するようになると、pickup -l -t fifo -u -c のように
-c オプションが表示されるようになります。それでは、実際にchroot
環境で動作させる方法について解説していきます。
# ps aux | grep postfix
root 1913 0.0 0.3 2500 936 ? S 16:43 0:00
/usr/libexec/postfix/master
postfix 1914 0.0 0.3 2488 868 ? S 16:43
0:00 pickup -l -t fifo -u
postfix 1915 0.0 0.3 2540 952 ? S 16:43
0:00 qmgr -l -t fifo -u
postfix 1918 0.3 0.5 3132 1528 ? S 16:43
0:00 smtpd -n smtp -t inet -u
postfix 1919 0.1 0.3 2480 856 ? S 16:43
0:00 proxymap -t unix -u
postfix 1920 0.3 0.3 2552 956 ? S 16:43
0:00 cleanup -z -t unix -u
postfix 1921 0.1 0.3 2508 884 ? S 16:43
0:00 trivial-rewrite -n rewrite -t unix
-u
postfix 1922 0.1 0.3 2560 976 ? S 16:43
0:00 smtp -t unix -u
postfix 1929 0.1 0.4 2736 1236 ? S 16:43
0:00 local -t unix |
|
■スクリプトの実行
Postfix には、chrootさせるためのシェルスクリプトが用意されており、ソースディレクトリ内のexamples/chroot-setup
に各ディストリビューションごとのスクリプトが格納されています。Linux であれば
LINUX2を実行します。
# cd /usr/local/src/postfix-2.0.16/examples/chroot-setup/
# sh LINUX2
postfix/postfix-script: refreshing the Postfix
mail system |
|
■/etc/postfix/master.cf の編集
次に、/etc/postfix/master.cf を開いてchrootを有効にする設定を行います。デフォルトの状態では、全てのプログラムがchrootしない設定になっているので(「n」)、これを「y」に変更してchrootを有効にします。ここで、注意しておきたいのは、local、pipe、virtual
に関してはchroot させないようにしてください。local をchrootさせると、メールの格納される場所が通常の
/var/mail/kororo もしくは、/home/kororo/Maildir/ ではなく、/var/spool/postfix/var/mail/kororo
のように
queue_directory(デフォルトでは、/var/spool/postfix)から見た相対位置にメールが保存されることになってしまいます。よって、local
デーモンに対してはchrootしないようにします。
# vi /etc/postfix/master.cf
# ==========================================================================
# service type private unpriv chroot wakeup maxproc command + args
# (yes) (yes) (yes) (never) (100)
# ==========================================================================
smtp inet n - y - - smtpd
#628 inet n - n - - qmqpd
pickup fifo n - y 60 1 pickup
cleanup unix n - y - 0 cleanup
qmgr fifo n - n 300 1 qmgr
#qmgr fifo n - n 300 1 nqmgr
rewrite unix - - y - - trivial-rewrite
bounce unix - - y - 0 bounce
defer unix - - y - 0 bounce
flush unix n - y 1000? 0 flush
proxymap unix - - y - - proxymap
smtp unix - - y - - smtp
relay unix - - y - - smtp
# -o smtp_helo_timeout=5 -o smtp_connect_timeout=5
showq unix n - y - - showq
error unix - - y - - error
local unix - n n - - local
virtual unix - n n - - virtual
lmtp unix - - y - - lmtp
|
|
編集し終えたら、/etc/sasldb2 を/var/spool/postfix/etc/sasldb2
にハードリンクしておきます。なお、/etc/aliases.db に関してはlocal デーモンが参照するので、/var/spool/postfix
以下に配置しておく必要はありませんので注意してください。
# mkdir /var/spool/postfix/etc
# ln /etc/sasldb2 /var/spool/postfix/etc |
|
Postfix をリロードします。あとはテスト送信してみて正常に動作するかどうか確認してください。
■chrootの動作確認
chroot 環境で動作している場合、各プログラムの末尾に-c オプションが表示されるようになります。local
はchroot させていないため、-c オプションは表示されていません。
# ps aux | grep postfix
root 2018 0.0 0.3 2492 928 ? S 16:44 0:00
/usr/libexec/postfix/master
postfix 2019 0.0 0.3 2484 868 ? S 16:44
0:00 pickup -l -t fifo -u -c
postfix 2020 0.0 0.3 2536 948 ? S 16:44
0:00 qmgr -l -t fifo -u -c
postfix 2023 0.4 0.5 3132 1528 ? S 16:46
0:00 smtpd -n smtp -t inet -u -c
postfix 2024 0.2 0.3 2480 860 ? S 16:46
0:00 proxymap -t unix -u -c
postfix 2025 0.2 0.3 2552 956 ? S 16:46
0:00 cleanup -z -t unix -u -c
postfix 2026 0.4 0.3 2512 888 ? S 16:46
0:00 trivial-rewrite -n rewrite -t unix
-u -c
postfix 2027 0.2 0.3 2560 976 ? S 16:46
0:00 smtp -t unix -u -c
postfix 2034 0.2 0.4 2740 1240 ? S 16:46
0:00 local -t unix |
|