#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