允许 apt-get 下载程序的正确 iptables 规则是什么?

允许 apt-get 下载程序的正确 iptables 规则是什么?

当我输入类似的内容时sudo apt-get install firefox,一切都正常,直到它询问我:

After this operation, 77 MB of additional disk space will be used.
Do you want to continue [Y/n]? Y

然后会显示错误消息:Failed to fetch: <URL>

我的iptables规则如下:

-P INPUT DROP
-P OUTPUT DROP
-P FORWARD DROP

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

-A INPUT -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT

我应该添加什么才能允许 apt-get 下载更新?谢谢

答案1

apt-get 几乎总是通过 HTTP 下载,但也可能使用 FTP,因此简短的回答可能是允许出站 HTTP 连接......当然还有 DNS。

您现在的配置不允许所有传出网络流量(链ESTABLISHED上的规则OUTPUT无效,因为不会建立任何会话)。您需要允许仅有的apt-get 更新,同时仍禁止其他所有内容?iptables可能不适合这项工作,因为它实际上不会解释 URL 并有选择地允许 HTTP 传输。您需要使用 HTTP 代理服务器来完成这项工作。

您可以使用更简单的设置来允许 apt-get 下载,但请注意,这也允许所有其他传出的 DNS 和 HTTP 连接,这可能不是您想要的。

iptables -F OUTPUT  # remove your existing OUTPUT rule which becomes redundant
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -p tcp --dport 53 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -p udp --dport 53 -m state --state NEW -j ACCEPT

如果您的 APT 源包括 HTTPS 或 FTP 源或 80 以外端口上的 HTTP 源,您也必须添加这些端口。

接下来,您必须允许返回流量。您可以使用允许任何已建立连接的单一规则来执行此操作:

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

(使用连接跟踪时,允许所有入站建立连接是安全的,因为只有您允许的连接才会进入 ESTABLISHED 状态。)

答案2

apt 通过 http 协议传输文件,所以你应该设置你的电脑接受来自 80 和 8080 端口服务器的数据。然后 iptables 规则应该是

iptables -A INPUT -p tcp --sport 80 -m conntrack --state NEW -j ACCEPT

iptables -A INPUT -p tcp --sport 8080 -m conntrack --state NEW -j ACCEPT

相关内容