From: himazu@isl.mei.co.jp (IMAZU Hideyo) Real-Date: Mon, 6 Dec 93 22:47:24 +0900 Subject: [infotalk,00571] firewall and SOCKS Message-Id: <9312061347.AA04619@aria.isl.mei.co.jp>
松下電器の今津です。 御多分に洩れずインターネットに直接パケットを送れるホストは2台だけ (Firewalls メーリングリスト(firewalls@greatcircle.com)では要塞ホスト (bastion host)と呼ばれてます)にしています。 うちでも SOCKS を結構使ってます。 1つのデーモンで telnet, ftp, gopher なんでもいけるのがいいですね。 クライアントの変更が必要ですが、割と簡単です。telnet, gopher なら、 connect() を Rconnect() に変更して SOCKS のライブラリーをリンクするだけ です。 SOCKS版 ftp では ftp.uu.net など幾つかのマシンにはちゃんと FTP できない んですが、その理由はちゃんと追っていません。 FTP が自分のマシンからできるようになると、archie もしたいわけですが、 archie は UDP なんで SOCKS は役に立たないんですよね。そこで、 #!/bin/sh PATH=/usr/local/bin:/usr/ucb:/usr/bin IFS="$IFS " exec >&- >&0 read i archie $i こんなやつを要塞ホストの inetd から起動されるようにして、 -----ここから #!/usr/local/bin/perl require 'sys/socket.ph'; $servername = 'bastionhost'; $PORT = 2010; $sockaddr='S n a4 x8'; dump QUICKSTART if $ARGV[0] eq '-dump'; QUICKSTART: @ARGV > 0 || die "args expected.\n"; chop($localname = `hostname`); $localaddr = (gethostbyname($localname))[4]; $serveraddr = (gethostbyname($servername))[4]; $this = pack($sockaddr, &AF_INET, 0, $localaddr); $that = pack($sockaddr, &AF_INET, $PORT, $serveraddr); socket(SERVER, &AF_INET, &SOCK_STREAM, &PF_UNSPEC) || die "socket: $!"; bind(SERVER, $this) || die "bind: $!"; connect(SERVER, $that) || die "connect: $!"; select(SERVER); $| = 1; select(STDOUT); $| = 1; print SERVER join(' ', @ARGV), "\n"; print <SERVER>; shutdown(SERVER, 2); exit(0); -----ここまで こんなクライアントを使ってます。 最近、UDP を中継するデーモン ftp.wang.com:/pub/fitz/udprelay-0.2.tar.Z なんてのもあるようなので、これを使った方がいいのかも知れませんが。 -- 今津 英世(いまづ ひでよ) 松下電器 情報システム研究所![]()