- Update to 2.3

- New version has IPv6 support, thus add to ipv6 sub category
- Provide rcNG script
- Install config file

PR:		91547
Submitted by:	Yoshihiko Sarumaru <mistral@imasy.or.jp> (maintainer)
This commit is contained in:
Emanuel Haupt 2006-01-09 13:56:03 +00:00
parent 74e8265462
commit f7277520e4
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=153135
7 changed files with 1017 additions and 32 deletions

View file

@ -6,48 +6,44 @@
#
PORTNAME= stone
PORTVERSION= 2.2c
CATEGORIES= net
PORTVERSION= 2.3
CATEGORIES= net ipv6
MASTER_SITES= http://www.gcd.org/sengoku/stone/
MAINTAINER= mistral@imasy.or.jp
COMMENT= Stone is a TCP/IP packet repeater in the application layer
MAN1= ${PORTNAME}.1
MAN1= stone.1
MANLANG= "" ja
PLIST_FILES= bin/stone
USE_REINPLACE= yes
USE_RC_SUBR= stone.sh
USE_OPENSSL= yes
USE_REINPLACE= yes
.if exists(${PREFIX}/lib/libssl.so)
ALL_TARGET= bsd-ssl
MAKE_ARGS= -e SSL_FLAGS="-DUSE_SSL -I${PREFIX}/include" SSL_LIBS="-L${PREFIX}/lib -lssl -lcrypto"
.elif exists(/usr/lib/libssl.so)
ALL_TARGET= bsd-ssl
MAKE_ARGS= -e SSL_FLAGS="-DUSE_SSL" SSL_LIBS="-lssl -lcrypto"
.else
.include <bsd.port.pre.mk>
.if defined(WITHOUT_SSL)
.undef USE_OPENSSL
ALL_TARGET= bsd-pop
MAKE_ARGS= -e POP_LIBS="-lmd"
NEED_GLOBAL_H= yes
.endif
pre-everything::
.if ${ALL_TARGET} != bsd-ssl
@${ECHO_CMD} "You can build stone with SSL support by installing OpenSSL."
.endif
pre-patch:
${REINPLACE_CMD} -e "s/-D_THREAD_SAFE/${PTHREAD_CFLAGS}/g;s/-pthread/${PTHREAD_LIBS}/g" ${WRKSRC}/Makefile
pre-build:
.if defined(NEED_GLOBAL_H)
MAKE_ARGS= POP_LIBS="-lmd" LIBS="-DUNIX_DAEMON"
post-extract:
${TOUCH} ${WRKSRC}/global.h
.else
ALL_TARGET= bsd-ssl
MAKE_ARGS= SSL_FLAGS="-DUSE_SSL -I${OPENSSLINC}" \
SSL_LIBS="-L${OPENSSLLIB} -lssl -lcrypto" LIBS="-DUNIX_DAEMON"
.endif
post-patch:
@${REINPLACE_CMD} -e '/^CFLAGS/d' ${WRKSRC}/${MAKEFILE}
do-install:
${INSTALL_PROGRAM} ${WRKSRC}/stone ${PREFIX}/bin/stone
${INSTALL_MAN} ${WRKSRC}/stone.1 ${PREFIX}/man/man1/stone.1
${INSTALL_MAN} ${WRKSRC}/stone.1.ja ${PREFIX}/man/ja/man1/stone.1
${INSTALL_MAN} ${FILESDIR}/stone.1 ${PREFIX}/man/man1/stone.1
${INSTALL_MAN} ${FILESDIR}/stone.1.ja ${PREFIX}/man/ja/man1/stone.1
${INSTALL_DATA} ${FILESDIR}/stone.cnf ${PREFIX}/etc/stone.cnf.sample
.if !exists(${PREFIX}/etc/stone.cnf)
${INSTALL_DATA} ${FILESDIR}/stone.cnf ${PREFIX}/etc
.endif
#.include <bsd.port.post.mk>
.include <bsd.port.mk>
.include <bsd.port.post.mk>

View file

@ -1,2 +1,3 @@
MD5 (stone-2.2c.tar.gz) = c13a7e240f939c44a24173954e52b6eb
SIZE (stone-2.2c.tar.gz) = 61819
MD5 (stone-2.3.tar.gz) = 1edb56a30d3f6dd8c38f8333d67f2720
SHA256 (stone-2.3.tar.gz) = 539cc251ee2b3eae09b33063603a419a4405ae3abdc30f3d003907b8cbcf340d
SIZE (stone-2.3.tar.gz) = 82141

464
net/stone/files/stone.1 Normal file
View file

@ -0,0 +1,464 @@
.\" Roff format skeleton provided by Taketo Kabe <kabe@sra-tohoku.co.jp>
.TH stone 1 "version 2.3"
.
.SH NAME
stone \- Simple Repeater
.
.SH SYNOPSIS
.B "stone [-C \fIfile\fP] [-P \fIcommand\fP] [-Q \fIoptions\fP] [-N] [-d] [-p] [-n]"
.br
.B " [-u \fImax\fP] [-f \fIn\fP] [-l] [-L \fIfile\fP] [-a \fIfile\fP] [-i \fIfile\fP]"
.br
.B " [-X \fIn\fP] [-T \fIn\fP] [-r]"
.br
.B " [-x \fIport\fP[,\fIport\fP][-\fIport\fP]... \fIxhost\fP... --]"
.br
.B " [-s \fIsend\fP \fIexpect\fP... --]"
.br
.B " [-b [\fIvar\fP=\fIval\fP]... \fIn\fP \fImaster\fP:\fIport\fP \fIbackup\fP:\fIport\fP]"
.br
.B " [-B \fIhost\fP:\fIport\fP \fIhost1\fP:\fIport1\fP... --]"
.br
.B " [-I \fIhost\fP]"
.br
.B " [-o \fIn\fP] [-g \fIn\fP] [-t \fIdir\fP] [-D] [-c \fIdir\fP]"
.br
.B " [-q \fISSL\fP] [-z \fISSL\fP]"
.br
.B " [-M install \fIname\fP] [-M remove \fIname\fP]"
.br
.B " \fIst\fP [-- \fIst\fP]..."
.
.SH DESCRIPTION
\fBStone\fP is a TCP & UDP repeater in the application layer. It repeats TCP
and UDP from inside to outside of a firewall, or from outside to inside.
.P
\fBStone\fP has following features:
.
.TP
.B 1. Stone supports Win32.
Formerly, UNIX machines are used as firewalls, but recently
WindowsNT machines are used, too. You can easily run \fBstone\fP on
WindowsNT and Windows95. Of course, available on Linux,
FreeBSD, BSD/OS, SunOS, Solaris, HP-UX and so on.
.
.TP
.B 2. Simple.
\fBStone\fP's source code is only 8000 lines long (written in C
language), so you can minimize the risk of security
holes.
.
.TP
.B 3. Stone supports SSL.
Using OpenSSL (\fIhttp://www.openssl.org/\fP), \fBstone\fP can
encrypt/decrypt. Client verifications, and server verifications
are also supported. \fBStone\fP can send a substring of the subject
of the certificate to the destination.
.
.TP
.B 4. Stone is a http proxy.
\fBStone\fP can also be a tiny http proxy.
.
.TP
.B 5. POP -> APOP conversion.
With \fBstone\fP and a mailer that does not support APOP, you can
access to an APOP server.
.
.TP
.B 6. Stone supports IPv6.
\fBStone\fP can convert IP and IPv6 each other. With \fBstone\fP, you can
use IP-only software on IPv6 network.
.
.SH OPTIONS
If the \fB-C\fP \fIfile\fP flag is used, the program read these
options and \fIst\fPs from the configuration file \fIfile\fP.
If the \fB-P\fP \fIcommand\fP flag is used, the program executes
specified pre-processor to read the configuration file. \fB-Q\fP \fIoptions\fP
can be used to pass options to the pre-processor. If the \fB-N\fP
flag is used, \fBstone\fP will terminate after parsing options
and configuration file without opening the ports.
.P
If the \fB-d\fP flag is used, then increase the debug level. If
the \fB-p\fP flag is used, data repeated by \fBstone\fP are dumped. If
the \fB-n\fP is used, IP addresses and service port numbers are
shown instead of host names and service names.
.P
If the \fB-u\fP \fImax\fP flag (\fImax\fP is integer) is used, the
program memorize \fImax\fP UDP sources simultaneously. The default value
is 100. If the
\fB-f\fP \fIn\fP flag (\fIn\fP is integer) is used, the program spawn
\fIn\fP child processes. The default behavior is not to spawn any child processes.
.P
If the \fB-l\fP flag is used, the program sends error messages to
the syslog instead of stderr. If the \fB-L\fP \fIfile\fP (\fIfile\fP
is a file name) flag is used, the program writes error messages
to the file. If the \fB-a\fP \fIfile\fP flag is used, the program
writes accounting to the file. If the \fB-i\fP \fIfile\fP flag is
used, the program writes its process ID to the file.
.P
The \fB-X\fP \fIn\fP flag alters the buffer size of the repeater.
The default value is 1000 bytes. If
the \fB-T\fP \fIn\fP is used, the timeout of TCP sessions can be
specified to \fIn\fP sec. Default: 600 (10 min). The \fB-r\fP flag is
used, SO_REUSEADDR is set on the socket of \fIst\fP .
.P
Using the \fB-x\fP \fIport\fP[,\fIport\fP][-\fIport\fP]... \fIxhost\fP... \fB--\FP flag,
the http proxy (described later) can only connect to
\fIxhost\fP:\fIport\fP. If more than one \fB-x\fP ... \fB--\fI flags are
designated, the posterior one whose \fIport\fP list matches the
connecting port. If the \fB-x\fP \fB--\fP is used, prior \fB-x\fP flags
are ignored.
.P
The \fB-b\fP \fIn\fP \fImaster\fP:\fIport\fP \fIbackup\fP:\fIport\fP flag designates
the backup destination for \fImaster\fP:\fIport\fP. The program checks
every \fIn\fP seconds whether \fImaster\fP:\fIport\fP is connectable, using
the health check script defined by \fB-s\fP flag described below.
If not, the backup is used instead. Alternative \fIhost\fP can be
checked, using host=\fIhost\fP and alternative \fIport\fP, using
port=\fIport\fP.
.P
The \fB-s\fP \fIsend\fP \fIexpect\fP... \fB--\fP flag defines the health check
script. Sending \fIsend\fP, then checks whether the response match
the regular expression \fIexpect\fP.
.P
The \fB-B\fP \fIhost\fP:\fIport\fP \fIhost1\fP:\fIport1\fP... \fB--\fP is for the
destination group. If the destination of \fIst\fP is \fIhost\fP:\fIport\fP,
the program chooses a destination randomly from the group. The
destination \fIhost\fP:\fIport\fP that is designated by \fB-b\fP flag and
turned out unhealthy, is excluded from the group.
.P
The \fB-I\fP \fIhost\fP designates the interface used as the source
address of the connection to the desctination.
.P
If the \fB-o\fP \fIn\fP or \fB-g\fP \fIn\fP flag is used, the program set
its uid or gid to \fIn\fP respectively. If the \fB-t\fP \fIdir\fP
flag (\fIdir\fP is a directory) is used, the program change its
root to the directory. If the \fB-D\fP flas is used, \fBstone\fP runs
as a daemon. The \fB-c\fP \fIdir\fP flag designates the
directory for core dump.
.P
The \fB-M\fP install \fIname\fP and the \fB-M\fP remove \fIname\fP flags are
for NT service. \fIname\fP is the service name. Start the
service using the command: net start \fIname\fP. To install \fBstone\fP
service as the name \fIrepeater\fP, for example:
.P
.RS
C:\\>\fBstone -M install \fIrepeater\fB -C \fIC:\\stone.cfg\fR
.br
C:\\>\fBnet start \fIrepeater\fR
.RE
.P
The \fB-q\fP \FISSL\FP and the \fB-z\fP \FISSL\FP flags are for SSL
encryption. The \fB-q\fP \FISSL\FP is for the client mode, that is,
when \fBstone\fP connects to the other SSL server as a SSL client.
The \fB-z\fP \FISSL\FP if for the server mode, that is, when other SSL
clients connect to the \fBstone\fP.
.P
\FISSL\FP is one of the following.
.P
.PD 0
.IP default 15
reset SSL options to the default.
Using multiple \fIst\fP, different SSL options can
be designated for each \fIst\fP.
.IP verbose
verbose mode.
.IP verify
require SSL certificate to the peer.
.IP verify,once
request a client certificate on the initial TLS/SSL
handshake. (\fB-z\fP only)
.IP verify,ifany
The certificate returned (if any) is checked. (\fB-z\fP only)
.IP verify,none
never request SSL certificate to the peer.
.IP crl_check
lookup CRLs.
.IP crl_check_all
lookup CRLs for whole chain.
.IP uniq
if the serial number of peer's SSL certificate
is different from the previous session, deny it.
.IP re\fIn\fP=\fIregex\fP
The certificate of the peer must satisfy the
\fIregex\fP. \fIn\fP is the depth. re0 means the subject
of the certificate, and re1 means the issure.
The maximum of \fIn\fP is 9.
.IP depth=\fIn\fP
The maximum of the certificate chain.
If the peer's certificate exceeds \fIn\fP, the
verification fails. The maximum of \fIn\fP is 9.
.IP tls1
Just use TLSv1 protocol.
.IP ssl3
Just use SSLv3 protocol.
.IP ssl2
Just use SSLv2 protocol.
.IP no_tls1
Turn off TLSv1 protocol.
.IP no_ssl3
Turn off SSLv3 protocol.
.IP no_ssl2
Turn off SSLv2 protocol.
.IP bugs
Switch on all SSL implementation bug workarounds.
.IP serverpref
Use server's cipher preferences (only SSLv2).
.IP sid_ctx=\fIstr\fP
Set session ID context.
.IP passfile=\fIfile\fP
The filename of the file containing password of the key
.IP key=\fIfile\fP
The filename of the secret key of the certificate.
.IP cert=\fIfile\fP
The filename of the certificate.
.IP CAfile=\fIfile\fP
The filename of the certificate of the CA.
.IP CApath=\fIdir\fP
The directory of the certificate files.
.IP pfx=\fIfile\fP
The filename of the PKCS#12 bag.
.IP cipher=\fIlist\fP
The list of ciphers.
.IP lb\fIn\fP=\fIm\fP
change the destination according to the
certificate of the peer. The number calculated
from the matched string to the \fIn\fPth ( ... ) in
the ``regex'' of SSL options (mod \fIm\fP) is used
to select the destination from the destination
group defined by \fB-B\fP flag.
.PD
.P
\fIst\fP is one of the following. Multiple \fIst\fP can be
designated, separated by \fB--\fP.
.P
.PD 0
.IP (1)
\fIhost\fP:\fIport\fP \fIsport\fP [\fIxhost\fP...]
.IP (2)
\fIhost\fP:\fIport\fP \fIshost\fP:\fIsport\fP [\fIxhost\fP...]
.IP (3)
proxy \fIsport\fP [\fIxhost\fP...]
.IP (4)
\fIhost\fP:\fIport\fP/http \fIrequest\fP [\fIxhost\fP...]
.IP (5)
\fIhost\fP:\fIport\fP/proxy \fIheader\fP [\fIxhost\fP...]
.IP (6)
health \fIsport\fP [\fIxhost\fP...]
.PD
.P
The program repeats the connection on port \fIsport\fP to the
other machine \fIhost\fP port \fIport\fP. If the machine, on
which the program runs, has two or more interfaces, type (2) can
be used to repeat the connection on the specified interface
\fIshost\fP. You can also specify path name that begins with
``/'' or ``./'', instead of \fIhost\fP:\fIport\fP so that the
program handles a unix domain socket.
.P
Type (3) is a http proxy. Specify the machine, on which the
program runs, and port \fIsport\fP in the http proxy settings of
your WWW browser.
Extentions can be added to the ``proxy'' like \fIxhost\fP/\fIext\fP.
\fIext\fP is:
.P
.IP v4only
limit the destination within IP addresses.
.IP v6only
limit the destination within IPv6 addresses.
.P
Type (4) relays stream over http request. \fIrequest\fP is the
request specified in HTTP 1.0. In the \fIrequest\fP, \ is
the escape character, and the following substitution occurs.
.PP
.RS 8
.PD 0
.IP \\\\n 8
newline (0x0A)
.IP \\\\r
return (0x0D)
.IP \\\\t
tab (0x09)
.IP \\\\\\\\
\ itself (0x5C)
.IP \\\\a
the IP address of the client connecting to the \fBstone\fP.
.IP \\\\A
\fIIP address of the client\fP:\fIport number\fP
.IP \\\\0
the serial number of peer's SSL certificate.
.IP "\\\\1 - \\\\9"
the matched string in the ``regex'' of SSL options.
.IP \\\\?1\fIthen\fP\\\\:\fIelse\fP\\\\/
if \1 (\2 - \9 in a similar way) is not null,
\fIthen\fP, otherwise \fIelse\fP.
.PD
.RE
.P
Type (5) repeats http request with \fIheader\fP in the top of
request headers. The above escapes can be also used.
.P
Type (6) designates the port that other programs can check
whether the \fBstone\fP runs `healthy' or not. Following commands are
available to check the \fBstone\fP.
.P
.RS 8
.PD 0
.IP "HELO \fIany string\fP" 24
returns the status of the \fBstone\fP
.IP "LIMIT \fIvar\fP \fIn\fP"
check the value of \fIvar\fP is
less than \fIn\fP
.PD
.RE
.P
\fIvar\fP is one of the following:
.P
.RS 8
.PD 0
.IP PAIR 16
the number of ``pair''
.IP CONN
the number of ``conn''
.IP ESTABLISHED
seconds passed since the last conn established
.IP READWRITE
seconds passed since the last read/write
.IP ASYNC
the number of threads
.PD
.RE
.P
The response of the \fBstone\fP is 2xx when normal, or 5xx when
abnormal on the top of line.
.P
If the \fIxhost\fP are used, only machines or its IP addresses
listed in \fIxhost\fP separated by space character can
connect to the program and to be repeated.
.P
Extentions can be added to the \fIxhost\fP like
\fIxhost\fP/\fIex\fP,\fIex\fP.... \fIex\fP is:
.IP \fIm\fP
You can designate the length of prefix bits of the
netmask, so that only machines on specified. In the
case of class C network 192.168.1.0, for example, use
``192.168.1.0/24''.
.IP v4
\fIxhost\fP is resolved as the IP address.
.IP v6
\fIxhost\fP is resolved as the IPv6 address.
.IP p\fIm\fP
the data repeated by the program are dumped, only if it
was connected by the machines specified by \fIxhost\fP. \fIm\fP
is the dump mode, equivalent to the number of \fB-p\fP
options.
.P
Use ``!'' instead of ``\fIxhost\fP'', to deny machines by following
\fIxhost\fP.
.P
Extentions can be added to the \fIport\fP like
\fIport\fP/\fIext\fP,\fIext\fP.... \fIext\fP is:
.IP udp
repeats UDP instead of TCP.
.IP ssl
forwards with encryption.
.IP v6
connects to the destination using IPv6.
.IP base
forwards with MIME base64 encoding.
.P
Extentions can be added to the \fIsport\fP like
\fIsport\fP/\fIext\fP,\fIext\fP.... \fIext\fP is:
.IP udp
repeats UDP instead of TCP.
.IP apop
converts POP to APOP. The conversion is derived from
the RSA Data Security, Inc. MD5 Message-Digest Algorithm.
.IP ssl
forwards with decryption.
.IP v6
accepts connection using IPv6. If \fIshost\fP is omitted
like (1), IP is also acceptable.
.IP v6only
accepts connection using IPv6 only. Even if \fIshost\fP is
omitted like (1), IP is not acceptable.
.IP base
forwards with MIME base64 decoding.
.IP http
relays stream over http.
.IP ident
identifies the owner of the incoming connection
on the peer using ident protocol (RFC1413).
.SH EXAMPLES
.PD 0
.IP \fIouter\fP\^:
a machine in the outside of the firewall
.IP \fIinner\fP\^:
a machine in the inside of the firewall
.IP \fIfwall\fP\^:
the firewall on which the \fBstone\fP is executed
.PD
.TP
\fBstone \fIouter\fB:telnet 10023\fR
Repeats the telnet protocol to \fIouter\fP.
Run telnet fwall 10023 on \fIinner\fR.
.TP
\fBstone \fIouter\fB:domain/udp domain/udp\fR
Repeats the DNS query to \fIouter\fP.
Run \fBnslookup -\fP \fIfwall\fP on \fIinner\fP.
.TP
\fBstone \fIouter\fB:ntp/udp ntp/udp\fR
Repeats the NTP to \fIouter\fP.
Run \fBntpdate \fIfwall\fR on \fIinner\fP.
.TP
\fBstone localhost:http 443/ssl\fR
Make WWW server that supports https.
Access \fBhttps://\fIfwall\fB/\fR using a WWW browser.
.TP
\fBstone localhost:telnet 10023/ssl\fR
Make telnet server that supports SSL.
Run \fBSSLtelnet -z ssl \fIfwall\fB 10023\fR on \fIinner\fP.
.TP
\fBstone proxy 8080\fR
http proxy
.TP
\fBstone\fP \fIouter\fB:110/apop 110\fR
connect to \fIinner\fP:pop using a mailer that does not
support APOP.
.PP
Where \fIfwall\fP is a http proxy (port 8080):
.TP
\fBstone \fIfwall\fB:8080/http 10023 'POST http://\fIouter\fB:8023 HTTP/1.0'\fR
.br
.ns
.TP
\fBstone localhost:telnet 8023/http
.nf
Run \fBstone\fPs on \fIinner\fP and \fIouter\fP respectively.
Relays stream over http.
.TP
\fBstone \fIfwall\fB:8080/proxy 9080 \'Proxy-Authorization: Basic \fIc2VuZ29rdTpoaXJvYWtp\fB\'\fR
for browser that does not support proxy authorization.
.fi
.
.SH HOMEPAGE
The official homepage of \fBstone\fP is:
.br
\fIhttp://www.gcd.org/sengoku/stone/\fP
.
.SH COPYRIGHT
All rights about this program \fBstone\fP are reserved by the
original author, Hiroaki Sengoku. The program is free software;
you can redistribute it and/or modify it under the terms of the
\fIGNU IGeneral Public License (GPL)\fP. Furthermore you can link it
with openssl.
.
.SH NO WARRANTY
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY.
.
.SH AUTHOR
.nf
Hiroaki Sengoku
sengoku@gcd.org
http://www.gcd.org/sengoku/
.fi

455
net/stone/files/stone.1.ja Normal file
View file

@ -0,0 +1,455 @@
.\" Roff format skeleton provided by Taketo Kabe <kabe@sra-tohoku.co.jp>
.TH stone 1 "version 2.3"
.
.SH 名称
stone \- Simple Repeater
.
.SH 書式
.B "stone [-C \fIfile\fP] [-P \fIcommand\fP] [-Q \fIoptions\fP] [-N] [-d] [-p] [-n]"
.br
.B " [-u \fImax\fP] [-f \fIn\fP] [-l] [-L \fIfile\fP] [-a \fIfile\fP] [-i \fIfile\fP]"
.br
.B " [-X \fIn\fP] [-T \fIn\fP] [-r]"
.br
.B " [-x \fIport\fP[,\fIport\fP][-\fIport\fP]... \fIxhost\fP... --]"
.br
.B " [-s \fIsend\fP \fIexpect\fP... --]"
.br
.B " [-b [\fIvar\fP=\fIval\fP]... \fIn\fP \fImaster\fP:\fIport\fP \fIbackup\fP:\fIport\fP]"
.br
.B " [-B \fIhost\fP:\fIport\fP \fIhost1\fP:\fIport1\fP... --]"
.br
.B " [-I \fIhost\fP]"
.br
.B " [-o \fIn\fP] [-g \fIn\fP] [-t \fIdir\fP] [-D] [-c \fIdir\fP]"
.br
.B " [-q \fISSL\fP] [-z \fISSL\fP]"
.br
.B " [-M install \fIname\fP] [-M remove \fIname\fP]"
.br
.B " \fIst\fP [-- \fIst\fP]..."
.
.SH 解説
\fBstone\fPは、アプリケーションレベルの TCP & UDP リピーターです。ファイア
ウォールの内から外へ、あるいは外から内へ、TCP あるいは UDP を中継します。
.P
\fBstone\fP には以下のような特徴があります。
.
.TP
.B 1. Win32 に対応している
以前は UNIX マシンで構成されることが多かったファイアウォールです
が、最近は WindowsNT が使われるケースが増えてきました。\fBstone\fP は
WindowsNT あるいは Windows95 上で手軽に実行することができます。
もちろん、Linux, FreeBSD, BSD/OS, SunOS, Solaris, HP-UX などの
UNIX マシンでも使うことができます。
.
.TP
.B 2. 単純
わずか 8000 行 (C 言語) ですので、セキュリティホールが生じる可能
性を最小限にできます。
.
.TP
.B 3. SSL 対応
OpenSSL (\fIhttp://www.openssl.org/\fP) を使うことにより、暗号化/復号
して中継できます。また、クライアント認証およびサーバ認証をサポー
トしています。さらに、認証によって得られる証明書のサブジェクトの
一部を、中継先へ送ることもできます。
.
.TP
.B 4. http proxy
簡易型 http proxy としても使うことができます。
.
.TP
.B 5. POP -> APOP 変換
APOP に対応していないメーラと \fBstone\fP を使うことで、APOP サーバへ
アクセスできます。
.
.TP
.B 6. IPv6 対応
IP/IPv6 変換して中継することができます。IPv6 に対応していない
ソフトウェアを手軽に IPv6 化することが可能です。
.
.SH オプション
\fB-C\fP はオプションおよび \fIst\fP をコマンドラインで指定するかわりに設
定ファイルから読み込みます。\fB-P\fP は設定ファイルを読み込む際のプリ
プロセッサを指定します。プリプロセッサへ与える引数は \fB-Q\fP で指定で
きます。\fB-N\fP を指定すると、コマンドラインおよび設定ファイルを読み
込んだ後、終了します。つまりポートを開くこと無く設定ファイルの
チェックを行なうことができます。
.P
オプションとして \fB-d\fP を指定すると、デバッグレベルを増加させます。
\fB-p\fP を指定すると中継したデータをダンプします。\fB-n\fP を指定すると、ホ
スト名やサービス名の代わりに IP アドレスやサービス番号を表示しま
す。
.P
\fB-u\fP オプションは同時に記憶できる UDP の発信元の最大数を指定します。
デフォルトは 100 です。\fB-f\fP オプションは子プロセスの数を指定します。
デフォルトは子プロセス無しです。
.P
\fB-l\fP を指定すると、エラーメッセージ等を syslog へ出力します。\fB-L\fP を
指定すると、エラーメッセージ等を \fIfile\fP へ出力します。\fB-a\fP を指定す
ると、アクセスログを \fIfile\fP へ出力します。\fB-i\fP は \fBstone\fP のプロセス
ID を出力するファイルを指定します。
.P
\fB-X\fP は中継を行なう際のバッファの大きさを指定します。デフォルトは
1000 バイトです。\fB-T\fP を指定すると TCP セッションのタイムアウトの
秒数を変更できます。デフォルトは 600 (10 分) です。\fB-r\fP を指定する
と \fIst\fP のソケットに SO_REUSEADDR を設定します。
.P
\fB-x\fP を指定すると http proxy の接続先を制限できます。接続先のポー
ト番号のリスト \fIport\fP[,\fIport\fP][-\fIport\fP]... および接続先ホストの
リスト \fIxhost\fP... を指定します。\fB-x\fP を複数指定すると、最後に指定
したものから順に、ポート番号のリストがマッチするものを検索します。
\fB-x\fP \fB--\fP を指定すると、それ以前のものは検索対象となりません。
.P
\fB-b\fP は中継先 \fImaster\fP:\fIport\fP に接続できないときのバックアップとし
て \fIbackup\fP:\fIport\fP を指定します。すなわち \fIn\fP 秒ごとに
\fImaster\fP:\fIport\fP に対するヘルスチェック (後述する \fB-s\fP オプションで
設定) が成功するかチェックし、もしチェックに失敗した場合は、中継
先を \fIbackup\fP:\fIport\fP へ変更します。\fIvar\fP として「host」を指定す
ることにより、\fImaster\fP とは異なるホストをチェックすることができ
ます。同様に、\fIvar\fP として「port」を指定することにより、異なるポー
トをチェックすることができます。
.P
\fB-s\fP はヘルスチェックのスクリプトを設定します。\fIsend\fP を送信後、レ
スポンスが、正規表現 \fIexpect\fP にマッチするか確認します。
.P
\fB-B\fP は中継先グループの指定です。中継先が \fIhost\fP:\fIport\fP である場合、
このグループの中からランダムに一つの中継先を選んで中継します。\fB-b\fP
オプションで設定済みの中継先で、ヘルスチェックに失敗したものは、
選択枝から除外します。
.P
\fB-I\fP は中継先へ接続する際に用いるインタフェースを指定します。
.P
\fB-o\fP と \fB-g\fP はそれぞれユーザ ID とグループ ID を指定します。ID は数
字のみ指定可能です。\fB-t\fP を指定すると、\fIdir\fP へ chroot します。\fB-D\fP を
指定すると、\fBstone\fP をデーモンとして起動します。\fB-c\fP はコアダンプを
行なうディレクトリを指定します。
.P
\fB-M\fP は \fBstone\fP を NT サービスとして登録/削除するためのオプションで
す。サービス名 \fIname\fP を指定します。サービスとして登録した後、
net start \fIname\fP コマンドを実行してサービスを開始させてください。
例:
.P
.RS
C:\\>\fBstone -M install \fIrepeater\fB -C \fIC:\\stone.cfg\fR
.br
C:\\>\fBnet start \fIrepeater\fR
.RE
.P
\fB-q\fP および \fB-z\fP は、SSL 暗号化/復号 のオプションです。\fB-q\fP は、\fBstone\fP
が SSL クライアントとして、他の SSL サーバへ接続するとき、すなわ
ち中継先が SSL サーバの時の、SSL オプションです。\fB-z\fP は \fBstone\fP が
SSL サーバとして、他の SSL クライアントからの接続を受付ける時の、
SSL オプションです。
.P
\fISSL\fP は SSL オプションで、次のいずれかです。
.P
.PD 0
.IP default 15
SSL オプション指定をデフォルトに戻します。
複数の \fIst\fP を指定する際、\fIst\fP 毎に異なる SSL オ
プションを指定することができます。
.IP verbose
デバッグ用文字列をログに出力します。
.IP verify
SSL 接続相手に、SSL 証明書を要求します。
.IP verify,once
セッション開始時に一度だけ、
SSL クライアントに証明書を要求します。(\fB-z\fP 専用)
.IP verify,ifany
SSL クライアントから証明書が送られてきたときのみ
認証します。送られてこない場合は認証せずに
セッションを開始します。(\fB-z\fP 専用)
.IP verify,none
SSL 接続相手に SSL 証明書を要求しません。
.IP crl_check
CRL をチェックします。
.IP crl_check_all
証明書チェーンの全てにおいて CRL をチェックします。
.IP uniq
SSL 接続相手の SSL 証明書のシリアル番号が前回の
接続と異なる場合、接続を拒否します。
.IP re\fIn\fP=\fIregex\fP
SSL 証明書のチェーンが満たすべき正規表現を指定します。
\fIn\fP は depth です。re0 が証明書のサブジェクト、
re1 がその発行者を意味します。
\fIn\fP は 9 まで指定できます。
.IP depth=\fIn\fP
SSL 証明書チェーンの長さの最大値を指定します。
チェーンの長さがこの値を越えると認証が失敗します。
\fIn\fP の最大値は 9 です。
.IP tls1
プロトコルとして TLSv1 を用います。
.IP ssl3
プロトコルとして SSLv3 を用います。
.IP ssl2
プロトコルとして SSLv2 を用います。
.IP no_tls1
プロトコルの選択枝から TLSv1 を外します。
.IP no_ssl3
プロトコルの選択枝から SSLv3 を外します。
.IP no_ssl2
プロトコルの選択枝から SSLv2 を外します。
.IP bugs
SSL の実装にバグがある接続相手との接続を可能にします。
.IP serverpref
SSL サーバの指定した暗号を用います (SSLv2 のみ)。
.IP sid_ctx=\fIstr\fP
SSL セッション ID コンテキストを設定します。
.IP passfile=\fIfile\fP
秘密鍵のパスフレーズを格納したファイルを指定します。
.IP key=\fIfile\fP
証明書の秘密鍵ファイルを指定します。
.IP cert=\fIfile\fP
証明書ファイルを指定します。
.IP CAfile=\fIfile\fP
認証局の証明書ファイルを指定します。
.IP CApath=\fIdir\fP
認証局の証明書があるディレクトリを指定します。
.IP pfx=\fIfile\fP
PKCS#12 ファイルを指定します。
.IP cipher=\fIlist\fP
暗号化アルゴリズムのリストを指定します。
.IP lb\fIn\fP=\fIm\fP
SSL 証明書の CN に応じて中継先を切り替えます。
SSL オプションの re\fIn\fP= で指定した正規表現中、
\fIn\fP 番目の ( ... ) 内の正規表現にマッチした文字
列から算出した数値の剰余 \fIm\fP に基づいて、\fB-B\fP オプ
ションで指定した中継先グループの中から中継先を選
びます。
.PD
.P
\fIst\fP は次のいずれかです。\fIst\fP は「\fB--\fP」で区切ることにより、複数個
指定できます。
.P
.PD 0
.IP (1)
\fIhost\fP:\fIport\fP \fIsport\fP [\fIxhost\fP...]
.IP (2)
\fIhost\fP:\fIport\fP \fIshost\fP:\fIsport\fP [\fIxhost\fP...]
.IP (3)
proxy \fIsport\fP [\fIxhost\fP...]
.IP (4)
\fIhost\fP:\fIport\fP/http \fIrequest\fP [\fIxhost\fP...]
.IP (5)
\fIhost\fP:\fIport\fP/proxy \fIheader\fP [\fIxhost\fP...]
.IP (6)
health \fIsport\fP [\fIxhost\fP...]
.PD
.P
\fBstone\fP を実行しているマシンのポート \fIsport\fP への接続を、他のマシ
ン \fIhost\fP のポート \fIport\fP へ中継します。インタフェースを複数持つ
マシンでは、(2) のようにインタフェースのアドレス \fIshost\fP を指定
することにより、特定のインタフェースへの接続のみを転送することが
できます。\fIhost\fP:\fIport\fP の代わりに、「/」ないし「./」から始まる
パス名を指定することにより、UNIX ドメインソケットを扱うこともで
きます。
.P
(3) は、http proxy です。WWW ブラウザの http proxy の設定で、
\fBstone\fP を実行しているマシンおよびポート \fIsport\fP を指定します。
「proxy」には、「/」に続けて以下の拡張子を付けることができます。
.P
.IP v4only
proxy の接続先を IP アドレスに限定します。
.IP v6only
proxy の接続先を IPv6 アドレスに限定します。
.P
(4) は、http リクエストにのせて中継します。\fIrequest\fP は HTTP 1.0
で規定されるリクエストです。リクエスト文字列中、「\\」はエスケー
プ文字であり、次のような置き換えが行なわれます。
.PP
.RS 8
.PD 0
.IP \\\\n 8
改行 (0x0A)
.IP \\\\r
復帰 (0x0D)
.IP \\\\t
タブ (0x09)
.IP \\\\\\\\
\\ (0x5C)
.IP \\\\a
接続元の IP アドレス
.IP \\\\A
「接続元の IP アドレス」:「ポート番号」
.IP \\\\0
SSL 証明書のシリアル番号
.IP "\\\\1 - \\\\9"
SSL オプションの re\fIn\fP= で指定した正規表現中、
( ... ) 内の正規表現にマッチした文字列
.IP \\\\?1\fIthen\fP\\\\:\fIelse\fP\\\\/
もし \\1 (\\2 - \\9 も同様) の文字列が、空文字列で
なければ \fIthen\fP、空文字列であれば \fIelse\fP
.PD
.RE
.P
(5) は、http リクエストヘッダの先頭に \fIheader\fP を追加して中継し
ます。(4) と同様のエスケープを使うことができます。
.P
(6) は、\fBstone\fP が正常に動作しているか検査するためのポートの指定で
す。\fIsport\fP で指定したポートに接続して以下のコマンドを送信すると、
\fBstone\fP の状態が返されます。
.P
.RS 8
.PD 0
.IP "HELO \fI任意の文字列\fP" 24
\fBstone\fP の状態の一覧を返す
.IP "LIMIT \fIvar\fP \fIn\fP"
変数 \fIvar\fP の値が \fIn\fP 未満か調べる
.PD
.RE
.P
\fIvar\fP は次のうちのいずれかです。
.P
.RS 8
.PD 0
.IP PAIR 16
pair の個数
.IP CONN
conn の個数
.IP ESTABLISHED
最後に接続確立してからの秒数
.IP READWRITE
最後に read or write してからの秒数
.IP ASYNC
スレッドの本数
.PD
.RE
.P
\fBstone\fP からの応答は、正常時は 200 番台、異常時は 500 番台の数値が
先頭につきます。
.P
\fIxhost\fP を列挙することにより、\fBstone\fP へ接続可能なマシンを制限する
ことができます。マシン名、あるいはその IP アドレスを空白で区切っ
て指定すると、そのマシンからの接続のみを中継します。
.P
\fIxhost\fP には、「/」に続けて以下の拡張子を付けることができます。
複数の拡張子を指定するときは「,」で区切ります。
.IP \fIm\fP
ネットワーク・マスクのビット数を指定することにより、特定
のネットワークのマシンからの接続を許可することができます。
例えば、クラス C のネットワーク 192.168.1.0 の場合は、
「192.168.1.0/24」と指定します。
.IP v4
\fIxhost\fP を IP アドレスとして扱います。
.IP v6
\fIxhost\fP を IPv6 アドレスとして扱います。
.IP p\fIm\fP
\fIxhost\fP からの接続のみ、中継したデータをダンプします。
\fIm\fP はダンプ方法の指定です。\fB-p\fP オプションの個数に相当し
ます。
.P
\fIxhost\fP の代わりに「!」を指定すると、後続の \fIxhost\fP は接続を拒否
するマシンの指定になります。
.P
\fIport\fP には、「/」に続けて以下の拡張子を付けることができます。
複数の拡張子を指定するときは「,」で区切ります。
.IP udp
TCP を中継する代わりに、UDP を中継します。
.IP ssl
SSL で暗号化して中継します。
.IP v6
中継先へ IPv6 接続します。
.IP base
MIME base64 で符号化して中継します。
.P
\fIsport\fP には、「/」に続けて以下の拡張子を付けることができます。
複数の拡張子を指定するときは「,」で区切ります。
.IP udp
TCP を中継する代わりに、UDP を中継します。
.IP apop
POP を APOP へ変換して中継します。
変換には RSA Data Security 社の MD5 Message-Digest アル
ゴリズムを使用します。
.IP ssl
SSL を復号して中継します。
.IP v6
IPv6 接続を受付けます。(1) のようにインタフェースの
アドレス \fIshost\fP を指定しない場合は、IP 接続も受付けるこ
とができます。
.IP v6only
IPv6 接続のみを受付けます。(1) のようにインタフェースの
アドレス \fIshost\fP を指定しない場合も、IP 接続を受付けるこ
とはありません。
.IP base
MIME base64 を復号して中継します。
.IP http
http リクエストヘッダを取り除いて中継します。
.IP ident
接続を受付けるときに接続元に対し ident プロトコル
(RFC1413) を使ってユーザ名を照会します。
.SH 例
.PD 0
.IP \fIouter\fP\^:
ファイアウォールの外側にあるマシン
.IP \fIinner\fP\^:
ファイアウォールの内側にあるマシン
.IP \fIfwall\fP\^:
ファイアウォール. このマシン上で \fBstone\fP を実行
.PD
.TP
\fBstone \fIouter\fB:telnet 10023\fR
\fIouter\fP へ telnet プロトコルを中継
\fIinner\fP で telnet fwall 10023 を実行
.TP
\fBstone \fIouter\fB:domain/udp domain/udp\fR
DNS 問い合わせを \fIouter\fP へ中継
\fIinner\fP で \fBnslookup -\fP \fIfwall\fP を実行
.TP
\fBstone \fIouter\fB:ntp/udp ntp/udp\fR
\fIouter\fP へ NTP を中継
\fIinner\fP で \fBntpdate \fIfwall\fR を実行
.TP
\fBstone localhost:http 443/ssl\fR
WWW サーバを https 対応にする
WWW ブラウザで \fBhttps://\fIfwall\fB/\fR をアクセス
.TP
\fBstone localhost:telnet 10023/ssl\fR
telnet を SSL 化
\fIinner\fP で \fBSSLtelnet -z ssl \fIfwall\fB 10023\fR を実行
.TP
\fBstone proxy 8080\fR
http proxy
.TP
\fBstone\fP \fIouter\fB:110/apop 110\fR
APOP に対応していないメーラで \fIinner\fP:pop へ接続
.PP
\fIfwall\fP が http proxy (port 8080) である時:
.TP
\fBstone \fIfwall\fB:8080/http 10023 'POST http://\fIouter\fB:8023 HTTP/1.0'\fR
.br
.ns
.TP
\fBstone localhost:telnet 8023/http
.nf
\fIinner\fP と \fIouter\fP でそれぞれ \fBstone\fP を実行
http 上でパケットを中継
.TP
\fBstone \fIfwall\fB:8080/proxy 9080 \'Proxy-Authorization: Basic \fIc2VuZ29rdTpoaXJvYWtp\fB\'\fR
proxy 認証に対応していないブラウザ用
.fi
.
.SH ホームページ
\fBstone\fP の公式ホームページは次の URL です。
.br
\fIhttp://www.gcd.org/sengoku/stone/Welcome.ja.html\fP
.
.SH 著作権
この \fBstone\fP に関する全ての著作権は、原著作者である仙石浩明が所有
します。この \fBstone\fP は、\fIGNU General Public License (GPL)\fP に準ずる
フリーソフトウェアです。個人的に使用する場合は、改変・複製に制限
はありません。配布する場合は GPL に従って下さい。また、openssl と
リンクして使用することを許可します。
.
.SH 無保証
この \fBstone\fP は無保証です。この \fBstone\fP を使って生じたいかなる損害に
対しても、原著作者は責任を負いません。詳しくは \fIGPL\fP を参照して下
さい。
.
.SH 著者
.nf
仙石 浩明
sengoku@gcd.org
http://www.gcd.org/sengoku/
.fi

View file

@ -0,0 +1,6 @@
# options
-dd
# args
asaogw:23 30023 --
localhost:10080/http "$HOST:5902" 'CONNECT localhost:5901'

View file

@ -0,0 +1,59 @@
#!/bin/sh
# PROVIDE: stone
# REQUIRE: DAEMON
# BEFORE: LOGIN
# KEYWORD: shutdown
#
# Add the following line to /etc/rc.conf to enable stone:
# stone_enable (bool): Set it to "YES" to enable stone.
# Default: NO
# Add at least one of the followings to /etc/rc.conf to give rules to stone:
# stone_flags (str): See stone(1).
# Default: "" (-D will be added automatically)
# stone_conffile (str): Stone config file
# Default: ""
# You can find an example in
# %%PREFIX%%/share/examples/stone/
#
. %%RC_SUBR%%
name="stone"
rcvar=`set_rcvar`
command="%%PREFIX%%/bin/stone"
start_precmd="stone_precmd"
restart_precmd="stone_precmd"
stone_enable="NO"
load_rc_config $name
stone_precmd()
{
if [ -z "${stone_flags}" -a -z "${stone_conffile}" ]; then
warn "set at least stone_flags or stone_conffile."
return 1
fi
# doesn't use required_files because stone accepts only one conffile
if [ -n "${stone_conffile}" ]; then
if [ ! -r "${stone_conffile}" ]; then
warn "${stone_conffile} is not readable."
if [ -n "$stone_conffile" -a -n "$rc_force" ]; then
warn "start without ${stone_conffile} anyway."
else
return 1
fi
else
rc_flags="-C ${stone_conffile} ${rc_flags}"
fi
fi
# make sure daemonize option will be given
rc_flags="-D ${rc_flags}"
}
run_rc_command "$1"

4
net/stone/pkg-plist Normal file
View file

@ -0,0 +1,4 @@
@unexec if cmp -s %D/etc/stone.cnf %D/etc/stone.cnf.sample; then rm -f %D/etc/stone.cnf; fi
etc/stone.cnf.sample
@exec [ -f %B/stone.cnf ] || cp %B/%f %B/stone.cnf
bin/stone