# О протоколе FTP

### Что таоке FTP&#x20;

FTP (File Transfer Protocol — протокол передачи файлов) — это стандартный сетевой протокол, используемый для передачи файлов между клиентом и сервером по сети TCP/IP.  Если говорить проще — это способ перемещения файлов между двумя компьютерами через интернет. \
\
Из-за отстутствия шифрования от этого протокола всё чаще откзываются компании, но кто-то до сих пор его использует.&#x20;

### Как работет FTP

Зайдем с метафоры. Представим, что FTP — почтовый ящик, куда мы можем положить письмо (файл), и другой человек может его оттуда взять.

Когда вы используете FTP, один компьютер действует как сервер — это как почтовое отделение, которое хранит письмо. Другой компьютер действует как клиент — это мы, когда забираем или отправляем письмо.

В момент, когда мы хотим передать файлы, нам нужно войти в систему, ввести имя пользователя и пароль. Это способ убедиться, что мы имеем право забирать или оставлять файлы в почтовом ящике. \
\
FTP-протокол использует два вида общения:&#x20;

1. Командный канал (Control Channel) → отправляет команды с клиента на сервер и получает ответы. Этот канал остаётся открытым на протяжении всей FTP-сессии.&#x20;
2. Канал данных (Data Channel) → фактическая передача файлов между клиентом и сервером. Канал открывается и закрывается для каждой отдельной передачи данных.&#x20;

### Как проходит FTP-сессия&#x20;

FTP-сессия — это установленное соединение между клиентским компьютером и сервером. Оно начинается с момента подключения клиента к серверу и продолжается до тех пор, пока оно не будет прервано или закончено. \
\
FTP-сессия полезна для поддержания порядка при передаче файлов, так как она позволяет серверу контролировать, кто и когда подключается, и обеспечивает целостность передачи данных.\
\
Есть 5 основных этапов сессии:&#x20;

| Этап                    | Описание этапа                                                                                                                                                                                                                |
| ----------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Установление соединения | Клиент использует специальную программу (FTP-клиента) для подключения к серверу FTP. Ему нужно знать адрес сервера (например, имя домена или IP-адрес сервера FTP), а также иметь имя пользователя и пароль (если требуется). |
| Аутентификация          | Клиент предоставляет своё имя пользователя и пароль серверу. Если у сервера есть анонимный доступ, логин и пароль могут быть не нужны — клиент может войти анонимно.                                                          |
| Обмен командами         | Эти команды могут включать запросы на получение списка файлов в папке, перемещение между папками, загрузку файлов на сервер или скачивание файлов с сервера.                                                                  |
| Передача данных         | Если клиент хочет загрузить или скачать файлы, открывается отдельное соединение для данных. Файлы передаются через это соединение.                                                                                            |
| Завершение сессии       | После того как все необходимые файлы загружены или скачаны, клиент может закончить сессию, отключившись от сервера. Обычно это делается путём отправки команды на отключение, и сервер подтверждает окончание сессии.         |

### Режимы работы FTP

**Активный режим →** когда хотим соединиться с сервером для отправки или получения файлов, мы сначала устанавливаем с ним связь. После этого сервер пытается соединиться с нашим компьютером, чтобы начать передавать файлы.

**Пассивный режим** → если компьютер защищен брандмауэром или находится в частной сети, делающих прямое соединение сложным. Здесь мы и сервер сначала устанавливаем связь, но вместо того, чтобы ждать от сервера соединения, мы просим сервер дать нам виртуальный адрес. Затем мы самостоятельно соединяетемся с виртуальным адресом, чтобы передать файлы.

### Чем плох FTP-протокол?

1. Нет шифрования. И содержимое передаваемых файлов, и учетные данные пользователя передаются в незашифрованном виде. Это делает протокол уязвимым для сниффинга, брутфорса и атак типа [MITM](https://notes.kraken-security.ru/kraken/krupicy-znanii/ob-atake-mitm).
2. Нет проверки целостности. Из-за этого файлы могут быть повреждены или изменены в процессе передачи. И ты даже этого не обнаружишь.&#x20;
3. Проблемы с брандмауэрами и NAT. Для установления соединения FTP использует несколько портов, и в режиме активного FTP клиент должен открывать порты для соединения, что может вызывать проблемы при работе через брандмауэры и NAT.
4. Нет управления версиями. FTP не имеет встроенных средств для управления версиями файлов или для отслеживания их изменений.
5. Сложность. Настройка FTP-серверов может быть сложной, особенно с учётом необходимости настройки брандмауэров и NAT.
