Knowledge Base

FTP открыт публично (порт 21) — устаревший протокол

FTP открыт публично — порт 21

Категория: Server Hardening · Риск: high

FTP открыт публично — порт 21

Почему FTP опасен

FTP (File Transfer Protocol, 1971 год) передаёт **логин, пароль и данные в открытом виде**. В любой публичной Wi-Fi сети или при компрометации маршрутизатора всё перехватывается.

Дополнительные риски:

Проверка

# Проверка открытого порта
nc -zv <IP> 21

# Проверка анонимного доступа
ftp <IP>
# Ввести: anonymous / anonymous@test.com
# Если подключился — критическая уязвимость

Замена FTP на безопасные альтернативы

SFTP (рекомендуется)

SFTP работает поверх SSH — шифрование, аутентификация по ключу, нет отдельного порта.

# SFTP встроен в OpenSSH — дополнительной установки не нужно
# Подключение:
sftp user@example.com

# Ограничить SFTP-пользователя его домашней директорией (chroot)
# /etc/ssh/sshd_config:
Match User ftpuser
    ChrootDirectory /home/ftpuser
    ForceCommand internal-sftp
    AllowTcpForwarding no
    X11Forwarding no

FTPS (FTP + TLS) — если нужен именно FTP

# vsftpd с TLS
# /etc/vsftpd.conf
ssl_enable=YES
rsa_cert_file=/etc/letsencrypt/live/example.com/fullchain.pem
rsa_private_key_file=/etc/letsencrypt/live/example.com/privkey.pem
ssl_tlsv1_2=YES
force_local_data_ssl=YES
force_local_logins_ssl=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES

Закрытие FTP

# Остановить и отключить vsftpd
systemctl stop vsftpd
systemctl disable vsftpd

# Закрыть порты
ufw deny 21
ufw deny 20  # data channel

Если FTP нужен клиентам

Используйте **FTPS Explicit** (порт 21, затем `AUTH TLS`) или **FTPS Implicit** (порт 990):

# /etc/vsftpd.conf — минимальный безопасный конфиг
anonymous_enable=NO
local_enable=YES
write_enable=YES
ssl_enable=YES
require_ssl_reuse=NO
ssl_ciphers=HIGH
pasv_enable=YES
pasv_min_port=40000
pasv_max_port=40100
userlist_enable=YES
userlist_file=/etc/vsftpd.userlist
userlist_deny=NO

Связанные проверки