Я немного смущен, потому что я настроил FTP-сервер на своем локальном хосте. Я использовал 'vsftpd', из моего .conf файла существует две строки:
listen_port=820
ftp_data_port=821
И запись от 'ufw'
To Action From
-- ------ ----
819:821/tcp ALLOW Anywhere
819:821/tcp (v6) ALLOW Anywhere (v6)
Так... все смотрит хорошо, но когда я пытался войти в систему через браузер (ftp://192.168.1.123:820), ему был нужен пользователь/пароль, но содержание не показало.
Таким образом, я запустил со своей поездки Google и узнал что-то abou FireWall и порты.
Я отключил брандмауэр - он начал работать, я добавляю диапазон портов TCP от 60 000 до 65 000, и он снова работает...
но я должен знать почему?
То, почему это не работает, когда мой брандмауэр запущен (включило), и tcp819,820 и 812 позволяется?
Заранее спасибо.
С FTP клиент соединяется с сервером на listen_port
, т.е. listen_port
используется в качестве целевого порта для данных от клиента. Передача данных, т.е. списки каталогов и передачи файлов, сделана с помощью отдельных подключений TCP, и поведение отличается между классическим активным режимом и сегодня наиболее часто используемым пассивным режимом.
В активном режиме сервер соединяется с клиентом от ftp_data_port
. Это означает: соединение инициируется на стороне сервера (вопреки соединению управления) и ftp_data_port
исходный порт в стороне сервера и целевом порту с точки зрения клиента.
Но так как активный режим не играет хорошо с клиентами позади NAT (т.е. большинство систем дома или малого офиса), пассивный режим предпочтен сегодня, и большинство клиентов использует его по умолчанию. В этом режиме не сервер соединяется с клиентом, но клиент соединяется с сервером. Целевой порт динамично присвоен, и сервер говорит клиенту в ответ на PASV
или PORT
команда, который порт использовать. Из-за того, как TCP работает, недостаточно иметь единственный порт для всех соединений данных с тем же клиентом и таким образом ftp_data_port
не будет использоваться для этого. Вместо этого порт в диапазоне, данном pasv_min_port
и pasv_max_port
будет использоваться и если этим параметрам не дадут будет использоваться, то эфемерный порт.