【问题标题】:How to connect to Tor control port (9051) from a remote host?如何从远程主机连接到 Tor 控制端口(9051)?
【发布时间】:2019-09-28 00:46:52
【问题描述】:

我正在尝试使用stem python库从远程机器连接到tor的控制端口(9051)。

dum.py

from stem import Signal
from stem.control import Controller


def set_new_ip():
    """Change IP using TOR"""
    with Controller.from_port(address = '10.130.8.169', port=9051) as controller:
        controller.authenticate(password='password')
            controller.signal(Signal.NEWNYM)
set_new_ip()

我收到以下错误

Traceback (most recent call last):
  File "/home/jkl/anaconda3/lib/python3.5/site-packages/stem/socket.py", line 398, in _make_socket
    control_socket.connect((self._control_addr, self._control_port))
ConnectionRefusedError: [Errno 111] Connection refused

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "dum.py", line 28, in <module>
    set_new_ip();
  File "dum.py", line 7, in set_new_ip
    with Controller.from_port(address = '10.130.4.162', port=9051) as controller:
  File "/home/jkl/anaconda3/lib/python3.5/site-packages/stem/control.py", line 998, in from_port
    control_port = stem.socket.ControlPort(address, port)
  File "/home/jkl/anaconda3/lib/python3.5/site-packages/stem/socket.py", line 372, in __init__
    self.connect()
  File "/home/jkl/anaconda3/lib/python3.5/site-packages/stem/socket.py", line 243, in connect
    self._socket = self._make_socket()
  File "/home/jkl/anaconda3/lib/python3.5/site-packages/stem/socket.py", line 401, in _make_socket
    raise stem.SocketError(exc)
stem.SocketError: [Errno 111] Connection refused

然后我浏览了 /etc/tor/torrc 配置文件。 它说

Tor 监听来自 Tor 的本地连接的端口 控制器应用程序,如 control-spec.txt 中所述。

   ControlPort 9051
    ## If you enable the controlport, be sure to enable one of these
    ## authentication methods, to prevent attackers from accessing it.
    HashedControlPassword 16:E5364A963AF943CB607CFDAE3A49767F2F8031328D220CDDD1AE30A471
    SocksListenAddress 0.0.0.0:9050
    CookieAuthentication 1

我的问题是, 如何从远程主机连接到 Tor 的控制端口?
我需要设置任何解决方法或配置参数吗?

一个可能的重复 Stem is giving the "Unable to connect to port 9051" error 没有答案

【问题讨论】:

  • 您可以使用 SSH 隧道(参见 man ssh 中的 -L 参数)。

标签: python tor stem


【解决方案1】:

Tor 0.3.3.7测试。

ControlListenAddress 配置已过时,Tor 将忽略它并记录以下消息

[警告] 跳过过时的配置选项“ControlListenAddress”


您仍然可以在 torrc 文件中将 ControlPort 设置为 0.0.0.0:9051。不过,Tor 对此并不满意(这是正确的),并会警告您

您有一个 ControlPort 设置来接受来自非本地的连接 地址。这意味着未在您的计算机上运行的程序可以 重新配置你的 Tor。这很糟糕,因为控制器协议 没有加密!也许你应该只听 127.0.0.1 并使用 stunnel 或 ssh 之类的工具,用于加密与您的控件的远程连接 港口。

另外,您必须设置CookieAuthenticationHashedControlPassword 否则ControlPort 将被关闭

您已将 ControlPort 设置为接受来自的未经身份验证的连接 非本地地址。这意味着程序没有在您的 计算机可以重新配置您的 Tor,甚至无需猜测 密码。太糟糕了,我要为你关闭你的 ControlPort。如果 您需要远程控制您的 Tor,尝试启用身份验证和 使用 stunnel 或 ssh 之类的工具来加密远程访问。

@drew010 的回答中提到的所有风险仍然存在。

【讨论】:

    【解决方案2】:

    除了 ControlPort 之外,您还需要设置 ControlListenAddress。您可以将其设置为 0.0.0.0(绑定到所有地址)或您的服务器侦听的特定 IP。

    如果您选择这样做,建议您将防火墙配置为仅允许来自特定 IP 的控制连接并阻止所有其他 IP。

    另外请注意,控制端口流量不会被加密,因此建议使用 cookie 身份验证,这样您的密码就不会通过网络发送。

    您还可以运行隐藏服务以通过 Tor 公开控制端口,然后使用 Stem 和 Tor 连接到隐藏服务。

    但一般的答案是 ControlListenAddress 需要设置为绑定到 127.0.0.1 (localhost) 以外的 IP。

    【讨论】:

    • 谢谢。这正是我所需要的。他们(tor 项目)可能应该把它放在手册页或评论的 torrc 配置文件中。
    • @jaggi 他们没有把它放在配置示例中,因为这是一个坏主意,但我链接到了这个选项的手册页,所以它被发布了。您也可以使用 Klaus D 建议的 SSH 隧道,在这种情况下,您需要指定服务器 IP 和隧道端口。您需要从客户端计算机建立隧道并具有 SSH 访问权限,最好使用 SSH 密钥。
    • 这里是您可以用来从 Tor 控制客户端设置 SSH 隧道的命令(如果 SSH 是一个选项)。 ssh -p 22 user@10.130.8.169 -L 15090:127.0.0.1:9051 -N 然后,让 Stem 连接到 127.0.0.1:15090 进行控制连接。它将通过 SSH 安全地进行隧道传输。似乎由于 IP 是 10.0.0.0/8,您可能在专用网络上,因此可能不需要。
    • 是的,我在防火墙后面的专用网络中。我不知道 ssh soln。感谢您的详细解释
    • FYI ControlListenAddress 在链接的手册页中不再提及。在people.torproject.org/~sysrqb/webwml/docs/tor-manual.html.en中提到;但是,带有以下警告:We strongly recommend that you leave this alone unless you know what you’re doing, since giving attackers access to your control listener is really dangerous..
    猜你喜欢
    • 1970-01-01
    • 2011-07-26
    • 1970-01-01
    • 2019-06-27
    • 1970-01-01
    • 2011-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多