允許 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 -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

相關內容