文章目录
- FTP传输协议及实验搭建详解
- 一.引子
- 二.FTP的原理和基本概念
- 三.FTP服务器实验构建(基础测试,本地认证,虚拟用户,加密传输,限制登陆)
FTP传输协议及实验搭建详解
一.引子
终于到了一点网络服务的正餐环节,今天笔者给大家带来的是我们上网经常会做的事情:上传和下载。相信大家都用过迅雷,大多数时候都是下载,这个事情懂的都懂。那这种上传和下载是基于什么实现的呢?那就必须请出我们本次的主角:FTP(文件传输协议)。
FTP(file transfer protocol)是文件传输协议的简称,在TCP/IP协议中,FTP标准命令TCP端口号为21,Port方式数据端口为20。 正如其名所示:ftp的主要作用,就是让用户连接上一个远程计算机(这些计算机上运行着ftp服务器程序)察看远程计算机有哪些文件,然后把文件从远程计算机上拷到本地计算机,或把本地计算机的文件送到远程计算机去。
二.FTP的原理和基本概念
1.FTP服务主要功能:
下载:从远程主机拷贝文件到自己的计算机之中
上传:将文件从自己的计算机拷贝到远程计算机之中
支持ftp协议的服务器都称为FTP服务器
2.FTP 用户的类型:
匿名用户:anonymous 或 ftp
本地用户:账号名称、密码等信息都保存在 password 和 shadow 文件中
常见的 FTP 服务器程序:
IIS、Serv-U
wu-ftpd、Proftpd
vsftpd(Very Secure FTP Daemon)非常安全的FTP守护进程
常见 FTP 客户端或程序:
CuteFTP、FlashFTP、LeapFTP、Filezilla
gftp、kuftp、ftp、winscp
3.FTP工作方式:(该知识点更详解见一篇博文)
1).主动模式 (active方式:命令连接由客户端发起,数据连接由服务器端发起)
a.命令连接:客户端通过任意大于等于1024(N端口)的端口连接到服务器TCP21端口,服务器端响应建立连接通道,同时客户端开始监听N+1端口,当客户端需要数据的时候,客户端通过此通道发送port命令(port N+1)。
b.数据连接:服务器端通过自己的TCP20端口连接客户端N+1端口,客户端响应,建立连接通道,服务器端并通过此通道向客户端发送数据。
缺点:防进不防出,客户端与服务器端需要建立一条新的通道来传输数据,客户端的防火墙可能会拒绝数据连接的随机端口的访问,造成 FTP 下载数据的中断。
2).被动模式 (pasv方式:命令连接与数据连接都由客户端发起,两个连接的端口同时发起)
a.命令连接:客户端通过任意大于等于1024(N端口)的端口连接到服务器TCP21端口,服务器端建立连接通道。客户端提交PASV命令。服务器会开启一个任意的非特权端口(P >; 1024),并发送PORT P命令给客户端。
b.数据连接:客户端接收pasv命令,然后客户端通过任意大于等于1024(N+1端口)的端口连接到服务器任意大于等于1024的端口,与服务器端建立连接来传输数据。
优点:客户端无需设置即可直接使用
缺点:放行端口较多,相对于主动模式安全性差一点
解决方案:配置文件设置pasv_min_port (最小端口)10000 pasv_max_port(最大端口) 10010 设置放行
4.FTP配置文件详解:
vim /etc/vsftpd/vsftp.conf
connect_timeout=60 (主动模式超时60s关闭)
accept_timeout=60 (被动模式超时60s关闭)
data_connection_timeout=300 (超时300s下载通道关闭)
idle_session_timeout=300 (密码输入超时300s关闭)
ftpd_banner=xxx 和 banner_file=/path/file (访问欢迎信息,基本说明)
tcp_wrappers=YES (能不能被tcp_wrappers所控制)
listen_address=192.168.1.2 (设置监听的 IP 地址)
listen_port=21 (设置监听 FTP 服务的端口号)
write_enable=YES (是否启用写入权限)
download_enable=YES (是否允许下载文件)
max_clients=0 (限制并发客户端连接数)
max_per_ip=0 (限制同一 IP 的并发连接数)
匿名用户
anonymous_enable=YES 启用匿名访问
aon_umask=022 匿名用户所上传文件的权限掩码
anon_root=/var/ftp 匿名用户 FTP 的根目录
anon_upload_enable=YES 允许上传文件
anon_mkdir_write_enable=YES 允许创建目录
anon_other_write_enable=YES 允许其它写入权
anon_max_rate=0 限制最大传输速率(字节/秒)
三.FTP服务器实验构建(基础测试,本地认证,虚拟用户,加密传输,限制登陆)
1).监听端口
1).11安装软件包:
yum -y install vsftpd
2).11启动服务:
service vsftpd start
3).11开启21号端口(查看服务开启端口)
netstat -anpt | grep 21
命令连接:当 vsftpd 进程启动之后,21 就会被监听
数据连接:当用户传输数据时,才会开启
2).ftp登陆
4).11cd /var/ftp/
创建文件:
12.yum -y install ftp
12.service ftpd restart
12.ftp 192.168.26.11
3.).匿名用户上传下载
1.anon upload enable=YES
2.给上传的目录赋予w权限,但是不能给/var/ftp目录赋予777权限。不然ftp服务器无法直接正常使用 /var/ftp/pub/newDir chmod a+w newDir
3.anon_ummask 022 设置匿名用户上传文件的掩码
4.12.进入交互模式:ftp 192.168.26.11
下载 :get filename
exit 退出,查看:
上传:put filename
5…换11打开配置文件:
vim /etc/vsftpd/vsftpd.conf
将注释去掉(允许上传文件)
6.重启服务:
service vsftpd restart
7.在 pub目录下创建一个新目录qqq,给qqq a+w权限(给上传的目录赋予权限)。不能直接给 /var/ftp 目录赋予 777 权限,不然 ftp 服务器直接无法正常使用
8.换12 ftp 192.168.21.11 重新上传
9.12创建hlq.txt文件
10.11.文件上传成功
11.11.在配置文件中添加匿名用户上传文件的掩码值
vim /etc/vsftpd/vsftpd.conf
添加anon_umask 022
12.重启服务:
service vsftpd restart
13.换12创建一个新文件并上传:
删除hlq.txt文件,再重新下载:
14.11虚拟机anon_mkdir_write_enable=YES 取消# 允许创建目录
换12虚拟机测试
15.11anon_other_write_enable=YES 允许其它写入权(改名)
换12虚拟机测试
4).限速测试:(用过BD网盘的朋友都知道限速的恶心)
1.11创建一个新文件:
2.12 get ww
3.修改配置文件:(限制下载速度)
4.下载速度实测
5).被动模式手动修改为主动模式测试
- 12被动模式修改为主动模式:(ftp默认选择被动模式连接 )
passive off - netstat -antp | grep 20
6).FTP本地用户认证:
1.安装软件包:
yum -y install vsftpd
2.vim /etc/vsftpd/vsftpd.conf
将匿名模式关掉
3.启动服务:
service vsftpd start
4.换12客户机测试
yum -y install ftp
root用户依然失败
发现匿名用户无法登陆
5.在11服务端创建两个系统用户并设置密码:
useradd -s /sbin/nologin zhangsan
useradd -s /sbin/nologin lisi
passwd zhangsan
passwd lisi
6.在12客户端测试:
本地用户认证
a、登录以后默认路径为用户的家目录
b.、仅允许下载 write_enable=NO
service vsftpd restart 重启服务
发现ftp连接之后不允许上传文件:
7.在配置文件中添加:
chroot_local_user=YES 是否将用户禁锢在主目录(无法访问呢其他目录)
7).虚拟用户认证:
1.安装软件包:
yum -y install vsftpd
2. cd /etc/vsftpd/
创建虚拟用户文件:vim user.list
保存账号和密码
3.将list转换为db数据库格式:
db_load -T -t hash -f /etc/vsftpd/user.list user.db
4.将用户权限改为600,不允许其他用户查看:
chmod 600 user.*
5.添加虚拟映射用户
useradd -d /var/ftproot -s /sbin/nologin virtual
chmod 755 /var/ftproot/
6.系统调用认证方案在该目录下:cd /etc/pam.d/
7.cp -a vsftpd vsftpd.a
8.设置为db方式,而不是系统方式认证:
vim vsftpd.a(删除所有内容)
后面的user就是user.db的缩写
#%PAM-1.0
auth required pam_userdb.so db=/etc/vsftpd/user
account required pam_userdb.so db=/etc/vsftpd/user
9. cd /etc/vsftpd/(查看文件)
10.vim /etc/vsftpd/vsftpd.conf
pam_service_name=vsftpd.a (声明认证文件)
userlist_enable=YES
tcp_wrappers=YES
guest_enable=YES (开启虚拟用户)
guest_username=virtual (映射名称)
user_config_dir=/etc/vsftpd/conf
(权限配置文件目录)
11.创建权限配置文件目录:
mkdir /etc/vsftpd/conf
12.在目录下创建用户文件:
cd /etc/vsftpd/conf
touch user1 user2 user3
给对应权限:
vim user1 user2 user3 给各自对应权限:
1.anon_upload_enable=YES 允许上传
2.anon_mkdir_write_enable=YES 允许用户创建目录
3.
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES 允许其它写入权限
13.启动服务:
service vsftpd restart
4.换12客户机测试
yum -y install ftp
ftp 192.168.26.11
user1用户:只能上传,不能创建目录和改名:
user2用户:只能创建目录,不能上传和改名:
user3用户:都可以
8).加密传输:(openssl)
以下是明文密码:(不经过加密传输,用户名和密码很容易泄露)
抓包:
tcpdump -nA port 21 > /root/tcp.log
12用客户端登录uesr1
11可以在vim tcp.log下看到账号密码:
文件上传、创建保存路径:(创建文件下载链接)
cd /var/ftproot/
dd if=/var/log/messages of=1.txt bs=1M count=10
cat /var/log/message >1.txt
明文下载链接:
ftp://user1:123@192.168.26.11:21/1.txt
++++++++++++++++++++++++++++++++
1.安装软件包:
yum -y install vsftpd
2.创建新用户:
useradd zhangsan
passwd zhangsan
3.启动服务:
service vsftpd start
4.抓包:
tcpdump -nA port 21 > /root/tcp.log
5.换12客户机测试
yum -y install ftp
vim tcp.log(能够看到账号密码)
6.11安装机密算法软件包:
yum -y install openssl openssl-devel
7.创建证书:
openssl req -new -x509 -nodes -out vsftpd.pem -keyout vsftpd.pem
设置地区
8.mv vsftpd.pem /etc/ssl/certs/
9.给证书权限:
chmod 400 vsftpd.pem
10.vim /etc/vsftpd/vsftpd.conf
到最后一行添加:
ssl_enable=YES (开启加密连接)
allow_anon_ssl=YES (允许匿名用户加密)
force_local_data_ssl=YES
(强制本地用户数据传输加密)
force_local_logins_ssl=YES
(强制本地用户登录加密)
force_anon_data_ssl=YES
(强制虚拟用户认证加密)
force_anon_logins_ssl=YES
(强制虚拟用户登录加密)
ssl_tlsv1=YES
(指定加密本机1)
ssl_sslv2=NO
ssl_sslv3=NO
rsa_cert_file=/etc/ssl/certs/vsftpd.pem
(指定加密证书目录)
11.重启服务:
service vsftpd restart
12.启动FileZilla软件:(ftp命令行不支持加密传输,所有我们用一个桌面软件)
13.创建并进张三家目录:
14.重新抓包:
tcpdump -nA port 21 > /root/tcp.log
15.再次打开FZ软件上传文件:
16.vim tcp.log
9).限制端口号开放数量:
1.安装软件包:
yum -y install vsftpd
2.cd /var/ftp/
创建大文件:dd if=/dev/zero of=1.txt bs=1M count=1024
3.重启服务:
service vsftpd start
4.抓端口:
netstat -anpt | grep vsftp
5.vim /etc/vsftpd/vsftpd.conf
默认vsftpb 已经开启被动模式,但是如果要限制端口,还要再写一遍
6…重启服务:
service vsftpd restart
7.12重新ftp 192.168.21.11
抓端口:
10).限制root用户登录:
1.cd /etc/vsftpb(创建用户和密码)
2.usadd laow
3.passwd laow
4.echo “laow” >> ftpusers
密码报错:
ftpusers :出现在此文件中的用户登录通通密码错误
5.ftp 192.168.26.11无法登录:
user_list 默认:出现在此文件中的用户输入用户直接拒绝
userlist_enable=YES
userlist_deny=YES 出现在此文件中的用户允许登录
6.vim /etc/vsftpd/vsftpd.conf
#如果ftpuser 、 userlist同时出现一个用户名,以ftpuser优先生效
历经周折,费尽心思整理,终于还算给了自己一个满意的答卷。以上FTP服务的整理,笔者感觉已经将我们个人环境和生产环境之中常见的一些类型都整理出来了,如果作为一个初学者,应该是一个不错的启蒙教材。至于ftp的主动模式和被动模式,笔者接下来会出一篇更为详细的教材供大家参考,当然如果大家发现错误也可以在下面与笔者交流。浏览不易,感谢三连。