本帖最后由 木二 于 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.10 | FTP服务器 | 用于对接BA,做日志自动导出的存放服务器 | 172.17.201.36 | AC行为感知系统(BA服务器) | 配置对接FTP,实现自动导出日志 |
|
| |
OS:CentOS7
CPU:4C
Memory:4G
System-Disk:30G
Data-Disk:500G
本指南部署方式采用docker方式部署,使用docker-compose运行vsftp服务。
- [root@jzyftp ~]# systemctl disable firewalld.service --now
- [root@jzyftp ~]# sed -i 's/=enforcing/=disabled/g' /etc/selinux/config
- [root@jzyftp ~]# reboot
复制代码 提示:建议如上关闭防火墙和SELinux。
4.3 配置ftp目录
将vdb整个磁盘采用LVM创建分区,并将分区挂载至ftp目录 /data 。- [root@jzyftp ~]# fdisk /dev/vdb #创建分区
- Welcome to fdisk (util-linux 2.23.2).
- ……
- Command (m for help): n
- Partition type:
- p primary (0 primary, 0 extended, 4 free)
- e extended
- Select (default p):【默认】
- Using default response p
- Partition number (1-4, default 1):【默认】
- First sector (2048-1048575999, default 2048):【默认】
- Using default value 2048
- Last sector, +sectors or +size{K,M,G} (2048-1048575999, default 1048575999):【默认】
- Using default value 1048575999
- Partition 1 of type Linux and of size 500 GiB is set
- Command (m for help): t
- Selected partition 1
- Hex code (type L to list all codes): 8e
- Changed type of partition 'Linux' to 'Linux LVM'
- Command (m for help): w
- The partition table has been altered!
- Calling ioctl() to re-read partition table.
- Syncing disks.
- [root@jzyftp ~]# partprobe
- [root@jzyftp ~]# pvcreate /dev/vdb1
- [root@jzyftp ~]# vgcreate -s 16m balogvg /dev/vdb1
- [root@jzyftp ~]# lvcreate -l 100%FREE -n baloglv balogvg
- [root@jzyftp ~]# pvdisplay
- [root@jzyftp ~]# vgdisplay
- [root@jzyftp ~]# mkfs.ext4 /dev/balogvg/baloglv
- [root@jzyftp ~]# vi /etc/fstab #追加如下挂载
- ……
- /dev/mapper/balogvg-baloglv /data ext4 defaults 0 0
- [root@jzyftp ~]# mount -a #自动挂载
- [root@jzyftp ~]# mkdir -p /data/{deploy,ftp}
- [root@jzyftp ~]# mkdir -p /var/log/ftp
复制代码
4.4 安装docker
- [root@jzyftp ~]# yum install -y yum-utils \
- device-mapper-persistent-data \
- lvm2
- [root@jzyftp ~]# yum-config-manager \
- --add-repo \
- http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
- [root@docker ~]# yum-config-manager --enable docker-ce-edge #开启源
- [root@docker ~]# yum-config-manager --enable docker-ce-test #开启源
- [root@docker ~]# yum -y install docker-ce #安装docker
- [root@docker ~]# cat > /etc/docker/daemon.json <<EOF
- {
- "registry-mirrors": ["https://dbzucv6w.mirror.aliyuncs.com"],
- "log-driver": "json-file",
- "mtu": 1450,
- "log-opts": {
- "max-size": "1000m"
- },
- "storage-driver": "overlay2",
- "storage-opts": [
- "overlay2.override_kernel_check=true"
- ]
- }
- EOF
- [root@docker ~]# systemctl enable docker --now
复制代码
4.5 安装Docker-Compose
将docker run单容器拉起命令优化为docker-compose方式,可实现服务器重启后自动拉起容器,因此需要先安装docker-compose。
- [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
- [root@docker ~]# chmod u+x /usr/local/bin/docker-compose
- [root@docker ~]# sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
- [root@docker ~]# docker-compose version
- Docker Compose version v2.13.0
复制代码
4.6 部署vsftp
vsftp采用被动模式,部署目录为 /data/deploy,同时文件目录设置为宿主机的 /data/ftp,运行的日志保存为宿主机的 /var/log/ftp 。
- [root@jzyftp ~]# cd /data/deploy
- [root@jzyftp deploy]# vim vsftp_deploy.yaml
- version: "3.8"
- services:
- vsftpdsvc:
- image: fauria/vsftpd
- container_name: vsftpd
- privileged: true
- ports:
- - "20:20"
- - "21:21"
- - "21100-21110:21100-21110"
- volumes:
- - ../ftp:/home/vsftpd
- - /var/log/ftp:/var/log/vsftpd
- environment:
- - FTP_USER=bauser
- - FTP_PASS=********
- - PASV_ADDRESS=172.17.1.10
- - PASV_MIN_PORT=21100
- - PASV_MAX_PORT=21110
- 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/ 。
- [root@jzyftp deploy]# docker-compose -f vsftp_deploy.yaml up -d #正式部署
- [root@jzyftp deploy]# docker-compose ls
- NAME STATUS CONFIG FILES
- deploy running(1) /data/deploy/vsftp_deploy.yaml
- [root@jzyftp deploy]# docker ps
复制代码
五 确认验证
5.1 访问ftp
客户端访问 ftp://172.17.1.10 ,输入对应 bauser 用户名和 ******** 密码。
- [root@client ~]# ftp 172.17.1.10
- Connected to 172.17.1.10 (172.17.1.10).
- 220 (vsFTPd 3.0.2)
- Name (172.17.1.10:root): bauser
- 331 Please specify the password.
- Password:
- ……
复制代码
5.2 上传/下载测试
将文件复制到ftp服务器,确认上传成功。
- ftp> put testfile02.txt
- ftp> dir
- 227 Entering Passive Mode (172,17,1,10,82,114).
- 150 Here comes the directory listing.
- -rw------- 1 ftp ftp 22 Nov 30 09:15 testfile01.txt
- -rw------- 1 ftp ftp 21 Nov 30 09:25 testfile02.txt
- 226 Directory send OK.
复制代码
5.3 确认验证- [root@jzyftp ~]# ll /data/ftp/bauser/
- total 8.0K
- -rw------- 1 ftp ftp 22 Nov 30 17:15 testfile01.txt
- -rw------- 1 ftp ftp 21 Nov 30 17:25 testfile02.txt
复制代码 |