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


12

当我输入类似的内容时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下载更新?谢谢

Answers:


17

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状态。)


嗨,谢谢您的回复。它起作用了,但是您认为打开这些OUTPUT端口可能会带来安全问题吗?谢谢
anthony01 2012年

1
大多数防火墙(包括几乎所有SOHO样式的防火墙)都允许无限制的出站连接。人们通常不需要限制传出流量。但这取决于您的要求。您现有的设置可防止有问题的工作站上的用户浏览Internet。如果这是您需要执行的操作,则不能使用此基于iptables的解决方案,因为它会导致允许进行Web浏览。
Celada's

而且,如果要阻止网页浏览,那还是错误的工具。使用NetFilter / IPTables阻止所有出站连接以防止员工浏览网页,就像使用火箭筒打开胡桃木一样。您需要一个透明的Web代理,该代理将记录不当使用情况,同时允许授权用户进行与工作相关的浏览。
麦哲伦

经过数小时的搜索,此答案最终帮助我解决了自己的本地服务器的问题。不管我做了什么,所有传出流量都被阻止,直到我明确允许通过端口53进行DNS连接为止。这是有道理的,因为我的程序包管理器抱怨说它无法解析主机。
洋葱2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.