在SSH服务的应用中,我们有提到利用WinSCP的SCP方式建立电脑与路由器之间的文件传输,但这种方式有一定的局限性,虽然其在局域网内连接的速度尚可,但如果是电脑远程访问路由器的话,传输速度会变得非常慢,而且传输的安全性也是大打折扣。本文要讲解FTP在OpenWrt系统中的应用,FTP是最基本的文件传输协议,我们通过在路由器端安装FTP服务,就可以让FTP客户端(不管是局域网内,还是远程的)都可以轻松的与路由器建立安全、快捷的文件传输任务。
1、FTP服务安装
opkg update opkg install vsftpd
2、配置
目前OpenWrt系统的FTP服务未开发Luci设置界面,所以需要我们直接对配置文件进行修改:
vim /etc/vsftpd.conf
或
通过WinSCP直接打开文件编辑,如下图:
设置允许FTP访问的目录,即在配置文档中添加如下语句
local_root=/mnt/sda1/ftp
3、设置开机启动
/etc/init.d/vsftpd enable /etc/init.d/vsftpd start
4、测试
》网页下载方式:以前一些网站提供文件下载,常采用此种方式
在浏览器地址栏输入:ftp://192.168.1.1,就会出现登录界面:
输入账号及密码后,点“登录”按钮,就进入FTP文件下载界面了:
点任一文件,就会自动将文件下载到客户端。
》文件资源管理器方式:可以用WinSCP,也可以用FileZilla应用程序
1)先以WinSCP为例,打开WinSCP程序,以下图方式新建站点:
注:文件协议选“FTP“,端口号选”21“。
等其它设置内容全部输入完成后点”登录“,就进入电脑文件与路由器FTP目录之间的交互界面了。
2)下面再介绍一下FileZilla的使用
FileZilla的Windows客户端版大家可以通过官网 https://filezilla-project.org/ 下载,也可以在本网站的”DIY专栏 – 下载中心”直接下载(百度网盘的提取码:lyzj)。
程序安装后在电脑桌面双击打开,然后如下图进行设置:
再点“快速连接”,会出现一个提示框,显示这是一个不安全的FTP连接:
先不管它,后面我们会讲到如何采用更安全的连接方式,点“确定”就可以进入电脑与路由器FTP目录的文件交互界面了。
5、增强数据传输的安全性
以上的设置都是基于采用缺省端口号及明码传输的方式来进行的,在实际应用中我们可能需要考虑的更加全面一些,让数据传输更加安全。接下来我们就来介绍两种增强数据传输安全性的方法:
1)将数据传输的主动模式active变为被动模式passive
主动模式下,FTP服务端口为21,数据传输端口号为20,因为端口号都是缺省已知的,黑客可以通过监听指定的端口号来窃取数据。而被动模式下,虽然FTP服务端口号仍为21,但是其数据传输端口号是可以有客户自己来随意设定的,你可以设置一个端口号,也可以设置一个区间。有那么多随意的端口号(1024-65535)可供选择,而且数据可以分在区间内不同的端口号传输,黑客再要监听就不大容易了。
# 变主动模式为被动模式,需要 /etc/vsftpd.conf 文件中增加如下语句:
pasv_enable=YES #使ftp服务工作在被动模式 pasv_min_port=9964 #设置被动模式下,数据传输的端口号区间的最小端口号 pasv_max_port=9965 #设置被动模式下,数据传输的端口号区间的最大端口号
注:最小、最大端口号大家可以自行设定,上例中我只选择了9964、9965两个端口作为数据传输端口。
# 设置修改后保存文件,然后重启FTP服务:
/etc/init.d/vsftpd restart
# 然后你可以按本文第4点的测试方式测试一下,FTP服务运行是否正常。
如果你想更进一步,连FTP的服务端口21也一起换掉,那建议你将FTP服务安装在二级路由上,在一级路由(同样也安装OpenWrt系统)上设置端口转发:
在Luci界面,点”Network – Firewall“进入防火墙设置界面后,再点选”Port Forwards“进行端口转发设置。例如外网访问二级路由上的FTP服务时采用9966端口,则需要先将一级路由Wan口的9966端口转发到二级路由Lan口的21端口;再将一级路由Wan口的数据端口也转发到二级路由Lan口相同的端口上,有几个转接几个(具体数量由pasv_min_port,pasv_max_port确定)。
假设一级路由拥有公网地址,并动态关联了域名,如 wiserouter.red-yellow.net,则只要在浏览器网址上输入:ftp://wiserouter.red-yellow.net:9966 就可以远程连接二级路由上的FTP服务了。同理,在WinSCP、FileZilla上做相应设置也能很轻松地实现文件交互了。
2)数据采用密码传输方式
这种方式的安装及设置方法相对来说比较复杂,下面我们来详细展开:
# 安装带加密功能的FTP服务
opkg update opkg remove vsftpd #如果以前已经安装了vsftpd,则需要先将其卸载 opkg install vsftpd-tls
# 安装openssl
opkg install openssl-util ca-certificates
# 生成证书及密钥文件(注:以下命令你可以在vsftpd.conf文件中找到)
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/vsftpd/vsftpd_privkey.pem -out /etc/vsftpd/vsftpd_cert.pem -subj /C="DE"/ST="Saxony"/L="Leipzig"/CN="OpenWrt"
# 修改配置文件
vim /etc/vsftpd.conf
增加以下内容:
ssl_enable=YES allow_anon_ssl=NO force_local_data_ssl=YES force_local_logins_ssl=YES ssl_tlsv1=YES ssl_sslv2=NO ssl_sslv3=NO # Disable SSL session reuse (required by WinSCP) require_ssl_reuse=NO # Select which SSL ciphers vsftpd will allow for encrypted SSL connections (required by FileZilla) ssl_ciphers=HIGH rsa_cert_file=/etc/vsftpd/vsftpd_cert.pem rsa_private_key_file=/etc/vsftpd/vsftpd_privkey.pem
# 保存退出后,重启FTP服务
/etc/init.d/vsftpd restart
# 测试
数据传输设置密码方式后,将无法采用浏览器直接访问的方式,但是采用Winscp、FileZilla等专用程序实现FTP服务访问是完全OK的,而且安全性大大提升了。
以FileZilla登录为例:
多了一个证书确认的界面,信任证书后点”确定“,就又可以进入熟悉的文件交互界面了。
以上讲述的两种增强安全性的方法都是经常使用,而且是非常有效的。当然其它像设置非root账户进行传输也是增强数据安全性的一种方法,大家可以去试着操练一下!!