我正在尝试使用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()
Run Code Online (Sandbox Code Playgroud)
我收到以下错误
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
Run Code Online (Sandbox Code Playgroud)
然后我浏览了 /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
Run Code Online (Sandbox Code Playgroud)
我的问题是,如何从远程主机连接到 Tor 的控制端口?
我需要设置任何解决方法或配置参数吗?
Stem 的一个可能重复项给出了“无法连接到端口 9051”的错误,该错误没有答案
测试用Tor 0.3.3.7.
ControlListenAddress配置已过时,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 的回答中提到的所有风险仍然存在。
除了 ControlPort 之外,您还需要设置ControlListenAddress 。您可以将其设置为0.0.0.0(绑定到所有地址)或服务器侦听的特定 IP。
如果您选择这样做,强烈建议您将防火墙配置为仅允许来自特定 IP 的控制连接并阻止所有其他 IP 的连接。
另请注意,控制端口流量不会加密,因此建议使用 cookie 身份验证,这样您的密码就不会通过网络发送。
您还可以运行隐藏服务以通过 Tor 公开控制端口,然后使用 Stem 和 Tor 连接到隐藏服务。
但一般答案是 ControlListenAddress 需要设置为绑定到 127.0.0.1 (localhost) 以外的 IP。