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

ant*_*y01 13 security firewall 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
Run Code Online (Sandbox Code Playgroud)

然后显示错误消息: 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
Run Code Online (Sandbox Code Playgroud)

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

Cel*_*ada 23

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

您现在的配置不允许所有传出网络流量(ESTABLISHED您在OUTPUT链上的规则无效,因为不会建立任何会话)。你需要让ONLY 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
Run Code Online (Sandbox Code Playgroud)

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

接下来,您必须允许返回流量。您可以使用允许任何已建立连接的单个规则来做到这一点:

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

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

  • 大多数防火墙,包括几乎所有 SOHO 风格的盒子,都允许不受限制的出站连接。人们通常不需要限制传出流量。但这取决于您的要求。您现有的设置会阻止相关工作站上的用户浏览 Internet。如果这是你需要做的,那么你不能使用这个基于 iptables 的解决方案,因为它会导致 web 浏览被允许。 (2认同)