Недавно я попытался установить тюрьмы на одном из моих серверов FreeBSD, и у меня возникают странные ошибки при попытке загрузить пакеты FreeBSD через FTP.
У меня есть эти правила в брандмауэре 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 необходим для работы с системой пакетов FreeBSD, и я понятия не имею, как сделать он работает с межсетевым экраном. Любые предложения приветствуются :)
По умолчанию FTP использует так называемый «активный» режим для передачи данных, который не очень удобен для брандмауэра. В этом режиме FTP-сервер подключается к IP: порту, указанному в команде PORT, отправленной клиентом (82.103.140.25:58627 в вашем случае).
Самый простой способ исправить это - переключиться с «активного» на «пассивный» режим передачи FTP. В случае "pkg_add", который использует fetch (1) для извлечения файлов, это делается путем установки переменной среды FTP_PASSIVE_MODE.
Вы можете попробовать использовать ftp-proxy(8)
с участием anchor "ftp-proxy/*"
Подробнее см. Здесь http://www.openbsd.org/faq/pf/ftp.html