Firewall
FreeBSD監獄中FTP的PF防火牆問題
我最近嘗試在我的一台 FreeBSD 伺服器上設置監獄,在嘗試通過 FTP 下載 FreeBSD 軟體包時遇到了奇怪的錯誤。
我在 PF 防火牆中有這些規則,以允許在主機上下載包,它們可以正常工作:
ext_if = "bge0" # Allow downloads pass out log on $ext_if proto tcp to any port {20, 21, 22, 80, 443} # Special exception for FTP. pass out log on $ext_if proto tcp to any port > 49151 keep state
但是當我嘗試從監獄內安裝軟體包時,FTP 連接就會超時。
我得到的錯誤資訊是這樣的:
%pkg_add -vr bash [snipped FTP connection setup] >>> CWD pub/FreeBSD/ports/amd64/packages-8.1-release/Latest <<< 250 CWD command successful. >>> MODE S <<< 200 MODE S accepted. >>> TYPE I <<< 200 Type set to I. binding data socket >>> PORT 82,103,140,25,229,3 <<< 200 PORT command successful. initiating transfer >>> RETR bash.tbz <<< 425 Can't build data connection: Operation timed out. Error: Unable to get ftp://ftp.freebsd.org/pub/FreeBSD/ports/amd64/packages-8.1-release/Latest/bash.tbz: Can't open data connection pkg_add: unable to fetch 'ftp://ftp.freebsd.org/pub/FreeBSD/ports/amd64/packages-8.1-release/Latest/bash.tbz' by URL pkg_add: 1 package addition(s) failed
我缺少某種聯繫嗎?我希望我可以將 pkg_add 配置為使用 HTTP 而不是 FTP(我不知道為什麼 FreeBSD 仍然使用這個令人遺憾的藉口作為協議),但似乎需要 FTP 來操作 FreeBSDs 包系統,我不知道如何製作它與防火牆一起使用。歡迎任何建議:)
預設情況下,FTP 使用所謂的“活動”模式進行數據傳輸,這對防火牆不太友好。在這種模式下,FTP 伺服器連接到客戶端發送的 PORT 命令中指定的 IP:埠(在您的情況下為 82.103.140.25:58627)。
解決此問題的最簡單方法是從“主動”切換到“被動”FTP 傳輸模式。對於使用 fetch(1) 進行文件檢索的“pkg_add”,它是通過設置環境變數 FTP_PASSIVE_MODE 來完成的。
你可以嘗試
ftp-proxy(8)
使用anchor "ftp-proxy/*"
有關更多資訊,請參見此處http://www.openbsd.org/faq/pf/ftp.html