IETF-SSH archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
tcpip-forward requests and bind addresses
Hi all.
Section 7.1 in draft-ietf-secsh-connect-23.txt is unclear on several
aspects of specifying bind addresses in port forwarding requests. It says:
[quote]
byte SSH_MSG_GLOBAL_REQUEST
string "tcpip-forward"
boolean want reply
string address to bind (e.g., "0.0.0.0")
uint32 port number to bind
The 'address to bind' and 'port number to bind' specify the IP
address and port to which the socket to be listened is bound. The
address should be "0.0.0.0" if connections are allowed from anywhere.
(Note that the client can still filter connections based on
information passed in the open request.)
[/quote]
The things that aren't clear:
- how to listen on all IPv4 and IPv6 interfaces.
- how to listen on localhost only on IPv4 and IPv6
Working with Damien Miller, we've come up with the following
suggestions. After some digging, it turns out we're (belatedly)
seconding suggestions made by Niels Möller[1] in 2001!
(1) the string "" should specify that connections are allowed from anywhere
rationale: since we're not specifying an address, logically it could
mean "any address is acceptable" or "no address is acceptable". The
latter case is handled by not sending a tcpip-forward at all, so the
former should be the obvious meaning.
(2) "address to bind" should permit either a domain name or address
rationale: direct-tcpip permits this, and the server may have better
information about its addresses (eg "servername-hme0" to listen on that
interface on both IPv4 and IPv4). The client still has the option of
doing a lookup locally and/or sending an address instead.
(3) the string "localhost" should have a special meaning to the server
of "all loopback IPv4 and IPv6 interfaces".
rationale: a properly configured host should get this anyway from its
name resolver. Making it a special case removes a dependancy on the
name service that could potentially be used to compromise forwarded
connections.
An older client talking to a newer server will still be fully compatible
with these; a newer client talking to an older server potentially may
not, however this may be trivally overcome by configuration, eg manually
specifying "0.0.0.0" as a listen address instead of (1).
With those in mind, I'd like to suggest the following text to replace
the first paragraph in section 7.1:
[proposed text]
The 'address to bind' and 'port number to bind' specify the IP address
or domain name and port to which the socket to be listened is bound. The
address should be "" if connections are to accepted from anywhere on all
supported protocol families.
The server SHOULD treat an address of "localhost" to be a special case
meaning to listen on all supported protocol families on its loopback
interfaces only.
The strings "0.0.0.0" and "::" should be used to listen on all
interfaces on only IPv4 or IPv6 respectively. Similarly, strings of
"127.0.0.1" or "::1" should be used to listen on the loopback interface.
Note that the client can still filter connections based on information
passed in the open request.
[/proposed text]
Thanks and regards,
-Darren Tucker.
[1] http://article.gmane.org/gmane.ietf.secsh/2299
--
Darren Tucker (dtucker at zip.com.au)
GPG key 8FF4FA69 / D9A3 86E9 7EEE AF4B B2D4 37C9 C982 80C7 8FF4 FA69
Good judgement comes with experience. Unfortunately, the experience
usually comes from bad judgement.
Home |
Main Index |
Thread Index |
Old Index