[tor-bugs] #1250 [Tor - Tor client]: strange SOCKS error code when connecting to a hidden service using the wrong port
Tor Bug Tracker & Wiki
torproject-admin at torproject.org
Tue Aug 3 19:41:06 UTC 2010
#1250: strange SOCKS error code when connecting to a hidden service using the
wrong port
---------------------------+------------------------------------------------
Reporter: ultramage | Type: enhancement
Status: new | Priority: minor
Milestone: | Component: Tor - Tor client
Version: 0.2.2.7-alpha | Resolution: None
Keywords: | Parent:
---------------------------+------------------------------------------------
Changes (by nickm):
* milestone: Tor: 0.2.2.x-final =>
Old description:
> I set up two distinct hidden services, HTTP(80) and SSH(22) on my machine
> (since I didn't know you could put multiple records under a single
> service).
>
> Today I made the mistake of connecting to the HTTP service using port 22
> (took the HTTP service's url, stripped the http part, entered into
> PuTTY).
> The returned error code was 0x02 = connection not allowed by ruleset.
> This message made me very confused, since it somehow implies that my
> SOCKS
> settings were somehow blocking the connection. But that was not the case.
>
> What happened on the TOR back-end was, my request got received, the
> remote
> TOR server found that my port was not on the list of ports associated
> with
> that particular onion hostname, and rejected the connection attempt.
> Finally, my TOR client, trying to be as clever as informative as
> possible,
> returned that specific error code.
>
> While the error code does in some sense describe what happened
> internally,
> I do not think that 0x02 is appropriate for this scenario. I did not
> study
> the SOCKS specification, however I'm assuming that "ruleset" refers to
> the
> access control rules implemented on the daemon that's providing the
> tunnel,
> and not on the remote endpoint (the target machine is oblivious to SOCKS
> and just sees an incoming TCP connection, so it can't react in any way).
>
> My proposal is to change this error code to reduce confusion and help
> users
> identify the cause of the problem (between keyboard and chair in my case
> :).
> Which one to use? I suggest 0x05 = connection refused by destination
> host.
> "Connection refused" is what you normally get if the destination machine
> has
> nothing running on the requested port (and there's no firewall to hide
> that).
>
> Visualize a single hidden service as a physical machine running somewhere
> on the internet, with stuff listening only on ports associated with that
> HS.
> In that case, connecting to a wrong port would give TCP "connection
> refused".
> And TOR hidden service isolation seems to be making virtual servers like
> this.
> So why shouldn't it be returning this error code instead?
>
> PS: Also think of SOCKS client software that might get confused by this
> error code.
> PS2: You could test the effectiveness of this change by taking a group of
> people,
> giving them a setup like mine, asking them to troubleshoot the issue and
> timing them.
> Whichever group can figure out what the problem is faster has the better
> error code.
>
> [Automatically added by flyspray2trac: Operating System: All]
New description:
I set up two distinct hidden services, HTTP(80) and SSH(22) on my machine
(since I didn't know you could put multiple records under a single
service).
Today I made the mistake of connecting to the HTTP service using port 22
(took the HTTP service's url, stripped the http part, entered into PuTTY).
The returned error code was 0x02 = connection not allowed by ruleset.
This message made me very confused, since it somehow implies that my SOCKS
settings were somehow blocking the connection. But that was not the case.
What happened on the TOR back-end was, my request got received, the remote
TOR server found that my port was not on the list of ports associated with
that particular onion hostname, and rejected the connection attempt.
Finally, my TOR client, trying to be as clever as informative as possible,
returned that specific error code.
While the error code does in some sense describe what happened internally,
I do not think that 0x02 is appropriate for this scenario. I did not study
the SOCKS specification, however I'm assuming that "ruleset" refers to the
access control rules implemented on the daemon that's providing the
tunnel,
and not on the remote endpoint (the target machine is oblivious to SOCKS
and just sees an incoming TCP connection, so it can't react in any way).
My proposal is to change this error code to reduce confusion and help
users
identify the cause of the problem (between keyboard and chair in my case
:).
Which one to use? I suggest 0x05 = connection refused by destination host.
"Connection refused" is what you normally get if the destination machine
has
nothing running on the requested port (and there's no firewall to hide
that).
Visualize a single hidden service as a physical machine running somewhere
on the internet, with stuff listening only on ports associated with that
HS.
In that case, connecting to a wrong port would give TCP "connection
refused".
And TOR hidden service isolation seems to be making virtual servers like
this.
So why shouldn't it be returning this error code instead?
PS: Also think of SOCKS client software that might get confused by this
error code.
PS2: You could test the effectiveness of this change by taking a group of
people,
giving them a setup like mine, asking them to troubleshoot the issue and
timing them.
Whichever group can figure out what the problem is faster has the better
error code.
[Automatically added by flyspray2trac: Operating System: All]
--
Comment:
Hm. For the hidden service case, 0x05 "Connection refused" is indeed a
better error for this case than 0x02 "Connection not allowed by ruleset."
Unfortunately, the error that we're decoding here is
END_STREAM_REASON_EXITPOLICY, which is not in general a matter of the
target host refusing the connection but rather a matter of the exit node
refusing it.
In the longer run, we should add a new END_STREAM_REASON for all
EXITPOLICY cases that aren't really exit policy, and have that one remap
to 0x05 in socks codes. For 0.2.2.x, though, it's not critical; waiting
to 0.2.3.x will be fine.
--
Ticket URL: <https://trac.torproject.org/projects/tor/ticket/1250#comment:2>
Tor Bug Tracker & Wiki <https://trac.torproject.org/>
The Tor Project: anonymity online
More information about the tor-bugs
mailing list