6

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

矮胖

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的一个可能重复项 给出“无法连接到端口 9051”错误,该错误没有答案

4

2 回答 2

6

经测试Tor 0.3.3.7

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

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


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

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

另外,您必须设置,CookieAuthentication否则HashedControlPasswordControlPort关闭

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

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

于 2019-09-27T16:38:51.873 回答
5

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

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

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

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

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

于 2017-08-27T05:53:50.497 回答