FTP协议有两种工做方式:
node
1)port方式:主动模式
port(主动)方式的链接过程是:客户端向服务器的FTP端口(默认是21)发送链接请求 , 服务器接受链接 , 创建一条命令链路 当须要传送数据时 , 服务器从20端口向客户端的空闲端口发送链接请求 , 创建一条数据链路来传送数据
2)pasv方式:被动模式
pasv(被动)方式的链接过程是:客户端向服务器的FTP端口(默认是21)发送链接请求 , 服务器接受链接 , 创建一条命令链路 当须要传送数据时 , 客户端向服务器的空闲端口发送链接请求 , 创建一条数据链路来传送数据
FTP是仅基于tcp的服务 , 不支持udp FTP使用2个端口 , 一个数据端口和一个命令端口(也可叫作控制端口) 一般来讲这两个端口是21(命令端口)和20(数据端口) 但FTP工做方式的不一样 , 数据端口并不老是20 这就是主动与被动FTP的最大不一样之处
一)主动FTP模式
主动方式的FTP工做流程:客户端从一个任意的非特权端口N(N>1024)链接到FTP服务器的命令端口 , 也就是21端口 而后客户端开始监听端口N+1 , 并发送FTP命令“portN+1”到FTP服务器 接着服务器会从它本身的数据端口(20)链接到客户端指定的数据端口(N+1)
针对FTP服务器前面的防火墙来讲 , 必须容许如下通信才能支持主动方式FTP:
1)任何大于1024的端口到FTP服务器的21端口 (客户端初始化的链接)
2)FTP服务器的21端口到大于1024的端口 (服务器响应客户端的控制端口)
3)FTP服务器的20端口到大于1024的端口 (服务器端初始化数据链接到客户端的数据端口)
4)大于1024端口到FTP服务器的20端口(客户端发送ACK响应到服务器的数据端口)
二)被动FTP模式
FTP被动模式的链接方式有效解决了服务器发起到客户的链接问题 , 这种方式由叫作PASV , 当客户端通知服务器它处于被动模式时才启用 在被动方式FTP中 , 命令链接和数据链接都由客户端发起 , 这样就能够解决从服务器到客户端的数据端口的入方向链接被防火墙过滤掉的问题 当开启一个FTP链接时 , 客户端打开两个任意的非特权本地端口(N>1024和N+1) 第一个端口链接服务器的21端口 , 但与主动方式的FTP不一样 , 客户端不会提交PORT命令并容许服务器来回连它的数据端口 , 而是提交PASV命令 这样作的结果是服务器会开启一个任意的非特权端口(P>1024) , 并发送PORTP命令给客户端 而后客户端发起从本地端口N+1到服务器的端口P的链接用来传送数据
对于服务器端的防火墙来讲 , 必须容许下面的通信才能支持被动方式的FTP:
1)从任何大于1024的端口到服务器的21端口(客户端初始化的链接)
2)服务器的21端口到任何大于1024的端口(服务器响应到客户端的控制端口的链接)
3)从任何大于1024端口到服务器的大于1024端口(客户端初始化数据链接到服务器指定的任意端口)
4)服务器的大于1024端口到远程的大于1024的端口(服务器发送ACK响应和数据到客户端的数据端口)
主动FTP:
命令链接:客户端>1023端口 ------> 服务器 21端口
数据链接:客户端>1023端口 <------ 服务器 20端口
被动FTP:
命令链接:客户端>1023端口 ------> 服务器 21端口
数据链接:客户端>1023端口 ------> 服务器>1023端口
三)主动与被动FTP优缺点:
主动FTP对FTP服务器的管理有利 , 但对客户端的管理不利 由于FTP服务器企图与客户端的高位随机端口创建链接 , 而这个端口颇有可能被客户端的防火墙阻塞掉
被动FTP对FTP客户端的管理有利 , 但对服务器端的管理不利 由于客户端要与服务器端创建两个链接 , 其中一个连到一个高位随机端口 , 而这个端口颇有可能被服务器端的防火墙阻塞掉
随着WWW的普遍流行 , 许多人习惯用web浏览器做为FTP客户端 大多数浏览器只在访问
ftp
:
//
这样的URL时才支持被动模式 这究竟是好仍是坏取决于服务器和防火墙的配置
一般我会选用被动模式的FTP
[root@ftp ~]# yum -y install vsftpd # 备份配置文件 [root@ftp ~]# cp /etc/vsftpd/vsftpd.conf{,.bak} # 简化配置文件内容 [root@ftp ~]# grep -Ev '^#|^$' /etc/vsftpd/vsftpd.conf.bak > /etc/vsftpd/vsftpd.conf # 修改配置文件 anonymous_enable=NO # 是否禁止匿名用户登陆 local_enable=YES # 是否容许本地用户登陆 write_enable=YES # 是否容许写入 local_umask=022 # 本地用户文件掩码 xferlog_enable=YES # 是否在上传/下载文件时记录日志 connect_from_port_20=NO # 是否使用20端口传输数据(是否使用主动模式) xferlog_std_format=YES # 是否使用标准日志格式 xferlog_file=/var/log/xfer.log # 日志文件路径 chroot_local_user=NO # 是否限制全部的本地用户在本身的家目录 chroot_list_enable=YES # 是否指定不能离开家目录的用户 chroot_list_file=/etc/vsftpd/chroot_list # 指定不能离开家目录的用户名单文件
allow_writeable_chroot=YES # 是否开启家目录可写 listen=YES # 是否开启ipv4监听 listen_ipv6=NO # 是否开启ipv6监听 pam_service_name=vsftpd # 使用pam模块控制,vsftpd文件在/etc/pam.d/目录下 userlist_enable=YES # 是否开启用户本地用户名单, 当userlist_deny=NO时 , userlist_file名单内的用户为白名单,反则反之 userlist_deny=YES # 决定禁止/容许userlist_file名单内的用户登陆 tcp_wrappers=YES # 是否容许tcp_wrappers管理 pasv_enable=YES # 是否容许pasv模式 pasv_min_port=22226 # pasv模式使用的最小端口号 pasv_max_port=22228 # pasv模式使用的最大端口号 download_enable=NO # 是否容许下载 userlist_file=/etc/vsftpd/user_list # 用户名单文件 user_config_dir=/etc/vsftpd/vsftpd_user_conf # 用户配置文件
建立本地用户web
# 建立本地用户指定家目录 [root@ftp ~]# useradd -d /var/ftp/pub/user1 -s /sbin/nologin user1 # 设置密码 [root@ftp ~]# passwd user1 # 添加到禁止离开家目录的列表中 [root@ftp ~]# echo user1 >> /etc/vsftpd/chroot_list # 修改权限 [root@ftp ~]# chown -R user1.user1 /var/ftp/pub/user1/ [root@ftp ~]# ll -d /var/ftp/pub/user1/ drwx------. 2 user1 user1 62 10月 12 16:52 /var/ftp/pub/user1/ # 添加防火墙策略 [root@ftp ~]#iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT [root@ftp ~]#iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 22226:22228 -j ACCEPT [root@ftp ~]# getenforce Permissive [root@ftp ~]# systemctl start vsftpd
最后就能够经过
ftp
:
//ip
在浏览器里访问上面的
ftp
(只有被动模式的
ftp
才能再浏览器里访问)
也可以使用Filezilla等工具链接
ftp
,不过要在客户端里手动修改为被动模式
ftp
登录后的路径锁定到帐号家目录下
ftp传输数据是明文,弄个抓包软件就能够经过数据包来分析到帐号和密码,为了搭建一个安全性比较高ftp,能够结合SSL来解决问题
# 若是没有输出此类消息 那么说明该版本的svftp不支持ssl加密 [root@ftp user1]# ldd /usr/sbin/vsftpd |grep libssl libssl.so.10 => /lib64/libssl.so.10 (0x00007f17c0622000) # 生成加密证书 [root@ftp ~]# openssl req -x509 -nodes -days 365 -newkey rsa:1024 \-keyout /etc/vsftpd/vsftpd.pem \-out /etc/vsftpd/vsftpd.pem Generating a 1024 bit RSA private key .....................................++++++ ......++++++ writing new private key to '/etc/vsftpd/vsftpd.pem' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [XX]:CN State or Province Name (full name) []:beijing Locality Name (eg, city) [Default City]:haidian Organization Name (eg, company) [Default Company Ltd]:ftpssl Organizational Unit Name (eg, section) []:ftpssl Common Name (eg, your name or your server's hostname) []:ftp Email Address []:damowang.cn@gmail.com # 修改配置文件 [root@ftp user1]# vim /etc/vsftpd/vsftpd.conf ssl_enable=YES # 是否启用ssl加密 allow_anon_ssl=NO # 是否容许匿名用户使用ssl加密 force_local_data_ssl=YES # 非匿名用户传输数据时是否加密 force_local_logins_ssl=NO # 匿名用户登陆时是否加密 ssl_tlsv1=YES # 是否激活tls v1加密 ssl_sslv2=NO # 是否激活sslv2加密 ssl_sslv3=NO # 是否激活sslv3加密 rsa_cert_file=/etc/vsftpd/vsftpd.pem # rsa证书的位置
重启vsftpd服务算法
[root@ftp ~]# systemctl restart vsftpd
使用Filezilla链接查看是否为TSL加密vim
什么是SSL、TSL、HTTPS?浏览器
SSL 的全名是 Secure Sockets Layer,即安全套接字层,简而言之,這是一种标准技术,用于保持网际网络链接安全以及防止在两个系统之间发送的全部敏感资料被罪犯读取及修改任何传输的信息,包括潜在的我的详细信息 两个系統能够是伺服器与客户端 (例如购物网站与浏览器),或者伺服务器至伺服务器 (例如,含有我的身份信息或含有薪资信息的应用程序)安全
这样作是为了确保使用者与网站、或两个系统之间传输的任何信息保持没法被读取的状态 此技术可以使用加密算法以混淆传输中的信息,防止骇客在信息公国链接发送时读取信息 此信息多是任何敏感或我的细信息,包括信用卡号与其余财务信息、姓名与地址等等bash
TSL (Transport Layer Security,传输层安全协议) 是更新、更安全的 SSL 版本 咱们仍将安全性凭证成为 SSL,由于这是比较经常使用的词服务器
HTTPS (Hyper Text Transfer Protocol Secure,超文本传输协议安全) 会在网站受到 SSL 凭证保护时在网址中出现 该凭证的详细信息包括发行机构与网站拥有人的企业名称,能够经过点击浏览器网址栏上的锁定标记进行查看网络