一般に遠距離だと電話代が高くなります。 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 登録していないプロバイダからのアクセスは不許可 |
(ライターから)
本稿は日経Linux 2000 年 7 月号に掲載された、 実践で学ぶ、一歩進んだサーバ構築・運用術, 第 4 回「UUCP の活用」を日経BP 社の許可を得て転載したものです。
Copyright(C)2000 by 仙石浩明 <sengoku@gcd.org>
無断転載を禁じます