diff options
author | ehaupt <ehaupt@FreeBSD.org> | 2006-01-09 21:56:03 +0800 |
---|---|---|
committer | ehaupt <ehaupt@FreeBSD.org> | 2006-01-09 21:56:03 +0800 |
commit | dee8a10e9dedbcb3fa7b2a8bce0b75b131f5437d (patch) | |
tree | 5e1811eeb9edb052c00ac0b58375e2541215fe35 /net | |
parent | c03047ee0f2b8027ac04a886fdb7a17f89d59416 (diff) | |
download | freebsd-ports-gnome-dee8a10e9dedbcb3fa7b2a8bce0b75b131f5437d.tar.gz freebsd-ports-gnome-dee8a10e9dedbcb3fa7b2a8bce0b75b131f5437d.tar.zst freebsd-ports-gnome-dee8a10e9dedbcb3fa7b2a8bce0b75b131f5437d.zip |
- 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)
Diffstat (limited to 'net')
-rw-r--r-- | net/stone/Makefile | 56 | ||||
-rw-r--r-- | net/stone/distinfo | 5 | ||||
-rw-r--r-- | net/stone/files/stone.1 | 464 | ||||
-rw-r--r-- | net/stone/files/stone.1.ja | 455 | ||||
-rw-r--r-- | net/stone/files/stone.cnf | 6 | ||||
-rw-r--r-- | net/stone/files/stone.sh.in | 59 | ||||
-rw-r--r-- | net/stone/pkg-plist | 4 |
7 files changed, 1017 insertions, 32 deletions
diff --git a/net/stone/Makefile b/net/stone/Makefile index 4a3e6c9ee3e3..6b5b9cd8606e 100644 --- a/net/stone/Makefile +++ b/net/stone/Makefile @@ -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 -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 +.include <bsd.port.pre.mk> -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) +.if defined(WITHOUT_SSL) +.undef USE_OPENSSL +ALL_TARGET= bsd-pop +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> diff --git a/net/stone/distinfo b/net/stone/distinfo index 6d63d85cc387..398db37175db 100644 --- a/net/stone/distinfo +++ b/net/stone/distinfo @@ -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 diff --git a/net/stone/files/stone.1 b/net/stone/files/stone.1 new file mode 100644 index 000000000000..fa10c6eef18f --- /dev/null +++ b/net/stone/files/stone.1 @@ -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 diff --git a/net/stone/files/stone.1.ja b/net/stone/files/stone.1.ja new file mode 100644 index 000000000000..874b1b66fda4 --- /dev/null +++ b/net/stone/files/stone.1.ja @@ -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 diff --git a/net/stone/files/stone.cnf b/net/stone/files/stone.cnf new file mode 100644 index 000000000000..3a2adbcc292e --- /dev/null +++ b/net/stone/files/stone.cnf @@ -0,0 +1,6 @@ +# options +-dd + +# args +asaogw:23 30023 -- +localhost:10080/http "$HOST:5902" 'CONNECT localhost:5901' diff --git a/net/stone/files/stone.sh.in b/net/stone/files/stone.sh.in new file mode 100644 index 000000000000..92133d63b61a --- /dev/null +++ b/net/stone/files/stone.sh.in @@ -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" diff --git a/net/stone/pkg-plist b/net/stone/pkg-plist new file mode 100644 index 000000000000..eb88be93290b --- /dev/null +++ b/net/stone/pkg-plist @@ -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 |