forked from hiro-dSn/stone
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathREADME.ja.txt
396 lines (307 loc) · 18.7 KB
/
README.ja.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
Simple Repeater
stone version 2.3e
Copyright(c)1995-2008 by Hiroaki Sengoku
stone は、アプリケーションレベルの TCP & UDP リピーターです。ファイア
ウォールの内から外へ、あるいは外から内へ、TCP あるいは UDP を中継します。
stone には以下のような特徴があります。
1. Win32 に対応している
以前は UNIX マシンで構成されることが多かったファイアウォールです
が、最近は WindowsNT が使われるケースが増えてきました。stone は
WindowsNT あるいは Windows95 上で手軽に実行することができます。
もちろん、Linux, FreeBSD, BSD/OS, SunOS, Solaris, HP-UX などの
UNIX マシンでも使うことができます。
2. 単純
わずか 10000 行 (C 言語) ですので、セキュリティホールが生じる可能
性を最小限にできます。
3. SSL 対応
OpenSSL (http://www.openssl.org/) を使うことにより、暗号化/復号
して中継できます。また、クライアント認証およびサーバ認証をサポー
トしています。さらに、認証によって得られる証明書のサブジェクトの
一部を、中継先へ送ることもできます。
4. http proxy
簡易型 http proxy としても使うことができます。
5. POP -> APOP 変換
APOP に対応していないメーラと stone を使うことで、APOP サーバへ
アクセスできます。
6. IPv6 対応
IP/IPv6 変換して中継することができます。IPv6 に対応していない
ソフトウェアを手軽に IPv6 化することが可能です。
使用方法
stone [-C <file>] [-P <command>] [-Q <options>] [-N] [-d] [-p] [-n]
[-u <max>] [-f <n>] [-l] [-L <file>] [-a <file>] [-i <file>]
[-X <n>] [-T <n>] [-A <n>] [-r]
[-x <port>[,<port>][-<port>]... <xhost>... --]
[-s <send> <expect>... --]
[-b [<var>=<val>]... <n> <master>:<port> <backup>:<port>]
[-B <host>:<port> <host1>:<port1>... --]
[-I <host>]
[-o <n>] [-g <n>] [-t <dir>] [-D] [-c <dir>]
[-q <SSL>] [-z <SSL>]
[-M install <name>] [-M remove <name>]
<st> [-- <st>]...
-C はオプションおよび <st> をコマンドラインで指定するかわりに設
定ファイルから読み込みます。-P は設定ファイルを読み込む際のプリ
プロセッサを指定します。プリプロセッサへ与える引数は -Q で指定で
きます。-N を指定すると、コマンドラインおよび設定ファイルを読み
込んだ後、終了します。つまりポートを開くこと無く設定ファイルの
チェックを行なうことができます。
オプションとして -d を指定すると、デバッグレベルを増加させます。
-p を指定すると中継したデータをダンプします。-n を指定すると、ホ
スト名やサービス名の代わりに IP アドレスやサービス番号を表示しま
す。
-u オプションは同時に記憶できる UDP の発信元の最大数を指定します。
デフォルトは 100 です。-f オプションは子プロセスの数を指定します。
デフォルトは子プロセス無しです。
-l を指定すると、エラーメッセージ等を syslog へ出力します。-L を
指定すると、エラーメッセージ等を file へ出力します。-a を指定す
ると、アクセスログを file へ出力します。-i は stone のプロセス
ID を出力するファイルを指定します。
-X は中継を行なう際のバッファの大きさを指定します。デフォルトは
1000 バイトです。-T を指定すると TCP セッションのタイムアウトの秒
数を変更できます。デフォルトは 600 (10 分) です。-A を指定すると
listen 呼び出しの未処理接続キューの最大長を変更できます。デフォル
トは 50 です。-r を指定すると <st> のソケットに SO_REUSEADDR を設
定します。
-x を指定すると http proxy の接続先を制限できます。接続先のポー
ト番号のリスト <port>[,<port>][-<port>]... および接続先ホストの
リスト <xhost>... を指定します。-x を複数指定すると、最後に指定
したものから順に、ポート番号のリストがマッチするものを検索します。
-x -- を指定すると、それ以前のものは検索対象となりません。
-b は中継先 <master>:<port> に接続できないときのバックアップとし
て <backup>:<port> を指定します。すなわち <n> 秒ごとに
<master>:<port> に対するヘルスチェック (後述する -s オプションで
設定) が成功するかチェックし、もしチェックに失敗した場合は、中継
先を <backup>:<port> へ変更します。<var> として「host」を指定す
ることにより、<master> とは異なるホストをチェックすることができ
ます。同様に、<var> として「port」を指定することにより、異なるポー
トをチェックすることができます。
-s はヘルスチェックのスクリプトを設定します。<send> を送信後、レ
スポンスが、正規表現 <expect> にマッチするか確認します。
-B は中継先グループの指定です。中継先が <host>:<port> である場合、
このグループの中からランダムに一つの中継先を選んで中継します。-b
オプションで設定済みの中継先で、ヘルスチェックに失敗したものは、
選択枝から除外します。
-I は中継先へ接続する際に用いるインタフェースを指定します。
-o と -g はそれぞれユーザ ID とグループ ID を指定します。ID は数
字のみ指定可能です。-t を指定すると、dir へ chroot します。-D を
指定すると、stone をデーモンとして起動します。-c はコアダンプを
行なうディレクトリを指定します。
-M は stone を NT サービスとして登録/削除するためのオプションで
す。サービス名 <name> を指定します。サービスとして登録した後、
net start <name> コマンドを実行してサービスを開始させてください。
例:
C:\>stone -M install repeater -C C:\stone.cfg
C:\>net start repeater
-q および -z は、SSL 暗号化/復号 のオプションです。-q は、stone
が SSL クライアントとして、他の SSL サーバへ接続するとき、すなわ
ち中継先が SSL サーバの時の、SSL オプションです。-z は stone が
SSL サーバとして、他の SSL クライアントからの接続を受付ける時の、
SSL オプションです。
<SSL> は SSL オプションで、次のいずれかです。
default SSL オプション指定をデフォルトに戻します。
複数の <st> を指定する際、<st> 毎に異なる SSL オ
プションを指定することができます。
verbose デバッグ用文字列をログに出力します。
verify SSL 接続相手に、SSL 証明書を要求します。
verify,once セッション開始時に一度だけ、
SSL クライアントに証明書を要求します。(-z 専用)
verify,ifany SSL クライアントから証明書が送られてきたときのみ
認証します。送られてこない場合は認証せずに
セッションを開始します。(-z 専用)
verify,none SSL 接続相手に SSL 証明書を要求しません。
crl_check CRL をチェックします。
crl_check_all 証明書チェーンの全てにおいて CRL をチェックします。
uniq SSL 接続相手の SSL 証明書のシリアル番号が前回の
接続と異なる場合、接続を拒否します。
re<n>=<regex> SSL 証明書のチェーンが満たすべき正規表現を指定します。
<n> は depth です。re0 が証明書のサブジェクト、
re1 がその発行者を意味します。
<n> は 9 まで指定できます。
<n> が負の値の場合は、re-1 が root CA で、
re-2 がその子 CA を意味します。
depth=<n> SSL 証明書チェーンの長さの最大値を指定します。
チェーンの長さがこの値を越えると認証が失敗します。
<n> の最大値は 9 です。
tls1 プロトコルとして TLSv1 を用います。
ssl3 プロトコルとして SSLv3 を用います。
ssl2 プロトコルとして SSLv2 を用います。
no_tls1 プロトコルの選択枝から TLSv1 を外します。
no_ssl3 プロトコルの選択枝から SSLv3 を外します。
no_ssl2 プロトコルの選択枝から SSLv2 を外します。
sni サーバ名通知 (Server Name Indication) を行ないます。
servername=<str> SNI で通知するサーバ名を指定します。
bugs SSL の実装にバグがある接続相手との接続を可能にします。
serverpref SSL サーバの指定した暗号を用います (SSLv2 のみ)。
sid_ctx=<str> SSL セッション ID コンテキストを設定します。
passfile=<file> 秘密鍵のパスフレーズを格納したファイルを指定します。
passfilepat=<file> ファイル名のパターンを指定します。
key=<file> 証明書の秘密鍵ファイルを指定します。
keypat=<file> ファイル名のパターンを指定します。
cert=<file> 証明書ファイルを指定します。
certpat=<file> ファイル名のパターンを指定します。
certkey=<file> 秘密鍵付証明書ファイルを指定します。
certkeypat=<file> ファイル名のパターンを指定します。
CAfile=<file> 認証局の証明書ファイルを指定します。
CApath=<dir> 認証局の証明書があるディレクトリを指定します。
pfx=<file> PKCS#12 ファイルを指定します。
pfxpat=<file> ファイル名のパターンを指定します。
store=<prop> [Windows] 証明書ストア内の秘密鍵付証明書を指定。
"SUBJ:<substr>" あるいは "THUMB:<hex>"
storeCA [Windows] 証明書ストア内の認証局証明書を使用します。
cipher=<list> 暗号化アルゴリズムのリストを指定します。
lb<n>=<m> SSL 証明書の CN に応じて中継先を切り替えます。
SSL オプションの re<n>= で指定した正規表現中、
<n> 番目の ( ... ) 内の正規表現にマッチした文字
列から算出した数値の剰余 <m> に基づいて、-B オプ
ションで指定した中継先グループの中から中継先を選
びます。
<st> は次のいずれかです。<st> は「--」で区切ることにより、複数個
指定できます。
(1) <host>:<port> <sport> [<xhost>...]
(2) <host>:<port> <shost>:<sport> [<xhost>...]
(3) proxy <sport> [<xhost>...]
(4) <host>:<port>/http <sport> <request> [<xhost>...]
(5) <host>:<port>/proxy <sport> <header> [<xhost>...]
(6) health <sport> [<xhost>...]
stone を実行しているマシンのポート <sport> への接続を、他のマシ
ン <host> のポート <port> へ中継します。インタフェースを複数持つ
マシンでは、(2) のようにインタフェースのアドレス <shost> を指定
することにより、特定のインタフェースへの接続のみを転送することが
できます。<host>:<port> の代わりに、「/」ないし「./」から始まる
パス名を指定することにより、UNIX ドメインソケットを扱うこともで
きます。
(3) は、http proxy です。WWW ブラウザの http proxy の設定で、
stone を実行しているマシンおよびポート <sport> を指定します。
「proxy」には、「/」に続けて以下の拡張子を付けることができます。
v4only proxy の接続先を IP アドレスに限定します。
v6only proxy の接続先を IPv6 アドレスに限定します。
(4) は、http リクエストにのせて中継します。<request> は HTTP 1.0
で規定されるリクエストです。リクエスト文字列中、「\」はエスケー
プ文字であり、次のような置き換えが行なわれます。
\n 改行 (0x0A)
\r 復帰 (0x0D)
\t タブ (0x09)
\\ \ (0x5C)
\a 接続元の IP アドレス
\A 「接続元の IP アドレス」:「ポート番号」
\d 接続先の IP アドレス
\D 「接続先の IP アドレス」:「ポート番号」(透過プロキシ用)
\u 接続元のユーザID (番号)
\U 接続元のユーザ名
\g 接続元のグループID (番号)
\G 接続元のグループ名
\u \U \g \G は UNIX ドメインソケットの場合のみ
\0 SSL 証明書のシリアル番号
\1 - \9 SSL オプションの re<n>= で指定した正規表現中、
( ... ) 内の正規表現にマッチした文字列
\?1<then>\:<else>\/
もし \1 (\2 - \9 も同様) の文字列が、空文字列で
なければ <then>、空文字列であれば <else>
(5) は、http リクエストヘッダの先頭に <header> を追加して中継し
ます。(4) と同様のエスケープを使うことができます。「/proxy」の代
わりに「/mproxy」を指定すると、リクエストヘッダごとに <header>
を追加します。
(6) は、stone が正常に動作しているか検査するためのポートの指定で
す。<sport> で指定したポートに接続して以下のコマンドを送信すると、
stone の状態が返されます。
HELO 任意の文字列 stone, pair, trash 等の個数
STAT スレッドの個数, mutex コンフリクト回数
FREE free リスト長
CLOCK 経過秒数
CVS_ID CVS の ID
CONFIG config ファイルの内容
STONE 各 stone の設定内容
LIMIT <var> <n> 変数 <var> の値が <n> 未満か調べる
<var> は次のうちのいずれかです。
PAIR pair の個数
CONN conn の個数
ESTABLISHED 最後に接続確立してからの秒数
READWRITE 最後に read or write してからの秒数
ASYNC スレッドの本数
stone からの応答は、正常時は 200 番台、異常時は 500 番台の数値が
先頭につきます。
<xhost> を列挙することにより、stone へ接続可能なマシンを制限する
ことができます。マシン名、あるいはその IP アドレスを空白で区切っ
て指定すると、そのマシンからの接続のみを中継します。
<xhost> には、「/」に続けて以下の拡張子を付けることができます。
複数の拡張子を指定するときは「,」で区切ります。
<m> ネットワーク・マスクのビット数を指定することにより、特定
のネットワークのマシンからの接続を許可することができます。
例えば、クラス C のネットワーク 192.168.1.0 の場合は、
「192.168.1.0/24」と指定します。
v4 <xhost> を IP アドレスとして扱います。
v6 <xhost> を IPv6 アドレスとして扱います。
p<m> <xhost> からの接続のみ、中継したデータをダンプします。
<m> はダンプ方法の指定です。-p オプションの個数に相当し
ます。
<xhost> の代わりに「!」を指定すると、後続の <xhost> は接続を拒否
するマシンの指定になります。
<port> には、「/」に続けて以下の拡張子を付けることができます。
複数の拡張子を指定するときは「,」で区切ります。
udp TCP を中継する代わりに、UDP を中継します。
ssl SSL で暗号化して中継します。
v6 中継先へ IPv6 接続します。
base MIME base64 で符号化して中継します。
<sport> には、「/」に続けて以下の拡張子を付けることができます。
複数の拡張子を指定するときは「,」で区切ります。
udp TCP を中継する代わりに、UDP を中継します。
apop POP を APOP へ変換して中継します。
変換には RSA Data Security 社の MD5 Message-Digest アル
ゴリズムを使用します。
ssl SSL を復号して中継します。
v6 IPv6 接続を受付けます。(1) のようにインタフェースの
アドレス <shost> を指定しない場合は、IP 接続も受付けるこ
とができます。
v6only IPv6 接続のみを受付けます。(1) のようにインタフェースの
アドレス <shost> を指定しない場合も、IP 接続を受付けるこ
とはありません。
base MIME base64 を復号して中継します。
http http リクエストヘッダを取り除いて中継します。
ident 接続を受付けるときに接続元に対し ident プロトコル
(RFC1413) を使ってユーザ名を照会します。
例
outer: ファイアウォールの外側にあるマシン
inner: ファイアウォールの内側にあるマシン
fwall: ファイアウォール. このマシン上で stone を実行
stone outer:telnet 10023
outer へ telnet プロトコルを中継
inner で telnet fwall 10023 を実行
stone outer:domain/udp domain/udp
DNS 問い合わせを outer へ中継
inner で nslookup - fwall を実行
stone outer:ntp/udp ntp/udp
outer へ NTP を中継
inner で ntpdate fwall を実行
stone localhost:http 443/ssl
WWW サーバを https 対応にする
WWW ブラウザで https://fwall/ をアクセス
stone localhost:telnet 10023/ssl
telnet を SSL 化
inner で SSLtelnet -z ssl fwall 10023 を実行
stone proxy 8080
http proxy
stone outer:110/apop 110
APOP に対応していないメーラで inner:pop へ接続
fwall が http proxy (port 8080) である時:
stone fwall:8080/http 10023 'POST http://outer:8023 HTTP/1.0'
stone localhost:telnet 8023/http
inner と outer でそれぞれ stone を実行
http リクエストにのせて中継
stone fwall:8080/proxy 9080 'Proxy-Authorization: Basic c2VuZ29rdTpoaXJvYWtp'
proxy 認証に対応していないブラウザ用
ホームページ
stone の公式ホームページは次の URL です。
http://www.gcd.org/sengoku/stone/Welcome.ja.html
著作権
この stone に関する全ての著作権は、原著作者である仙石浩明が所有
します。この stone は、GNU General Public License (GPL) に準ずる
フリーソフトウェアです。個人的に使用する場合は、改変・複製に制限
はありません。配布する場合は GPL に従って下さい。また、openssl
とリンクして使用することを許可します。
無保証
この stone は無保証です。この stone を使って生じたいかなる損害に
対しても、原著作者は責任を負いません。詳しくは GPL を参照して下
さい。
#2939 仙石 浩明
http://www.gcd.org/sengoku/ Hiroaki Sengoku <[email protected]>