qmail メールサーバ

Postfix+Dovecot やっぱりqmail + tcpserverにしました。
既存環境を引き継いでqmailにしました。
メールボックスやアカウントのコンバートが面倒そうだからです。
qmailのアカウントを追加
# groupadd nofiles
# useradd -g nofiles -d /var/qmail -s /bin/false qmaild
# useradd -g nofiles -d /var/qmail -s /bin/false qmaill
# useradd -g nofiles -d /var/qmail -s /bin/false qmailp
# useradd -g nofiles -d /var/qmail/alias -s /bin/false alias
# groupadd qmail
# useradd -g qmail -d /var/qmail -s /bin/false qmailq
# useradd -g qmail -d /var/qmail -s /bin/false qmailr
# useradd -g qmail -d /var/qmail -s /bin/false qmails
qmailのコンパイル&パッチ当て
# tar zxf qmail-1.03.tar.gz
# cd qmail-1.03
--- patch start ----
# patch -p1 < ../qmail-1.03.errno.patch ← error.h用のパッチ
# patch -p1 < ../qmail-1.03.qmail_local.patch ← 現地時間用のパッチ
# patch -p1 < ../qmail-103.patch ← DNS問合せでのudpの512バイト制限用パッチ
# patch -p1 < ../qmail-smtpd-relay-reject ← 第三者中継拒否用のパッチ
# patch -p1 < ../qmail-1.03-mfcheck.4.patch ← SPAM用のパッチ
# patch -p1 < ../qmail-date-localtime.patch ← ヘッダー中の時間表記を現地時間にするパッチ
# patch -p1 < ../qmail-1.03-concurrencydomain.patch ← 同一ドメイン宛の同時配送制限パッチ
# patch -p1 < ../accept-5xx.patch ← 5xx応答時に恒久エラーとするパッチ
--- gcc patch ---
# echo "gcc -O2" > conf-cc
# echo "gcc -s" > conf-ld
--- make & setup ---
# make
# make setup check
エイリアスの設定
# cd /var/qmail/alias
# touch .qmail-postmaster .qmail-mailer-daemon .qmail-root
sendmail互換環境の互換環境の提供
# mv /usr/sbin/sendmail /usr/sbin/sendmail.org
# mv /usr/lib/sendmail /usr/lib/sendmail.org
# ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail
# ln -s /var/qmail/bin/sendmail /usr/lib/sendmail
qmailの動作設定
# echo "smtp.hogehoge.com" >/var/qmail/control/me ← 自ホスト名
# echo "hogehoge.com" > /var/qmail/control/defaultdomain ← 省略時補完ドメイン名
# echo "hogehoge.com" > /var/qmail/control/defaulthost ← 省略時補完ホスト名
# echo "hogehoge.com" > /var/qmail/control/plusdomain ← 付加ドメイン名
# echo "hogehoge.com" > /var/qmail/control/rcpthosts ← 受信許可ドメイン名
# echo ".hogehoge.com" >> /var/qmail/control/rcpthosts ← 受信許可ドメイン名
# echo "" > /var/qmail/control/locals ← ローカル配送するドメイン名
# echo "86400" > /var/qmail/control/queuelifetime ← 最大再送キュー保存期間
# echo "hogehoge" > /var/qmail/control/doublebouncehost ← ダブルバウンスホスト
スーパーバイザーtcpserverの導入
# tar zxf ucspi-tcp-0.88.tar.gz
# cd ucspi-tcp-0.88
# patch -p1 < ../ucspi-tcp-0.88.errno.patch
# make
# make setup check
# mkdir /var/qmail/relay-ctrl
# echo "127.:allow,RELAYCLIENT=""" > /var/qmail/relay-ctrl/tcp.smtp
# echo ":allow" >> /var/qmail/relay-ctrl/tcp.smtp
# cd /var/qmail/relay-ctrl
# /usr/local/bin/tcprules tcp.smtp.cdb tcp.smtp.tmp < tcp.smtp
仮想マルチドメイン対応のvpopmail導入
# groupadd -g 89 vchkpw
# useradd -m -g vchkpw -d /export/home/vpopmail -s /bin/sh vpopmail
# tar zxf vpopmail-5.4.25.tar.gz
# cd vpopmail-5.4.25
# ./configure --enable-tcprules-prog=/usr/local/bin/tcprules \
--enable-tcpserver-file=/export/home/vpopmail/etc/tcp.smtp \
--enable-qmail-ext --enable-logging=y --enable-passwd=y
# cd cdb
# mv conf-cc conf-cc.org
# echo "gcc -O2" > conf-cc
# mv conf-ld conf-ld.org
# echo "gcc -s" > conf-ld
# cd ..
# make
# make install-strip
自動起動スクリプトの作成
qmail本体の例
/var/qmail/bin/qmail-start ./Maildir/ splogger qmail &

smtpの例
tcpserver -vRD -c 40 -x /var/qmail/relay-ctrl/tcp.smtp.cdb -l `/bin/uname -n` \
-u `/usr/bin/id -u qmaild` -g `/usr/bin/id -g qmaild` 0 smtp \
rblsmtpd -r bl.spamcop.net -r sbl-xbl.spamhaus.org \
qmail-smtpd 2>&1 | splogger smtpd &

pop3の例
tcpserver -vRH -x /var/qmail/relay-ctrl/tcp.pop3.cdb -l hogehoge.com 0 pop3 qmail-popup hogehoge.com \
/export/home/vpopmail/bin/vchkpw qmail-pop3d Maildir 2>&1 \
| splogger pop3d &
スーパーバイザーtcpserverのSSL対応
# tar zxf ucspi-tcp-0.88.tar.gz
# cd ucspi-tcp-0.88
# patch -p1 < ../ucspi-tcp-0.88.errno.patch
# zcat ../ucspi-tcp-ssl-20050405.patch.gz | patch
# make
# /bin/cp -r tcpserver /usr/local/bin/tcpserver-ssl
SSL証明書の設置
csrを作成してサーバ証明書を取得するか、SSL証明書のように無償で証明書を取得します。
取得した証明書+中間CA証明書とサーバー秘密鍵を結合して/var/qmail/cert.pemに置きます。
自動起動スクリプトの追加
smtpsの例
tcpserver-ssl -vHRD -c 40 -s -n /var/qmail/cert.pem -x /var/qmail/relay-ctrl/tcp.submission-ssl.cdb \
-l `uname -n` -u `id -u vpopmail` -g `id -g vpopmail` 0 465 rblsmtpd -r bl.spamcop.net -r sbl-xbl.spamhaus.org \
qmail-smtpd-submission smtp.ishige-jp.com /export/home/vpopmail/bin/vchkpw-submission /bin/true 2>&1 \
| splogger smtpds &

pop3sの例
tcpserver-ssl -vRH -c 40 -s -n /var/qmail/cert.pem -x /var/qmail/relay-ctrl/tcp.pop3.cdb -l hogehoge.com \
0 995 qmail-popup hogehoge.com /export/home/vpopmail/bin/vchkpw qmail-pop3d Maildir 2>&1 \
| splogger pop3ds &
SPAM対策
qsheff-IIでSPAM検出できるものの非常に弱くメンテナンスが大変なので
S25R方式によるSPAM対策ではSMTPレベルで拒否します。

1.逆引きできないクライアントを応答コード「450」
(「後で再試行せよ」の意味)で拒否。
2.逆引き名からメールサーバでないと推定されるクライアントを
応答コード「450」で拒否。
3.応答コード「450」による拒否に対して規則的に再試行する
正当なメールサーバをホワイトリストで救済。
-------------------------------------------------------------------------
http://www.iron-horse.org/~naokih/qmail-badremotehost.patch
からpatchを入手してqmailを再コンパイルして導入
/var/qmail/control/badremotehostを例に習い新規作成
/var/qmail/control/goodremotehostを作成
ホワイトリストを登録する。
-------------------------------------------------------------------------

この方式は「阻止率99%のスパム対策方式の研究報告 」
「Selective SMTP Rejection (S25R)方式」
URL:http://gabacho.reto.jp/anti-spam/anti-spam-system.html
著者: 浅見秀雄 殿のページを参照して導入しました。

再コンパイルして導入はいやなので、
「Qgrey - S25R + qgreylist パッチ」URL:http://k2net.hakuba.jp/qgrey/
を採用することにしました。

URL:http://www.jonatkins.com/page/software/qgreylistから
http://www.jonatkins.com/qgreylist/qgreylist-0.3.tar.gz をゲットします。
パッチ
http://k2net.hakuba.jp/pub/qgrey-0.1-0.3.tar.gzをゲットします。

# gunzip -c qgreylist-0.3.tar.gz | tar -zvf -
# gunzip -c qgrey-0.1-0.3.tar.gz | tar -zvf -
# cp qgrey-0.1-0.3/qgrey.patch qgreylist
# cd qgreylist
# patch < qgrey.patch
# cp greylist /var/qmail/bin/
# cd ../qgrey-0.1-0.3
# cp s25r /var/qmail/

ホワイトリストでの救済方法
# mkdir /var/qmail/whitelist
# chown qmaild /var/qmail/whitelist
# touch /var/qmail/whitelist/IPアドレス
Anti-Virusの設定
アンチウィルスソフトウェア Clam AntiVirus を EPEL からインストール
# yum --enablerepo=epel -y install clamav clamav-update clamav-scanner clamav-scanner-systemd
# sed -i -e "s/^Example/#Example/" /etc/freshclam.conf
# freshclam

# vi /etc/clamd.d/scan.conf
#Example
LogFile /var/log/clamd.scan
PidFile /var/run/clamd.scan/clamd.pid
TemporaryDirectory /var/tmp
LocalSocket /var/run/clamd.scan/clamd.sock
TCPSocket 3310

# touch /var/log/clamd.scan
# chown clamscan. /var/log/clamd.scan
# systemctl start clamd@scan
# systemctl enable clamd@scan
連例してウィルスの混入を防止します
qsheffを採用しました。Qmail-scannerの方法もあります。
#------------------------------------------------
# Make ripmime
#------------------------------------------------
# rm -rf ripmime-1.4.0.7
# gunzip -c ripmime-1.4.0.7.tar.gz | tar -xvf -
# cd ripmime-1.4.0.7
# CC=gcc make && make install
# cd ..
# rm -rf ripmime-1.4.0.7

#------------------------------------------------
# Make qsheff
#------------------------------------------------
# rm -rf qsheff-II-2.1-r3
# gunzip -c qsheff-II-2.1-r3.tar.gz | tar -xvf -
# cd qsheff-II-2.1-r3
# CC=gcc CPPFLAGS="-I/usr/local/include" # LDFLAGS="-L/usr/local/lib" \
./configure
--with-clamav
--with-clamd-socket=/var/run/clamd.scan/clamd.sock
--enable-subject-tag
--enable-virus-tag
# make && make install
# cd ..
# rm -rf qsheff-II-2.1-r3
# /usr/local/etc/qsheff/install-wrapper.sh

# ls -l /var/qmail/bin
lrwxrwxrwx 1 root root xx xx xx xx:xx qmail-queue -> /var/qmail/bin/qmail-qsheff
-r-s--x--x 1 qmailq qmail xxxx xx xx xx:xx qmail-queue.orig

設定ファイルの編集
/usr/local/etc/qsheff-II/qsheff.rules
##h:([iI][sS][oO]-2022-[jJ][pP])   <---これを忘れると日本語が扱えなくなります。
これまでの作業でキューの流れを整理すると以下のようになります。
 Local       SMTP
  |         |
 qmail-inject    tcpserver [ 逆引きチェック ]
     |      |
     |     rblsmtpd [ DNSBLチェック ]
     |      |
     |     greylist [ 一元さんお断り ]
     |      |
     |     qmail-smtpd
     |      |
     +-----+------+
        |
       qSheff [ SPAMチェック & Virusチェック]
        |
        +----------------+
                | 
              ripmime[ MIMEチェック ]
                | 
              ClamAV [ Virusチェック ]
                | 
        +----------------+
        |
       qmail-queue
        |
        V
       MailDir

↑先頭