qmail tcpserver daemontools インストール

専用ユーザー作成
[root@centos ~]# mkdir /var/qmail
[root@centos ~]# groupadd nofiles
[root@centos ~]# useradd -g nofiles -d /var/qmail/alias -s /sbin/nologin -M alias
[root@centos ~]# useradd -g nofiles -d /var/qmail -s /sbin/nologin -M qmaild
[root@centos ~]# useradd -g nofiles -d /var/qmail -s /sbin/nologin -M qmaill
[root@centos ~]# useradd -g nofiles -d /var/qmail -s /sbin/nologin -M qmailp
[root@centos ~]# groupadd qmail
[root@centos ~]# useradd -g qmail -d /var/qmail -s /sbin/nologin -M qmailq
[root@centos ~]# useradd -g qmail -d /var/qmail -s /sbin/nologin -M qmailr
[root@centos ~]# useradd -g qmail -d /var/qmail -s /sbin/nologin -M qmails
qmailインストール
[root@centos ~]# cd /usr/local/src
[root@centos src]# wget http://cr.yp.to/software/qmail-1.03.tar.gz
[root@centos src]# wget ftp://ftp.freebsd.org/pub/FreeBSD/ports/local-distfiles/garga/qmail/qmail-smtpd-auth-0.31.tar.gz
[root@centos src]# wget ftp://ftp.freebsd.org/pub/FreeBSD/ports/local-distfiles/garga/qmail/qmail-date-localtime.patch
[root@centos src]# wget http://qmail.org/qmail-smtpd-relay-reject
[root@centos src]# wget http://www.ckdhr.com/ckd/qmail-103.patch
[root@centos src]# tar zxvf qmail-1.03.tar.gz
[root@centos src]# tar zxvf qmail-smtpd-auth-0.31.tar.gz
[root@centos src]# cd qmail-1.03
[root@centos qmail-1.03]# mv ../qmail-date-localtime.patch ./
[root@centos qmail-1.03]# mv ../qmail-smtpd-relay-reject ./
[root@centos qmail-1.03]# mv ../qmail-smtpd-auth-0.31/*.* ./
[root@centos qmail-1.03]# mv ../qmail-103.patch ./
[root@centos qmail-1.03]# patch < qmail-date-localtime.patch
[root@centos qmail-1.03]# patch < qmail-smtpd-relay-reject
[root@centos qmail-1.03]# patch < auth.patch
[root@centos qmail-1.03]# patch < qmail-103.patch
[root@centos qmail-1.03]# vi error.h
extern int errno;
↓
#include<errno.h> ←変更
[root@centos qmail-1.03]# make setup check [root@centos qmail-1.03]# ./config-fast `hostname` [root@centos qmail-1.03]# cd [root@centos ~]# rm -f /usr/local/src/qmail-1.03.tar.gz [root@centos ~]# rm -f /usr/local/src/qmail-smtpd-auth-0.31.tar.gz [root@centos ~]# rm -fr /usr/local/src/qmail-smtpd-auth-0.31
ヒント
redhat系でインストールする場合はerror.hを編集する必要があります。
qmail基本設定
[root@centos ~]# echo 'MANPATH /var/qmail/man' >> /etc/man.config
[root@centos ~]# echo '10485760' > /var/qmail/control/databytes
[root@centos ~]# touch /var/qmail/control/doublebounceto
ヒント
/var/qmail/control/databytesで受信メールサイズの上限を指定します。 /var/qmail/control/doublebouncetoを作成してダブルバウンス(存在しないメール)を破棄する。
alias追加
[root@centos ~]# echo "user_name@centos.orz" > /var/qmail/alias/.qmail-mailer-daemon
[root@centos ~]# echo "user_name@centos.orz" > /var/qmail/alias/.qmail-postmaster
[root@centos ~]# echo "user_name@centos.orz" > /var/qmail/alias/.qmail-root
[root@centos ~]# chmod 644 /var/qmail/alias/.qmail*
checkpasswordインストール
[root@centos ~]# cd /usr/local/src
[root@centos src]# wget http://cr.yp.to/checkpwd/checkpassword-0.90.tar.gz
[root@centos src]# tar zxvf checkpassword-0.90.tar.gz
[root@centos src]# cd checkpassword-0.90
[root@centos checkpassword-0.90]# vi error.h
extern int errno;
↓
#include<errno.h> ←変更
[root@centos checkpassword-0.90]# make [root@centos checkpassword-0.90]# make setup check [root@centos checkpassword-0.90]# cd [root@centos ~]# chown root:nofiles /bin/checkpassword [root@centos ~]# chmod 4750 /bin/checkpassword [root@centos ~]# rm -fr /usr/local/src/checkpassword-0.90 [root@centos ~]# rm -f /usr/local/src/checkpassword-0.90.tar.gz
tcpserverインストール
[root@centos ~]# cd /usr/local/src
[root@centos src]# wget http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz
[root@centos src]# tar zxvf ucspi-tcp-0.88.tar.gz
[root@centos src]# cd ucspi-tcp-0.88
[root@centos ucspi-tcp-0.88]# vi error.h
extern int errno;
↓
#include<errno.h> ←変更
[root@centos ucspi-tcp-0.88]# make [root@centos ucspi-tcp-0.88]# make setup check [root@centos ucspi-tcp-0.88]# cd [root@centos ~]# rm -fr /usr/local/src/ucspi-tcp-0.88 [root@centos ~]# rm -f /usr/local/src/ucspi-tcp-0.88.tar.gz [root@centos ~]# echo ':allow' > /etc/tcp.pop3 [root@centos ~]# /usr/local/bin/tcprules /etc/tcp.pop3.cdb /etc/tcp.pop3.tmp < /etc/tcp.pop3 [root@centos ~]# echo '127.:allow,RELAYCLIENT=""' > /etc/tcp.smtp [root@centos ~]# /usr/local/bin/tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
ヒント
tcpserverとは、DJBが作成したポートの待ち受けとサーバ制御を行うプログラムです。 tcpserverには下記のような利点があります。 ・サービスの数だけtcpserverを起動する。 ・同時に起動できるサービス数が制御できる。(DoS攻撃防御) ・一定以上の頻度でアクセスがあっても異常動作の判定は行わない。 ・動作の制御にハッシュDBを使用する。 ・サービスを動作させるIPアドレスを指定できる。
daemontoolsインストール
[root@centos ~]# cd /usr/local/src
[root@centos src]# wget http://cr.yp.to/daemontools/daemontools-0.76.tar.gz
[root@centos src]# mkdir -p /package
[root@centos src]# chmod 755 /package
[root@centos src]# cd /package
[root@centos package]# tar zxvf /usr/local/src/daemontools-0.76.tar.gz
[root@centos package]# cd /package/admin/daemontools-0.76
[root@centos daemontools-0.76]# vi ./src/error.h
extern int errno;
↓
#include<errno.h> ←変更
[root@centos daemontools-0.76]# ./package/install [root@centos daemontools-0.76]# cd [root@centos ~]# rm -f /usr/local/src/daemontools-0.76.tar.gz
ヒント
daemontoolsとは、UNIXサービス(デーモン)の起動、終了、状態監視、ログの取得を行うことができるツールです。 daemontoolsの主なプログラム svscan:サービス群の監視を行う。 svstat:サービスの状態を調べる。 svc:サービスの起動、終了を指示する。
relay-ctrl
[root@centos ~]# cd /usr/local/src
[root@centos src]# wget http://untroubled.org/relay-ctrl/relay-ctrl-3.1.1.tar.gz
[root@centos src]# tar xvfz relay-ctrl-3.1.1.tar.gz
[root@centos src]# cd relay-ctrl-3.1.1
[root@centos relay-ctrl-3.1.1]# echo /usr/local/share/man > conf-man
[root@centos relay-ctrl-3.1.1]# make
[root@centos relay-ctrl-3.1.1]# ./installer
[root@centos relay-ctrl-3.1.1]# cd
[root@centos ~]# mkdir /etc/relay-ctrl
[root@centos ~]# mkdir -p /var/spool/relay-ctrl/allow
[root@centos ~]# chmod 700 /var/spool/relay-ctrl
[root@centos ~]# chmod 777 /var/spool/relay-ctrl/allow
[root@centos ~]# echo "/var/spool/relay-ctrl/allow" > /etc/relay-ctrl/RELAY_CTRL_DIR
[root@centos ~]# echo "900" > /etc/relay-ctrl/RELAY_CTRL_EXPIRY
[root@centos ~]# vi /var/spool/cron/root
*/10 * * * * /usr/local/bin/envdir /etc/relay-ctrl /usr/local/bin/relay-ctrl-age
[root@centos ~]# rm -fr /usr/local/src/relay-ctrl-3.1.1 [root@centos ~]# rm -f /usr/local/src/relay-ctrl-3.1.1.tar.gz
sendmail停止
[root@centos ~]# mv /usr/sbin/sendmail /usr/sbin/sendmail.bak
[root@centos ~]# rm -f /usr/sbin/sendmail
[root@centos ~]# ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail
qmail起動
[root@centos ~]# mkdir /var/qmail/service
[root@centos ~]# mkdir /var/qmail/service/qmail
[root@centos ~]# mkdir /var/qmail/service/qmail/log
[root@centos ~]# chmod +t /var/qmail/service/qmail
[root@centos ~]# vi /var/qmail/service/qmail/run
#!/bin/sh

exec env - PATH="/var/qmail/bin:$PATH" \
qmail-start ./Maildir/
[root@centos ~]# vi /var/qmail/service/qmail/log/run
#!/bin/sh

exec env - PATH="/var/qmail/bin:$PATH" \
setuidgid qmaill multilog t s16777215 n10 /var/log/qmail
[root@centos ~]# chmod +x /var/qmail/service/qmail/run [root@centos ~]# chmod +x /var/qmail/service/qmail/log/run [root@centos ~]# mkdir /var/log/qmail [root@centos ~]# chown qmaill:nofiles /var/log/qmail [root@centos ~]# chmod 777 /var/log/qmail [root@centos ~]# ln -s /var/qmail/service/qmail /service/qmail
qmail-pop3d start
[root@centos ~]# mkdir /var/qmail/service/pop3d
[root@centos ~]# mkdir /var/qmail/service/pop3d/log
[root@centos ~]# chmod +t /var/qmail/service/pop3d
[root@centos ~]# vi /var/qmail/service/pop3d/run
#!/bin/sh

exec env - PATH="/var/qmail/bin:$PATH" \
envdir /etc/relay-ctrl relay-ctrl-chdir \
tcpserver -v -x /etc/tcp.pop3.cdb -R -H 0 pop3 \
qmail-popup mail.centos.orz checkpassword \
relay-ctrl-allow \
qmail-pop3d Maildir 2>&1
[root@centos ~]# vi /var/qmail/service/pop3d/log/run
#!/bin/sh

exec env - PATH="/var/qmail/bin:$PATH" \
setuidgid qmailp multilog t s16777215 n10 /var/log/qmail/pop3d
[root@centos ~]# chmod +x /var/qmail/service/pop3d/run [root@centos ~]# chmod +x /var/qmail/service/pop3d/log/run [root@centos ~]# mkdir /var/log/qmail/pop3d [root@centos ~]# chown qmailp:nofiles /var/log/qmail/pop3d [root@centos ~]# chmod 777 /var/log/qmail/pop3d [root@centos ~]# ln -s /var/qmail/service/pop3d /service/pop3d
qmail-smtpd start
[root@centos ~]# mkdir /var/qmail/service/smtpd
[root@centos ~]# mkdir /var/qmail/service/smtpd/log
[root@centos ~]# chmod +t /var/qmail/service/smtpd
[root@centos ~]# vi /var/qmail/service/smtpd/run
#!/bin/sh

exec env - PATH="/var/qmail/bin:$PATH" \
envdir /etc/relay-ctrl relay-ctrl-chdir \
tcpserver -v -x /etc/tcp.smtp.cdb \
-R -H -l0 -u `id -u qmaild` -g `id -g qmaild` 0 smtp \
relay-ctrl-check \
qmail-smtpd 2>&1
[root@centos ~]# vi /var/qmail/service/smtpd/log/run
#!/bin/sh

exec env - PATH="/var/qmail/bin:$PATH" \
setuidgid qmails multilog t s16777215 n10 /var/log/qmail/smtpd
[root@centos ~]# chmod +x /var/qmail/service/smtpd/run [root@centos ~]# chmod +x /var/qmail/service/smtpd/log/run [root@centos ~]# mkdir /var/log/qmail/smtpd [root@centos ~]# chown qmails:nofiles /var/log/qmail/smtpd [root@centos ~]# chmod 777 /var/log/qmail/smtpd [root@centos ~]# ln -s /var/qmail/service/smtpd /service/smtpd
Maildir
[root@centos ~]# mkdir -p /home/user_name/Maildir/cur
[root@centos ~]# mkdir -p /home/user_name/Maildir/new
[root@centos ~]# mkdir -p /home/user_name/Maildir/tmp
[root@centos ~]# chmod -R 700 /home/user_name/Maildir
[root@centos ~]# chown -R user_name:user_name /home/user_name/Maildir
[root@centos ~]# mkdir -p /etc/skel/Maildir/cur
[root@centos ~]# mkdir -p /etc/skel/Maildir/new
[root@centos ~]# mkdir -p /etc/skel/Maildir/tmp
[root@centos ~]# chmod -R 700 /etc/skel/Maildir
Procmail
[root@centos ~]# vi /home/user_name/.qmail
| /usr/bin/procmail
[root@centos ~]# vi /etc/skel/.qmail
| /usr/bin/procmail
[root@centos ~]# vi /etc/procmailrc
SHELL=/bin/bash
PATH=/bin:/usr/bin
DROPPRIVS=yes
MAILDIR=$HOME/Maildir
DEFAULT=$MAILDIR/
LOGFILE=$MAILDIR/procmail.log
#VERBOSE=ON # Detailed log output

# Mail including "Advertisement without consent *" ..subject.. is annulled.
:0
* ^Subject:.*=\?[Ii][Ss][Oo]-2022-[Jj][Pp]\?[Bb]\?GyRCTCQ\+NUJ6OS05cCIo
/dev/null
Procmail logrotation
[root@centos ~]# vi /etc/logrotate.d/procmail
/home/*/Maildir/procmail.log {
    missingok
    nocreate
    notifempty
}
daemontools start
[root@centos ~]# sed -i "s/^SV/#SV/g" /etc/inittab
[root@centos ~]# vi /etc/init/svscan.conf
start on runlevel [12345]
respawn
exec /command/svscanboot
[root@centos ~]# initctl reload-configuration [root@centos ~]# initctl start svscan
Home PageTop