Назад | Перейти на главную страницу

vsftpd: ECONNREFUSED при подключении с внешнего ip

Когда я начал настраивать сервер vsftpd, у меня было много проблем, но на этот раз я не могу понять, что именно не так.

У меня есть сервер ubuntu 14.04, на котором запущен vsftpd. Сервер находится за брандмауэром в демилитаризованной зоне, и ему был назначен определенный внутренний и глобальный IP-адрес. Подключение как с localhost, так и из внутренней сети работает.

Пока все хорошо, но когда я пытаюсь получить доступ к FTP-серверу через его глобальный IP-адрес, будь то из внутренней сети или где-то еще, FileZilla просто дает мне следующее:

Status:         Connecting to <global.ip>:21...
Status:         Connection attempt failed with "ECONNREFUSED - Connection refused by server".
Error:          Could not connect to server

Я могу исключить неправильный IP-адрес как причину, потому что ввод несуществующего IP-адреса приводит к ошибке тайм-аута, а запуск проверки whois на глобальном IP-адресе дает мне интернет-провайдера нашей компании.

Я установил пассивные порты в диапазоне 50,000 внутри vsftpd.conf, также брандмауэр будет пересылать запросы, поступающие с портов 20, 21 и 50.000-50.050. Затем я снова добавил несколько правил в конфигурацию iptables, чтобы пропустить желаемый трафик.

Для справки, вот моя настройка iptables:

~$ sudo iptables -L

Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     tcp  --  anywhere             anywhere
tcp dpts:50000:50050
ACCEPT     tcp  --  anywhere             anywhere
tcp dpt:ssh
ACCEPT     tcp  --  anywhere             anywhere
tcp dpt:ftp

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     tcp  --  anywhere             anywhere
tcp spt:ftp-data

И мой vsftpd.conf:

listen=YES
local_enable=YES
local_umask=022
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
idle_session_timeout=600
ftpd_banner=Welcome
chroot_local_user=YES
ls_recurse_enable=YES
secure_chroot_dir=/var/run/vsftpd/empty

ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_ciphers=HIGH

rsa_cert_file=/home/awacs/vsftp.crt
rsa_private_key_file=/home/awacs/vsftp_clear.key

#pasv_address=<global.ip>
pasv_min_port=50000
pasv_max_port=50050
listen_port=21
pasv_enable=YES
#listen_address=<global.ip>

Как видите, я попробовал pasv_address и listen_address параметры в конфиге. listen_address приводит к тому, что сервер принимает запросы только с глобального IP-адреса, поэтому он вообще не отвечает. Установка pasv_address также была неудовлетворительной, поскольку внешние запросы по-прежнему не работали, а соединения из внутренней сети зависали при выполнении команды LIST каталога.

Если кто-нибудь скажет мне, что я сделал неправильно или упустил из виду, я был бы более чем счастлив. Я еще раз подчеркиваю, что сервер отлично работает из внутренней сети, но я не могу заставить его подключиться через глобальный IP. Заранее спасибо.