実践で学ぶ、一歩進んだサーバ構築・運用術

第 4 回 UUCP の活用


UUCP over TCP/IP

一般に遠距離だと電話代が高くなります。 UUCP だと短時間の接続で済むため, よほど大量のメールやニュースを送るのでなければ, 多少遠距離でもあまり問題にはならないのですが, それでも安ければそれに越したことはありません。

インターネットはデジタル・データなら何でも送れますから, 通信路の途中をインターネットで置き換えて通信料を節約しようというのが 最近の流行りです。 インターネット電話が有名ですし, 企業間ネットワークをインターネット上に構築する, いわゆるエクストラネットも盛んです。

当然, UUCP もインターネット上で利用することができます。 これを「UUCP over TCP/IP」と呼び, インターネットに接続しているホスト同士で UUCP 接続します。 設定方法は簡単で, 発呼側は相手ノードの電話番号を指定する代りにホスト名を指定するだけです。 具体的には,sys ファイルの「port」行で, ACU の代わりに TCP を指定し, 「address」行で TCP/IP のホスト名を指定します(図 21)。


system          gcd
alias           gcd.org
port            TCP
address         uucp.gcd.org

図 21 UUCP over TCP/IP を利用する場合の sys ファイルの設定例

さらに port ファイルで, ポート「TCP」の設定をします(図 22)。


port        TCP
type        tcp

図 22 UUCP over TCP/IP を利用する場合の port ファイルの設定例

発呼側の設定はこれだけです。 図 18 と同様に, cu コマンドを使って動作確認してください。 ダイヤルアップ環境であれば, まず最寄りのプロバイダのアクセス・ポイントへ PPP 接続する必要があります。 アカウント ID とパスワードを手で入力して, 「Shere=相手ノード名」が出れば成功です。 あとは uucico を実行するだけです。 電話回線だけで UUCP 接続する場合に比べ, アクセス・ポイントまでの市内通話料だけで済みます。

着呼側は, TCP/IP のポート 540 番に接続があったら uucico を実行するように tcpserver* を実行しておきます(図 23)。

# tcpserver 0 uucp /usr/libexec/uucp/uucico -l
図 23 ポート 540 番にアクセスがあれば uucico を起動

tcpserver を使う場合の設定例です。

図 24 のように telnet コマンドを使って動作確認をします。 ただし, このままだとインターネット上をパスワードが平文で流れてしまいます。 UUCP 接続のたびに同じパスワードが流れますから, それだけ盗み読みされる危険が高いと言えるでしょう。

% telnet uucp.gcd.org 540
Trying 210.145.125.162...
Connected to asao.gcd.org.
Escape character is '^]'.
login: Uozenji
Password:h=7kjiZe
Shere=gcd
図 24 telnet コマンドを使った動作確認

「Shere=相手ノード名」の表示が行われるかどうかを確認します。

拙作 stone* を使って UUCP 接続全体を暗号化してしまえば安心ですが, 双方のホストに stone をインストールする必要があり少々面倒です。 この方法については stone の解説(次号予定)をするとき一緒に説明するとして, 今回は次善の策として, 特定のプロバイダから, 特定のノードからの UUCP 接続のみを受け付ける方法を紹介します。

つまり, パスワードの盗み読みに成功したとしても, 正規ユーザーになりすまして UUCP 接続するには, 正規ユーザーと同じプロバイダ経由でアクセスする必要があります。 世界中のどこから来るか分からない, なりすまし攻撃に比べれば, 特定のプロバイダに限定される分守りやすくなります。

暗号化する場合に比べるとセキュリティ的には弱いのですが, この方法だと着呼側に設定が必要なだけで, 発呼側は追加設定の必要がないというメリットがあります。

まず 図 25 に示す perl スクリプト 「/usr/libexec/uucp/uucpd」を作ります。 そして,uucico の代わりに uucpd を tcpserver から起動します(図 26)。

#!/usr/bin/perl
$Uucpd = "/usr/libexec/uucp/uucico";
$Uuxqt = "/usr/libexec/uucp/uuxqt";
$Conf = "/etc/uucp/config";
$host = $ENV{'TCPREMOTEHOST'};
$ip = $ENV{'TCPREMOTEIP'};
$site = "";
if ($host =~ /\.ocn\.ne\.jp$/) {
	$site = "ocn";
} elsif ($host =~ /\.odn\.ad\.jp$/) {
	$site = "odn";
}
push(@opts,"-l","--nouuxqt","--nodetach");
if ($site) {
	push(@opts,"-I$Conf.$site");
	system $Uucpd,@opts;
	exec $Uuxqt;
}
print <<EOF;
Your machine ``$host\[$ip\]'' is not registered.
If you are the authorized user, please inform me by e-mail.
EOF
exit 1;
図 25 UUCP 接続を限定するための Perl スクリプト

作成後は,/usr/libexec/uucp/uucpd として保存します。


# tcpserver 0 uucp /usr/libexec/uucp/uucpd
図 26 uucico の代わりに uucpd を起動

接続先を限定するために,tcpserver の起動法を変更します。

このようにすると, 接続元ノードのホスト名が「*.ocn.ne.jp」である場合, すなわち接続元ノードがプロバイダ OCN にダイアルアップ接続している場合に限り, 図 27 のコマンドが実行されます。 「-I/etc/uucp/config.ocn」は config ファイルのパスを, /etc/uucp/config.ocn に変更するためのオプションです。

/usr/libexec/uucp/uucico -l --nouuxqt --nodetach -I/etc/uucp/config.ocn
図 27 指定した条件を満たしたときに実行されるコマンド

接続元ノードがプロバイダOCN にダイアルアップ接続している場合に限り, 図のコマンドが実行されます。

/etc/uucp/config.ocn に 図 28 のような記述をしておいて, /etc/uucp/sys.ocn には OCN からの接続を許可するノードだけを登録しておきます (図 29)。


nodename   gcd
sysfile   /etc/uucp/sys.ocn

図 28 /etc/uucp/config.ocn の設定例


commands        rnews rmail
system          ozenji
called-login    Uozenji

図 29 /etc/uucp/sys.ocn の設定例

同様に, 接続元ノードが ODN を利用している場合は, /etc/uucp/config.odn が使われます。 接続元ノードが利用するプロバイダごとに config ファイルを切り替えるよう uucpd に追記し, それに対応する config.* ファイルと sys.* ファイルを定義しておくと良いでしょう。

uucpd に登録していないプロバイダからアクセスした場合は, 図 30 のように表示され接続を切られてしまいます。

% telnet uucp.gcd.org 540
Trying 210.145.125.162...
Connected to asao.gcd.org.
Escape character is '^]'.
Your machine ``asao.gcd.org[210.145.125.162]'' is not registered.
If you are the authorized user, please inform me by e-mail.
Connection closed by foreign host.
図 30 登録していないプロバイダからのアクセスは不許可
【tcpserver】
TCP/IP 用ツール群「ucspi-tcp」に含まれるフィルタリング用ツール。 inetd と TCP_Wrapper を合わせたような機能を持ちます。 inetd よりも DoS 攻撃に強く, 不要な機能を排すことで TCP_Wrapper よりも安全性を向上させています。
【stone】
筆者が作成した TCP & UDP パケット・リピータ (http://www.gcd.org/sengoku/stone/Welcome.ja.html)です。 任意のプロトコルを SSL(Secure Sockets Layer) で暗号化して通信させることができるほか, POP と APOP の変換機能なども持ちます。

(ライターから)


本稿は日経Linux 2000 年 7 月号に掲載された、 実践で学ぶ、一歩進んだサーバ構築・運用術, 第 4 回「UUCP の活用」を日経BP 社の許可を得て転載したものです。

Copyright(C)2000 by 仙石浩明 <sengoku@gcd.org>
無断転載を禁じます

| home | up |

sengoku@gcd.org