Javaのヒント42:プロキシベースのファイアウォールで動作するJavaアプリを作成する

ほとんどすべての企業が、内部ネットワークをハッカーや泥棒から保護することに関心を持っています。一般的なセキュリティ対策の1つは、企業ネットワークをインターネットから完全に切断することです。悪者があなたのマシンのいずれにも接続できない場合、彼らはそれらにハッキングすることはできません。この戦術の不幸な副作用は、内部ユーザーがYahooやJavaWorldなどの外部インターネットサーバーにアクセスできないことです。。この問題に対処するために、ネットワーク管理者は「プロキシサーバー」と呼ばれるものをインストールすることがよくあります。基本的に、プロキシはインターネットと内部ネットワークの間に位置し、2つの世界間の接続を管理するサービスです。プロキシは、内部ユーザーがインターネットサービスにアクセスできるようにしながら、外部のセキュリティの脅威を軽減するのに役立ちます。 Javaを使用すると、インターネットクライアントを簡単に作成できますが、これらのクライアントは、プロキシを通過できない限り役に立ちません。幸いなことに、Javaを使用すると、プロキシを簡単に操作できます。つまり、魔法の言葉を知っている場合です。

Javaとプロキシを組み合わせる秘訣は、Javaランタイムで特定のシステムプロパティをアクティブ化することにあります。これらのプロパティは文書化されていないようであり、Javaの民間伝承の一部としてプログラマーの間でささやかれています。プロキシを操作するには、Javaアプリケーションでプロキシ自体に関する情報を指定するとともに、認証のためにユーザー情報を指定する必要があります。プログラムで、インターネットプロトコルの使用を開始する前に、次の行を追加する必要があります。

System.getProperties()。put( "proxySet"、 "true"); System.getProperties()。put( "proxyHost"、 "myProxyMachineName"); System.getProperties()。put( "proxyPort"、 "85");

上記の1行目は、接続にプロキシを使用することをJavaに通知し、2行目はプロキシが存在するマシンを指定し、3行目はプロキシがリッスンしているポートを示します。一部のプロキシでは、インターネットアクセスが許可される前に、ユーザーがユーザー名とパスワードを入力する必要があります。ファイアウォールの背後でWebブラウザを使用している場合は、おそらくこの動作に遭遇したことがあります。認証を実行する方法は次のとおりです。

URLConnection接続= url.openConnection(); String password = "username:password"; 文字列encodedPassword = base64Encode(password); connection.setRequestProperty( "Proxy-Authorization"、encodedPassword);

上記のコードフラグメントの背後にある考え方は、ユーザー情報を送信するためにHTTPヘッダーを調整する必要があるということです。これは、setRequestProperty()呼び出しで実現されます。このメソッドを使用すると、リクエストが送信される前にHTTPヘッダーを操作できます。HTTPでは、ユーザー名とパスワードをbase64でエンコードする必要があります。幸い、エンコーディングを実行するパブリックドメインAPIがいくつかあります(「参考文献」セクションを参照)。

ご覧のとおり、Javaアプリケーションにプロキシサポートを追加することはそれほど多くありません。あなたが今知っていることと少しの研究(あなたはあなたのプロキシがあなたが興味のあるプロトコルをどのように扱うかそしてユーザー認証をどのように扱うかを知る必要があるでしょう)を考えると、あなたは他のプロトコルであなたのプロキシを実装することができます。

FTPのプロキシ

スコットD.テイラーはFTPプロトコルのプロキシに対処するために魔法の呪文を送りました:

defaultProperties.put( "ftpProxySet"、 "true"); defaultProperties.put( "ftpProxyHost"、 "proxy-host-name"); defaultProperties.put( "ftpProxyPort"、 "85");

次に、次のような方法で「ftp」プロトコルを使用してファイルのURLにアクセスできます。

URL url = new URL( "ftp://ftp.netscape.com/pub/navigator/3.04/windows/readme.txt"); 

他のインターネットプロトコルでプロキシを使用した例があれば、ぜひご覧ください。

注:サンプルコード(Example.java)は、JDK1.1.4でのみテストされています。

Ron Kurrは、C ++、Unix、およびNTを使用して、過去8年間CabletronSystemsでソフトウェアエンジニアとして働いてきました。過去2年間、彼はJavaおよびインターネットテクノロジーに専念してきました。

このトピックの詳細

  • java.lang.System //www.javasoft.com/products/jdk/1.1/docs/api/java.lang.System.html
  • java.net.URLConnection //www.javasoft.com/products/jdk/1.1/docs/api/java.net.URLConnection.html
  • HTTPクライアントAPI // www.innovation.ch / java / HTTPClient /
  • Cabletron Systems //www.cabletron.com/
  • CsProxy(無料のプロキシサーバー)// www.cabletron.com/csproxy/
  • 関連するRFC // www.cabletron.com / csproxy / handbook / rfc /

このストーリー「Javaのヒント42:プロキシベースのファイアウォールで動作するJavaアプリを作成する」は、もともとJavaWorldによって公開されました。