Firewall

FreeBSD監獄中FTP的PF防火牆問題

  • August 4, 2010

我最近嘗試在我的一台 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

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