jupyter 笔记本的 iptables 规则

问题描述 投票:0回答:3

jupyter 笔记本的 iptables 设置出现问题。 使用以下规则(假设笔记本端口8888),jupyter笔记本服务器将成功启动,但实际的笔记本内核将无法启动/建立。

通过注释掉最后一个 iptables 规则“-A OUTPUT -j DROP”,一切正常。

有什么想法吗?

-A INPUT -p tcp -m state --state NEW,ESTABLISHED --dport 8888 -j ACCEPT
-A INPUT -p tcp -m state --state ESTABLISHED --sport 8888 -j ACCEPT
-A OUTPUT -p tcp -m state --state ESTABLISHED --sport 8888 -j ACCEPT 
-A OUTPUT -p tcp -m state --state NEW,ESTABLISHED --dport 8888 -j ACCEPT
-A INPUT -j DROP
-A OUTPUT -j DROP
python jupyter-notebook jupyter firewall iptables
3个回答
1
投票

像 jupyter 这样的工具通常使用环回设备(localhost)来访问某些功能。例如,jupyter 有一个通过 HTTP 与笔记本服务器通信的前端,笔记本服务器通过套接字将消息发送到 IPython 内核(请参阅:https://jupyter.readthedocs.io/en/latest/architecture/how_jupyter_ipython_work.html) .

我会添加以下规则:

sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A OUTPUT -o lo -j ACCEPT

这些规则允许回送设备(本地主机)的输入和输出。


0
投票

上面的答案是正确的修复方法,但是指出的文档已损坏,有关 Jupyter 客户端与 IPython 内核通信的当前文档已在此处更新:https://jupyter-client.readthedocs.io/en/latest/messaging.html

此外,对于遇到此问题的任何人来说,这是添加 iptable 规则的正确顺序:

iptables -A INPUT -p tcp -m state --state NEW,ESTABLISHED --dport 8888 -j ACCEPT
iptables -A INPUT -p tcp -m state --state ESTABLISHED --sport 8888 -j ACCEPT
iptables -A OUTPUT -p tcp -m state --state ESTABLISHED --sport 8888 -j ACCEPT
iptables -A OUTPUT -p tcp -m state --state NEW,ESTABLISHED --dport 8888 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A INPUT -j DROP
iptables -A OUTPUT -j DROP

iptable 规则以链的形式存在。传入、传出和直通数据包在相应的链中一次检查一个规则,并根据第一个匹配的规则进行处理。通过上述顺序,带有环回地址的数据包可以自由通过,但所有其他流量都被阻止。这会阻止 pip 安装、apt-updates、telnet、netcat 等。


0
投票

我设法使用防火墙策略阻止出站流量:

https://firewalld.org/2020/09/policy-objects-introduction

https://github.com/firewalld/firewalld/issues/898

以下政策奏效了:

#Setup a new policy
firewall-cmd --permanent --new-policy myOutputPolicy
firewall-cmd --permanent --policy myOutputPolicy --add-ingress-zone HOST
firewall-cmd --permanent --policy myOutputPolicy --add-egress-zone ANY

#Block all output traffic
firewall-cmd --permanent --policy myOutputPolicy --set-target REJECT

#Configure Exceptions
firewall-cmd --permanent --policy myOutputPolicy --add-service dns
firewall-cmd --permanent --policy myOutputPolicy --add-service https
firewall-cmd --permanent --policy myOutputPolicy --add-service http

#Apply changes
firewall-cmd --reload

此后,除 dns、http 和 https 之外的所有出站流量都将被拒绝,入站流量仍然有效。

如果需要,可以设置策略解锁:

#Enable all output traffic
firewall-cmd --permanent --policy myOutputPolicy --set-target ACCEPT
firewall-cmd --reload
© www.soinside.com 2019 - 2024. All rights reserved.