
當我輸入類似 的內容時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