sendmail のようなややこしいものは捨ててしまって、このセキュアな MTA、qmail の世界へようこそ。
なんか、設定が「独特」なんで嫌う人もいるけど、今までにセキュリティ上の問題点が作成者本人以外には発見されていないというのが凄い!
ぜひ、あなたも qmail の世界へようこそ。
まず、必要なファイルを get。(/usr/local/src 以下にね)
qmail-1.03.tar.gz
ucspi-tcp-0.88.tar.gz
checkpassword-0.81.tar.gz
qmail の実行に必要なユーザー/グループを追加する。
testserv# vipw
以下追加
alias:*:81:81::0:0:User &:/var/qmail/alias:/nonexistent
qmaild:*:82:81::0:0:User &:/var/qmail:/nonexistent
qmaill:*:83:81::0:0:User &:/var/qmail:/nonexistent
qmailp:*:84:81::0:0:User &:/var/qmail:/nonexistent
qmailq:*:85:82::0:0:User &:/var/qmail:/nonexistent
qmailr:*:86:82::0:0:User &:/var/qmail:/nonexistent
qmails:*:87:82::0:0:User &:/var/qmail:/nonexistent
testserv# vi /etc/group
以下追加
nofiles:*:81:
qmail:*:82:
qmail 本体をインストール。
testserv# cd /usr/local/src/
testserv# tar xvfz qmail-1.03.tar.gz
qmail-1.03/
qmail-1.03/BLURB
qmail-1.03/BLURB2
qmail-1.03/BLURB3
qmail-1.03/BLURB4
<略>
qmail-1.03/tcp-environ.5
qmail-1.03/constmap.h
qmail-1.03/constmap.c
testserv# cd /usr/local/src/qmail-1.03
testserv# make setup check
( cat warn-auto.sh; echo CC=\'`head -1 conf-cc`\'; echo LD=\'`head -1 conf-ld`\' ) >
auto-ccld.sh
cat auto-ccld.sh make-load.sh > make-load
chmod 755 make-load
cat auto-ccld.sh find-systype.sh > find-systype
chmod 755 find-systype
./find-systype > systype
( cat warn-auto.sh; ./make-load "`cat systype`" ) > load
chmod 755 load
<略>
nroff -man mbox.5 > mbox.0
nroff -man addresses.5 > addresses.0
nroff -man envelopes.5 > envelopes.0
nroff -man forgeries.7 > forgeries.0
./install
./instcheck
qmail の設定を行う。(/var/qmail/control 以下のファイルを作成する)
testserv# ./config
Your hostname is testserv.hoge1.ne.jp.
Your host's fully qualified name in DNS is testserv.hoge1.ne.jp.
Putting testserv.hoge1.ne.jp into control/me...
Putting hoge1.ne.jp into control/defaultdomain...
Putting ne.jp into control/plusdomain...
Checking local IP addresses:
127.0.0.1: Adding localhost.hoge1.ne.jp to control/locals...
202.32.124.XXX: Adding testserv.hoge1.ne.jp to control/locals...
210.149.86.XXX: Adding testserv.hogehoge.ne.jp to control/locals...
210.149.86.YYY: Adding testserv.hoge3.co.jp to control/locals...
If there are any other domain names that point to you,
you will have to add them to /var/qmail/control/locals.
You don't have to worry about aliases, i.e., domains with CNAME records.
Copying /var/qmail/control/locals to /var/qmail/control/rcpthosts...
Now qmail will refuse to accept SMTP messages except to those hosts.
Make sure to change rcpthosts if you add hosts to locals or virtualdomains!
*逆引き設定等もきちんとされていないと ./config は失敗するので注意
(その時には ./config-fast hostname.your.domain を使用)
qmail では、セキュリティ上の理由で、root のメールボックスは作れないので、必ず root 宛のメールを実体アドレス(実際に存在する一般ユーザーのアドレス)に転送する設定を作っておく必要がある。
testserv# cat > /var/qmail/alias/.qmail-root
&shinoda
testserv# cp /var/qmail/alias/.qmail-root /var/qmail/alias/.qmail-postmaster
testserv# cp /var/qmail/alias/.qmail-root /var/qmail/alias/.qmail-mailer-daemon
testserv# chmod 644 /var/qmail/alias/.qmail-postmaster
testserv# chmod 644 /var/qmail/alias/.qmail-root
testserv# chmod 644 /var/qmail/alias/.qmail-mailer-daemon
* .qmail-root をコピーするのではなく、.qmail-postmaster や .qmail-mailer-daemon の中は &root(root に転送)としておいた方がエレガントかも。二重転送にはなるが。(転送先を修正するときが楽だから)
qmail 起動の wrapper ソフトである tcpserver のインストール。
testserv# cd /usr/local/src/
testserv# tar xvfz ucspi-tcp-0.88.tar.gz
ucspi-tcp-0.88
ucspi-tcp-0.88/README
ucspi-tcp-0.88/TODO
ucspi-tcp-0.88/CHANGES
ucspi-tcp-0.88/VERSION
ucspi-tcp-0.88/FILES
ucspi-tcp-0.88/SYSDEPS
<略>
ucspi-tcp-0.88/wait_pid.c
ucspi-tcp-0.88/warn-auto.sh
ucspi-tcp-0.88/warn-shsgr
ucspi-tcp-0.88/x86cpuid.c
testserv# cd ucspi-tcp-0.88
testserv# make; make setup check
( cat warn-auto.sh; echo 'main="$1"; shift'; echo exec "`head -1 conf-ld`" '-o "$main" "$main".o ${1+"$@"}' ) > load
chmod 755 load
( cat warn-auto.sh; echo exec "`head -1 conf-cc`" '-c ${1+"$@"}' ) > compile
chmod 755 compile
cat warn-auto.sh choose.sh | sed s}HOME}"`head -1 conf-home`"}g > choose
chmod 755 choose
./choose clr trypoll iopause.h1 iopause.h2 > iopause.h
./choose clr tryulong64 uint64.h1 uint64.h2 > uint64.h
./compile tcpserver.c
<略>
./compile instcheck.c
./load instcheck hier.o auto_home.o unix.a byte.a
./install
./instcheck
tcpserver は、tcp_wrappers の hosts.allow のようなテキストファイルではなく、ハッシュ化されたファイルを見てアクセス制限を行う。
まず、制限内容を書いたテキストファイルを作成し、下記のようにアクセス制限用のハッシュファイルに変換する。
testserv# cat > /etc/tcp.smtp
202.32.124.XXX:allow,RELAYCLIENT=""
210.149.86.XXX:allow,RELAYCLIENT=""
210.149.86.YYY:allow,RELAYCLIENT=""
127.:allow,RELAYCLIENT=""
:allow
testserv# /usr/local/bin/tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
* RELAYCLIENT と書かれた行が、送信(SMTP)接続を許す IP アドレス。POP3 は IP アドレスによる制限をしないので、「:allow」とだけ書いておく。
qmail の起動ファイルを作成。
testserv# cat > /var/qmail/rc
#!/bin/sh
# Using splogger to send the log through syslog.
# Using qmail-local to deliver messages to ~/Mailbox by default.
exec env - PATH="/var/qmail/bin:$PATH" \
qmail-start ./Maildir/ splogger qmail &
/usr/local/bin/tcpserver -HR -x /etc/tcp.smtp.cdb -u 81 -g 81 0 smtp \
/var/qmail/bin/qmail-smtpd &
/usr/local/bin/tcpserver -HR 0 pop3 /var/qmail/bin/qmail-popup testserv.hoge1.ne.jp \
/bin/checkpassword /var/qmail/bin/qmail-pop3d Maildir &
マシン起動時に自動で qmail が起動するよう、/usr/local/etc/rc.d ディレクトリ以下に、起動ファイルのシンボリックリンクを作成しておく。
testserv# ln -s /var/qmail/rc /usr/local/etc/rc.d/qmail.sh
testserv# chmod 755 /var/qmail/rc
testserv# ls -la /usr/local/etc/rc.d/qmail.sh
lrwxr-xr-x 1 root wheel 13 Sep 15 21:38 /usr/local/etc/rc.d/qmail.sh -> /var/qmail/rc
testserv# ls -la /var/qmail/rc
-rwxr-xr-x 1 root qmail 448 Sep 15 21:37 /var/qmail/rc
各ユーザー用のメールボックスを作成。(メールを利用するユーザー分だけ必要)
testserv# su shinoda
% /var/qmail/bin/maildirmake $HOME/Maildir
% cd
% ls -la Maildir
total 5
drwx------ 5 shinoda admin 512 Sep 15 21:43 .
drwxr-xr-x 10 shinoda admin 512 Sep 15 21:43 ..
drwx------ 2 shinoda admin 512 Sep 15 21:43 cur
drwx------ 2 shinoda admin 512 Sep 15 21:43 new
drwx------ 2 shinoda admin 512 Sep 15 21:43 tmp
% cat > .qmail
./Maildir/
% exit
testserv#
POP3 で使うパスワード認証プログラムをインストール。(checkpassword との組み合わせが一般的)
testserv# cd /usr/local/src
testserv# tar xvfz checkpassword-0.81.tar.gz
checkpassword-0.81/
checkpassword-0.81/BLURB
checkpassword-0.81/README
<略>
checkpassword-0.81/chkshsgr.c
checkpassword-0.81/warn-shsgr
checkpassword-0.81/tryshsgr.c
testserv# cd checkpassword-0.81
testserv# make ;make setup; make check
nroff -man checkpassword.8 > checkpassword.0
( cat warn-auto.sh; echo 'main="$1"; shift'; echo exec "`head -1 conf-ld`" '-o "$main" "$main".o ${1+"$@"}' ) > load
chmod 755 load
( cat warn-auto.sh; echo exec "`head -1 conf-cc`" '-c ${1+"$@"}' ) > compile
chmod 755 compile
<略>
./compile open_trunc.c
./makelib open.a open_read.o open_trunc.o
./load install hier.o auto_home.o strerr.a substdio.a open.a error.a str.a
./compile instcheck.c
./load instcheck hier.o auto_home.o strerr.a substdio.a error.a str.a
./install
./instcheck
素の sendmail は使えないようにしちゃう。(今後は qmail の sendmail プログラムを使用するように)
testserv# chmod 0 /usr/sbin/sendmail
testserv# ls -la /usr/sbin/sendmail
---------- 5 root wheel 290448 Jul 20 2000 /usr/sbin/sendmail
testserv# mv /usr/sbin/sendmail /usr/sbin/sendmail.shinoda
testserv# ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail
ここまで出来たら、qmail の実行!(その前に、古い sendmail は kill しておくこと)
testserv# /var/qmail/rc
testserv# ps -ax|grep qmail
85987 p0 S 0:00.13 qmail-send
85989 p0 S 0:00.03 /usr/local/bin/tcpserver -HR 0 pop3 /var/qmail/bin/qmail-popup te
85990 p0 S 0:00.03 splogger qmail
85991 p0 S 0:00.03 qmail-lspawn ./Maildir/
85992 p0 S 0:00.02 qmail-rspawn
85993 p0 S 0:00.03 qmail-clean
85995 p0 R+ 0:00.02 grep qmail
shinoda@testserv.hoge1.ne.jp にどっかからメールしてみる。
testserv# ls -la ~shinoda/Maildir/new
total 3
drwx------ 2 shinoda admin 512 Sep 15 21:54 .
drwx------ 5 shinoda admin 512 Sep 15 21:43 ..
-rw------- 1 shinoda admin 966 Sep 15 21:54 1000558469.86011.testserv.hoge1.ne.jp
testserv# cat ~shinoda/Maildir/new/1000558469.86011.testserv.hoge1.ne.jp
Return-Path:
Delivered-To: shinoda@testserv.hoge1.ne.jp
Received: (qmail 86008 invoked by alias); 15 Sep 2001 21:54:29 +0900
<略>
From: SHINODA
Date: Sat, 15 Sep 2001 21:18:18 +0900
To: shinoda@testserv.hoge1.ne.jp
Subject: TEST2
MIME-Version: 1.0
X-Mailer: AL-Mail32 Version 1.12
Content-Type: text/plain; charset=us-ascii
TEST2
ちゃんと外部からのメールは届いている。
この後、実際にメールソフトを使って送受信のテストをしてみれば良し。
|
|