Вопрос или проблема
Я установил ProFTPD, выполнив sudo apt install proftpd
, обновил свой файл /etc/proftpd/proftpd.conf, чтобы, надеюсь, он работал на порту 2222 (содержание этого файла находится внизу этого сообщения), а затем запустил его, выполнив sudo systemctl restart proftpd
, но все равно не могу подключиться, выполнив sftp -oPort=2222 neubert@localhost
. При этом я получаю следующую ошибку:
ssh: connect to host localhost port 2222: Connection refused
Connection closed.
Connection closed
Есть идеи?
#
# /etc/proftpd/proftpd.conf -- Это основной конфигурационный файл ProFTPD.
# Чтобы изменения действительно вступили в силу, перезагрузите proftpd после внесения изменений, если
# он работает в режиме демона. Это не требуется в режиме inetd/xinetd.
#
# Включает DSO модули
Include /etc/proftpd/modules.conf
# Выключите для отключения поддержки IPv6, что раздражает на машинах только с IPv4.
UseIPv6 on
# Если включено, вы можете столкнуться с более длительной задержкой подключения во многих случаях.
<IfModule mod_ident.c>
IdentLookups off
</IfModule>
ServerName "Debian"
# Установите в inetd только если вы хотите запускать proftpd через inetd/xinetd/socket.
# Читайте README.Debian для получения дополнительной информации о правильной конфигурации.
ServerType standalone
DeferWelcome off
# Отключение MultilineRFC2228 в соответствии с https://github.com/proftpd/proftpd/issues/1085
# MultilineRFC2228on
DefaultServer on
ShowSymlinks on
TimeoutNoTransfer 600
TimeoutStalled 600
TimeoutIdle 1200
DisplayLogin welcome.msg
DisplayChdir .message true
ListOptions "-l"
DenyFilter \*.*/
# Используйте это, чтобы заключить всех пользователей в их домашние директории
# DefaultRoot~
# Пользователи должны иметь действительную оболочку, указанную в /etc/shells, для входа.
# Используйте этот директив, чтобы снять это ограничение.
# RequireValidShelloff
# Порт 21 является стандартным FTP портом.
Port 21
# В некоторых случаях вам необходимо указать диапазон пассивных портов, чтобы обойти
# ограничения брандмауэра. Эфемерные порты могут использоваться для этого, но
# не стесняйтесь использовать более узкий диапазон.
# PassivePorts 49152 65534
# Если ваш хост был под NAT, этот параметр полезен для
# обеспечения работы пассивных передач. Вам нужно использовать ваш публичный
# адрес и открыть пассивные порты, используемые на вашем брандмауэре.
# MasqueradeAddress 1.2.3.4
# Это полезно для маскировки адресов с динамическими IP:
# обновлять любые настроенные директивы MasqueradeAddress каждые 8 часов
<IfModule mod_dynmasq.c>
# DynMasqRefresh 28800
</IfModule>
# Чтобы предотвратить атаки DoS, установите максимальное количество дочерних процессов
# на 30. Если вам нужно разрешить более 30 одновременных подключений
# одновременно, просто увеличьте это значение. Обратите внимание, что это РАБОТАЕТ
# только в автономном режиме, в режиме inetd вам следует использовать сервер inetd,
# который позволяет ограничивать максимальное количество процессов на службу
# (например, xinetd)
MaxInstances 30
# Установите пользователя и группу, от имени которых сервер обычно работает.
User proftpd
Group nogroup
# Umask 022 является хорошим стандартным umask, который предотвращает создание новых файлов и директорий
# (второй параметр), доступных для записи группой и миром.
Umask 022 022
# Обычно мы хотим, чтобы файлы можно было перезаписывать.
AllowOverwrite on
# Раскомментируйте это, если вы используете NIS или LDAP через NSS для получения паролей:
# PersistentPasswd off
# Это необходимо для использования как аутентификации на основе PAM, так и локальных паролей
# AuthOrder mod_auth_pam.c* mod_auth_unix.c
# Имейте в виду: использование этой директивы влияет на среднюю загрузку CPU!
# Раскомментируйте это, если хотите видеть прогресс и скорость передачи с ftpwho
# при загрузках. Это не нужно для загрузок.
#
# UseSendFile off
TransferLog /var/log/proftpd/xferlog
SystemLog /var/log/proftpd/proftpd.log
# Вход в /var/log/lastlog включен, но по умолчанию установлен на отключенный
#UseLastlog on
# Для того чтобы даты файлов журнала оставались последовательными после chroot, используйте информацию о часовом поясе
# из /etc/localtime. Если это не установлено, и proftpd настроен на
# chroot (например, DefaultRoot или <Anonymous>), он будет использовать нестандартный
# часовой пояс, независимо от того, действует ли переход на летнее/зимнее время.
#SetEnv TZ :/etc/localtime
<IfModule mod_quotatab.c>
QuotaEngine off
</IfModule>
<IfModule mod_ratio.c>
Ratios off
</IfModule>
# Движок задержки снижает влияние так называемой атаки по времени, описанной в
# http://www.securityfocus.com/bid/11430/discuss
# Он включен по умолчанию.
<IfModule mod_delay.c>
DelayEngine on
</IfModule>
<IfModule mod_ctrls.c>
ControlsEngine off
ControlsMaxClients 2
ControlsLog /var/log/proftpd/controls.log
ControlsInterval 5
ControlsSocket /var/run/proftpd/proftpd.sock
</IfModule>
<IfModule mod_ctrls_admin.c>
AdminControlsEngine off
</IfModule>
#
# Альтернативные фреймворки аутентификации
#
#Include /etc/proftpd/ldap.conf
#Include /etc/proftpd/sql.conf
#
# Это используется для FTPS соединений
#
#Include /etc/proftpd/tls.conf
#
# Это используется для SFTP соединений
#
#Include /etc/proftpd/sftp.conf
#
# Это используется для других дополнительных модулей
#
#Include /etc/proftpd/dnsbl.conf
#Include /etc/proftpd/geoip.conf
#Include /etc/proftpd/snmp.conf
#
# Полезно для разделения директив VirtualHost/VirtualRoot
#
#Include /etc/proftpd/virtuals.conf
# Основная анонимная конфигурация, нет директорий загрузки.
# <Anonymous ~ftp>
# User ftp
# Group nogroup
# # Мы хотим, чтобы клиенты могли входить под "anonymous", так же как и "ftp"
# UserAlias anonymous ftp
# # Косметические изменения, все файлы принадлежат пользователю ftp
# DirFakeUser on ftp
# DirFakeGroup on ftp
#
# RequireValidShell off
#
# # Ограничьте максимальное количество анонимных входов
# MaxClients 10
#
# # Мы хотим, чтобы 'welcome.msg' отображалось при входе, и '.message' отображалось
# # в каждой только что перемещенной директории.
# DisplayLogin welcome.msg
# DisplayChdir .message
#
# # Ограничьте запись повсюду в анонимном chroot
# <Directory *>
# <Limit WRITE>
# DenyAll
# </Limit>
# </Directory>
#
# # Раскомментируйте это, если вы смелы.
# # <Directory incoming>
# # # Umask 022 является хорошим стандартным umask, который предотвращает создание новых файлов и директорий
# # # (второй параметр), доступных для записи группой и миром.
# # Umask022 022
# # <Limit READ WRITE>
# # DenyAll
# # </Limit>
# # <Limit STOR>
# # AllowAll
# # </Limit>
# # </Directory>
#
# </Anonymous>
# Включить другие пользовательские конфигурационные файлы
# !! Обратите внимание, что это заявление будет читать /все/ файлы из этого подкаталога,
# т.е. резервные файлы, созданные вашим редактором, тоже !!!
# В конечном итоге создайте шаблоны файлов, такие как: /etc/proftpd/conf.d/*.conf
#
Include /etc/proftpd/conf.d/
<IfModule mod_sftp.c>
<VirtualHost 0.0.0.0>
SFTPEngine on
SFTPLog /var/log/proftpd/sftp.log
Port 2222
# Настройте как RSA, так и DSA ключи хоста, используя те же файлы ключей
# которые использует OpenSSH.
SFTPHostKey /etc/ssh/ssh_host_rsa_key
SFTPHostKey /etc/ssh/ssh_host_dsa_key
SFTPAuthMethods password
SFTPCompression delayed
</VirtualHost>
</IfModule>
Директория /etc/proftpd/authorized_keys/
отсутствует.
Мой /var/log/proftpd/sftp.log
пуст. /etc/ssh/ssh_host_dsa_key
не существует, однако /etc/ssh/ssh_host_rsa_key
существует и начинается с -----BEGIN OPENSSH PRIVATE KEY-----
. Чтобы просмотреть этот файл, однако, мне нужно использовать sudo.
Интересно, не мешает ли обертывание конфигурации SFTP в теги “VirtualHost” привязке SFTP – что произойдет, если вы уберете / закомментируете строки VirtualHost и /VirtualHost?
Если вы хотите привязаться только к одному интерфейсу, возможно, укажите IP-адрес интерфейса, а не 0.0.0.0?
Ответ или решение
Проблема подключения к SFTP на ProFTPD: Обзор и решения
Ваша проблема с подключением к SFTP на ProFTPD, а именно сообщение "Connection refused" при попытке подключения к sftp://localhost:2222
, требует детального анализа конфигурации и возможных ошибок в настройках. Давайте разберем шаг за шагом, как можно исправить ситуацию, а также выясним, какие параметры конфигурации могут быть изменены.
1. Проверка конфигурации ProFTPD
Ваш файл конфигурации /etc/proftpd/proftpd.conf
содержит множество настроек, но давайте сосредоточимся на части, касающейся SFTP:
<IfModule mod_sftp.c>
<VirtualHost 0.0.0.0>
SFTPEngine on
SFTPLog /var/log/proftpd/sftp.log
Port 2222
SFTPHostKey /etc/ssh/ssh_host_rsa_key
SFTPHostKey /etc/ssh/ssh_host_dsa_key
SFTPAuthMethods password
SFTPCompression delayed
</VirtualHost>
</IfModule>
Некоторые ключевые моменты:
-
Порт: Вы задали
Port 2222
, что верно, но при этом стоит проверить, не заблокирован ли этот порт настройками брандмауэра (например,ufw
илиiptables
). -
VirtualHost: Обычно использование
VirtualHost
не является проблемой, однако для диагностики можно попробовать временно закомментировать эти строки, чтобы определить, влияет ли это на доступность SFTP. -
SFTPHostKey: Убедитесь, что ключ
/etc/ssh/ssh_host_dsa_key
действительно существует. Если его нет, возможно, можно использовать только RSA-ключ. Отключите DSA-ключ, удалив соответствующую строку. Важно, чтобы указанный ключ имел правильные разрешения и принадлежал нужному пользователю (например,root
).
2. Проверка статуса службы
После внесения любых изменений в конфигурацию обязательно перезапустите ProFTPD:
sudo systemctl restart proftpd
После этого проверьте статус службы, чтобы увидеть, есть ли ошибки:
sudo systemctl status proftpd
Консольный вывод поможет вам понять, работает ли служба и не выдает ли она ошибок.
3. Проверка брандмауэра
Убедитесь, что порт 2222 слушается и открыт. Для этого выполните команду:
sudo netstat -tuln | grep 2222
Если порт не слушается, возможно, сервер не запущен или брандмауэр блокирует соединение. Откройте порт с помощью ufw
:
sudo ufw allow 2222
4. Проверка логов
Поскольку файл лога SFTP пуст, возможно, ProFTPD не может его создать из-за проблем с правами доступа или конфигурацией. Проверьте основной лог ProFTPD:
cat /var/log/proftpd/proftpd.log
Ошибки в этом логе могут указать на проблему с подключением.
5. Проверка SSH
Убедитесь, что SSH-сервер работает правильно и слушает указанные порты. Для этого проверьте файл конфигурации /etc/ssh/sshd_config
, чтобы убедиться, что он отвечает за SFTP.
Вывод
После выполнения всех вышеперечисленных шагов ваше подключение к SFTP должно заработать. Если проблема продлится, подумайте о том, чтобы временно использовать стандартный SSH для подключения, что позволит исключить ошибки на уровне сети или конфигурации ProFTPD.
Проверьте каждую из стадий упомянутых выше, и вы сможете устранить проблему подключение к SFTP на ProFTPD.