[ITPASS2020]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.94.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:587 -s "test mail" XXX@XXX.XXXX.XXXX
tako の /var/log/syslog にメール送信のログが残っていることを確認する.
# cat /var/log/syslog
下のようなログが残る.
Nov 18 14:18:39 tako-itpass pop3d: 1605676719.518097 tcpserver: status: 1/40 Nov 18 14:18:39 tako-itpass pop3d: 1605676719.518393 tcpserver: pid 2831 from 150.84.238.77 Nov 18 14:19:05 tako-itpass pop3d: 1605676745.565452 tcpserver: ok 2831 tako-itpass.scitec.kobe-u.ac.jp:133.30.109.21:110 wifi238-77.wlan.kobe- u.ac.jp:150.84.238.77::32176 Nov 18 14:19:05 tako-itpass pop3d: 1605676745.580888 tcpserver: end 2831 status 256 Nov 18 14:19:05 tako-itpass pop3d: 1605676745.580927 tcpserver: status: 0/40
Keyword(s):
References:[[ITPASS2020]2020年度サーバ構築マニュアル]