×

005.容器化部署VSFTP指南
  

木二 7243

{{ttag.title}}
本帖最后由 木二 于 2022-12-6 17:38 编辑

一  FTP简介
FTP(File Transfer Protocol)文件传输协议,用于Internet上控制文件的双向传输。
下载:远程主机拷贝文件至本地;
上传:本地主机拷贝文件至远程。

二  FTP模式
主动模式:服务端从20端口主动向客户端发起连接,即20端口向客户端的一个随机端口传输数据。
被动模式:服务端在指定范围内某个端口被动等待客户端连接,即服务端采用随机端口等待客户端的随机端口来访问,从而传输数据。
以服务器角度来分别是否主动和被动。

三  常见FTP程序
IIS、Serv-U                                                     #windows平台
wu-ftpd、Proftpd                                          #Linux平台相对古老
vsftpd(Very Secure FTP Daemon)             #主流Linux平台FTP服务

四  VSFTP部署
4.1  部署背景
应客户侧需求,在我司产品BA中配置自动导出日志至FTP,客户咨询我们是否可以协助部署一个FTP服务器,处于客户至上原则,在明确客户FTP的需求后,规划此部署模式。
基于维护、管理便利,此次部署采用容器docker方式,并且使用docker-compose遍及启动服务。

4.2  部署规划
  • 节点规划

规划如下节点,BA服务器充当FTP客户端。
主机IP 角色 备注
172.17.1.10FTP服务器 用于对接BA,做日志自动导出的存放服务器
172.17.201.36 AC行为感知系统(BA服务器) 配置对接FTP,实现自动导出日志



  • 资源规划

OS:CentOS7
CPU:4C
Memory:4G
System-Disk:30G
Data-Disk:500G
本指南部署方式采用docker方式部署,使用docker-compose运行vsftp服务。
  1. [root@jzyftp ~]# systemctl disable firewalld.service --now
  2. [root@jzyftp ~]# sed -i 's/=enforcing/=disabled/g' /etc/selinux/config
  3. [root@jzyftp ~]# reboot
复制代码
提示:建议如上关闭防火墙和SELinux。

4.3  配置ftp目录
将vdb整个磁盘采用LVM创建分区,并将分区挂载至ftp目录 /data 。
  1. [root@jzyftp ~]# fdisk /dev/vdb                                                   #创建分区
  2. Welcome to fdisk (util-linux 2.23.2).
  3. ……
  4. Command (m for help): n
  5. Partition type:
  6. p   primary (0 primary, 0 extended, 4 free)
  7. e   extended
  8. Select (default p):【默认】
  9. Using default response p
  10. Partition number (1-4, default 1):【默认】
  11. First sector (2048-1048575999, default 2048):【默认】
  12. Using default value 2048
  13. Last sector, +sectors or +size{K,M,G} (2048-1048575999, default 1048575999):【默认】
  14. Using default value 1048575999
  15. Partition 1 of type Linux and of size 500 GiB is set
  16. Command (m for help): t
  17. Selected partition 1
  18. Hex code (type L to list all codes): 8e
  19. Changed type of partition 'Linux' to 'Linux LVM'
  20. Command (m for help): w
  21. The partition table has been altered!
  22. Calling ioctl() to re-read partition table.
  23. Syncing disks.
  24. [root@jzyftp ~]# partprobe
  25. [root@jzyftp ~]# pvcreate /dev/vdb1
  26. [root@jzyftp ~]# vgcreate -s 16m balogvg /dev/vdb1
  27. [root@jzyftp ~]# lvcreate -l 100%FREE -n baloglv balogvg
  28. [root@jzyftp ~]# pvdisplay
  29. [root@jzyftp ~]# vgdisplay

  30. [root@jzyftp ~]# mkfs.ext4 /dev/balogvg/baloglv

  31. [root@jzyftp ~]# vi /etc/fstab                                                         #追加如下挂载
  32. ……
  33. /dev/mapper/balogvg-baloglv             /data   ext4    defaults        0 0

  34. [root@jzyftp ~]# mount -a                                                             #自动挂载

  35. [root@jzyftp ~]# mkdir -p /data/{deploy,ftp}
  36. [root@jzyftp ~]# mkdir -p /var/log/ftp
复制代码

4.4  安装docker
  1. [root@jzyftp ~]# yum install -y yum-utils \
  2. device-mapper-persistent-data \
  3. lvm2

  4. [root@jzyftp ~]# yum-config-manager \
  5. --add-repo \
  6. http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

  7. [root@docker ~]# yum-config-manager --enable docker-ce-edge             #开启源
  8. [root@docker ~]# yum-config-manager --enable docker-ce-test               #开启源
  9. [root@docker ~]# yum -y install docker-ce                                                  #安装docker

  10. [root@docker ~]# cat > /etc/docker/daemon.json <<EOF
  11. {
  12.   "registry-mirrors": ["https://dbzucv6w.mirror.aliyuncs.com"],
  13.   "log-driver": "json-file",
  14.   "mtu": 1450,
  15.   "log-opts": {
  16.     "max-size": "1000m"
  17.   },
  18.   "storage-driver": "overlay2",
  19.   "storage-opts": [
  20.     "overlay2.override_kernel_check=true"
  21.   ]
  22. }
  23. EOF

  24. [root@docker ~]# systemctl enable docker --now
复制代码

4.5  安装Docker-Compose
将docker run单容器拉起命令优化为docker-compose方式,可实现服务器重启后自动拉起容器,因此需要先安装docker-compose。
  1. [root@docker ~]# curl -SL https://get.daocloud.io/docker/compose/releases/download/v2.13.0/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose

  2. [root@docker ~]# chmod u+x /usr/local/bin/docker-compose
  3. [root@docker ~]# sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

  4. [root@docker ~]# docker-compose version
  5. Docker Compose version v2.13.0
复制代码

4.6  部署vsftp
vsftp采用被动模式,部署目录为 /data/deploy,同时文件目录设置为宿主机的 /data/ftp,运行的日志保存为宿主机的 /var/log/ftp 。
  1. [root@jzyftp ~]# cd /data/deploy
  2. [root@jzyftp deploy]# vim vsftp_deploy.yaml
  3. version: "3.8"
  4. services:
  5.   vsftpdsvc:
  6.     image: fauria/vsftpd
  7.     container_name: vsftpd
  8.     privileged: true
  9.     ports:
  10.         - "20:20"
  11.         - "21:21"
  12.         - "21100-21110:21100-21110"
  13.     volumes:
  14.       - ../ftp:/home/vsftpd
  15.       - /var/log/ftp:/var/log/vsftpd
  16.     environment:
  17.       - FTP_USER=bauser
  18.       - FTP_PASS=********
  19.       - PASV_ADDRESS=172.17.1.10
  20.       - PASV_MIN_PORT=21100
  21.       - PASV_MAX_PORT=21110
  22.     restart: always
复制代码

参数释义:
PASV_ADDRESS:自己的主机ip
FTP_UESR FTP_PASS:FTP服务器的用户名和密码,在container的/etc/vsftpd/virtual_users.txt里;
PASV_MIN_PORT PASV_MAX_PORT:被动模式所映射的端口使用范围,默认为21100、21110,同时必须在服务器的防火墙中开启20、21、22和此范围内端口;
LOCAL_UMASK:目录权限,默认为077

提示:查看docker-compose支持的service版本和Docker版本对应关系可参考:https://docs.docker.com/compose/compose-file/compose-file-v3/
  1. [root@jzyftp deploy]# docker-compose -f vsftp_deploy.yaml up -d                    #正式部署

  2. [root@jzyftp deploy]# docker-compose ls
  3. NAME                STATUS              CONFIG FILES
  4. deploy              running(1)          /data/deploy/vsftp_deploy.yaml
  5. [root@jzyftp deploy]# docker ps
复制代码

五  确认验证
5.1  访问ftp
  • Windows客户端

客户端访问 ftp://172.17.1.10 ,输入对应 bauser 用户名和 ******** 密码。
  • Linux客户端

  1. [root@client ~]# ftp 172.17.1.10
  2. Connected to 172.17.1.10 (172.17.1.10).
  3. 220 (vsFTPd 3.0.2)
  4. Name (172.17.1.10:root): bauser
  5. 331 Please specify the password.
  6. Password:
  7. ……
复制代码

5.2  上传/下载测试
  • Windows客户端

将文件复制到ftp服务器,确认上传成功。

  • Linux客户端

  1. ftp> put testfile02.txt
  2. ftp> dir
  3. 227 Entering Passive Mode (172,17,1,10,82,114).
  4. 150 Here comes the directory listing.
  5. -rw-------    1 ftp      ftp            22 Nov 30 09:15 testfile01.txt
  6. -rw-------    1 ftp      ftp            21 Nov 30 09:25 testfile02.txt
  7. 226 Directory send OK.
复制代码

5.3  确认验证
  1. [root@jzyftp ~]# ll /data/ftp/bauser/
  2. total 8.0K
  3. -rw------- 1 ftp ftp 22 Nov 30 17:15 testfile01.txt
  4. -rw------- 1 ftp ftp 21 Nov 30 17:25 testfile02.txt
复制代码

打赏鼓励作者,期待更多好文!

打赏
27人已打赏

C罗单手卸AF 发表于 2022-12-14 17:28
  
非常感谢楼主的分享,清晰明了的描述出了如何通过docker搭建出vsft服务器,并且贴心的附上了命令,期待楼主的下次分享!
水若善 发表于 2022-12-6 19:43
  
有助于工作。谢谢分享!
沧海 发表于 2022-12-7 11:06
  
感谢楼主分享,学习一下
沙鸥 发表于 2022-12-8 14:53
  
感谢楼主分享,学习一下
新手081074 发表于 2022-12-9 09:56
  
感谢楼主分享,学习一下
新手612152 发表于 2022-12-9 10:27
  

感谢楼主分享,学习一下
司马缸砸了光 发表于 2022-12-9 10:37
  

感谢楼主分享,学习一下
新手899116 发表于 2022-12-9 11:40
  
感谢楼主分享,学习一下
木棉 发表于 2022-12-9 14:30
  
感谢分享                                             
暴躁的钢索 发表于 2022-12-11 08:54
  
每天学习一点点,每天进步一点点。
发表新帖
热门标签
全部标签>
西北区每日一问
技术盲盒
安全效果
【 社区to talk】
技术笔记
干货满满
每日一问
信服课堂视频
GIF动图学习
新版本体验
技术咨询
功能体验
2023技术争霸赛专题
产品连连看
安装部署配置
通用技术
秒懂零信任
技术晨报
自助服务平台操作指引
原创分享
标准化排查
排障笔记本
玩转零信任
排障那些事
SDP百科
深信服技术支持平台
POC测试案例
畅聊IT
答题自测
专家问答
技术圆桌
在线直播
MVP
网络基础知识
升级
安全攻防
上网策略
测试报告
日志审计
问题分析处理
流量管理
每日一记
运维工具
云计算知识
用户认证
解决方案
sangfor周刊
VPN 对接
项目案例
SANGFOR资讯
专家分享
技术顾问
信服故事
功能咨询
终端接入
授权
设备维护
资源访问
地址转换
虚拟机
存储
迁移
加速技术
产品预警公告
信服圈儿
S豆商城资讯
技术争霸赛
「智能机器人」
追光者计划
社区帮助指南
答题榜单公布
纪元平台
卧龙计划
华北区拉练
天逸直播
以战代练
山东区技术晨报
文档捉虫活动
齐鲁TV
华北区交付直播
每周精选
2024年技术争霸赛
北京区每日一练
场景专题
故障笔记
高手请过招
升级&主动服务
高频问题集锦
社区新周刊
全能先锋系列
云化安全能力

本版版主

12
185
6

发帖

粉丝

关注

121
315
351

发帖

粉丝

关注

本版达人

LoveTec...

本周分享达人

新手24116...

本周提问达人