Найти тему
Laboratory Luch

Администрирование Linux (VPS) – FTP. PART 2/3 – Безопасная настройка FTPS / vsftpd

#FTPS #vsftpd #Администрирование #Linux #Debian #VPS

1. FTPS

FTPS (FTP + SSL) – расширение стандартного протокола передачи файлов, добавляющее в его базовый функционал создание шифрованных сессий с помощью протокола SSL (Secure Sockets Layer — уровень защищенных сокетов). На сегодняшний день защита обеспечивается его более продвинутым аналогом TLS (Transport Layer Security — защита транспортного уровня).

vsftpd (англ. Very Secure FTP Daemon) — FTP-сервер с поддержкой IPv6 и SSL.

FTP-сервер с поддержкой IPv6 и SSL. Является FTP-сервером по умолчанию многих операционных систем, и обслуживает официальные репозитории ftp.debian.org, ftp.redhat.com, ftp.openbsd.org, ftp.freebsd.org.

2. VSFTPD

Команды FTP-сервера Linux:

просмотреть текущий рабочий каталог: pwd

для отображения локальной папки, а не папки FTP: lcd

загрузить (скачать) файл: get myfile

загрузить несколько файлов: mget file1 file2

для удаления файла на сервере: delete filename

для удаления каталога с сервера: rmdir dirName

для загрузки файла на сервер: put filename

загрузить несколько файлов: mput file1 file2

2.1. Установка

apt install vsftpd

systemctl status vsftpd

Для быстрого старта достаточно было бы просто дать доступ root, закоментируя из списка запрещенных:

nano /etc/ftpusers

#root

Но тогда теряется смысл в безопасности, поэтому необходимо завести пользователя FTP

2.2. Создаем FTP пользователя

adduser ftp_user

passwd ftp_user

groupadd ftp_group

adduser ftp_user ftp_group

cat /etc/group | grep ftp_group

2.3. Создаем директорию и даем доступ пользователю FTP

mkdir -p /home/ftp_user/ftp

chmod 550 /home/ftp_user/ftp

# устанавливаем каталог для пользователя

usermod -d /home/ftp_user/ftp -m ftp_user

chown -R ftp_user:ftp_group /home/ftp_user/ftp

chmod -R 774 /home/ftp_user/ftp

# установка командной оболочки пользователя, после чего при попытке входа в систему пользователь будет выходить из неё без какого-либо сообщения.

usermod -s /bin/false ftp_user

2.4. Настройка vsftpd

Перед настройками сервера, сделаем резервную копию конфига:

cp /etc/vsftpd.conf /etc/vsftpd.conf.orig

Или придётся переустанавливать apt-get --purge remove vsftpd

Правим конфиг!

nano /etc/vsftpd.conf

listen=YES

# разрешаем запись на сервере

write_enable=YES

# разрешаем вход локальным пользователям:

local_enable=YES

# запрещаем анонимный доступ

anonymous_enable=NO

# укажем порты и разрешим пассивный режим

connect_from_port_20=YES

# что бы нас не выкидывало слишком быстро

data_connection_timeout=120

# маска для вновь создаваемых файлов

local_umask=077

# записывать в лог файл все транзакции по передаче файлов

xferlog_enable=YES

# использовать стандартный формат лога

xferlog_std_format=YES

# файл лога

xferlog_file=/var/log/vsftpd.log

# для ipv6 не ожидать входящие соединения

listen_ipv6=NO

# запираем пользователей в домашних директориях:

chroot_local_user=YES

chroot_list_enable=YES

chroot_list_file=/etc/vsftpd.chroot_list

# добавляем FTP пользователя в список разрешенных

echo "ftp_user" | tee /etc/vsftpd.chroot_list

Перезапускаем FTP сервер

systemctl restart vsftpd

3. Безопасность FTP сервера

Порт 21 — используется для приёма запросов на подключение от FTP-клиента.

Порт 20 — используется FTP-сервером для активного подключения к FTP-клиенту.

Пассивные порты в vsftpd нужны для того, чтобы клиент передавал данные для сессии и сам устанавливал подключение. Такой режим считается более безопасным и рекомендуемым. В активном режиме клиент передаёт данные для сессии, а сервер по этим данным сам устанавливает подключение. В пассивном режиме клиент подключается на 21 порт, но теперь уже сервер сообщает номер порта для установки сессии. Клиент сам устанавливает сессию по этому порту.

# по умолчанию режим всегда активный. Чтобы изменить настройку, нужно зайти в файл конфигурации vsftpd и добавить соответствующие строки:

nano /etc/vsftpd.conf

pasv_enable=YES

pasv_min_port=30000

pasv_max_port=31000

Настроим брандмауэр FTP-трафик на порт 21 (командный порт FTP),

порт 20 (порт данных FTP) и 30000-31000 (диапазон пассивных портов)

ufw allow 20:21/tcp

ufw allow 30000:31000/tcp

Чтобы избежать блокировки, открыть порт 22 :

ufw allow OpenSSH

Перезагрузить правила UFW, отключив и снова включив UFW:

ufw disable

ufw enable

Проверить запуск изменений: ufw status

Так же с помощью iptables (вместо ufw):

iptables -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT # ftp-сервер

iptables -A INPUT -p tcp -m tcp --dport 20 -j ACCEPT # ftp-data

Iptables -A INPUT -p tcp -m tcp --dport 30000:31000 -j ACCEPT

3.1. Отключить оболочку ( Shell)

По умолчанию при создании пользователя, у пользователя будет SSH-доступ к серверу. Чтобы отключить доступ к оболочке, необходимо создать новую оболочку. Это не обеспечит шифрование, но это повысит безопасность и ограничит доступ уязвимой учетной записи к файлам по FTP, особенно когда клиент не поддерживает TLS

создать оболочку /bin/ftponly

nano /bin/ftponly

#!/bin/sh echo "This account is limited to FTP access only."

и сделать ее исполняемой

chmod a+x /bin/ftponly

Добавляем новую оболочку в список допустимых оболочек в /etc/shells

echo "/bin/ftponly" | tee -a /etc/shells

Изменить оболочку пользователя на /bin/ftponly

usermod ftp_user -s /bin/ftponly

3.2. Защита FTP соеденения TLS/SSL шифрованием

Так как FTP не шифрует передаваемые данные, это позволяет злоумышленникам перехватить их. Необходимо настройть TTL/SSL шифрование.

SSL (secure sockets layer — уровень защищённых cокетов) представляет собой криптографический протокол для безопасной связи. С версии 3.0 SSL заменили на TLS (transport layer security — безопасность транспортного уровня), но название предыдущей версии прижилось, поэтому сегодня под SSL чаще всего подразумевают TLS.

В протоколе TLS применяется HMAC (hashed message authentication code), который использует хеш-алгоритм сразу с общим секретным ключом. Здесь ключ прикрепляется к данным, и для подтверждения их подлинности обе стороны должны использовать одинаковые секретные ключи, что обеспечивает большую безопасность.

Для настройки шифрования использется openssl:

apt install openssl

чтобы создать новый SSL-сертификат для vsftpd:

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem

флаг -days указывает срок действия сертификата в днях (в данном случае сертификат действителен в течение одного года). Добавьте в команду закрытый 2048-битный RSA-ключ. Флаги -keyout и -out должны иметь одинаковые значения, чтобы ключ и сертификат были помещены в один файл. Программа запросит ваши данные. Замените условные данные в примере ниже.

Получив сертификат, вернитесь в конфигурационный файл vsftpd.

nano /etc/vsftpd.conf

rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem

rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key

Ниже добавьте следующие строки, которые будут указывать путь к сертификату и закрытому ключу.

# путь к файлу ключа

rsa_cert_file=/etc/ssl/private/vsftpd.pem

путь к файлу сертификата

rsa_private_key_file=/etc/ssl/private/vsftpd.pem

# включим ssl

ssl_enable=YES

sudo systemctl restart vsftpd

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

Подробная инструкция по vsftpd на русском:

https://lanberry.ru/linux/nastroika-ustanovka-ispolzovanie-vsftpd-1