не могу заставить ProFTPD предоставить sftp

Вопрос или проблема

Я установил 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.

Оцените материал
Добавить комментарий

Капча загружается...