TGViewer
Записки IT специалиста Записки IT специалиста @interface31 · 8.99K subscribers
Post #6281 2.31K
Настраиваем сервер 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 на первый взгляд дублируют друг друга, но на самом деле это разные опции. Флаг запускает службу на прослушивание указанных портов, а переменная говорит службе какой диапазон портов можно сообщать клиентам для подключения. Для нормальной работы их значения должны совпадать.
  • 👍 15
  • ❤ 4
More from @interface31
  1. Sep 26, 2026Post #6794
  2. Sep 25, 2026Десктопный стриптиз Очень часто во многих технических сообществах возникают флешмобы – а д…
  3. Sep 25, 2026Не застревайте в прошлом — учитесь новым навыкам и ИИ Чтобы успевать за требованиями рынка…
  4. Sep 25, 2026Что такое SRV-записи DNS и для чего они нужны В комментариях к нашим заметкам по DNS уже н…
  5. Sep 25, 2026Многие компании уже запускают ИИ-проекты, но далеко не все доводят их до результата. Для э…
  6. Sep 24, 2026Сеанс двоичной магии с разоблачением Сегодня мы поговорим о том, как правильно рассчитать…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →