[Memo2021][ITPASS]tcpserver のインストールと設定

tcpserver のインストールと設定

inetd からの qmail 起動を停止

テストのために記述していた /etc/inetd.conf の smtpで始まる行をコメントアウトした. そして, inetdを再起動した.

# /etc/init.d/openbsd-inetd restart

smtp ポートを listen しているプログラムがないことを netstat -l で確認した.

# netstat -l | grep smtp

listen しているプログラムがある場合は以下のように表示された.

tcp        0      0 *:smtp                  *:*                     LISTEN

POP

ソース・パッチの取得と展開, パッチ当てとmake

ソース, パッチの取得および展開を行った. また, 取得したパッチを当ててビルドした. 参考: <URL:http://cyberam.dip.jp/linux_server/mail/qmail_main.html>

# wget http://sourceforge.net/projects/checkpw/files/checkpw/checkpw-1.03/checkpw-1.03.tar.gz
# tar zxvf checkpw-1.03.tar.gz
# cd checkpw-1.03/
# make 
# make setup check

#wget http://www.emaillab.org/djb/tools/ucspi-tcp/ucspi-tcp-0.88.tar.gz
# wget http://qmail.org/moni.csi.hu/pub/glibc-2.3.1/ucspi-tcp-0.88.errno.patch
 # tar xfz ucspi-tcp-0.88.tar.gz
 # cd ucspi-tcp-0.88
 # patch  -p1 < ../ucspi-tcp-0.88.errno.patch

 # make
 # make setup check

を実行し, 最後に再起動した.

# reboot

tcpserver からの呼び出し

tcpserver からpop を呼び出すためには起動スクリプト /etc/init.d/qmail のpop の行のコメントアウトを外した. 具体的には以下の通り.

# For POP3      
sh -c "/sbin/start-stop-daemon --start --quiet --user root \
--pidfile /var/run/tcpserver_pop3d.pid --make-pidfile \
--exec /usr/local/bin/tcpserver -- -v -u 0 -g 0 0 pop3 \
/var/qmail/bin/qmail-popup \
tako-itpass.scitec.kobe-u.ac.jp /bin/checkapoppw \
/var/qmail/bin/qmail-pop3d Maildir 2>&1 \
| /var/qmail/bin/splogger pop3d 3 > /dev/null 2>&1 &"

stop の部分のコメントアウトも外した.

/sbin/start-stop-daemon --user root --stop --quiet --oknodo --pidfile /var/run/tcpserver_pop3d.pid --exec /usr/local/bin/tcpserver # pop3

qmail を再起動した. restart だとうまくいかなかったので start に変更した.

# /etc/init.d/qmail start

動作の確認を行った. (pop3 のプロセスがあれば問題なく起動している)

# systemctl daemon-reload
# ps aux | grep qmail
# service qmail status

~/Maildir/ への配送

pop によるメールの読み出しは maildir 形式を用いた. /etc/profile に次の 2 行を加えた.

MAILDIR="$HOME/Maildir/"
export MAILDIR

/etc/csh.cshrc に次の 1 行を加えた.

setenv MAILDIR $HOME/Maildir/

次に配送テストのために一般ユーザで次の設定を行った. maildirmake のスクリプトで Maildir を作成した.

$ maildirmake ~/Maildir

次に ~/Maildir への配送を qmail に指示した. (.qmail へ配送先ディレクトリを記述した).

$ echo ./Maildir/ >> ~/.qmail
$ chmod 600 ~/.qmail

~/Maildir/.password ファイルを作った. APOPPASSWORDの部分は 自分で考えた適切なパスワードに変更した.

$ echo 'APOPPASSWORD' > ~/Maildir/.password 
$ chmod 600 ~/Maildir/.password

配送テストおよび確認

配送テストを行った. まず自分に送ってみた. そのために以下のコマンドを実行した.

$ echo to: chikuwaXX | /var/qmail/bin/qmail-inject

ここで, exim4 に関するパッケージが入っていたので, 以下を入力し, それらをアンインストールした.

# apt remove --purge exim4-base exim4-config exim4-daemon-light

SMTP

tcpserver の設定

==============================

(2020/11/09 高橋追記) この部分は実験的です. 上手く行かなければ別の手を考える.

smtp 中継(smtpを使ったメールの送信)を許可するホスト (固定 IP アドレスを持った計算機) を指定する. ここでは ika を使うことにする.

# vi /etc/tcp.smtp

具体的には以下の通り. (XXX.XXX.XXX.XXX には ika の IP アドレス 133.30.109.22 を書くこと.)

XXX.XXX.XXX.XXX:allow,RELAYCLIENT=""
127.:allow,RELAYCLIENT=""

次に以下のコマンドを実行した. tcp.smtp を元に /etc/tcp.smtp.cdb ができる.

# /etc/init.d/qmail cdb 

起動スクリプト編集

起動スクリプトを編集(コメントアウト)した.

# vi /etc/init.d/qmail 

具体的には以下の通り.

start)
...
# For SMTP
sh -c " /sbin/start-stop-daemon --start --quiet --user qmaild \
--pidfile /var/run/tcpserver_smtpd.pid --make-pidfile \
--exec /usr/local/bin/tcpserver -- -HRv -u ` id -u qmaild ` \
-g ` id -g qmaild ` -x /etc/tcp.smtp.cdb 0 smtp \
/usr/local/bin/rblsmtpd -r bl.spamcop.net \
/var/qmail/bin/qmail-smtpd 2>&1 \
| /var/qmail/bin/splogger smtpd 3 > /dev/null 2>&1 &"
...
stop)
/sbin/start-stop-daemon --user qmaild --stop --quiet --oknodo --pidfile /var/run/tcpserver_smtpd.pid --exec /usr/local/bin/tcpserver # smtp

tcpserver 起動確認

qmail を start して tcpserver の起動を確認した.

# /etc/init.d/qmail start 
# systemctl daemon-reload
# service qmail status

==============================

(2020/11/09 高橋追記) この部分は実験的です. 上手く行かなければ別の手を考える.

先ほど /etc/tcp.smtp に IP アドレスを書いた ika から, smtp サーバを tako に設定し, tako 以外の任意のサーバにあるアカウント宛のメールを送信する. ここでは, コマンドラインで SMTP サーバを指定してメールを送信できる s-nail を用いる.

以下の作業は ika での作業 ("ika$" は ika でのプロンプトのつもり).

ika に s-nail がインストールされていることを確認した.

ika$ which s-nail
/usr/bin/s-nail

s-nail でのメールの送信テスト. XXX@XXX.XXXX.XXXX の宛先アドレスは itpass サーバ (ika) 以外で自分がメールを受け取れるアドレスにすること.

ika$ echo "This is a test mail." | s-nail -s "test mail" XXX@XXX.XXXX.XXXX

この例では SMTP サーバを指定していない. 次が SMTP サーバを指定して送信する場合.

ika$ echo "This is a test mail." | s-nail -S smtp=smtp://133.30.109.21:25
-s "test mail" XXX@XXX.XXXX.XXXX

tako の /var/log/syslog にメール送信のログが残っていることを確認する.

# cat /var/log/syslog

下のようなログが残った.

Nov 15 10:22:59 tako-itpass smtpd: 1636939379.742619 tcpserver: status: 1/40
Nov 15 10:22:59 tako-itpass smtpd: 1636939379.742959 tcpserver: pid 1117 from 133.30.109.22
Nov 15 10:22:59 tako-itpass smtpd: 1636939379.743914 tcpserver: ok 1117 tako-itpass.scitec.kobe-u.ac.jp:133.30.109.21:25 :133.30.109.22::53360
Nov 15 10:22:59 tako-itpass qmail: 1636939379.813657 new msg 19925822
Nov 15 10:22:59 tako-itpass qmail: 1636939379.813716 info msg 19925822: bytes 480 from <kurokih@ika-itpass.scitec.kobe-u.ac.jp> qp 1118 uid 118
Nov 15 10:22:59 tako-itpass smtpd: 1636939379.814445 tcpserver: end 1117 status 0
Nov 15 10:22:59 tako-itpass smtpd: 1636939379.814481 tcpserver: status: 0/40
Nov 15 10:22:59 tako-itpass qmail: 1636939379.864102 starting delivery 2: msg 19925822 to remote 1823414s@stu.kobe-u.ac.jp
Nov 15 10:22:59 tako-itpass qmail: 1636939379.864150 status: local 0/10 remote 1/20
Nov 15 10:22:59 tako-itpass qmail: 1636939379.877905 delivery 2: success: 133.30.30.62_accepted_message./Remote_host_said:_250_2.0.0_Ok:_queued_as_D52E810001606/
Nov 15 10:22:59 tako-itpass qmail: 1636939379.878093 status: local 0/10 remote 0/20
Nov 15 10:22:59 tako-itpass qmail: 1636939379.878134 end msg 19925822

参考資料

[[ITPASS2018]2018年度サーバ構築マニュアル へ戻る]