UJP - 技術情報1

Life is fun and easy!

不正IP報告数

Okan Sensor
 
メイン
ログイン
ブログ カテゴリ一覧

tcpserverのインストールしてqmailでメール受信

tcpserverのインストールしてqmailでメール受信


0.改訂履歴

  • 2005.10.12 新規作成
  • 2005.11.14 コピペしやすいように変更
  • 2006.03.06 UID,GIDをqmailインストール時手順と合わせた.

1.はじめに

 このドキュメントでは,tcpserverを導入して,その上でSMTPサーバのqmail-sendを稼働させてメールを受信するまでの手順を説明する. 前提として,qmailがインストールされて,メールのローカル配信が成功している必要がある. qmailが外部からTCP接続を得るためには,xinetd,古くはinetd等のスーパーサーバが必要だが,この資料ではtcpserverとの連携について説明することとなる.

2.tcpserverのインストール

[root@juno tcpserver]# wget http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz
--18:44:09--  http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz
           => `ucspi-tcp-0.88.tar.gz'
Resolving cr.yp.to... 131.193.178.160
Connecting to cr.yp.to[131.193.178.160]:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 53,019 [application/x-gzip]

100%[================================================================>] 53,019
        73.53K/s             

18:44:10 (73.35 KB/s) - `ucspi-tcp-0.88.tar.gz' saved [53,019/53,019]

[root@juno tcpserver]#
  • ダウンロードしたファイルを確認する.
[root@juno tcpserver]# ls -la
total 64
drwxr-xr-x    2 root     root         4096 Oct 12 18:44 .
drwxrwxr-x    6 shinnai  shinnai      4096 Oct 12 18:43 ..
-rw-r--r--    1 root     root        53019 Mar 19  2000 ucspi-tcp-0.88.tar.gz
[root@juno tcpserver]#
  • アーカイブを展開する.
[root@juno tcpserver]# tar zxf ucspi-tcp-0.88.tar.gz 
[root@juno tcpserver]#
  • 展開したディレクトリを,所定の場所に移動する.
[root@juno tcpserver]# mv ucspi-tcp-0.88 /usr/local/src/.
[root@juno tcpserver]#
  • 所定の場所というのは,/usr/local/src以下.
[root@juno tcpserver]# cd /usr/local/src/ucspi-tcp-0.88
[root@juno ucspi-tcp-0.88]# 
  • ディレクトリの中身をみてみる.
[root@juno ucspi-tcp-0.88]# ls
CHANGES        dns_packet.c     open_write.c     stralloc_opyb.c
FILES          dns_random.c     openreadclose.c  stralloc_opys.c
Makefile       dns_rcip.c       openreadclose.h  stralloc_pend.c
README         dns_rcrw.c       pathexec.h       strerr.h
SYSDEPS        dns_resolve.c    pathexec_env.c   strerr_die.c
TARGETS        dns_sortip.c     pathexec_run.c   strerr_sys.c
TODO           dns_transmit.c   prot.c           subgetopt.c
VERSION        dns_txt.c        prot.h           subgetopt.h
addcr.c        env.c            rblsmtpd.c       tai.h
alloc.c        env.h            readclose.c      tai_pack.c
alloc.h        error.c          readclose.h      taia.h
alloc_re.c     error.h          readwrite.h      taia_add.c
argv0.c        error_str.c      recordio.c       taia_approx.c
auto-str.c     exit.h           remoteinfo.c     taia_frac.c
auto_home.h    fd.h             remoteinfo.h     taia_less.c
buffer.c       fd_copy.c        rts.exp          taia_now.c
buffer.h       fd_move.c        rts.sh           taia_pack.c
buffer_0.c     find-systype.sh  rts.tests        taia_sub.c
buffer_1.c     finger@.sh       rules.c          taia_uint.c
buffer_2.c     fixcrio.c        rules.h          tcpcat.sh
buffer_copy.c  fmt.h            scan.h           tcpclient.c
buffer_get.c   fmt_ulong.c      scan_ulong.c     tcprules.c
buffer_put.c   fork.h1          seek.h           tcprulescheck.c
byte.h         fork.h2          seek_set.c       tcpserver.c
byte_chr.c     gen_alloc.h      select.h1        timeoutconn.c
byte_copy.c    gen_allocdefs.h  select.h2        timeoutconn.h
byte_cr.c      getln.c          sgetopt.c        trycpp.c
byte_diff.c    getln.h          sgetopt.h        trylsock.c
byte_rchr.c    getln2.c         sig.c            trypoll.c
byte_zero.c    hassgact.h1      sig.h            trysgact.c
case.h         hassgact.h2      sig_block.c      trysgprm.c
case_diffb.c   hassgprm.h1      sig_catch.c      tryshsgr.c
case_diffs.c   hassgprm.h2      sig_pause.c      trysysel.c
cdb.c          hasshsgr.h1      socket.h         tryulong32.c
cdb.h          hasshsgr.h2      socket_accept.c  tryulong64.c
cdb_hash.c     haswaitp.h1      socket_bind.c    tryvfork.c
cdb_make.c     haswaitp.h2      socket_conn.c    trywaitp.c
cdb_make.h     hier.c           socket_delay.c   uint16.h
chkshsgr.c     http@.sh         socket_listen.c  uint16_pack.c
choose.sh      install.c        socket_local.c   uint16_unpack.c
commands.c     instcheck.c      socket_opts.c    uint32.h1
commands.h     iopause.c        socket_remote.c  uint32.h2
conf-cc        iopause.h1       socket_tcp.c     uint32_pack.c
conf-home      iopause.h2       socket_udp.c     uint32_unpack.c
conf-ld        ip4.h            str.h            uint64.h1
date@.sh       ip4_fmt.c        str_chr.c        uint64.h2
delcr.c        ip4_scan.c       str_diff.c       wait.h
dns.h          mconnect-io.c    str_len.c        wait_nohang.c
dns_dfd.c      mconnect.sh      str_start.c      wait_pid.c
dns_domain.c   ndelay.h         stralloc.h       warn-auto.sh
dns_dtda.c     ndelay_off.c     stralloc_cat.c   warn-shsgr
dns_ip.c       ndelay_on.c      stralloc_catb.c  who@.sh
dns_ipq.c      open.h           stralloc_cats.c  x86cpuid.c
dns_name.c     open_read.c      stralloc_copy.c
dns_nd.c       open_trunc.c     stralloc_eady.c
[root@juno ucspi-tcp-0.88]#  
  • makeする.
[root@juno ucspi-tcp-0.88]# make
( 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 tryulong32.c && ./load tryulong32 && ¥
./tryulong32 ) >/dev/null 2>&1 ¥
&& cat uint32.h2 || cat uint32.h1 ) > uint32.h
rm -f tryulong32.o tryulong32
./compile rules.c
./compile remoteinfo.c
./compile timeoutconn.c
( cat warn-auto.sh; ¥
echo CC=¥'`head -1 conf-cc`¥'; ¥
echo LD=¥'`head -1 conf-ld`¥'; ¥
cat find-systype.sh; ¥
) | sh > systype
( cat warn-auto.sh; ¥
echo 'main="$1"; shift'; ¥
echo 'rm -f "$main"'; ¥
echo 'ar cr "$main" ${1+"$@"}'; ¥
case "`cat systype`" in ¥
sunos-5.*) ;; ¥
unix_sv*) ;; ¥
irix64-*) ;; ¥
irix-*) ;; ¥
dgux-*) ;; ¥
hp-ux-*) ;; ¥
sco*) ;; ¥
*) echo 'ranlib "$main"' ;; ¥
esac ¥
) > makelib
chmod 755 makelib
./compile cdb.c
./compile cdb_hash.c
./compile cdb_make.c
./makelib cdb.a cdb.o cdb_hash.o cdb_make.o
./compile dns_dfd.c
./compile dns_domain.c
./compile dns_dtda.c
./compile dns_ip.c
./compile dns_ipq.c
./compile dns_name.c
./compile dns_nd.c
./compile dns_packet.c
./compile dns_random.c
./compile dns_rcip.c
./compile dns_rcrw.c
./compile dns_resolve.c
./compile dns_sortip.c
./compile dns_transmit.c
./compile dns_txt.c
./makelib dns.a dns_dfd.o dns_domain.o dns_dtda.o dns_ip.o ¥
dns_ipq.o dns_name.o dns_nd.o dns_packet.o dns_random.o ¥
dns_rcip.o dns_rcrw.o dns_resolve.o dns_sortip.o ¥
dns_transmit.o dns_txt.o
./choose c trysysel select.h1 select.h2 > select.h
./compile iopause.c
./compile tai_pack.c
./compile taia_add.c
./compile taia_approx.c
./compile taia_frac.c
./compile taia_less.c
./compile taia_now.c
./compile taia_pack.c
./compile taia_sub.c
./compile taia_uint.c
./makelib time.a iopause.o tai_pack.o taia_add.o ¥
taia_approx.o taia_frac.o taia_less.o taia_now.o ¥
taia_pack.o taia_sub.o taia_uint.o
./compile alloc.c
./compile alloc_re.c
./compile buffer.c
./compile buffer_0.c
./compile buffer_1.c
./compile buffer_2.c
./compile buffer_copy.c
./compile buffer_get.c
./compile buffer_put.c
./compile env.c
./compile error.c
./compile error_str.c
./compile fd_copy.c
./compile fd_move.c
./compile getln.c
./compile getln2.c
./compile ndelay_off.c
./compile ndelay_on.c
./compile open_read.c
./compile open_trunc.c
./compile open_write.c
./compile openreadclose.c
./compile pathexec_env.c
./compile pathexec_run.c
./compile chkshsgr.c
./load chkshsgr 
./chkshsgr || ( cat warn-shsgr; exit 1 )
./choose clr tryshsgr hasshsgr.h1 hasshsgr.h2 > hasshsgr.h
./compile prot.c
./compile readclose.c
./compile seek_set.c
./compile sgetopt.c
./compile sig.c
./choose cl trysgprm hassgprm.h1 hassgprm.h2 > hassgprm.h
./compile sig_block.c
./choose cl trysgact hassgact.h1 hassgact.h2 > hassgact.h
./compile sig_catch.c
./compile sig_pause.c
./compile socket_accept.c
./compile socket_bind.c
./compile socket_conn.c
./compile socket_delay.c
./compile socket_listen.c
./compile socket_local.c
./compile socket_opts.c
./compile socket_remote.c
./compile socket_tcp.c
./compile socket_udp.c
./compile stralloc_cat.c
./compile stralloc_catb.c
./compile stralloc_cats.c
./compile stralloc_copy.c
./compile stralloc_eady.c
./compile stralloc_opyb.c
./compile stralloc_opys.c
./compile stralloc_pend.c
./compile strerr_die.c
./compile strerr_sys.c
./compile subgetopt.c
./choose cl trywaitp haswaitp.h1 haswaitp.h2 > haswaitp.h
./compile wait_nohang.c
./compile wait_pid.c
./makelib unix.a alloc.o alloc_re.o buffer.o buffer_0.o ¥
buffer_1.o buffer_2.o buffer_copy.o buffer_get.o ¥
buffer_put.o env.o error.o error_str.o fd_copy.o fd_move.o ¥
getln.o getln2.o ndelay_off.o ndelay_on.o open_read.o ¥
open_trunc.o open_write.o openreadclose.o pathexec_env.o ¥
pathexec_run.o prot.o readclose.o seek_set.o sgetopt.o ¥
sig.o sig_block.o sig_catch.o sig_pause.o socket_accept.o ¥
socket_bind.o socket_conn.o socket_delay.o socket_listen.o ¥
socket_local.o socket_opts.o socket_remote.o socket_tcp.o ¥
socket_udp.o stralloc_cat.o stralloc_catb.o stralloc_cats.o ¥
stralloc_copy.o stralloc_eady.o stralloc_opyb.o ¥
stralloc_opys.o stralloc_pend.o strerr_die.o strerr_sys.o ¥
subgetopt.o wait_nohang.o wait_pid.o
./compile byte_chr.c
./compile byte_copy.c
./compile byte_cr.c
./compile byte_diff.c
./compile byte_rchr.c
./compile byte_zero.c
./compile case_diffb.c
./compile case_diffs.c
./compile fmt_ulong.c
./compile ip4_fmt.c
./compile ip4_scan.c
./compile scan_ulong.c
./compile str_chr.c
./compile str_diff.c
./compile str_len.c
./compile str_start.c
./compile uint16_pack.c
./compile uint16_unpack.c
./compile uint32_pack.c
./compile uint32_unpack.c
./makelib byte.a byte_chr.o byte_copy.o byte_cr.o ¥
byte_diff.o byte_rchr.o byte_zero.o case_diffb.o ¥
case_diffs.o fmt_ulong.o ip4_fmt.o ip4_scan.o scan_ulong.o ¥
str_chr.o str_diff.o str_len.o str_start.o uint16_pack.o ¥
uint16_unpack.o uint32_pack.o uint32_unpack.o
( ( ./compile trylsock.c && ¥
./load trylsock -lsocket -lnsl ) >/dev/null 2>&1 ¥
&& echo -lsocket -lnsl || exit 0 ) > socket.lib
rm -f trylsock.o trylsock
./load tcpserver rules.o remoteinfo.o timeoutconn.o cdb.a ¥
dns.a time.a unix.a byte.a  `cat socket.lib`
tcpserver.o(.text+0x55f): In function `doit':
: undefined reference to `errno'
remoteinfo.o(.text+0x63): In function `mywrite':
: undefined reference to `errno'
remoteinfo.o(.text+0xe7): In function `myread':
: undefined reference to `errno'
timeoutconn.o(.text+0x41): In function `timeoutconn':
: undefined reference to `errno'
timeoutconn.o(.text+0xc7): In function `timeoutconn':
: undefined reference to `errno'
cdb.a(cdb.o)(.text+0xce): more undefined references to `errno' follow
collect2: ld returned 1 exit status
make: *** [tcpserver] Error 1
  • エラーになっている.
  • これはqmailの時と一緒なので,ヘッダファイルを次のように書き換える.
変更前
[root@juno ucspi-tcp-0.88]# head -n 10 error.h 
#ifndef ERROR_H
#define ERROR_H

extern int errno;

extern int error_intr;
extern int error_nomem;
extern int error_noent;
extern int error_txtbsy;
extern int error_io;
[root@juno ucspi-tcp-0.88]#  
変更後
[root@juno ucspi-tcp-0.88]# head -n 10 error.h
#ifndef ERROR_H
#define ERROR_H

#include <errno.h>

extern int error_intr;
extern int error_nomem;
extern int error_noent;
extern int error_txtbsy;
extern int error_io;
[root@juno ucspi-tcp-0.88]#  
  • 再度makeする.
[root@juno ucspi-tcp-0.88]# make
./compile tcpserver.c
./compile remoteinfo.c
./compile timeoutconn.c
./compile cdb.c
./compile cdb_make.c
./makelib cdb.a cdb.o cdb_hash.o cdb_make.o
./compile dns_dfd.c
./compile dns_domain.c
./compile dns_packet.c
./compile dns_transmit.c
./makelib dns.a dns_dfd.o dns_domain.o dns_dtda.o dns_ip.o ¥
dns_ipq.o dns_name.o dns_nd.o dns_packet.o dns_random.o ¥
dns_rcip.o dns_rcrw.o dns_resolve.o dns_sortip.o ¥
dns_transmit.o dns_txt.o
./compile alloc.c
./compile buffer_get.c
./compile buffer_put.c
./compile error.c
./compile error_str.c
./compile openreadclose.c
./compile pathexec_run.c
./compile readclose.c
./compile strerr_sys.c
./compile wait_pid.c
./makelib unix.a alloc.o alloc_re.o buffer.o buffer_0.o ¥
buffer_1.o buffer_2.o buffer_copy.o buffer_get.o ¥
buffer_put.o env.o error.o error_str.o fd_copy.o fd_move.o ¥
getln.o getln2.o ndelay_off.o ndelay_on.o open_read.o ¥
open_trunc.o open_write.o openreadclose.o pathexec_env.o ¥
pathexec_run.o prot.o readclose.o seek_set.o sgetopt.o ¥
sig.o sig_block.o sig_catch.o sig_pause.o socket_accept.o ¥
socket_bind.o socket_conn.o socket_delay.o socket_listen.o ¥
socket_local.o socket_opts.o socket_remote.o socket_tcp.o ¥
socket_udp.o stralloc_cat.o stralloc_catb.o stralloc_cats.o ¥
stralloc_copy.o stralloc_eady.o stralloc_opyb.o ¥
stralloc_opys.o stralloc_pend.o strerr_die.o strerr_sys.o ¥
subgetopt.o wait_nohang.o wait_pid.o
./load tcpserver rules.o remoteinfo.o timeoutconn.o cdb.a ¥
dns.a time.a unix.a byte.a  `cat socket.lib`
./compile tcprules.c
./load tcprules cdb.a unix.a byte.a 
./compile tcprulescheck.c
./load tcprulescheck rules.o cdb.a unix.a byte.a 
./compile argv0.c
./load argv0 unix.a byte.a 
./compile recordio.c
./load recordio time.a unix.a byte.a 
./compile tcpclient.c
./load tcpclient remoteinfo.o timeoutconn.o dns.a time.a ¥
unix.a byte.a  `cat socket.lib`
cat warn-auto.sh who@.sh ¥
| sed s}HOME}"`head -1 conf-home`"}g ¥
> who@
chmod 755 who@
cat warn-auto.sh date@.sh ¥
| sed s}HOME}"`head -1 conf-home`"}g ¥
> date@
chmod 755 date@
cat warn-auto.sh finger@.sh ¥
| sed s}HOME}"`head -1 conf-home`"}g ¥
> finger@
chmod 755 finger@
cat warn-auto.sh http@.sh ¥
| sed s}HOME}"`head -1 conf-home`"}g ¥
> http@
chmod 755 http@
cat warn-auto.sh tcpcat.sh ¥
| sed s}HOME}"`head -1 conf-home`"}g ¥
> tcpcat
chmod 755 tcpcat
cat warn-auto.sh mconnect.sh ¥
| sed s}HOME}"`head -1 conf-home`"}g ¥
> mconnect
chmod 755 mconnect
./choose cl tryvfork fork.h1 fork.h2 > fork.h
./compile mconnect-io.c
./load mconnect-io unix.a byte.a 
./compile addcr.c
./load addcr unix.a byte.a 
./compile delcr.c
./load delcr unix.a byte.a 
./compile fixcrio.c
./load fixcrio time.a unix.a byte.a 
./compile rblsmtpd.c
./compile commands.c
./load rblsmtpd commands.o dns.a time.a unix.a byte.a  ¥
`cat socket.lib`
cat warn-auto.sh rts.sh ¥
| sed s}HOME}"`head -1 conf-home`"}g ¥
> rts
chmod 755 rts
./compile install.c
./compile hier.c
./compile auto-str.c
./load auto-str unix.a byte.a 
./auto-str auto_home `head -1 conf-home` > auto_home.c
./compile auto_home.c
./load install hier.o auto_home.o unix.a byte.a 
./compile instcheck.c
./load instcheck hier.o auto_home.o unix.a byte.a 
[root@juno ucspi-tcp-0.88]# 
  • エラーは無い模様.
  • コンパイル完了後に,モジュールがmakeされているかを確認する.
[root@juno ucspi-tcp-0.88]# ls -la tcpserver
-rwxr-xr-x 1 root root 39856 Oct 12 19:16 tcpserver
[root@juno ucspi-tcp-0.88]#
  • モジュールはできている模様.
  • インストールを行う.
[root@juno ucspi-tcp-0.88]# make setup check
./install
./instcheck
[root@juno ucspi-tcp-0.88]#  
  • エラーはなく,終了した模様
  • インストールしたモジュールを確認する.
[root@juno ucspi-tcp-0.88]# ls -la /usr/local/bin/tcp*
-rwxr-xr-x    1 root     root          143 Oct 12 19:17 /usr/local/bin/tcpcat
-rwxr-xr-x    1 root     root        35144 Oct 12 19:17 /usr/local/bin/tcpclient
-rwxr-xr-x    1 root     root        15968 Oct 12 19:17 /usr/local/bin/tcprules
-rwxr-xr-x    1 root     root        15592 Oct 12 19:17 /usr/local/bin/tcprulescheck
-rwxr-xr-x    1 root     root        39856 Oct 12 19:17 /usr/local/bin/tcpserver
[root@juno ucspi-tcp-0.88]#  
  • インストールされていることが確認できた.

3.SMTPサービスを設定する

  • qmailに含まれる,qmail-smtpdというプログラムは,SMTP経由で外部ホストからメールを受信する.
  • 今回,このtcpserverによって,qmail-smtpdをコントロールする設定とする.
  • まずは,現在稼働しているqmailを停止する.
[root@juno ucspi-tcp-0.88]# ps -ef | grep qmail
qmails   30689     1  0 17:16 ?        00:00:00 qmail-send
qmaill   30690 30689  0 17:16 ?        00:00:00 splogger qmail
root     30691 30689  0 17:16 ?        00:00:00 qmail-lspawn ./Maildir/
qmailr   30692 30689  0 17:16 ?        00:00:00 qmail-rspawn
qmailq   30693 30689  0 17:16 ?        00:00:00 qmail-clean
root      4935  1012  0 19:20 pts/0    00:00:00 grep qmail
[root@juno ucspi-tcp-0.88]# kill 30689
[root@juno ucspi-tcp-0.88]# ps -ef | grep qmail
root      4937  1012  0 19:20 pts/0    00:00:00 grep qmail
[root@juno ucspi-tcp-0.88]#  
  • 設定ファイルを格納するディレクトリを作成する.
[root@juno ucspi-tcp-0.88]# mkdir /etc/tcpserver
[root@juno ucspi-tcp-0.88]# 
  • ディレクトリを移動する.
[root@juno ucspi-tcp-0.88]# cd /etc/tcpserver
[root@juno tcpserver]# 
  • リレー設定のルールファイルを作成する.
[root@juno tcpserver]# cat smtpd_rules 
127.0.0.1:allow,RELAYCLIENT=""
juno.ujp.jp:allow,RELAYCLIENT=""
[root@juno tcpserver]#  
  • この設定では,ローカルからの受信と,指定したドメインからの受信を受け付ける事としている.
  • ルールファイルのアクセス権を設定する.
[root@juno tcpserver]# chmod 644 smtpd_rules 
[root@juno tcpserver]# ls -la 
total 16
drwxr-xr-x    2 root     root         4096 Oct 12 19:26 .
drwxr-xr-x   83 root     root         8192 Oct 12 19:22 ..
-rw-r--r--    1 root     root           67 Oct 12 19:26 smtpd_rules
[root@juno tcpserver]# 
  • 作成したルールファイルを,cdb化する.
    • cdbとは,tcpserverおよびqmailの作者が作成した簡易データベース.
[root@juno tcpserver]# /usr/local/bin/tcprules smtpd_rules.cdb ¥
> smtpd_rules.tmp < smtpd_rules 
[root@juno tcpserver]# 
  • 作成されたファイルを確認する.
[root@juno tcpserver]# ls -la
total 20
drwxr-xr-x    2 root     root         4096 Oct 12 19:29 .
drwxr-xr-x   83 root     root         8192 Oct 12 19:22 ..
-rw-r--r--    1 root     root           72 Oct 12 19:27 smtpd_rules
-rw-r--r--    1 root     root         2152 Oct 12 19:29 smtpd_rules.cdb
[root@juno tcpserver]#  
  • ファイルが作成されていることが確認できた.

4.qmail-smtpdの起動スクリプトの作成を行う

  • qmail-smtpdは,qmailのインストールの際に作成したOS上のqmaildユーザを利用する.
  • 起動スクリプトの中で,このqmaildユーザのユーザID&グループIDを利用する.
  • まずは調べる.
[root@juno tcpserver]# id qmaild
uid=712(qmaild) gid=710(nofiles) groups=503(nofiles)
[root@juno tcpserver]#  
  • この場合は,uidは504,gidが503ということが確認できた.
  • 次のようなシェルスクリプトを作成する.
[root@juno tcpserver]# cat /etc/rc.d/init.d/qmail-smptd
#!/bin/sh

echo -n 'qmail-smtpd starting.'
/usr/local/bin/tcpserver -x /etc/tcpserver/smtpd_rules.cdb  -v -u 712 -g 710 0 smtp 
/var/qmail//bin/qmail-smtpd 2>&1 /var/qmail/bin/splogger smtpd 3 & ←一行でつなげる
[root@juno tcpserver]#  
  • 作成したスクリプトに実行権限を設定する.
[root@juno tcpserver]# chmod +x /etc/rc.d/init.d/qmail-smptd
[root@juno tcpserver]# ls -la /etc/rc.d/init.d/qmail-smptd
-rwxr-xr-x    1 root     root          198 Oct 12 19:47 /etc/rc.d/init.d/qmail-smptd
[root@juno tcpserver]#  
  • 作成したスクリプトを使って,起動する.
[root@juno tcpserver]# /etc/rc.d/init.d/qmail-smptd
qmail-smtpd starting.tcpserver: status: 0/40
[root@juno tcpserver]#
  • プロセスを確認する.
[root@juno tcpserver]# ps -ef | grep qmail
qmaild    4978     1  0 19:50 pts/0    00:00:00 /usr/local/bin/tcpserver -x /etc/
tcpserver/smtpd_rules.cdb -v -u 504 -g 503 0 smtp /var/qmail//bin/qmail-smtpd
 /var/qmail/bin/splogger smtpd 3
root      4980  1012  0 19:50 pts/0    00:00:00 grep qmail
[root@juno tcpserver]# 
  • 他のqmailのプロセスも起動しておく.
[root@juno tcpserver]# /var/qmail/rc &
[1] 4981
[root@juno tcpserver]#
  • プロセスを確認する.
[root@juno tcpserver]# ps -ef | grep qmail
qmaild    4978     1  0 19:50 pts/0    00:00:00 /usr/local/bin/tcpserver -x /etc/
tcpserver/smtpd_rules.cdb -v -u 712 -g 710 0 smtp /var/qmail//bin/qmail-smtpd
 /var/qmail/bin/splogger smtpd 3
qmails    4981  1012  0 19:51 pts/0    00:00:00 qmail-send
qmaill    4982  4981  0 19:51 pts/0    00:00:00 splogger qmail
root      4983  4981  0 19:51 pts/0    00:00:00 qmail-lspawn ./Maildir/
qmailr    4984  4981  0 19:51 pts/0    00:00:00 qmail-rspawn
qmailq    4985  4981  0 19:51 pts/0    00:00:00 qmail-clean
root      4987  1012  0 19:51 pts/0    00:00:00 grep qmail
[root@juno tcpserver]# 

5.この後

  • ここまで設定できたら,外部のメールサーバから,今回構築したメールサーバに対してメールを送信し,テストを行う.

6.tcpserverのオプション

  • tcpserverを起動するときのオプションを指定する.
オプション 意味
-q
エラーメッセージ出力
-Q
エラーメッセージ出力しない(デフォルト設定)
-v
全メッセージ出力
-p
パラノイドを行う. リモートホスト名を調べ,IPアドレスを検索し,TCPREMOTEIPに一致するか確認する.
-P
パラノイドを行わない(デフォルト設定)
-h
リモートホスト名を調べる.(デフォルト設定)
-H
リモートホスト名を調べない
-r
IDENTを行いTCPREMOTEINFOを設定する.(デフォルト設定)
-R
IDENTを行わない.
-c nn
最大同時接続数を設定する.(デフォルト設定は40)
-x
ルールデータベースファイル名.
-B
接続時にバナーを出力.意味わからん.
-u
起動時のUIDを設定.
-g
起動時のGIDを設定.
-l xxxxx
ローカルホスト名の調査を辞めxxxxxをTCPLOCALHOSTにセットする.
-t nn
タイムアウト時間(デフォルト設定は26)
  • -Hや-cオプションを設定することによって,パフォーマンス向上などが見込める場合がある.


広告スペース
Google