SOCKS5

FreeBSD 3.4R で SOCKS5 を使ってみました。
SOCKS5 は http://www.socks.nec.com から入手できます。

参考資料としては、「遠隔オフィスとの接続(荒井美千子)」(UNIX MAGAZINE 連載、1998年6月号より)が分かり易いでしょう。
Windows 版のサーバは有料です

SOCKS5 とは?

  • SOCKS は proxy を行なうプログラムです
  • FWTK がアプリケーションレベルで中継するのに対して、SOCKS はその下のサーキットレベルで中継します
  • SOCKS には SOCKS4 と SOCKS5 があります
  • SOCKS5 は SOCKS4 に認証、UDP 中継、DNS 機能を追加したものです
  • SOCKS を使用するアプリケーションは SOCKS 対応になっていなければなりません
  • Windows なら SocksCap? を入れると、ほとんどのアプリケーションがそのまま SOCKS 対応になります
  • SOCKS サーバ間を透過的に接続することができます

マシンの設定

  • FreeBSD 3.4R の Kern-Developer というセットをインストールします
  • X サーバなどはインストールしません
  • ネットワークボードを2枚刺し、片方にグローバルの IP アドレスを、もう片方にプライベートの IP アドレス(192.168.xxx. とする)を割り当てます
  • カーネルを作り直します
#options        NFS            <= 有効にしてはいけない
#pseudo-device   bpfilter 1    <= 有効にしてはいけない
  • /etc/inetd.conf の全てをコメントにします
  • /etc/rc.conf を編集します
sendmail_enable="NO"    <== 注意:FreeBSD 4.6R からは変更されています
portmap_enable="NO"
  • リブート後、2つのネットワークの間のパケットは全く中継しません
  • 実際に運用する場合には、コンパイラやカーネルのソースなどは全て削除しておきます

インストール

  • 試したのは socks5-v1.0r10 です
  • FreeBSD の場合、socks5 のパッチ2と3を当ててから ports で make
  • configure に --with-static は追加した方が良いと思う
  • client/telnet で make に失敗する時は、Makefile を編集
client/telnet/Makefile 47 行目 の行末に追加
LIBS   = ... -ltermcap
  • 設定ファイルは /usr/local/etc/socks5.conf と /usr/local/etc/libsocks5.conf

SOCKS の設定

  • サーバの設定は /usr/local/etc/socks5.conf で行ないます
  • 設定ファイルは先頭から順に解釈されます
  • ファイアウォールに使用するなら、こんな具合に書きます(設定の順序を入れ換えると動きません)
# ban hosts -- 要求を拒否する相手
#    ban host port
# 認証
#    auth host port methods
auth - - -
# ネットワークの経路
# プライベートのネットワーク
interface 192.168.xxx. - fxp0
# グローバル側
interface - - ep0
# 環境変数の設定
#    set variable value
# socks4 プロトコルもサポートする
set SOCKS5_V4SUPPORT 1
# proxy -- socks サーバ同士を接続する場合
#    proxy-type host port list
# アクセス制御
#    permit auth cmd src-host dest-host src-port dest-port [user]
#    deny auth cmd src-host dest-host src-port dest-port [user]
# 内部のユーザは全て許可
permit - - 192.168.xxx. - - -
 
  • SOCKS ライブラリを使うクライアントの設定は /usr/local/etc/libsocks5.conf で行ないます
# noproxy -- 直接接続できるアドレスを指定
noproxy - 192.168.xxx. - -
# それ以外は socks サーバ経由なので、サーバを指定
socks5 - - - - 192.168.xxx.yyy
 

アプリケーションの設定

  • Windows 95/98/NT なら SocksCap32 をインストールすれば、ほとんどの TCP/IP アプリケーションはそのままの設定で使用できるようになります(ただし、SocksCap? から起動しなければなりません)(SocksCap? 経由だと Windows Update に失敗することがあります)
  • Netscape や Internet Explorer は SOCKS 対応(SOCKS4)なので、プロパティのプロキシ設定から SOCKS を選び、サーバマシンの IP アドレスとポート 1080 を入力します
  • Unix なら SOCKS 付属のアプリケーション(rftp,rtelnet,rarchie,rfinger,rping,rtraceroute,rwho)は libsocks5.conf が設定してあれば、普通の ftp, telnet のように使用できます
% rftp remote-host
% rtelnet remote-host
  • Unix なら runsocks で動的にアプリケーションを socks 化させることができます(OS 依存ですが、FreeBSD では動作しました。ただし netscape や rlogin などは不可)
% runsocks ncftp remote-host
% runsocks telnet remote-host
  • SSH2 は SOCKS に対応していますので、コンパイル時か動作時の環境変数で SOCKS サーバを指定すれば、普通通りに使用できます
# SOCKS サーバが server というマシンで動いていて、
# 内部のネットワークが 192.168.xxx. の場合
% export SSH_SOCKS_SERVER=socks://user@server:1080/192.168.xxx.0/24
% ssh remote-host
  • SSH1 はコンパイル時に socks ライブラリを指定する必要があります

併用

  • FWTK や IPFW と併用できます

まとめ

  • [good]設定は割合簡単
  • [good]1つの接続で1つのプロセスが起動されるので、利用状況の確認は簡単
  • [nogood]マシンのリソースを消費します
  • [nogood]パケットフィルタに比べると低速
  • [good]アプリケーションが socks 対応(あるいは SocksCap? 使用)なら、使い方は変わらない(透過的)
  • [nogood]FWTK のような Java や ActiveX のフィルタリングはできない
  • [good]SOCKS5 のクライアントは DNS が引けなくても良い(SOCKS4 クライアントは自分で引かなければならない)
  • [good]VPN が簡単に構成できる(ただし暗号化はされない)

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2004-10-29 (金) 14:31:12 (5494d)