1.安装FTP

1、检测系统有没有安装ftp,执行命令:

rpm -qa | grep ftp

若存在用rpm命令移除后再行安装,执行命令:

rpm -e vsftpd-3.0.2-9.e17.x86_64

2、如果没有安装,则在线安装ftp,执行命令

yum install -y vsftpd
yum install -y ftp

2. 启动 vsftpd 服务和开机自动启动服务

执行命令:

sudo systemctl start vsftpd 

sudo systemctl enable vsftpd

3. 防火墙设置

1、安装或升级防火墙,执行命令:

sudo yum install firewalld

2、为所有 FTP 流量创建规则来配置防火墙,执行命令:

sudo firewall-cmd --zone=public --permanent --add-port=21/tcp 
sudo firewall-cmd --zone=public --permanent --add-service=ftp 
sudo firewall-cmd --reload

4、配置vsftp

首先备份当前的 vsftpd conf 文件,执行命令:

sudo cp -p /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.default

配置FTP服务,修改/etc/vsftpd/vsftpd.conf文件。

然后执行以下命令,打开vsftpd.conf文件,将配置文件中“anonymous_enable=YES”改为 “anonymous_enable=NO”,这样关闭了匿名登录功能;其次禁止切换根目录 101 行 删除#号在chroot_local_user=YES前面的

cd /etc/vsftpd/
 
 #如果不想替换文件 无需执行这一步
>vsftpd.conf

vim vsftpd.conf

#如果不替换文件更改如下 第一行 并新增后两行
anonymous_enable=NO
tcp_wrappers=YES
allow_writeable_chroot=YES

替换为如下文件(替换后本地可能无法连接 此配置主要是为了内网映射的ftp无法使用主动模式增加的)


anonymous_enable=NO
# 允许本机账号登录FTP
# 这个设定值必须要为YES时,在/etc/passwd内的账号才能以实体用户的方式登入我们的vsftpd主机
local_enable=YES
# 允许账号都有写操作
write_enable=YES
# 本地用户创建文件或目录的掩码
# 意思是指:文件目录权限:777-022=755,文件权限:666-022=644
local_umask=022
# 进入某个目录的时候,是否在客户端提示一下
dirmessage_enable=YES
# 当设定为YES时,使用者上传与下载日志都会被记录起来
xferlog_enable=YES
# 日志成为std格式
xferlog_std_format=YES
# 上传与下载日志存放路径
#xferlog_file=/var/log/xferlog
# 开放port模式的20端口的连接
connect_from_port_20=YES
# 关于系统安全的设定值:
# ascii_download_enable=YES(NO)
# 如果设定为YES,那么client就可以使用ASCII格式下载档案
# 一般来说,由于启动了这个设定项目可能会导致DoS的攻击,因此预设是NO
# ascii_upload_enable=YES(NO)
# 与上一个设定类似的,只是这个设定针对上传而言,预设是NO
ascii_upload_enable=YES
ascii_download_enable=YES
# 通过搭配能实现以下几种效果:
# ①当chroot_list_enable=YES,chroot_local_user=YES时,在/etc/vsftpd/chroot_list文件中列出的用户,可以切换到其他目录;未在文件中列出的用户,不能切换到其他目录
# ②当chroot_list_enable=YES,chroot_local_user=NO时,在/etc/vsftpd/chroot_list文件中列出的用户,不能切换到其他目录;未在文件中列出的用户,可以切换到其他目录
# ③当chroot_list_enable=NO,chroot_local_user=YES时,所有的用户均不能切换到其他目录
# ④当chroot_list_enable=NO,chroot_local_user=NO时,所有的用户均可以切换到其他目录
# 限制用户只能在自己的目录活动
chroot_local_user=YES
#chroot_list_enable=NO
#chroot_list_file=/etc/vsftpd/chroot_list
# 可以更改ftp的端口号,使用默认值21
#listen_port=21
# 监听ipv4端口,开了这个就说明vsftpd可以独立运行,不用依赖其他服务
listen=YES
# 监听ipv6端口
listen_ipv6=NO
# 打开主动模式
port_enable=YES
# 启动被动式联机(passivemode)
pasv_enable=YES
# 被动模式端口范围:注意:linux客户端默认使用被动模式,windows 客户端默认使用主动模式。在ftp客户端中执行"passive"来切换数据通道的模式。也可以使用"ftp -A ip"直接使用主动模式。主动模式、被动模式是有客户端来指定的
# 上面两个是与passive mode使用的port number有关,如果您想要使用64000到65000这1000个port来进行被动式资料的连接,可以这样设定
# 这两项定义了可以同时执行下载链接的数量
# 被动模式起始端口,0为随机分配
pasv_min_port=51000
# 被动模式结束端口,0为随机分配
pasv_max_port=51002
# 服务器外网地址
pasv_address=xxx.xxx.xxx.xxx
# 文件末尾添加
# 这个是pam模块的名称,我们放置在/etc/pam.d/vsftpd,认证用
pam_service_name=vsftpd
# 使用允许çB™»录的名单,在/etc/vsftpd/user_list文件中添加新建的用户ftpuser
userlist_enable=NO
# 限制允许登录的名单,前提是userlist_enable=YES,其实这里有点怪,禁止访问名单在/etc/vsftpd/ftpusers
userlist_deny=NO
# 允许限制在自己的目录活动的用户拥有写权限
# 不添加下面这个会报错:500 OOPS: vsftpd: refusing to run with writable root inside chroot()
allow_writeable_chroot=YES
# 当然我们都习惯支持TCP Wrappers的啦
# Tcp wrappers : Transmission Control Protocol (TCP) Wrappers 为由 inetd 生成的服务提供了增强的安全性
tcp_wrappers=YES
# FTP访问目录
#local_root=xxx

重启vsftpd服务,执行命令:

systemctl restart vsftpd

5.添加账户

1、添加用户

执行命令:

sudo useradd ftpadmin  

sudo passwd ftpadmin
#输入密码

2、将新用户添加到用户列表

执行命令:

echo “ftpadmin” | sudo tee -a /etc/vsftpd/user_list

运行以下命令以创建所需的目录和权限,执行命令:

echo “ftpadmin” | sudo tee -a /etc/vsftpd/user_list
sudo mkdir -p /home/ftpadmin/ftp/upload 
sudo chmod 550 /home/ftpadmin/ftp 
sudo chmod 750 /home/ftpadmin/ftp/upload 
sudo chown -R ftpadmin: /home/ftpadmin/ftp

执行命令

#配置开机自启动
 
执行命令:systemctl enable vsftpd.service
 
#启动
 
执行命令:systemctl start vsftpd.service
 
#停止
 
执行命令:systemctl stop vsftpd.service
 
#查看状态
 
执行命令:systemctl status vsftpd.service

5.nginx映射

1.首先nginx要有stream模块 如果没有 自行百度解决
2.增加如下配置

    upstream ftp{
       hash $remote_addr consistent;
       server ip:21 max_fails=2 fail_timeout=3s weight=1;
   }
   server {
       listen port; #代理端口
       proxy_connect_timeout 300s;
       proxy_timeout 300s;
       proxy_pass ftp;
   }

   upstream ftp_126_pasv1 {    # 监听客户端发送到50000的数据连
       hash $remote_addr consistent;
       server ip:port1 max_fails=2 fail_timeout=3s weight=1;
   }

   upstream ftp_126_pasv2 {    # 监听客户端发送到50001的数据连接
       hash $remote_addr consistent;
       server ip:port2 max_fails=2 fail_timeout=3s weight=1;
   }

   upstream ftp_126_pasv3 {    # 监听客户端发送到50002的数据连接
       hash $remote_addr consistent;
       server 1ip:port3 max_fails=2 fail_timeout=3s weight=1;
   }



   server {                # 转发客户端发送到Nginx代理机的数据
       listen 51000;
       proxy_connect_timeout 300s;
       proxy_timeout 300s;
       proxy_pass ftp_126_pasv1;
   }

   server {                # 转发客户端发送到Nginx代理机的数据连接
       listen 51001;
       proxy_connect_timeout 300s;
       proxy_timeout 300s;
       proxy_pass ftp_126_pasv2;
   }

   server {                # 转发客户端发送到Nginx代理机的数据连接
       listen 51002;
       proxy_connect_timeout 300s;
       proxy_timeout 300s;
       proxy_pass ftp_126_pasv3;
   }

亲测可用

参考文件 https://blog.csdn.net/qq_22478465/article/details/124857666

上一篇 下一篇