FTP在OpenWrt系统中的应用

SSH服务的应用中,我们有提到利用WinSCP的SCP方式建立电脑与路由器之间的文件传输,但这种方式有一定的局限性,虽然其在局域网内连接的速度尚可,但如果是电脑远程访问路由器的话,传输速度会变得非常慢,而且传输的安全性也是大打折扣。本文要讲解FTP在OpenWrt系统中的应用,FTP是最基本的文件传输协议,我们通过在路由器端安装FTP服务,就可以让FTP客户端(不管是局域网内,还是远程的)都可以轻松的与路由器建立安全、快捷的文件传输任务。

1、FTP服务安装

root@OpenWrt:~# opkg update && opkg install vsftpd

2、配置

目前OpenWrt系统的FTP服务未开发Luci设置界面,所以需要我们直接对配置文件进行修改:

root@OpenWrt:~# vim /etc/vsftpd.conf

通过WinSCP直接打开文件编辑,如下图:

ftp配置文档

设置允许FTP访问的目录,即在配置文档中添加如下语句

local_root=/mnt/sda1/ftp

3、设置开机启动

root@OpenWrt:~# /etc/init.d/vsftpd enable

root@OpenWrt:~# /etc/init.d/vsftpd start

4、测试

》网页下载方式:以前一些网站提供文件下载,常采用此种方式

在浏览器地址栏输入:ftp://192.168.1.1,就会出现登录界面:

ftp网页登录界面

输入账号及密码后,点“登录”按钮,就进入FTP文件下载界面了:

ftp下载目录

点任一文件,就会自动将文件下载到客户端。

》文件资源管理器方式:可以用WinSCP,也可以用FileZilla应用程序

1)先以WinSCP为例,打开WinSCP程序,以下图方式新建站点:

ftp的winscp登录界面

注:文件协议选“FTP“,端口号选”21“。

等其它设置内容全部输入完成后点”登录“,就进入电脑文件与路由器FTP目录之间的交互界面了。

ftp的winscp文件交互界面

2)下面再介绍一下FileZilla的使用

FileZilla的Windows客户端版大家可以通过官网 https://filezilla-project.org/ 下载,也可以在本网站的”DIY专栏 – 下载中心”直接下载(百度网盘的提取码:lyzj)。

程序安装后在电脑桌面双击打开,然后如下图进行设置:

FileZilla设置

再点“快速连接”,会出现一个提示框,显示这是一个不安全的FTP连接:

ftp连接提示 1

先不管它,后面我们会讲到如何采用更安全的连接方式,点“确定”就可以进入电脑与路由器FTP目录的文件交互界面了。

FileZilla的文件交互界面

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服务:

root@OpenWrt:~# /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上做相应设置也能很轻松地实现文件交互了。

filezilla远程访问ftp设置

2)数据采用密码传输方式

这种方式的安装及设置方法相对来说比较复杂,下面我们来详细展开:

# 安装带加密功能的FTP服务

root@OpenWrt:~# opkg update

root@OpenWrt:~# opkg remove vsftpd     # 如果以前已经安装了vsftpd,则需要先将其卸载

root@OpenWrt:~# opkg install vsftpd-tls

# 安装openssl

root@OpenWrt:~# opkg install openssl-util ca-certificates

# 生成证书及密钥文件(注:以下命令你可以在vsftpd.conf文件中找到)

root@OpenWrt:~# 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”

# 修改配置文件

root@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服务

root@OpenWrt:~# /etc/init.d/vsftpd restart

# 测试

数据传输设置密码方式后,将无法采用浏览器直接访问的方式,但是采用Winscp、FileZilla等专用程序实现FTP服务访问是完全OK的,而且安全性大大提升了。

以FileZilla登录为例:

filezilla证书确认

多了一个证书确认的界面,信任证书后点”确定“,就又可以进入熟悉的文件交互界面了。

Filezilla文件交互界面

以上讲述的两种增强安全性的方法都是经常使用,而且是非常有效的。当然其它像设置非root账户进行传输也是增强数据安全性的一种方法,大家可以去试着操练一下!!