Security

允許 apt-get 下載程序的正確 iptables 規則是什麼?

  • September 28, 2020

當我輸入類似的內容時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 下載更新?謝謝

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 源在 80 以外的埠上包含 HTTPS 或 FTP 源或 HTTP 源,則您也必須添加這些埠。

接下來,您必須允許返回流量。您可以使用允許任何已建立連接的單個規則來做到這一點:

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

(使用連接跟踪時允許所有入站建立的連接是安全的,因為只有您允許的連接才會進入 ESTABLISHED 狀態。)

引用自:https://serverfault.com/questions/433295