Мой FTP (ы) не работает, когда мой брандмауэр включен. Раньше у меня всегда настраивались iptables, вчера я примерно научился их настраивать, но я пропустил правило, которое для этого требуется. Вот мой iptables.rules
# Generated by iptables-save v1.4.4 on Tue Nov 16 23:23:50 2010 *filter :FORWARD ACCEPT [0:0] :INPUT ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -i lo -j ACCEPT -A INPUT -m state -i eth0 --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp --dport 20:21 -j ACCEPT -A INPUT -p tcp -m tcp --dport 989:990 -j ACCEPT -A INPUT -p tcp -m tcp -i eth0 --dport 22 -j ACCEPT -A INPUT -p tcp -m tcp -i eth0 --dport 80 -j ACCEPT -A INPUT -p tcp -m tcp -i eth0 --dport 443 -j ACCEPT -A INPUT -p tcp -m tcp -i eth0 --dport 10000 -j ACCEPT -A INPUT -p icmp -i eth0 -j ACCEPT -A INPUT -j REJECT --reject-with icmp-port-unreachable COMMIT # Completed on Tue Nov 16 23:23:50 2010 # Generated by iptables-save v1.4.4 on Tue Nov 16 23:23:50 2010 *mangle :PREROUTING ACCEPT [95811:65665815] :INPUT ACCEPT [92355:65212126] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [55795:22371752] :POSTROUTING ACCEPT [55795:22371752] COMMIT # Completed on Tue Nov 16 23:23:50 2010 # Generated by iptables-save v1.4.4 on Tue Nov 16 23:23:50 2010 *nat :PREROUTING ACCEPT [5132:543438] :POSTROUTING ACCEPT [953:67517] :OUTPUT ACCEPT [953:67517] COMMIT # Completed on Tue Nov 16 23:23:50 2010
Подводя итог, мой FTP будет подключаться, но не будет отображать никаких файлов с включенным брандмауэром. с отключенным брандмауэром все идеально.
РЕДАКТИРОВАТЬ: единственный способ, которым у меня есть это для работы с брандмауэром, - это отключить ipv6, отключить TLS и добавить правило в брандмауэр, которое разрешает подключение из моей домашней сети (сервер находится в другом месте)
В пассивном режиме, когда клиент хочет получить файл с сервера или отправить файл на сервер, FTP-сервер выбирает случайный порт и отправляет этот порт клиенту FTP.
Если вы не используете шифрование, правильно настроенный брандмауэр (с использованием ip_conntrack_ftp
вспомогательный модуль ядра, который может быть тем, что вам не хватает для подключений без TLS) будет «прослушивать» подключение и отмечать эти подключения как RELATED
. С шифрованием брандмауэр не может прослушивать.
Быстрое и грязное решение этой проблемы - настроить FTP-сервер на выбор небольшого диапазона портов для пассивных подключений, а затем разрешить доступ ко всем этим портам. Например, в vsftpd
:
pasv_min_port=12000
pasv_max_port=12049
Затем в iptables:
iptables -A INPUT -p tcp -m tcp -i eth0 --dport 12000:12049 -j ACCEPT
Разрешение кому-либо доступа к этим портам открывает одну возможную уязвимость: если кто-то будет сканировать их снова и снова, ему может повезти, и он сможет «обыграть» реального пользователя до порта данных и захватить файл. В идеале ваш FTP-сервер должен проверить и убедиться, что соединение исходит из того же места, что и исходное соединение, но благодаря таким вещам, как «FXP» (передача файлов с одного сервера на другой, убедив одного установить активное соединение с другим. пассивный порт данных) некоторые серверы по умолчанию не проверяют соединение. Вы должны проверить свой файл конфигурации и посмотреть, есть ли возможность отключить FXP и использовать его. (vsftpd называет это «неразборчивым» и по умолчанию отключено.)
У меня нет прямого опыта работы с FTPS, но возможно, что из-за того, что канал управления зашифрован, код отслеживания соединений netfilter не может узнать, какой порт открыть, чтобы разрешить входящее соединение для данных клиента (для пассивного режима). Это может объяснить, почему при отключенном брандмауэре «все идеально». По возможности попробуйте использовать активный режим. К сожалению, я подозреваю, что если клиент также находится за брандмауэром, активный режим, скорее всего, также будет заблокирован по той же причине!
Если FTP-соединение запускается, но файлы не видны / не переданы, попробуйте использовать пассивный режим (просто введите PASV в командной строке ftp-клиента). Без пассивного режима сервер попытается установить соединение с вашей машиной через анонимный порт. По крайней мере, это то, что происходит с простым FTP - не знаю, как это делается с FTPS: S
HTH,
JJK