File: zebedee.1

package info (click to toggle)
manpages-ja 0.5.0.0.20221215%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 29,304 kB
  • sloc: perl: 161; makefile: 61
file content (1678 lines) | stat: -rw-r--r-- 84,838 bytes parent folder | download
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
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.28)
.\"
.\" Standard preamble:
.\" ========================================================================
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
..
.de Vb \" Begin verbatim text
.ft CW
.nf
.ne \\$1
..
.de Ve \" End verbatim text
.ft R
.fi
..
.\" Set up some character translations and predefined strings.  \*(-- will
.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
.\" double quote, and \*(R" will give a right double quote.  \*(C+ will
.\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
.\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
.\" nothing in troff, for use with C<>.
.tr \(*W-
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.ie n \{\
.    ds -- \(*W-
.    ds PI pi
.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
.    ds L" ""
.    ds R" ""
.    ds C` ""
.    ds C' ""
'br\}
.el\{\
.    ds -- \|\(em\|
.    ds PI \(*p
.    ds L" ``
.    ds R" ''
.    ds C`
.    ds C'
'br\}
.\"
.\" Escape single quotes in literal strings from groff's Unicode transform.
.ie \n(.g .ds Aq \(aq
.el       .ds Aq '
.\"
.\" If the F register is turned on, we'll generate index entries on stderr for
.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
.\" entries marked with X<> in POD.  Of course, you'll have to process the
.\" output yourself in some meaningful fashion.
.\"
.\" Avoid warning from groff about undefined register 'F'.
.de IX
..
.nr rF 0
.if \n(.g .if rF .nr rF 1
.if (\n(rF:(\n(.g==0)) \{
.    if \nF \{
.        de IX
.        tm Index:\\$1\t\\n%\t"\\$2"
..
.        if !\nF==2 \{
.            nr % 0
.            nr F 2
.        \}
.    \}
.\}
.rr rF
.\" ========================================================================
.\"
.IX Title "ZEBEDEE 1"
.TH ZEBEDEE 1 "2022-06-07" "perl v5.20.2" "User Contributed Perl Documentation"
.\" For nroff, turn off justification.  Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
.nh
.SH "NAME"
Zebedee \-\-\- シンプルでフリーでセキュアなトンネルプログラム
.SH "書式"
.IX Header "書式"
.IP "Server:" 4
.IX Item "Server:"
\&\fBzebedee\fR \fB\-s\fR [\fB\-dDtu\fR] [\fB\-f\fR \fIfile\fR] [\fB\-k\fR \fIkeybits\fR] [\fB\-n\fR \fIname\fR]
[\fB\-o\fR \fIlogfile\fR] [\fB\-r\fR \fIports\fR] [\fB\-v\fR \fIlevel\fR] [\fB\-x\fR \fIconfig\fR]
[\fB\-z\fR \fIlevel\fR] [\fItargethost\fR]
.IP "Client:" 4
.IX Item "Client:"
\&\fBzebedee\fR [\fB\-dDmtu\fR] [\fB\-e\fR \fIcommand\fR] [\fB\-f\fR \fIfile\fR] [\fB\-k\fR \fIkeybits\fR]
[\fB\-n\fR \fIname\fR] [\fB\-o\fR \fIlog\fR] [\fB\-v\fR \fIlevel\fR] [\fB\-x\fR \fIconfig\fR]
[\fB\-z\fR \fIlevel\fR] [[\fIclientports\fR:]\fIserverhost\fR[:\fItargetport\fR]]
.IP "Key generation:" 4
.IX Item "Key generation:"
\&\fBzebedee\fR \fB\-p\fR [\fB\-f\fR \fIfile\fR]
.Sp
\&\fBzebedee\fR \fB\-P\fR [\fB\-p\fR] [\fB\-f\fR \fIfile\fR]
.IP "Hash generation:" 4
.IX Item "Hash generation:"
\&\fBzebedee\fR \fB\-h\fR [\fIfile ...\fR]
.Sp
\&\fBzebedee\fR \fB\-H\fR \fIstring\fR ...
.IP "Windows Service:" 4
.IX Item "Windows Service:"
\&\fBzebedee\fR [\fB\-n\fR \fIname\fR] \fB\-S\fR [install[=\fIfile\fR] | remove | run]
.SH "DESCRIPTION"
.IX Header "DESCRIPTION"
\&\fBZebedee\fRは2つのシステム間で、
暗号化され、圧縮されたTCP/IPまたはUDPの\*(L"トンネル\*(R"を確立する単純なプログラムである。 
これは、低帯域のネットワーク上でのパフォーマンスを圧縮により向上するだけでなく、
\&\fBtelnet\fR, \fBftp\fR や \fBX\fR などの \s-1TCP\s0 ベースの
トラフィックを盗聴から防御することも可能にする。
また、暗号化の有無にかかわらずデータ圧縮を使用することで、
遅いネットワークで良好なパフォーマンスを得ることも可能である。
.PP
\&\fBZebedee\fR の主な目的は:
.IP "\(bu" 4
\&\s-1UNIX\s0 と Windows 95/98/NT の双方にてクライアントとサーバーの機能を提供する。
.IP "\(bu" 4
ほんの少しの設定か全くの設定無しで簡単にインストール、使用、保守ができる。
.IP "\(bu" 4
少しの付加データと、少ないプロトコルのオーバヘッドにて、
圧縮により多大なトラフィックの低減を行う。
.IP "\(bu" 4
特許化されていないか、または特許の有効期限が切れているアルゴリズムのみを用いる。
.IP "\(bu" 4
\&\s-1GNU\s0 一般公有使用許諾書(\s-1GPL\s0)のもとで商用、非商用を問わず
完全にフリーに使用・配布ができる (\*(L"\s-1CREDITS AND LEGALITIES\*(R"\s0 を見よ)。
.PP
もちろん、\fBZebedee\fR は初めてのあるいは唯一の利用可能な
セキュアなトンネルプログラムではない。 
高機能という面では \fBssh\fR や \fB\s-1SSL\s0\fR などとは比べ物にもならないが、
もし、素早く、単純で、\fB完全にフリー\fRなものを求め
ているなら、これはピッタリのツールだろう。
.PP
この文書は \fBZebedee\fR リリース 2.0.0 の機能について記している.
.SS "名前の由来は?(What's in a name?)"
.IX Subsection "名前の由来は?(What's in a name?)"
あなたが疑問を持とうが持つまいが、\fBZebedee\fR は次の 3つの主要なコンポー
ネントから命名された。
.IP "\(bu" 4
\&\fBZ\fRlib による圧縮
.IP "\(bu" 4
\&\fBB\fRlowfish による暗号化
.IP "\(bu" 4
\&\fBD\fRiffie-Hellman による認証
.PP
これでわかったよね?
.SS "基本的な使い方(Basic Usage)"
.IX Subsection "基本的な使い方(Basic Usage)"
ローカルマシンとリモートホストを安全に接続するには、
まずリモートホストの方で、\fBZebedee\fR をサーバーモードで起動する必要がある。
一番簡単な方法は、\fB\-s\fR オプションを使うことだ。
.PP
.Vb 1
\& zebedee \-s
.Ve
.PP
うまくいけば(いくはず!)\fBZebedee\fRは
端末(windowsではコンソールウインドウ)から切り離されてバックグラウンドで走る。
そして、クライアントからの接続を待つ。
.PP
次にクライアントマシンで\fBZebedee\fRをクライアントモードで起動する。
この場合は、リモートホストのホスト名とトンネルすべきサービス名かポート番号
(ここではこれをターゲットポートと呼ぶことにする)を指定する。
例えば、リモートホストの名前が\f(CW\*(C`remhost\*(C'\fRで
安全な\fBtelnet\fRセッションを張りたいとしたら、こうなる。
.PP
.Vb 1
\& zebedee remhost:telnet
.Ve
.PP
実際には、ポートのデフォルトがtelnetなので
このケースでは次のように省略してもよい。
.PP
.Vb 1
\& zebedee remhost
.Ve
.PP
このコマンドを実行すると、
トンネルの入口になる(ローカル側の)ポートの番号が表示される。
\&\fBZebedee\fRは端末から切り離されてバックグラウンドで走り、
このローカル側のポートに接続されるのを待つ。
例えば、1234と表示されたら、
.PP
.Vb 1
\& telnet localhost 1234
.Ve
.PP
とすれば、\f(CW\*(C`remhost\*(C'\fRに安全なトンネル経由で接続される。
.PP
デフォルトでは、\fBZebedee\fRはプロセスを終了させるまで接続を待ち続けて、
必要があれば同時発生する複数のコネクションを処理する。
.PP
時には、\fBZebedee\fRを起動し、
その後すぐにそのポートに接続するコマンドを起動したいこともあるだろう。
これを一発でやるには次のようにする。
.PP
.Vb 1
\& zebedee \-e "telnet localhost %d" remhost
.Ve
.PP
文字列中の"\f(CW%d\fR"がローカルポート番号と置き換えられる。従って、
\&\fBZebedee\fRはポート番号を表示しない(する必要がない)。
このようにコマンドを指定した場合には、そのコマンドが接続を終了すると同時に、
ローカル側の\fBZebedee\fRクライアントも終了する。
.PP
クライアントが使用するローカルポート番号を指定したい(する必要がある)こともあるだろう。
(保護したい通信を行なう)コマンドが、特定のポートに接続しようとする場合だ。
この場合は、\fBZebedee\fRを次のように起動することで、
ローカルポートを指定することもできる。
.PP
.Vb 1
\& zebedee clientport:hostname:targetport
.Ve
.PP
例えば、次のコマンド:
.PP
.Vb 1
\& zebedee 8000:webhost:80
.Ve
.PP
は、クライアントの8000番ポート経由で接続する、
\&\fBwebhost\fRへの全てのHTTP接続を保護する。
詳細は\s-1EXAMPLES\s0参照のこと。
.PP
また、\fBZebedee\fR クライアントは 
同一ホスト内の複数のターゲットポートに対して、
複数のトンネルを(同時並行的に)扱うこともできる。
この場合は、ローカルとリモートのポートの指定はポート番号のリストになる。
例えば
.PP
.Vb 1
\& zebedee 9001,9002,9003:somehost:daytime,telnet,ftp
.Ve
.PP
これは、9001番のクライアントポートへの通信を、
リモートのターゲットシステムの\fBdaytime\fRポートへとトンネルする。
同様に、9002番は\fBtelnet\fRポートへ、9003番は\fBftp\fRポートへトンネルする。
.PP
詳細は
\&\fBclientport\fRと
\&\fBtargetport\fRを参照のこと。
.SS "UDPトンネリング(\s-1UDP\s0 Tunnelling)"
.IX Subsection "UDPトンネリング(UDP Tunnelling)"
\&\fBZebedee\fRはもともとは \s-1TCP/IP\s0 のトラフィックだけを扱うように設計されたが、
バージョン2.0.0からはコネクションレスのUDPのデータも扱えるようになった。
この機能を有効にするには\fBZebedee\fRを \fB\-u\fR オプション付きで起動する
(または、\fBudpmode\fR キーワードを使用する)。
例えばサーバ側で
.PP
.Vb 1
\& zebedee \-s \-u
.Ve
.PP
クライアント側で
.PP
.Vb 1
\& zebedee \-u 10000:somehost:echo
.Ve
.PP
を実行する。なお、ひとつのクライアントとサーバは、TCPかUDPのどちらかを扱い、
両方同時に扱うことはできない。両方のタイプをトンネルするには、
2つの独立したインスタンスを起動する。
TCPモードとUDPモードのサーバは違うポートを使うので、
両者を同じシステムで起動することは安全である。
.PP
UDPモードでも\fBZebedee\fRのクライアントとサーバ間のトンネルはTCP/IPで接続する。
この接続は無通信が一定時間続くとタイムアウトする。
タイムアウトしてからさらにデータが来るとトンネルの再接続を行う必要があるので、
アプリケーションの特性によっては
UDPモードのパフォーマンスがよくないように見えることもある。
また、扱えるUDPダイアグラムのサイズにも制限があることにも注意すること。
.PP
詳細は、\fBmaxbufsize\fR、
\&\fBudpmode\fR、 \fBudptimeout\fR
を参照のこと。
.SS "言葉の定義(Some Terminology)"
.IX Subsection "言葉の定義(Some Terminology)"
通常は、\fBZebedee\fRを使用する場合、関係するシステムは2つである。
片方でクライアントを起動して、ローカルポートでそれと通信する。
反対側ではサーバを起動して、そのシステムで動作しているサービスと会話する。
しかしながら、次のように最大4つのシステム(マシン)が関係するケースもありえる。
.PP
.Vb 5
\& [ソース] <===> [クライアント] <=====> [サーバ] <===> [ターゲット]
\&            |                     |               |
\&            +\- 安全でない         |               + 安全でない
\&               接続               |                 接続
\&                                  +\- 安全なトンネル
.Ve
.PP
\&\fBZebedee\fRのクライアントは「クライアント」システムで、
サーバは「サーバ」システムでそれぞれ動作している。
トンネル設定の契機となる最初の接続は「ソース」マシンから発生する。
「ソース」と「クライアント」は違うシステムであってもかまわないが、
通常は同一のシステムである。
サーバは最後に「ターゲット」システムと通信する。
ターゲットも普通はソースと同じマシンになるが、違うマシンであっても全く問題はない。
.PP
ほとんどの場合、「ソース」と「クライアント」、
「サーバ」と「ターゲット」の違いを気にする必要はない。
しかし、この用語の区別が以下に述べるキーワードに多く反映している。
キーワードの説明を読む時には、このことを頭に入れておいたほうがいいだろう。
.PP
\&\fBZebedee\fRのトンネルに関係するこの4つシステムの問題と別に、
安全に接続するために、いくつかの全く違うタイプの「キー(key)」が使われる。
クライアントとサーバは\fBprivate key\fR(秘密鍵)という値を必要とする
(自分で生成する場合もある)。
このキーからは、public values が計算され交換され、
それにより\fBshared secret key\fR が導き出される
(この時にDiffie\-Hellman key agreement mechanism が使用される)。
このキーからは、接続のたびにユニークな\fBsession key\fRが導き出され、
最終的にこのキーで暗号化が行なわれる。
.SS "設定ファイル(Configuration File)"
.IX Subsection "設定ファイル(Configuration File)"
\&\fBZebedee\fR の動作をコントロールするには、
設定ファイルを使うのがおそらく一番よい。設定ファイルを指定するには
コマンドラインオプションで \fB\-f\fRを使う。ファイルは(\fB\-f\fR)オプションの位
置で処理される。従って、それ以降のコマンドラインオプションでファイルの内
容を上書きすることができる。
.PP
行の形式は以下のとおり。
.PP
.Vb 1
\& key value # optional comment
.Ve
.PP
\&\fIkey\fRはひとつの単語であり大文字小文字は無視される。\fIvalue\fRは単語か文字
列かどちらかである。
文字列はダブルクォート(\f(CW"こんな風に"\fR)かシングルクォート
(\f(CW\*(Aqこんな風に\*(Aq\fR)でくくられる。ダブルクォート " の中に
シングルクォート ' があってもよいし(\f(CW"here\*(Aqs an example"\fR)、その逆も言える。
value では大文字小文字の違いは区別される。
.PP
空白行と"\f(CW\*(C`#\*(C'\fR\*(L"ではじまる行(その前に空白があっても同じ)は無視される。
長い文字列は \*(R"\f(CW\*(C`\e\*(C'\fR"で次の行に継続することもできる。
この文字は除去され、次の行がこの行に接続される。
1行の長さは継続行も含め 1024 文字に制限されていることに注意。
行の接続はコメントの認識を含めすべての処理に先だって行われる。
そのため以下の例
.PP
.Vb 3
\& server false
\& # This comment continues on the next line \e
\& server true
.Ve
.PP
では、\fBserver\fRの値は \fBfalse\fRになる。
.PP
キーワードとその意味は以下に述べる。
ほとんどのキーワードは対応するコマンドラインオプションがあるが、
なかには対応するオプションがないものもある。
対応するコマンドラインオプションがあるものについてはそれも併記してある。
逆に、コマンドラインオプションの中には
設定ファイル内のキーワードに対応するものがないものもある。
それらはこのセクションの最後に述べる。
.PP
キーワードが真偽値(boolean)と書かれていたら、
その値は"\fBtrue\fR\*(L" または \*(R"\fBfalse\fR"でなければならない。
.PP
キーワードの中にはポートのリストを指定するものがある。
この場合は、ポート名(サービス名)、ポート番号、番号の範囲を
コンマか空白で区切ったものを指定する。
例えば、"\f(CW\*(C`telnet, ftp 5900\-5903\*(C'\fR\*(L"は 
\&\*(R"\f(CW\*(C`23,21,5900,5901,5902,5903\*(C'\fR"と等しい。
.PP
また、クライアントだけに指定するキーワードもあるし、
サーバだけに指定するキーワードもある。
ひとつの \fBZebedee\fR プログラムはサーバかクライアントかどちらかひとつの機能を実行し、
その時の用途と違う用途向けのオプションは無視する。
エラーメッセージも表示しない。
サーバになるかクライアントになるかは、
\&\fBserver\fR キーワードで決まる。
.IP "\fBserver\fR (コマンドラインでは \fB\-s\fR)" 4
.IX Item "server (コマンドラインでは -s)"
これは、クライアントになるかサーバになるかを決める真偽値のキーワードである。
これが指定されなかった場合は、クライアントとして動作する。
コマンドラインオプションの \fB\-s\fR オプションはこの値を\fBtrue\fRにするのと等しい。
.PP
\fIクライアント専用キーワード(Client\-Only Keywords)\fR
.IX Subsection "クライアント専用キーワード(Client-Only Keywords)"
.PP
以下のキーワードはクライアントだけに適用される。
.IP "\fBcommand\fR (コマンドラインでは \fB\-e\fR)" 4
.IX Item "command (コマンドラインでは -e)"
クライアントとして動作している時に意味を持つ。
これは、トンネルへ接続した後に起動されるコマンドを示す。
この値が "\f(CW%d\fR" という文字列を含んでいたら、実行時にローカルポート番号と置き変えられる
(\fBclientport\fR 参照)。
この処理は\fBsprintf\fR関数を使用して行なうので、
"\f(CW\*(C`%\*(C'\fR\*(L"によるエスケープ処理が適用される
(すなわち、\*(R"\f(CW\*(C`%\*(C'\fR\*(L" を 1 文字生成するためには \*(R"\f(CW\*(C`%%\*(C'\fR\*(L" を使う)。
さらに、\*(R"\f(CW%d\fR\*(L" を二つ以上指定したり \*(R"\f(CW%d\fR" 以外のフォーマット指定子
を指定すると、おそらくプログラムはクラッシュするだろう。
.Sp
コマンドが接続を閉じたら、\fBZebedee\fRも終了する。
このキーワードおよびオプションを使用すると、暗黙のうちにマルチユースモードがOFFになる
(\fBmultiuse\fR参照)。
\&\fBZebedee\fR クライアントが複数の接続を扱う場合
(\fBmultiuse\fR)やポートのリストが 
\&\fBclientport\fRで指定された場合は、コマンドの自動起動は
使用することができない。
.IP "\fBclientport\fR" 4
.IX Item "clientport"
これは\fBZebedee\fR クライアントがローカル接続のためにlistenすべき、
ひとつのポート番号かポート番号のリストである。
.Sp
もしクライアントがトンネルするのが単独のリモートポートならば、
これは省略できる。
その場合はポートは自動的に割り当てられて、
端末にポート番号を示すメッセージが表示される。
.Sp
ポート番号のリストを指定する時は、リモートポートがコマンドラインで指定されたのであれ、
\&\fBtargetport\fR キーワードで指定されたのであれ、
ポートの数は正確にリモートポートの数と一致しなければならない。
.Sp
2.0.0より前のバージョンでは、同じ意味で\fBlocalport\fRというキーワードが使用されていた。
後方互換性のために、このキーワードは現バージョンでも認識される。
.IP "\fBlocalsource\fR" 4
.IX Item "localsource"
この値が\fBtrue\fRだと、クライアントはローカルマシンで発生した接続だけを受けつける。
別の言葉で言うと、「ソース」と「クライアント」が同一のシステムである必要がある。
.Sp
この値はデフォルトは\fBfalse\fRであり、どのマシンがソースとなっても接続を受けつける。
.IP "\fBmultiuse\fR (コマンドラインでは \fB\-m\fR)" 4
.IX Item "multiuse (コマンドラインでは -m)"
この値が\fBtrue\fRだと(デフォルトではそうなっているが)、
\&\fBZebedee\fRのクライアントは複数の接続要求(同時並行的に発生してもよい)を扱い、
要求ひとつひとつに対して、新しいトンネルを設置する。
値が\fBfalse\fRだと、クライアントはシングルユースモードで動作し、
最初の接続が閉じられた直後に終了する。
.Sp
コマンドラインの\fB\-m\fRオプションはこれを\fBtrue\fRに設定するのと等しい。
現在のバージョンの\fBZebedee\fRはこれがデフォルトだが
(だから、このオプションを設定する必要はないが)、
後方互換性のために残されている。
.Sp
クライアントが複数のポートを待ち受ける場合は、
たとえこれが\fBfalse\fRに設定されていても、
自動的に マルチユースモードになる。
(\fBclientport\fR 参照)
.IP "\fBserverhost\fR" 4
.IX Item "serverhost"
これはトンネルを接続すべきリモートホストの名前である。
ホストの名称にはデフォルトはないので、
設定ファイルかコマンドラインのどちらかで、
必ずこれを指定しなければならない。
.Sp
2.0.0より前のバージョンでは、同じ意味で\fBremotehost\fRというキーワードが使用されていた。
後方互換性のために、このキーワードは現バージョンでも認識される。
.IP "\fBtargetport\fR" 4
.IX Item "targetport"
ここに指定したポート番号(リストも可)でターゲットホストに接続するように、
\&\fBZebedee\fRクライアントが\fBZebedee\fRサーバに要求する。
これが指定されない時のデフォルトは"\fBtelnet\fR" (ポート番号 23)である。
.Sp
ポート番号のリストを指定する時は、
ローカルポートがコマンドラインで指定されたのであれ、
\&\fBclientport\fR キーワードで指定されたのであれ、
ポートの数は正確にローカルポートの数と一致しなければならない。
.Sp
2.0.0より前のバージョンでは、同じ意味で\fBremoteport\fRというキーワードが使用されていた。
後方互換性のために、このキーワードは現バージョンでも認識される。
.PP
\fIサーバ専用キーワード(Server\-Only Keywords)\fR
.IX Subsection "サーバ専用キーワード(Server-Only Keywords)"
.PP
以下のキーワードはサーバとして動作する時に適用する。
.IP "\fBredirect\fR (コマンドラインでは \fB\-r\fR)" 4
.IX Item "redirect (コマンドラインでは -r)"
このキーワードはサーバがリダイレクトするポートのリストである。
(例 "\f(CW\*(C`telnet,ftp, 5900\-5910\*(C'\fR")
もし \fBredirect\fR キーワードが指定されない場合は、
どのポートへのトンネル接続要求も受け付けられる。
この方法(\fBredirect\fRを指定しないこと)はテスト中には便利だが、
セキュリティー面でのリスクがあるので、
もし可能ならば(このキーワードで)明示的に許可するポートを指定すべきである。
.Sp
このキーワード(または\fB\-r\fRオプション)は複数指定されてもよい。この場合は、
そのうちどれかのポートに指定されていればリダイレクトが許可される。
.IP "\fBtargethost\fR" 4
.IX Item "targethost"
デフォルトでは\fBZebedee\fR サーバは
全てのトンネルをローカルマシンのポートにリダイレクトする。
もし、このキーワードが指定されると、
全ての接続はその名称のホストへとリダイレクトされる。
トンネルを安全なネットワークの中にまで延長するのは無駄であるが、
この機能を使用すると、そのオーバーヘッドを省くことができて便利である。
また \fBftp\fR のトラフィックをトンネルする時にも使える。
(詳細は\s-1EXAMPLES\s0参照)
.Sp
\&\fBZebedee\fRがサーバモードで動作する時は、
通信をリダイレクトすべきホストの名称は、
コマンドラインの最後の付加的なパラメータとして指定することもできる。
.Sp
2.0.0より前のバージョンでは、同じ意味で\fBredirecthost\fRというキーワードが使用されていた。
後方互換性のために、このキーワードは現バージョンでも認識される。
.PP
\fI圧縮と暗号化関連のキーワード(Compression and Encryption Keywords)\fR
.IX Subsection "圧縮と暗号化関連のキーワード(Compression and Encryption Keywords)"
.PP
以下のキーワードは、トンネル内を流れるデータの圧縮と暗号化を制御する。
これらは、クライアントとサーバどちらでも使用される。
.IP "\fBcompression\fR (コマンドラインでは \fB\-z\fR)" 4
.IX Item "compression (コマンドラインでは -z)"
\&\fBZebedee\fR は圧縮方式として \fBzlib\fR をサポートする。
そして、もしコンパイル時に有効になっていれば\fBbzip2\fRもサポートする。
このキーワードで圧縮の方式と圧縮レベルを指定する。
この値の形式は \fItype:level\fR である。\fItype\fR は 
"\f(CW\*(C`zlib\*(C'\fR\*(L" と \*(R"\f(CW\*(C`bzip2\*(C'\fR"のどちらか、\fIlevel\fR は0から9の整数である。
プレフィックスなしで整数だけの場合は、\fBzlib\fRが選択される。
.Sp
\&\fIlevel\fR は使用可能な最大の圧縮レベルを設定する
(9が最大で0が圧縮なし)。
実際に使用される圧縮レベルは、クライアントの値とサーバの値の最小値である。
この目的では、(0以外の)\fBbzip2\fRレベルはいかなる\fBzlib\fRレベルの値より上であるとみなされる。
従って、サーバとクライアントのいずれかが\fBbzip2\fRレベルをサポートしていなければ、
プロトコルは\fBzlib\fRを選択する。
デフォルトの圧縮レベルは"\f(CW\*(C`zlib:6\*(C'\fR"である。
.Sp
\&\fBbzip2\fR圧縮の動作方式とバッファーサイズのために、
\&\fBbzip2\fRは連続的なデータのストリームが流れる場合にだけ使う意味がある。
通常の\fBtelnet\fRセッションのような、小さな転送では\fBzlib\fRの方が性能がよい。
どちらがあなたにとってよく働くかは、実験してみないとわからないだろう。
加えて、バッファーサイズが小さいので、\fBbzip2\fRの1より上からは得るものがない。
\&\fBZebedee\fRはこれより上の値はこの値に変更する。
.Sp
verbosity levelを2以上にすれば、
接続が終了した時に基本的な統計値がプリントアウトされるので、
どれだけ圧縮が有効だったか正確に知ることができる。
例えば、
.Sp
.Vb 2
\& zebedee(232/210):   read 166 bytes (265 expanded) in 3 messages
\& zebedee(232/210):   wrote 20969 bytes (30499 expanded) in 247 messages
.Ve
.IP "\fBgenerator\fR" 4
.IX Item "generator"
これは、Diffie\-Hellmanキー交換の\*(L"generator\*(R"で、16進数の文字列で指定する。
デフォルトは\*(L"2\*(R"である。
なんのことかわからなければ、
下手にいじらない方がいいだろう。
.IP "\fBkeygencommand\fR" 4
.IX Item "keygencommand"
このキーワードが指定されると、
この値(コマンド文字列)が秘密鍵を生成するために使用される。
そのコマンドは標準出力に1行の16進数を出力しなくてはならない。
この行は少くとも10桁の16進数であること。
.IP "\fBkeygenlevel\fR" 4
.IX Item "keygenlevel"
これは0と2の間の整数で、\fBZebedee\fRで使用する秘密鍵生成の強度を決定する。
デフォルトは2(最強)である。接続時のパフォーマンスが耐えがたい場合以外には、
一般的にはこれを変更しないほうがよい。
.Sp
簡単に言って、UNXI系のシステムではレベル2のキー生成のメカニズムは、
可能であれば \f(CW\*(C`/dev/random\*(C'\fR を使用する。
しかしながら、あまりにも多くの要求を連続的にこのデバイスに対して行うと、
カーネルが必要な\*(L"エントロピー\*(R"をかき集める間、
プロセスがブロックされる可能性がある(それが数秒になることもある)。
\&\f(CW\*(C`/dev/random\*(C'\fRが使用できない場合や
レベルが1にセットされた場合は、
\&\f(CW\*(C`/proc\*(C'\fRファイルシステムの現在の内容が(もしあれば)使用される。
レベル0では現在のプロセスにある情報だけが使用される。
.Sp
Windows上のシステムでは、現在のところ、
キー生成強度のレベルごとの違いはなく、
このキーワードは実際には無視される。
.IP "\fBkeylength\fR (コマンドラインでは \fB\-k\fR)" 4
.IX Item "keylength (コマンドラインでは -k)"
これは、Blowfish暗号化のキーのビット長の最大値の整数である。
この値は4から576の間の4の倍数でなければならない。
使用されるキー長はクライアントの値とサーバの値の最小値になる。
(\fBminkeylength\fR参照)
.Sp
デフォルトは128である。
特別なケースとして、この値が0に設定されると、
キーのネゴシエーションと暗号化は無効にされる。
.IP "\fBkeylifetime\fR" 4
.IX Item "keylifetime"
このパラメータの値が0以外に設定されると、これ以降の接続において、
クライアントはセッションキーの導出のために、以前設定されたshared secret keyを
再利用するように要求する。
つまり\fBZebedee\fRのクライアントとサーバは、
最初の接続においてのみキー交換の対話を全て行なう。
それ以降の接続では、キーの有効期限が切れるまでは、同じsecret keyが再利用され、
このキーからsession keyが導出される。
キーの有効期限が切れると、自動的に新しいキーの交換が行なわれる。
.Sp
そして、このキーワードが、shared secret keyが有効な期間を指定する。
これは、既に接続された接続には影響しないで、新しい接続だけに影響する。
.Sp
このキーワードの値の単位は秒であり、65535(約18時間)以下でなければならない。
デフォルトは3600秒(1時間)である。
このキーワードの値を0に設定すると、キーの再利用は行なわれなくなり、
接続の度に、完全なshared keyの交換手続きが行なわれる。
つまり、クライアントもサーバも毎回秘密鍵を新しく生成するとみなす。
ただし、この方法はパフォーマンスに多大な影響があるので、
偏執狂的に高度な安全性を必要とする場合以外には勧められない。
.IP "\fBminkeylength\fR" 4
.IX Item "minkeylength"
これは、クライアントまたはサーバで許容される最小のキー長を指定する。
クライアントがサーバのレベルより小さい値を要求すると、
サーバはここで指定した最小値を返答する。
サーバがクライアントの最小値より下のレベルを返答すると、
クライアントは接続を終了する。
.Sp
デフォルトは0である。
.IP "\fBmodulus\fR" 4
.IX Item "modulus"
このキーワードの値は、Diffie\-Hellmanキー交換の剰余値を表す16進数の文字列である。
これが何かわかる人で数学オタクの人以外はいじっちゃだめ。
.Sp
デフォルトの値は下記の1024ビットの素数である。
.Sp
.Vb 4
\& f488fd584e49dbcd 20b49de49107366b 336c380d451d0f7c 88b31c7c5b2d8ef6
\& f3c923c043f0a55b 188d8ebb558cb85d 38d334fd7c175743 a31d186cde33212c
\& b52aff3ce1b12940 18118d7c84a70a72 d686c40319c80729 7aca950cd9969fab
\& d00a509b0246d308 3d66a45d419f9c7c bd894b221926baab a25ec355e92f78c7
.Ve
.Sp
これは Peter Gutman の \fBCryptLib\fR の中の \fItestdh.h\fR というファイルから
とられた。
そこには、この値が \*(L"generated by Colin Plumb for \s-1SKIP\s0\*(R"だとコメントがある。
それから \*(L"these values were chosen as representative
well-known public values to allay fears of possible trapdoors in
self-generated values.  The generation method and actual values can be
checked against the \s-1SKIP\s0 standards document.\*(R" だとさ。
.IP "\fBprivatekey\fR" 4
.IX Item "privatekey"
デフォルトでは、\fBZebedee\fRはセッションごとに新しい秘密鍵を生成する。
しかし、もしあなたが毎回同じキーを使いたい場合は、
16進数の文字列としてこれを指定すればいい。
もし公開鍵暗号による認証(identitychecking)を使用したい場合は、
必ずこれを設定しなくてはいけない。
キーが少くとも10桁は必要なことに注意すること。
.PP
\fI様々なキーワード(Miscellaneous Keywords)\fR
.IX Subsection "様々なキーワード(Miscellaneous Keywords)"
.PP
以下のキーワードはクライアントにもサーバにも等しく適用される。
.IP "\fBcheckidfile\fR" 4
.IX Item "checkidfile"
これは、接続を許可する前にチェックするアイデンティティを複数記述したファイルの名称である。
これについてはidentity checkingで詳しく述べる。
このファイルはひとつしか指定できない。もし複数出現したら、
最後の値が使用される。
.Sp
もし、\fBkeylength\fRが0であることに
(クライアントとサーバが)同意した場合は、アイデンティティのチェックは行なわれない。
.IP "\fBdebug\fR (コマンドラインでは \fB\-D\fR)" 4
.IX Item "debug (コマンドラインでは -D)"
これは\fBZebedee\fRが \*(L"debug\*(R" モードで動作するかを指定する真偽値である。
\&\*(L"debug\*(R" モードではサーバは
(\fBmultiuse\fRモードのクライアント)は
一度に一つの接続しか受け付けない。
そして、別プロセスや別スレッドを生成することなく \*(L"inline\*(R" で動作する。
これはデバッガ上でプログラムを動かす時に便利である。
デフォルトはfalseである。コマンドラインオプションの \fB\-D\fR は
これを \fBtrue\fR に設定するのと同じである。
.Sp
注:この設定は、UDPモードでは正しく動作しないので、試さないほうがいい。
.IP "\fBdetached\fR (コマンドラインでは \fB\-d\fR)" 4
.IX Item "detached (コマンドラインでは -d)"
これはプロセスが制御端末から自分自身を切離してバックグラウントで
(UNIX用語ではデーモンとして)動作するかどうか指定する真偽値である。
これはクライアントでもサーバでも有効であり、
デフォルトは \fBtrue\fR である。コマンドラインオプションの\fB\-d\fRは
これを \fBfalse\fR に設定するのと同じである。
.Sp
注:Windowsのコマンドプロンプトではこれがうまく動作しないこともあるようだ。
その徴候は、コンソールウインドウへの出力が止まり割込みのsignalが無視されるが、
コンソールのプロンプトが\fBZebedee\fRが終了するまで表示されないことだ。
これを回避するには、以下のように \*(L"start\*(R" コマンドを使用すればよい。
.Sp
.Vb 1
\& DOS> start zebedee \-f server.zbd
.Ve
.Sp
これは\fBZebedee\fRを新しいコンソールセッションで起動し、そこから切り離す。
切り離す前に一瞬だけチラリとそのコンソールが見えるが、それが消えても
\&\fBZebedee\fRはバックグラウンドで動作している。
.IP "\fBinclude\fR" 4
.IX Item "include"
これは別の設定ファイルの名前を指定する。
そのファイルはこのファイルの残りを処理する前、
この時点で処理される。
例えば、秘密鍵をもっときっちりガードしたファイルに分離して保存した場合に、
そのファイルを取り込むために使用される。
includeは5レベルの深さまでに限定される(最初のファイルをレベル1として)。
これはうっかり無限ループを作らないためである。
.IP "\fBmaxbufsize\fR" 4
.IX Item "maxbufsize"
これは、
\&\fBZebedee\fR がアプリケーションからデータを読むために使用するバッファの長さ(バイト単位)を指定する。
実際に使用されるバッファの長さはサーバの値とクライアントの値の最小値になる。
.Sp
デフォルトでは、\fBZebedee\fRはトンネルの両端で
サーバプログラム、クライアントプログラムから8192バイト単位で読み出す。
例えば、すごく対話的なアプリケーションがあって、
大きなデータ転送を待つためにひどいレスポンスだったりした時など、
これを小さくしたいこともあるだろう。
バッファサイズは1バイトまで縮めることができるが、
おかしな動きをデバッグしようとしているのか時間を無駄にしたいのでなければ、
これはお勧めできない。
逆に、大量のデータの転送があって、
圧縮をめいっぱい効かせたい場合は、16383バイトまで大きくしてもよい。
注:\fBmaxbufsize\fR は \fBZebedee\fR が使用するメモリ量には関係ない。
一度に読みこむデータのかたまりのサイズだけに影響する。
.Sp
UDPモードでは、バッファサイズは扱えるデータグラムの最大長にも影響する。
現在のバッファサイズより大きなデータグラムは分断され、
それを受信するアプリケーションが落ちることになりがちだ。
16383バイト以上のデータグラムは扱うことができない。
.IP "\fBmessage\fR" 4
.IX Item "message"
verbosity level が1ならば、設定ファイルのこの部分を処理した時に、
このメッセージがログに記録される。
.IP "\fBname\fR (コマンドラインでは \fB\-n\fR)" 4
.IX Item "name (コマンドラインでは -n)"
これは、実行ファイルのファイル名の代わりに、
メッセージの中で使われるプログラム名称になる。
Windows環境では、インストールあるいは削除されるサービスの名前としても用いられる。
.IP "\fBlogfile\fR (command-line \fB\-o\fR)" 4
.IX Item "logfile (command-line -o)"
これはメッセージが出力されるファイルの名前である。
もし省略されるとメッセージは標準エラーに出力される。
.Sp
2つの特殊なファイル名も正しい名前として認識される。
もし、名称が\fB\s-1NULL\s0\fRだと、全てのメッセージ出力は止められる。
\&\fB\s-1SYSLOG\s0\fRだと、メッセージはホストのシステムログに出力される。
Windowsシステムでは、アプリケーションイベントログを意味する。
他のシステムでは、メッセージは\fBsyslog\fR サービスに出力される。
.IP "\fBserverport\fR" 4
.IX Item "serverport"
これは、\fBZebedee\fR サーバが接続を待ち受けるポートである。
デフォルトはTCPモードでは11965 (0x2EBD)、UDPモードでは11230(0x2BDE)である。
サーバでこれを指定すると、サーバはこのポートでlistenする。
クライアントでこれを指定すると、クライアントは
サーバのこの番号のポートに接続することになる。
.IP "\fBtimestamplog\fR (コマンドラインでは \fB\-t\fR)" 4
.IX Item "timestamplog (コマンドラインでは -t)"
これは、ログメッセージにタイムスタンプを含めるかどうかを示す真偽値である。
コマンドラインオプションの \fB\-t\fR はこれを\fBtrue\fRに設定するのと同じである。
.IP "\fBudpmode\fR (コマンドラインでは \fB\-u\fR)" 4
.IX Item "udpmode (コマンドラインでは -u)"
デフォルトでは\fBZebedee\fRは、コネクションベースのTCP/IPの通信を扱う。
もし、このキーワードが指定されると、かわりにコネクションレスのUDP/IPの通信を扱う。
.Sp
この場合でも、\fBZebedee\fRのクライアントとサーバ間のトンネルはTCP/IP接続を使用する。
UDPの宛先ごとに別々の接続が使用される。
UDPはコネクションレスなので、通信が完了したことを簡単に知ることはできない。
この理由で、\fBZebedee\fRの接続は一定の時間通信が無い場合にタイムアウトする必要がある。
この時間は\fBudptimeout\fRの値で制御される。
.Sp
すでにタイムアウトしてしまったトンネルに向けたデータが到着した場合、
接続を再確立する必要がある。
このために、アプリケーションの特性によっては、
UDPモードのパフォーマンスがよくないように見えることもある。
\&\fBkeylifetime\fRの値を変更して、
接続のセットアップの時間を最小にすれば、パフォーマンスを向上させることができる。
\&\fBudptimeout\fR の値を変更することも同様に役に立つ。
.Sp
コマンドラインオプションの\fB\-u\fRは、この値を\fBtrue\fRに設定するのと同じである。
.IP "\fBudptimeout\fR" 4
.IX Item "udptimeout"
デフォルトでは、UDPモードのトンネルは、300秒通信が無いと閉じられる。
このキーワードでその時間を変更できる(単位は秒)。
この値は65535より大きくなってはいけない。
これを0にすると一切通信が行なわれない(そういう設定もできるけど…)。
.IP "\fBverbosity\fR (コマンドラインでは \fB\-v\fR)" 4
.IX Item "verbosity (コマンドラインでは -v)"
これは、ログするメッセージのレベルを示す整数値である。
0だとエラーメッセージだけ、
5にするとメッセージトラフィックの非常に細かいディテールまで含める。
デフォルトは1であり、通常はそれが最も使いやすい。
.Sp
メッセージは \fIstderr\fR に出力される(コマンドラインオプションの\fB\-o\fRか
\&\fBlogfile\fR キーワードでリダイレクトされない限り)
一般的なメッセージはこんな感じである:
.Sp
.Vb 1
\& zebedee(54/119):  Listening on local port 1172
.Ve
.Sp
カッコの中の数字はメッセージを出力したプロセスとスレッドのIDを表している。
全てのエラーメッセージはレベル0でもログが取られ、
以下の様に、先頭が \f(CW\*(C`ERROR\*(C'\fR という単語から始まる。
.Sp
.Vb 1
\& zebedee(54/119): ERROR: failed to connect to localhost:11965
.Ve
.Sp
メッセージはログが取られたレベルに従ってインデントされる。
.PP
\fIその他のオプション(Other Options)\fR
.IX Subsection "その他のオプション(Other Options)"
.PP
設定ファイルに対応するものを持たないコマンドオプション
がいくつかあるので、それについてここで説明する。
.IP "\-p" 4
.IX Item "-p"
このオプションで \fBZebedee\fR は秘密鍵の値を標準出力に出力する。
この出力は設定ファイルでそのまま使用できる形式である。
例えば、
.Sp
.Vb 1
\& privatekey "c480bd48f707c69dec54c9e7b6e22dd04cac659e"
.Ve
.Sp
の様な形である。
.IP "\-P" 4
.IX Item "-P"
このオプションで \fBZebedee\fR はidentity checking で
使用できるパブリックアイデンティティを生成する。結果は標準出力に書かれる。
例えば、
.Sp
.Vb 1
\& ef8153a0e392df005f67321ca2f0ace5bb8c5a1f myhostname
.Ve
.Sp
の様な形である。
.Sp
このオプションは秘密鍵を含む設定と共に指定するか、
\&\fB\-p\fR と共に用いて秘密鍵と公開鍵を両方同時に生成しなくてはいけない。
.IP "\-h" 4
.IX Item "-h"
このオプションは以降の引数をファイル名とみなす。
そして、それぞれのファイルは8192バイトのかたまりとして読みこまれ、
SHAハッシュが計算される。
引数がない場合や引数が"\f(CW\*(C`\-\*(C'\fR"であった場合は標準入力のハッシュが計算される。
例えば、
.Sp
.Vb 4
\& $ zebedee \-h /etc/passwd
\& bb1e734aeffd2111417761f5938dea3b53759598 /etc/passwd
\& $ zebedee \-h < /etc/passwd
\& bb1e734aeffd2111417761f5938dea3b53759598 \-
.Ve
.Sp
の様な形である。
.IP "\-H" 4
.IX Item "-H"
こちらは\fB\-h\fRと似ているが、引数が文字列として扱われ、
その文字列のSHAハッシュが計算され表示される。
.Sp
.Vb 3
\& $ zebedee \-H hello world
\& ac62a630ca850b4ea07eda664eaecf9480843152 hello
\& 86bf25ecb8a40b40b885c097c683b6e236fc8085 world
.Ve
.IP "\-S (Windows only)" 4
.IX Item "-S (Windows only)"
Windowsシステムでは \fBZebedee\fR を
サービス(ブート時に自動的に起動され独立して動くプロセス)として
インストールすることもできる。
.Sp
\&\fBZebedee\fRは\fBinstall\fRパラメータと設定ファイルの名前を指定することで
サービスとしてインストールされる。例えば、
.Sp
.Vb 1
\& zebedee \-Sinstall=c:\ezebedee\eservice.zbd
.Ve
.Sp
の様な形である。
.Sp
常に、設定ファイルのフルパスを指定しなければならない。
このファイルはスタートアップ時に読みこまれ、
サービスが動作するために必要なパラメータを全て含んでいなければならない。
.Sp
デフォルトでは、
インストールされるサービスの名前はプログラムファイルの名前から取られる。
従って通常は\fBZebedee\fRになる。
しかし、\fB\-n\fRオプションを使用して変更することもできる。
.Sp
.Vb 1
\& zebedee \-n "Zebedee Client Service" \-Sinstall=c:\ezebedee\eclientsvc.zbd
.Ve
.Sp
一旦、サービスがインストールされると、次のシステム再起動から自動的に起動される。
もしくは(Windows NTの場合)サービスコントロールパネルで手動起動することもできる。
.Sp
サービスを削除するにはまずサービスを終了してから、\fB\-S\fRオプションと 
\&\fBremove\fR パラメータを使う。
そして、もし必要ならば\fB\-n\fRオプションでサービスの名称を指定する。
例えば、
.Sp
.Vb 1
\& zebedee \-n "Zebedee Client Service" \-Sremove
.Ve
.Sp
の様な形である。
.Sp
\&\fB\-S\fRのパラメータは他に \fBrun\fR がある。これは内部で \fBZebedee\fR の
サービススタートアップコードを起動するために使うもので、
ユーザが直接使用してはならない。
.IP "\-x" 4
.IX Item "-x"
コマンドラインで指定できない設定ファイルのパラメータを
指定するために、このオプションを使用することもできる。
これに文字列の引数をつけると、
それがあたかも設定ファイルの1行であるかのように処理される。
コメントは認識されるが、\*(L"\e\*(R"の継続行は使用できない。
例えば、
.Sp
.Vb 1
\& zebedee \-x " server true # It\*(Aqs a server!"
.Ve
.Sp
というまわりくどいやりかたでも次のコマンド
.Sp
.Vb 1
\& zebedee \-s
.Ve
.Sp
と同じ効果を得ることができる。
.SS "Identity Checking"
.IX Subsection "Identity Checking"
\&\fBZebedee\fR はデフォルトでは、2点間に暗号化チャネルを生成するに過ぎない。
ご承知の通り、データは \*(L"on the wire (通信線上)\*(R" での盗聴からは守られるが、
あなたが想定している相手に接続されているか否かは保証されない。
これは、\*(L"man\-in\-the\-middle (第三者による横取り)\*(R" アタックに対しては無防備である。
もし、あなたがデータの圧縮と、盗聴から守ることを第一に心配しているなら、
あなたはこの条件に満足するだろう。
しかし、あなたの通信が第三者に横取りされていないことに対する保証を求めるなら、
\&\fBZebedee\fR はそれを行うための便宜を提供する。
.PP
もし、同一の素数と原始根と秘密鍵が用いられるなら、それらは 
Diffie-Hellman の鍵交換プロトコルのために、常に同じ公開鍵を生成するだろう。
もし、あなたが(設定ファイルの\fBprivatekey\fRキーワードにて設定された)
固定された秘密鍵を用いるなら、
\&\fBZebedee\fR は素数と原始根と秘密鍵の値の全てをハッシュして \*(L"fingerprint (指紋)\*(R" を生成することができる。
これは、\fB\-P\fR オプションにより行われる。 
例えば、server.key ファイルが次の値
.PP
.Vb 1
\& privatekey "1e34d6769502bae1087c18d2e8c8776e4a17ddaf"
.Ve
.PP
であるとき、
.PP
次のコマンド
.PP
.Vb 1
\& $ zebedee \-P \-f server.key > server.id
.Ve
.PP
を実行すると、
.PP
このような出力
.PP
.Vb 1
\& 135f04050961d37553731250d5c6f7495f088b32 myhostname
.Ve
.PP
が得られる。
.PP
この最初の16進数が \*(L"fingerprint (指紋)\*(R" である。 
行中の他の文字列は、このアイデンティティの所有者を表すコメントである。
デフォルトでは、これはアイデンティティが生成されたマシンのホスト名である。
.PP
設定ファイルにおいて 
\&\fBcheckidfile\fR キーワードが設定された場合、その値は 
\&\*(L"fingerprint (指紋)\*(R" 行を記述したファイルのファイル名である。 もし、接続
先のアイデンティティがファイル中のいかなる値とも一致しない場合、
接続は切断される。
.SS "その他のセキュリティ関連の注記(Notes on Other Security Issues)"
.IX Subsection "その他のセキュリティ関連の注記(Notes on Other Security Issues)"
.IP "Message Integrity" 4
.IX Item "Message Integrity"
プロトコルのオーバーヘッドを可能な限り小さくするために、
\&\fBZebedee\fR は伝送されたデータの正しさに対する確認は何も行っていない。
そのため、アタッカーは途中でデータパケットを改変することができる。
しかし、暗号の使用はデータを任意に変換することを極めて困難にしているのではないか
(例えば、"\f(CW\*(C`ls \-l\*(C'\fR\*(L"を\*(R"\f(CW\*(C`rm \-f\*(C'\fR"に書き換えられるかい?) 。
しかし、\fBZebedee\fR はランダムなデータが送られたことによる影響から
アプリケーションを守ることは行わない。
.IP "Replay and Insertion Attacks" 4
.IX Item "Replay and Insertion Attacks"
多くのネットワークシステムにおいて有り得る攻撃の一つは
データのキャプチャリングであり、良く知られた効果を及ぼす
(例えば、管理者の \fBtelnet\fR セッションにはある種の\*(L"危険な\*(R"操作が伴い、
その操作を後に繰り返されたらどうなるか)。
これを行うには、暗号化されたデータストリームを改変する必要は無いが、
サーバに送られた同じネットワークパケットは、同じレスポンスを引き出すだろう。
.Sp
\&\fBZebedee\fR が \*(L"anonymous\*(R" モードで動作しているとき、
セッション毎に異なる鍵が生成されるため、
このようなアタックが成功する危険は非常に小さい。 
しかし、identity checkingの機能が使われているときには
鍵は固定されているので、再生は実際に可能性がある。 
\&\fBZebedee\fRは、一つ一つの接続毎にユニークなセッションキーを生成することで、
この問題に対処している。
この方法では、接続のセットアップの最後に、チャレンジ\-レスポンスの交換が行なわれ、
相手側のシステムがshared secret keyを保持しており、
以前に記録されたデータをオウム返ししているわけではないことが、
確認される。
.Sp
加えて、\fBZebedee\fR は Blowfish 暗号法を \*(L"cipher feedback\*(R" モードで用いており、
データのあらゆる部分の複号は、
それ以前の全てのデータパケットの複号が成功しているかどうかに依存する。 
チャレンジ・レスポンスはデータストリームの \*(L"salts\*(R" を交換するので、
トンネル化されたプロトコルに \*(L"known plain-text\*(R" アタック(辞書攻撃)を加えるのは
より困難になる。
.IP "Key Generation" 4
.IX Item "Key Generation"
良くない鍵の使用は、最強の暗号化メカニズムをも汚すことができる。 
鍵を生成するとき、\fBZebedee\fR は可能な限り推測が困難なデータをかき集めて、
それを \s-1SHA\s0 ハッシュアルゴリズムにより \*(L"ステア (かき混ぜる)\*(R" する。
.Sp
Windowsの場合、アタッカーが既にシステムにアクセスしていれば、
取得可能なあらゆるデータは予測することができる。 
しかし既に言及したように、
ほとんどの用途においてこれは許容できるだろう。
興味があるならば、プログラム中のコメントに詳細が説明されているので、
参照されたい。
.Sp
もし、鍵の生成メカニズムに不満があるなら、
設定ファイル中の\fBkeygencommand\fR オプションを用いて、
外部の鍵生成プログラムを呼べば良い。 
組み込まれている性能を改善する提案は大歓迎だ!
.SH "トラブルシューティング(TROUBLESHOOTING)"
.IX Header "トラブルシューティング(TROUBLESHOOTING)"
\&\fBZebedee\fR は「箱から出してすぐそのまま」動くべきだが、あなたはトラブル
にあうかもしれない。ほとんどのトラブルは接続の確立時に起こる
(接続さえうまくいけば、データ転送はスムーズにいくことが多い)。
(接続の)セットアップの手順に何が起こっているか簡単に見るには\fB\-v\fRオプションを
使えばよい。\fB\-d\fR \fB\-D\fR もいっしょに使って、\fBZebedee\fRを端末から終了でき
るようにして、一度に一つの接続しか処理しないようにしたほうがい
いかもしれない。だから、こんな感じになるだろう。
.PP
.Vb 1
\& zebedee \-dD \-v 3 \-s
.Ve
.PP
ロギングレベルを3に設定することで、
接続のセットアップの主なやりとりを見ることができる。
問題がその後に起きてると確信が持てるならば、
レベルを4か5にすれば、
(接続時だけでなく)実際の通信で何がやりとりされているかも見ることができる。
.SH "EXAMPLES"
.IX Header "EXAMPLES"
\&\fBZebedee\fR のパッケージには、たくさんのサンプルの設定ファイルが含まれている。
ここでは、それらの使用法と \fBZebedee\fR を
特定のいくつかのプロトコルで使用する具体的な方法を述べる。
.SS "サーバ設定の例(Example Server Configuration)"
.IX Subsection "サーバ設定の例(Example Server Configuration)"
\&\fBZebedee\fRのパッケージに含まれる \fIserver.zbd\fR という設定ファイルがある。
これにはよく使われるほとんどのオプションの設定例がある。
.PP
.Vb 6
\& #
\& # Sample Zebedee server configuration file
\& #
\& # This shows the use of many, but not all, of the configuration file
\& # options available for use by a server.
\& #
\& 
\& verbosity 2            # Slightly more than basic messages
\& 
\& server true            # Yes, it\*(Aqs a server!
\& detached true          # Run detached from terminal
\& udpmode false          # Are we operating in UDP mode?
\& 
\& # Uncomment the following line to log messages to a file
\& #
\& #  logfile \*(Aq./server.log\*(Aq
\& #
\& # Or to log to the system logging facility uncomment this:
\& #
\& #  logfile SYSLOG
\& 
\& # Uncomment the following line if you want to use a fixed private
\& # key stored in a static file. The file should contain a line of
\& # the form "privatekey hexadecimal\-key\-string"
\& #
\& #  include \*(Aq./server.key\*(Aq
\& 
\& keygenlevel 2          # Generate maximum strength private keys
\& 
\& # To validate the identity of clients uncomment the following
\& # line:
\& #
\& #  checkidfile \*(Aq./clients.id\*(Aq
\& 
\& # Set up allowed redirection ports.
\& # These should be pretty safe \-\- but it\*(Aqs not a good idea
\& # to open up all ports.
\& 
\& redirect "telnet ftp"          # Basic services
\& redirect 5900\-5999             # VNC traffic
\& redirect 6000\-6010             # X Window System
\& redirect "daytime chargen"     # Ports useful for testing
\& 
\& targethost localhost           # Redirection is to the local machine
\& 
\& compression zlib:9             # Allow maximum zlib compression
\& keylength 256                  # Allow keys up to 256 bits
\& keylifetime 36000              # Shared keys last 10 hours
\& maxbufsize 16383               # Allow maximum possible buffer size
.Ve
.PP
認証の機能をテストするためには、
\&\fBcheckidfile\fRの行をコメントアウトし、
パッケージに含まれる\fIclient1.key\fRか\fIclient2.key\fRというファイルをクライアント側で使用すればよい。
.SS "VNCの使用例(Use with \s-1VNC\s0)"
.IX Subsection "VNCの使用例(Use with VNC)"
\&\fBZebedee\fRを作った理由の一つとして、ダイアルアップでVNCを使うということがある。
VNCは「リモートフレームバッファコンセプト」を使い、
リモートディスプレイを提供するフリーのシステムである。
Windowsのデスクトップを離れた所に表示することもできるし、
\&\*(L"Xvnc\*(R"サーバを使って X のデスクトップを
VNCクライアントマシンから操作することもできるし、
Javaを使えるブラウザーの中から操作することもできる。
詳しくはhttp://www.uk.research.att.com/vnc/を参照のこと。
.PP
提供されるサーバの設定例である\fIserver.zbd\fR は 5900\-5999 ポートを
リダイレクトしてVNCセッションをトンネリングする。
このファイルはUNIXでもWindowsでも使用できるが、
Windowsで使うためには、レジストリの\*(L"AllowLoopback\*(R"フラグを
セットする必要があるので注意。
以下の断片を(先頭のスペースを取り除いてから)ファイルに保存して 
\&\fBregedit\fR に読ませれば、そのトリックを実行する。
.PP
.Vb 1
\& REGEDIT4
\& 
\& [HKEY_LOCAL_MACHINE\eSOFTWARE\eORL\eWinVNC3]
\& "AllowLoopback"=dword:00000001
\& 
\& [HKEY_LOCAL_MACHINE\eSOFTWARE\eORL\eWinVNC3\eDefault]
.Ve
.PP
この内容は \fBZebedee\fR パッケージの中の \fIvncloopback.reg\fR にも含まれている。
このレジストリを設定すれば、コマンドラインで与えられたホストにトンネリングされたVNC ビューワを 
\&\fIvncviewer.zbd\fR で起動することができる。
デフォルトでは、サーバの(WinVNCのデフォルトである)5900ポートにトンネルするが、
コマンドラインで指定して上書きすることもできる。
以下に \fIvncviewer.zbd\fR の内容を示す。
.PP
.Vb 5
\& #
\& # Zebedee configuration file to start up a tunnelled VNC session
\& #
\& # Usage: zebedee \-f vncviewer.zbd remote\-host[:vnc\-port]
\& #
\& 
\& verbosity 1         # Basic messages only
\& 
\& server false        # It\*(Aqs a client
\& detached true       # Detach from terminal
\& 
\& message "Starting VNC viewer on localhost:99"
\& 
\& # On Windows systems you might use the following:
\& 
\& command \*(Aq"c:\eProgram Files\eORL\eVNC\evncviewer.exe" localhost:99\*(Aq
\& 
\& # On UNIX systems you might use the following:
\& 
\& # command \*(Aqvncviewer localhost:99\*(Aq
\& 
\& targetport 5900     # Remote VNC server on port 5900 unless overridden
\&                     # by a value specified on the command\-line
\&
\& clientport 5999     # Local connection on 5999 \-\- i.e. localhost:99
\& 
\& compression 6       # Request normal Zlib compression
.Ve
.PP
以下のようにこのファイルを使用すると、
.PP
.Vb 1
\& zebedee \-f vncviewer.zbd somehost:5901
.Ve
.PP
\&\fIsomehost\fRの5901番ポートのVNCサーバにトンネルしたVNCビューワを起動する。
ビューワはローカルホストの5999番ポートに接続する。
.PP
VNCはJavaのビューワもサポートしている。
もしサーバがポート59xxで動作していたら、
ビューワを58xxからダウンロードすることができる。
しかしながら、
どうもJavaビューワはクライアントへのメインのVNCポート番号で通信しているようだ。
そのため、Javaビューワでこれをトンネルするには、
ローカルとリモートで同じポート番号を使う必要がある。
そのため、例えば、5901番のポートを使っているVNCサーバへのトラフィックを
トンネルするには、次のようにする。
.PP
.Vb 1
\& zebedee 5801,5901:remotehost:5801,5901
.Ve
.PP
もしローカルマシンでも5901番ポートを使ったVNCサーバが動いていると、
これはうまくいかない。
しかし、ポートが衝突しないように両者を調整することは可能である。
.PP
もうひとつだけ言っておくことがある。
VNCをデータ圧縮とともに使おうとしているなら、
VNCのprotocol encodingに関して実験したほうがよい。
私は、\*(L"raw\*(R" encoding が圧縮の効果が高く、
遅い回線上ではよりよいパフォーマンスを示すことを発見した。
しかし、あなたの場合は違う結果となるかもしれない。
.SS "X Window Systemの使用例(Use with the X Window System)"
.IX Subsection "X Window Systemの使用例(Use with the X Window System)"
X Window Systemは6000番以上のポートを使う。
.PP
\&\fBxlocal\fR というローカルマシンのポート6000でX サーバが動作しているとする。
これは通常、\fBxlocal:0\fR というディスプレイで使われているポートである。
そして、\fBxremote\fRという(リモート)マシンから、
ローカルのディスプレイに安全な \fBxterm\fR のセッションを送り返したいものとする。
これを行なうには、以下のコマンドを \fBxlocal\fR で実行する。
.PP
.Vb 1
\& zebedee \-r 6000 \-s
.Ve
.PP
そして、\fBxremote\fR では
.PP
.Vb 1
\& zebedee 6001:xlocal:6000
.Ve
.PP
を実行する。
.PP
このことは、\fBxremote\fR上で、環境変数の\fB\s-1DISPLAY\s0\fRが\f(CW\*(C`localhost:1\*(C'\fRに設定されていれば、
Xのトラフィックは\fBxlocal\fRに到着することを意味する。
そのため、例えば\fBxterm\fRを安全に\fBxremote\fRから送ろうとするなら、
\&\fBxremote\fR上で次のコマンドを実行する必要がある。
.PP
.Vb 1
\& xterm \-display localhost:1
.Ve
.PP
これが正しく動作するためには、 
\&\fBxremote\fRのXサーバのアクセスコントロールリストに\fBlocalhost\fRのエントリーを
追加しなくてはならない。
これを行うには次のコマンドを実行する。
.PP
.Vb 1
\& xhost +localhost
.Ve
.SS "HTTPの通信を安全にする(Securing \s-1HTTP\s0 traffic)"
.IX Subsection "HTTPの通信を安全にする(Securing HTTP traffic)"
\&\fBZebedee\fRクライアントを\*(L"multi\-use\*(R"モードで動作させることで、
全てのWebサーバへの通信を安全にすることができる。
もし、Webサーバが \fBwebhost\fR のポート80で動作しており、
そのサーバマシンで \fBZebedee\fR サーバも動作しているとしたら、
次のコマンドがローカルマシンの8000番ポート経由のトンネルを設定する。
.PP
.Vb 1
\& zebedee 8000:webhost:80
.Ve
.PP
will set up a tunnel via port 8000 on the client host. Now any URLs that
previously were addressed via \fBwebhost\fR, for example:
.PP
.Vb 1
\& http://webhost/private/index.html
.Ve
.PP
は、この状態では次のURLで安全にアクセスできる。
.PP
.Vb 1
\& http://localhost:8000/private/index.html
.Ve
.PP
"\f(CW\*(C`localhost:8000\*(C'\fR"をあなたのプロキシーとして設定することで、
全てのHTTPのトラフィックを安全なトンネル経由にすることもできる。
しかし、注意すべきことは、HTTPのプロキシー設定以外にこの設定をしてはいけない。
Secure HTTPを含む他のプロトコルは他の方法でリダイレクトする必要がある。
ほとんどのブラウザは違うドメインに違うプロキシーを割りあてる設定も可能である。
そのため、必要なものだけ選んでガードすることもできる。
これを行なう方法についてはブラウザのマニュアルを参照されたし。
.SS "FTPの通信を安全にする(Securing \s-1FTP\s0 traffic)"
.IX Subsection "FTPの通信を安全にする(Securing FTP traffic)"
以下の手段で、
\&\fBZebedee\fRを使い多くのFTPサーバへのFTPコントロールコネクション
(ユーザ名とパスワードが送られるコネクション)を守ることができる。
さらに、\fBZebedee\fRパッケージに含まれる \fBftpgw.tcl\fR スクリプトによって、
パッシブモードのデータコネクションさえも守ることができる。
.PP
FTPサーバを扱う最も単純な方法は、以下のように \fBZebedee\fR を起動することだ。
.PP
.Vb 1
\& zebedee \-s \-r ftp ftpserverhost
.Ve
.PP
FTPサーバと同じマシンで \fBZebedee\fR を動作させていても、コマンドラインで
明示的にホスト名を指定する必要がある(または
\&\fBredirecthost\fRキーワードを使用)。それを
\&\fBlocalhost\fRとして参照してはいけない。クライアントシステムでは
\&\fBZebedee\fRを次のように起動して、ポート10000番経由のマルチユーストンネル
を構築する。
.PP
.Vb 1
\& zebedee 10000:ftpserverhost:ftp
.Ve
.PP
FTPサーバに接続するには、次のようなコマンドを使用する。
.PP
.Vb 1
\& ftp clienthost 10000
.Ve
.PP
くどいようだが、\fBlocalhost\fR でなくローカルクライアントのホスト名を使うこと。
もし、windowsの標準FTPクライアントのように、
あなたのFTPクライアントがコマンドラインでポートを指定できない時は、
プログラムの中で(FTPセッションの中で) 
"\f(CW\*(C`open clienthost 10000\*(C'\fR" というコマンドを使うことができる。
もし、クライアントマシンでFTPサーバが立ち上がっていなければ、 
\&\fBZebedee\fR をこのように起動してもよい。
.PP
.Vb 1
\& zebedee ftp:ftpserverhost:ftp
.Ve
.PP
これだとFTPクライアントプログラムは次のように起動できる。
.PP
.Vb 1
\& ftp clienthost
.Ve
.PP
FTPのコントロールコネクションとデータコネクションが同じ所から来ているか
どうかチェックするFTPサーバがあるが、そういうサーバに対しては上記の手法は
うまくいかない。\fBwu-ftpd\fR のようなメジャーなFTPサーバはこの点に
ついて厳しくチェックを入れる(セキュリティ面からは望ましいことだが…)。
もし、サーバへの接続は明らかにうまくいくのに、
ファイルのリストや読み出しで失敗したりハングアップするなら、
そのサーバがここを厳しくチェックするタイプだった、ということだ。
.PP
この問題を克服するのを助けるために、\fBftpgw.tcl\fR というFTPゲートウェイの
スクリプトが \fBZebedee\fR パッケージには含まれている。
このプログラムはフリーに入手可能であるTclスクリプティング言語
(http://www.scriptics.com参照)で書かれていて、
FTPのリクエストを中継して再送信し、サーバから\fBZebedee\fR の存在を隠す。
これは \fBZebedee\fR サーバと同じマシンで走らせる必要がある。
FTPサーバも同じマシンで動いているなら、単にこう起動すればよい。
.PP
.Vb 1
\& tclsh ftpgw.tcl
.Ve
.PP
これでゲートウェイはポート2121で待ち受ける。明らかに、実際の使用ではこれ
をバックグラウンドで起動したいだろう。それから、\fBZebedee\fRサーバを
.PP
.Vb 1
\& zebedee \-s \-r 2121
.Ve
.PP
として起動する。
.PP
このケースではローカルホスト名を指定する必要はない
(したければしてもかまわないが)。
クライアント側ではこうする。
.PP
.Vb 1
\& zebedee 2121:ftpserverhost:2121
.Ve
.PP
それからこうする。
.PP
.Vb 1
\& ftp clienthost 2121
.Ve
.PP
こちらでは、この場合でもクライアントホスト名を使う。
.PP
この設定では、FTPのコントロールコネクションはトンネルされるが、
データコネクションには一切影響を与えない。
もし、あなたのFTPクライアントがパッシブモードをサポートしていれば、 
\&\fBftpgw.tcl\fR でデータチャンネルも安全にすることができる。
Netscape Navigator や Windows用のWS_FTPなどはそれをサポートしている。
.PP
パッシブモードのデータコネクションを安全にするためには、
まずデータコネクションに使うポート番号の範囲を選ばなくてはいけない。
この例では。30000から30100番を使うものとする。
まず、\fBftpgw.tcl\fR を 起動する時に、このポート範囲を指定するために、
\&\fB\-p\fRオプションを使用する。
.PP
.Vb 1
\& tclsh ftpgw.tcl \-p 30000\-30100
.Ve
.PP
\&\fBZebedee\fRサーバはこのように起動する。
.PP
.Vb 1
\& zebedee \-s \-r 2121,30000\-30100
.Ve
.PP
クライアントはこうだ。
.PP
.Vb 1
\& zebedee 2121,30000\-30100:ftpserverhost:2121,30000\-30100
.Ve
.PP
Netscapeを使ってコントロールコネクションとデータコネクションを
両方安全にアクセスするには、このようなURLを入力する。
.PP
.Vb 1
\& ftp://username@clienthost:2121/
.Ve
.PP
ここで\fIusername\fRはFTPサーバでのユーザ名である。
.SH "CREDITS AND LEGALITIES"
.IX Header "CREDITS AND LEGALITIES"
The following information can also be found in the file \fI\s-1LICENCE\s0.txt\fR in the
\&\fBZebedee\fR distribution.
.PP
.Vb 1
\& Copyright (c) 1999, 2000 by Neil Winton. All Rights Reserved.
\&
\& This program is free software; you can redistribute it and/or modify
\& it under the terms of the GNU General Public License as published by
\& the Free Software Foundation; either version 2 of the License, or
\& (at your option) any later version.
\&
\& This program is distributed in the hope that it will be useful,
\& but WITHOUT ANY WARRANTY; without even the implied warranty of
\& MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
\& GNU General Public License for more details.
\&
\& You should have received a copy of the GNU General Public License
\& along with this program; if not, write to the Free Software
\& Foundation, Inc., 59 Temple Place \- Suite 330, Boston, MA  02111\-1307,
\& USA.
.Ve
.PP
A copy of the \s-1GNU\s0 General Public License can be found in the file \fI\s-1GPL2\s0.txt\fR.
.PP
You may obtain the latest copy of \fBZebedee\fR, including full source code from
http://www.winton.org.uk/zebedee/ and other enquiries about \fBZebedee\fR
can be e\-mailed to the author at zebedee@winton.org.uk
.PP
\&\fBZebedee\fR would not have been possible without the use of a large amount of
freely-available software to do all the really hard stuff. I gratefully
acknowledge the contributions made by the authors of the following software
packages.
.PP
\&\fBZebedee\fR uses the \*(L"Blowfish\*(R" encryption algorithm devised by Bruce Schneier.
For more information on Blowfish see http://www.counterpane.com/blowfish.html .
The implementation used is by Eric Young and is covered by the following
copyright:
.PP
.Vb 2
\& Copyright (C) 1995\-1997 Eric Young (eay@mincom.oz.au)
\& All rights reserved.
\& 
\& This package is an Blowfish implementation written
\& by Eric Young (eay@mincom.oz.au).
\& 
\& This library is free for commercial and non\-commercial use as long as
\& the following conditions are aheared to.  The following conditions
\& apply to all code found in this distribution.
\& 
\& Copyright remains Eric Young\*(Aqs, and as such any Copyright notices in
\& the code are not to be removed.
\& 
\& Redistribution and use in source and binary forms, with or without
\& modification, are permitted provided that the following conditions
\& are met:
\& 1. Redistributions of source code must retain the copyright
\& notice, this list of conditions and the following disclaimer.
\& 2. Redistributions in binary form must reproduce the above copyright
\& notice, this list of conditions and the following disclaimer in the
\& documentation and/or other materials provided with the distribution.
\& 3. All advertising materials mentioning features or use of this software
\& must display the following acknowledgement:
\& This product includes software developed by Eric Young (eay@mincom.oz.au)
\& 
\& THIS SOFTWARE IS PROVIDED BY ERIC YOUNG \`\`AS IS\*(Aq\*(Aq AND
\& ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
\& IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
\& ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
\& FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
\& DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
\& OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
\& HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
\& LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
\& OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
\& SUCH DAMAGE.
\& 
\& The license and distribution terms for any publically available version or
\& derivative of this code cannot be changed.  i.e. this code cannot simply be
\& copied and put under another distrubution license
\& [including the GNU Public License.]
\& 
\& The reason behind this being stated in this direct manner is past
\& experience in code simply being copied and the attribution removed
\& from it and then being distributed as part of other packages. This
\& implementation was a non\-trivial and unpaid effort.
.Ve
.PP
\&\fBZebedee\fR uses the \fBzlib\fR compression library by Jean-loup Gailly and
Mark Adler. It is covered by the following copyright notice:
.PP
.Vb 1
\& (C) 1995\-1998 Jean\-loup Gailly and Mark Adler
\&
\& This software is provided \*(Aqas\-is\*(Aq, without any express or implied
\& warranty.  In no event will the authors be held liable for any damages
\& arising from the use of this software.
\&
\& Permission is granted to anyone to use this software for any purpose,
\& including commercial applications, and to alter it and redistribute it
\& freely, subject to the following restrictions:
\&
\& 1. The origin of this software must not be misrepresented; you must not
\& claim that you wrote the original software. If you use this software
\& in a product, an acknowledgment in the product documentation would be
\& appreciated but is not required.
\& 2. Altered source versions must be plainly marked as such, and must not be
\& misrepresented as being the original software.
\& 3. This notice may not be removed or altered from any source distribution.
\&
\& Jean\-loup Gailly        Mark Adler
\& jloup@gzip.org          madler@alumni.caltech.edu
.Ve
.PP
\&\fBZebedee\fR may use the \fBbzip2\fR compression library by Julian Seward which is
covered by the following licence:
.PP
.Vb 2
\& This program, "bzip2" and associated library "libbzip2", are
\& copyright (C) 1996\-1999 Julian R Seward.  All rights reserved.
\& 
\& Redistribution and use in source and binary forms, with or without
\& modification, are permitted provided that the following conditions
\& are met:
\& 
\& 1. Redistributions of source code must retain the above copyright
\&    notice, this list of conditions and the following disclaimer.
\& 
\& 2. The origin of this software must not be misrepresented; you must 
\&    not claim that you wrote the original software.  If you use this 
\&    software in a product, an acknowledgment in the product 
\&    documentation would be appreciated but is not required.
\& 
\& 3. Altered source versions must be plainly marked as such, and must
\&    not be misrepresented as being the original software.
\& 
\& 4. The name of the author may not be used to endorse or promote 
\&    products derived from this software without specific prior written 
\&    permission.
\& 
\& THIS SOFTWARE IS PROVIDED BY THE AUTHOR \`\`AS IS\*(Aq\*(Aq AND ANY EXPRESS
\& OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
\& WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
\& ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
\& DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
\& DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
\& GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
\& INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
\& WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
\& NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
\& SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
\& 
\& Julian Seward, Cambridge, UK.
\& jseward@acm.org
\& bzip2/libbzip2 version 0.9.5 of 24 May 1999
.Ve
.PP
By default \fBZebedee\fR is built using an aribtrary precision integer arithmetic
library derived from the sources to \f(CW\*(C`mirrordir\-0.10.49\*(C'\fR which in turn derived
this from the \fBPython\fR sources. The copyright is as follows:
.PP
.Vb 3
\& huge\-number.c: arbitrary precision integer library from Python sources
\& This has nothing to do with cryptography.
\& Copyright (C) 1998 Paul Sheer
\& 
\& This program is free software; you can redistribute it and/or modify
\& it under the terms of the GNU General Public License as published by
\& the Free Software Foundation; either version 2 of the License, or
\& (at your option) any later version.
\& 
\& This program is distributed in the hope that it will be useful,
\& but WITHOUT ANY WARRANTY; without even the implied warranty of
\& MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
\& GNU General Public License for more details.
\& 
\& You should have received a copy of the GNU General Public License
\& along with this program; if not, write to the Free Software
\& Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
\& 
\& This file was taken from the Python source for \`long\*(Aq type
\& integers. I have changed it to compile independently of the
\& Python source, and added the optimisation that GNU C can
\& use 31 bit digits instead of Python\*(Aqs 15 bit. You can download
\& the original from www.python.org. This file bears little
\& resemblance to the original though \- paul
\& 
\& Copyright 1991\-1995 by Stichting Mathematisch Centrum, Amsterdam,
\& The Netherlands.
\& 
\&                         All Rights Reserved
\& 
\& Permission to use, copy, modify, and distribute this software and its
\& documentation for any purpose and without fee is hereby granted,
\& provided that the above copyright notice appear in all copies and that
\& both that copyright notice and this permission notice appear in
\& supporting documentation, and that the names of Stichting Mathematisch
\& Centrum or CWI or Corporation for National Research Initiatives or
\& CNRI not be used in advertising or publicity pertaining to
\& distribution of the software without specific, written prior
\& permission.
\& 
\& While CWI is the initial source for this software, a modified version
\& is made available by the Corporation for National Research Initiatives
\& (CNRI) at the Internet address ftp://ftp.python.org.
\& 
\& STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH
\& REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF
\& MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH
\& CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
\& DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
\& PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
\& TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
\& PERFORMANCE OF THIS SOFTWARE.
.Ve
.PP
\&\fBZebedee\fR uses the Secure Hash Algorith (\s-1SHA\s0) the code for which was derived
from Uwe Hollerbach's \s-1SHA\s0 module for \fBperl\fR. The code contains the following
statement:
.PP
.Vb 4
\& NIST Secure Hash Algorithm
\& heavily modified by Uwe Hollerbach <uh@alumni.caltech edu>
\& from Peter C. Gutmann\*(Aqs implementation as found in
\& Applied Cryptography by Bruce Schneier
\&
\& This code is in the public domain
.Ve
.PP
Under Windows, \fBZebedee\fR uses an implementation of the \fIgetopt\fR function
covered by the following copyright:
.PP
.Vb 2
\& Copyright (c) 1987, 1993, 1994
\&        The Regents of the University of California.  All rights reserved.
\& 
\& Redistribution and use in source and binary forms, with or without
\& modification, are permitted provided that the following conditions
\& are met:
\& 1. Redistributions of source code must retain the above copyright
\& notice, this list of conditions and the following disclaimer.
\& 2. Redistributions in binary form must reproduce the above copyright
\& notice, this list of conditions and the following disclaimer in the
\& documentation and/or other materials provided with the distribution.
\& 3. All advertising materials mentioning features or use of this software
\& must display the following acknowledgement:
\&        This product includes software developed by the University of
\&        California, Berkeley and its contributors.
\& 4. Neither the name of the University nor the names of its contributors
\& may be used to endorse or promote products derived from this software
\& without specific prior written permission.
\& 
\& THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS \`\`AS IS\*(Aq\*(Aq AND
\& ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
\& IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
\& ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
\& FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
\& DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
\& OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
\& HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
\& LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
\& OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
\& SUCH DAMAGE.
.Ve
.SS "Thanks"
.IX Subsection "Thanks"
Special thanks go to those people who have taken the trouble to give me
feedback and suggestions for improvement!
.PP
.Vb 1
\& $Id: zebedee.pod,v 1.1 2000/07/18 02:05:04 tnaka Exp $
.Ve