安全なqmailサーバのまとめ

qmailを使って安全なメールサーバを構築する。

今回はsmtp over ssl、 pop over sslsmtp authを設定しました。

この設定を行うことによって、ポート25のsmtpでは、サーバ自身のドメインのみ、
ポート465のsmtpsでは、smtp authを行うことによって、どのドメインにもリレーをすることができます。

これで不正リレーを防げます。ここで確認することができます。

qmail

まずはじめにqmailをインストールする。

cd /usr/local/src/

必要なソースコード、パッチをダウンロードする。

wget ftp://ftp.jp.qmail.org/qmail/qmail-1.03.tar.gz
wget http://www.stackasterisk.jp/tech/systemConstruction/qmail01/qmail-glibc.patch
wget http://mirror.averse.net/pub/FreeBSD/ports/local-distfiles/sada/qmail-date-localtime.patch.gz
wget http://members.elysium.pl/brush/qmail-smtpd-auth/dist/qmail-smtpd-auth-0.30.tar.gz
wget http://www.sera.desuyo.net/smtp-auth/qmail-smtpd-auth-0.30-iwm.patch

解凍してqmailにパッチを当てる。

tar zxvf qmail-1.03.tar.gz
tar zxvf qmail-smtpd-auth-0.30.tar.gz
gunzip qmail-date-localtime.patch.gz
cp qmail-smtpd-auth-0.30/* qmail-1.03
cd qmail-1.03
patch < ../mail-date-localtime.patch
patch < ../qmail-glibc.patch
patch < auth.patch
patch < ../qmail-smtpd-auth-0.30-iwm.patch

qmialを実行するユーザを追加する。

mkdir /var/qmail
groupadd nofiles
useradd -g nofiles -d /var/qmail/alias alias
useradd -g nofiles -d /var/qmail qmaild
useradd -g nofiles -d /var/qmail qmaill
useradd -g nofiles -d /var/qmail qmailp
groupadd qmail
useradd -g qmail -d /var/qmail qmailq
useradd -g qmail -d /var/qmail qmailr
useradd -g qmail -d /var/qmail qmails

インストール

make setup check

tcpserver

smtpを受信するためにtcpserverをインストールする。

cd /usr/local/src/

ソースをダウンロード

wget http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz

解凍する。

tar zxvf ucspi-tcp-0.88.tar.gz

sslのためにコピーしておく

cp -r ucspi-tcp-0.88 ucspi-tcp-0.88-ssl

cd ucspi-tcp-0.88

エラーが起きたので修正

vi conf-cc

conf-cc
gcc -O2 --include /usr/include/errno.h

インストール

make
make setup check

tcpserver_ssl

ssl用のtcpserverをインストール。

パッチをダウンロードして当てる。

wget http://www.nrg4u.com/qmail/ucspi-tcp-ssl-20050405.patch.gz
gunzip ucspi-tcp-ssl-20050405.patch.gz
cd ucspi-tcp-0.88-ssl
patch < ../ucspi-tcp-ssl-20050405.patch

コンパイル

make

リネームしてコピーする。

mv tcpserver tcpserver_ssl
cp tcpserver_ssl /usr/local/bin

vpopmail

vpopmailのためのユーザを追加する。

groupadd vchkpw
useradd -g vchkpw vpopmail

cd /home/vpopmail/etc

vi tcp.smtp

tcp.smtp
127.0.0.:allow

vi smtp

smtp
/usr/local/bin/tcprules ./tcp.smtp.cdb ./tcp.smtp.tmp < ./tcp.smtp

chmod +x smtp
./smtp

vi tcp.smtps

tcp.smtps
127.0.0.:allow,RELAYCLIENT=""

vi smtps

smtps
/usr/local/bin/tcprules ./tcp.smtps.cdb ./tcp.smtps.tmp < ./tcp.smtps

chmod +x smtps
./smtps

ソースをダウンロードし解凍する。

wget http://jaist.dl.sourceforge.net/sourceforge/vpopmail/vpopmail-5.4.19a.tar.gz
tar zxvf vpopmail-5.4.19a.tar.gz
cd vpopmail-5.4.19

コンパイルしてインストール

./configure \
--enable-roaming-users=y \
--enable-relay-clear-minute=60 \
--enable-tcpserver-file=/home/vpopmail/etc/tcp.smtp

make
make install-strip

mkdir /usr/local/include/vpopmail
cp /home/vpopmail/include/* /usr/local/include/vpopmail
chmod 755 /home/vpopmail/lib
chmod 644 /home/vpopmail/lib/libvpopmail.a

クローンに追加

vi /etc/crontab

crontab
*/20 * * * * /bin/cat /dev/null>/home/vpopmail/etc/open-smtp; /home/vpopmail/bin/clearopensmtp 2>&1 > /dev/null

pop3d_ssl

ディレクトリを作成する。

mkdir /var/qmail/service/pop3d_ssl
chmod 1755 /var/qmail/service/pop3d_ssl

スクリプトを作成する。

vi /var/qmail/service/pop3d_ssl/run

pop3d_ssl/run
#!/bin/sh
exec env - PATH="/usr/local/bin:/var/qmail/bin:$PATH" \
tcpserver_ssl -s -R -H -l0 -v -n /var/qmail/cert.pem 0 pop3s qmail-popup domain /home/vpopmail/bin/vchkpw qmail-pop3d Maildir 2>&1

chmod 755 /var/qmail/service/pop3d_ssl/run

mkdir /var/qmail/service/pop3d_ssl/log
chmod 1755 /var/qmail/service/pop3d_ssl/log

vi /var/qmail/service/pop3d_ssl/log/run

pop3d_ssl/log/run
#!/bin/sh
exec \
setuidgid qmaill \
multilog t /var/log/pop3d_ssl

chmod 755 /var/qmail/service/pop3d_ssl/log/run

ログ用のディレクトリを作成。

mkdir /var/log/pop3d_ssl
chown qmaill.nofiles /var/log/pop3d_ssl

smtpd

ディレクトリを作成する。

mkdir /var/qmail/service/smtpd
chmod 1755 /var/qmail/service/smtpd

スクリプトを作成する。

vi /var/qmail/service/smtpd/run

smtpd/run
#!/bin/sh
exec env - PATH="/usr/local/bin:/var/qmail/bin:$PATH" \
tcpserver -R -H -l0 -c20 -v -x /home/vpopmail/etc/tcp.smtp.cdb -u qmaild -g nofiles 0 smtp qmail-smtpd

chmod 755 /var/qmail/service/smtpd/run

mkdir /var/qmail/service/smtpd/log
chown qmails.nofiles /var/qmail/service/smtpd/log
chmod 1755 /var/qmail/service/smtpd/log

vi /var/qmail/service/smtpd/log/run

smtpd/log/run
#!/bin/sh
exec \
setuidgid qmaill \
multilog t /var/log/smtpd

chmod 755 /var/qmail/service/smtpd/log/run

ログ用のディレクトリを作成。

mkdir /var/log/smtpd
chown qmaill.nofiles /var/log/smtpd

smtpd_ssl

ディレクトリを作成する。

mkdir /var/qmail/service/smtpd_ssl
chmod 1755 /var/qmail/service/smtpd_ssl

スクリプトを作成する。

vi /var/qmail/service/smtpd_ssl/run

smtpd_ssl/run
#!/bin/sh
exec env - PATH="/usr/local/bin:/var/qmail/bin:$PATH" \
tcpserver_ssl -s -R -H -l0 -c20 -v -x /home/vpopmail/etc/tcp.smtps.cdb -u qmaild -g nofiles -n /var/qmail/cert.pem 0 smtps qmail-smtpd \
domain /home/vpopmail/bin/vchkpw /bin/true 2>&1

chmod 755 /var/qmail/service/smtpd_ssl/run

mkdir /var/qmail/service/smtpd_ssl/log
chown qmails.nofiles /var/qmail/service/smtpd_ssl/log
chmod 1755 /var/qmail/service/smtpd_ssl/log

vi /var/qmail/service/smtpd_ssl/log/run

smtpd_ssl/log/run
#!/bin/sh
exec \
setuidgid qmaill \
multilog t /var/log/smtpd_ssl

chmod 755 /var/qmail/service/smtpd_ssl/log/run

ログ用のディレクトリを作成。

mkdir /var/log/smtpd_ssl
chown qmaill.nofiles /var/log/smtpd_ssl

証明書

cd /var/qmail
PEM1=/tmp/openssl.date +%s.$$.1
PEM2=/tmp/openssl.date +%s.$$.2
openssl req -newkey rsa:1024 -keyout $PEM1 -nodes -x509 -days 365 -out $PEM2

cat $PEM1 > cert.pem
echo "" >> cert.pem
cat $PEM2 >> cert.pem
rm -f $PEM1 $PEM2
chmod 600 cert.pem

daemontoolに登録

ln -s /var/qmail/service/qmail-send /service
ln -s /var/qmail/service/smtpd /service
ln -s /var/qmail/service/smtpd_ssl /service
ln -s /var/qmail/service/pop3d_ssl /service

以上です。これで安全なメールサーバを構築できます。