Добавить в корзинуПозвонить
Найти в Дзене

Настраиваем сервер Pure-FTPd в контейнере Docker

FTP-протокол, несмотря на преклонный возраст, продолжает активно использоваться, преимущественно для разных обменов: товароучетным ПО, торговым и промышленным оборудованием, оргтехникой. В большинстве случаев клиенты не поддерживают шифрование и протокол используется в открытом виде, что, конечно же, по современным меркам небезопасно, но тут выбирать не приходится. В нашем случае возникла потребность быстро настроить новый сервер для сети розничных магазинов, работающих на базе 1С:Предприятие. Проанализировав все за и против мы выбрали вариант с Docker. Основных аргументов два: изоляция небезопасного сервера от хоста и независимость от пакетной базы дистрибутива, что дает возможность гибко управлять жизненным циклом ПО. Нами был выбран образ stilliard/pure-ftpd:hardened, это популярный, поддерживаемый образ с уже внесенными из коробки настройками безопасности. Допустим наш проект будет располагаться в /opt/exch, поэтому первым делом создадим папки пользователей и служебный катало

Настраиваем сервер Pure-FTPd в контейнере Docker

FTP-протокол, несмотря на преклонный возраст, продолжает активно использоваться, преимущественно для разных обменов: товароучетным ПО, торговым и промышленным оборудованием, оргтехникой.

В большинстве случаев клиенты не поддерживают шифрование и протокол используется в открытом виде, что, конечно же, по современным меркам небезопасно, но тут выбирать не приходится.

В нашем случае возникла потребность быстро настроить новый сервер для сети розничных магазинов, работающих на базе 1С:Предприятие. Проанализировав все за и против мы выбрали вариант с Docker.

Основных аргументов два: изоляция небезопасного сервера от хоста и независимость от пакетной базы дистрибутива, что дает возможность гибко управлять жизненным циклом ПО.

Нами был выбран образ stilliard/pure-ftpd:hardened, это популярный, поддерживаемый образ с уже внесенными из коробки настройками безопасности.

Допустим наш проект будет располагаться в /opt/exch, поэтому первым делом создадим папки пользователей и служебный каталог для хранения базы паролей:

mkdir -p /opt/exch/data/{user1,user2,user3,user4,user5}

mkdir -p /opt/exch/pure-ftpd

Сразу установим на них нужные права:

chown -R 1000:1000 /opt/exch/data /opt/exch/pure-ftpd

Затем создадим docker-compose.yml следующего содержимого:

services:

pure-ftpd:

image: stilliard/pure-ftpd:hardened

container_name: pure-ftpd

restart: unless-stopped

ports:

- "21:21"

- "60000-60499:60000-60499"

environment:

PUBLICHOST: exch.example.com

FTP_PASSIVE_PORTS: 60000:60499

ADDED_FLAGS: "-d -p 60000:60499"

TZ: "Europe/Moscow"

volumes:

- /opt/exch/data:/home/ftpusers

- /opt/exch/pure-ftpd:/etc/pure-ftpd

logging:

driver: "json-file"

options:

max-size: "10m"

max-file: "3"

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

docker exec -it pure-ftpd pure-pw useradd user1 \

-u ftpuser -d /home/ftpusers/user1

Создав всех пользователей, скомпилируем базу паролей:

docker exec pure-ftpd pure-pw mkdb

Теперь сервер полностью готов принимать соединения.

Сразу поясним несколько моментов. Кроме управляющего порта 21 мы указываем порты для передачи данных в пассивном режиме 60000-60499, активный режим работы сервера не предусмотрен.

Количество портов выбирайте исходя из количества активных клиентов, по умолчанию сервер допускает до пяти одновременных соединений. Таким образом указав диапазон в 500 портов, мы можем полноценно обслуживать до 100 клиентов.

Флаг -d включает режим визуализиции лога в режиме отладки, вы будете видеть все команды клиента, пароль в целях безопасности заменяется в логе звездочкой. Если вы хотите видеть еще и ответы сервера – добавьте второй флаг -d.

Переменная окружения PUBLICHOST: exch.example.com указывает на публичное имя сервера (или его IP-адрес), который будет передаваться клиенту для подключения, используйте для этого реальное внешнее имя или адрес хоста.

Переменная FTP_PASSIVE_PORTS: 60000:60499 и флаг -p 60000:60499 на первый взгляд дублируют друг друга, но на самом деле это разные опции. Флаг запускает службу на прослушивание указанных портов, а переменная говорит службе какой диапазон портов можно сообщать клиентам для подключения. Для нормальной работы их значения должны совпадать.