![允许 apt-get 下载程序的正确 iptables 规则是什么?](https://linux22.com/image/597407/%E5%85%81%E8%AE%B8%20apt-get%20%E4%B8%8B%E8%BD%BD%E7%A8%8B%E5%BA%8F%E7%9A%84%E6%AD%A3%E7%A1%AE%20iptables%20%E8%A7%84%E5%88%99%E6%98%AF%E4%BB%80%E4%B9%88%EF%BC%9F.png)
当我输入类似的内容时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