CentOS内网搭建ftp服务器并导出


作者:lingyun 来源:凌云物网智科实验室 时间:2016-04-07

版权申明:  本文来自凌云物网智科实验室(www.iot-yun.com), 未经许可不可转载!

作者:  郭文学<QQ: 281143292>   凌云物网智科实验室

主机环境: CentOS 6.3 X86_64          IP地址:192.168.2.2

DDNS客户端: 花生壳

本文主要描述:

  1. FTP服务简介
  2. Linux上使用vsftpd搭建ftp服务器
  3. Linux防火墙配置
  4. 无线路由器DDNS及虚拟服务外网穿透

 

1,  FTP服务简介

FTP(File Transfer Protocol,文件传输协议) 是 TCP/IP 协议组中应用层的协议之一。FTP协议包括两个组成部分,其一为FTP服务器,其二为FTP客户端。 FTP工作模式为C(Client)/S(Server)模式,其中FTP服务器用来存储文件,用户可以使用FTP客户端通过FTP协议访问位于FTP服务器上的资源。

Linus公开的第一版本的Linux源代码就是发布在学校的Linux服务器上,当然现在的Linux内核源代码发行版本同样也存放在ftp服务器上供大家下载。我们在开发网站的时候,通常利用FTP协议把网页或程序传到Web服务器上。此外,由于FTP传输效率非常高,在网络上传输大的文件时,一般也采用该协议。由此可见,FTP服务器通常用作文件的共享或发布,当然我们也可以上传文件到FTP服务器上。

在Windows下著名的就是Serv-U、FileZilla等,Linux下服务器端的程序著名的就有vsftp和wu-ftp。客户端软件如果只是用来浏览和下载的话,最方便的当然是浏览器或Windows的资源管理器。而如果要上传的话,可能需要一些专业的软件,如flashfxp、FileZilla等。

默认情况下FTP协议使用TCP端口中的 20和21这两个端口,其中20用于传输数据,21用于传输控制信息。但是,是否使用20作为传输数据的端口与FTP使用的传输模式有关,如果采用主动模式,那么数据传输端口就是20;如果采用被动模式,则具体最终使用哪个端口要服务器端和客户端协商决定。下面描述一下主动和被动模式:

(1) PORT(主动模式)

PORT中文称为主动模式,工作的原理: FTP客户端连接到FTP服务器的21端口,发送用户名和密码登录,登录成功后要list列表或者读取数据时,客户端随机开放一个端口(1024以上),发送 PORT命令到FTP服务器,告诉服务器客户端采用主动模式并开放端口;FTP服务器收到PORT主动模式命令和端口号后,通过服务器的20端口和客户端开放的端口连接,发送数据,原理如下图:

主动FTP对FTP服务器的管理有利,但对客户端的管理不利。因为FTP服务器企图与客户端的高位随机端口建立连接,而这个端口很有可能被客户端的防火墙阻塞掉,另外客户端绝大部分都是私有IP地址通过NAT上网,这样服务器端不能主动连接到客户端上去。所以如果只是局域网内共享我们可以使用主动模式,否则不会使用这种模式。

 

(2) PASV(被动模式)

PASV是Passive的缩写,中文成为被动模式,工作原理:FTP客户端连接到FTP服务器的21端口,发送用户名和密码登录,登录成功后要list列表或者读取数据时,发送PASV命令到FTP服务器, 服务器在本地随机开放一个端口(1024以上),然后把开放的端口告诉客户端, 客户端再连接到服务器开放的端口进行数据传输,原理如下图:

被动FTP对FTP客户端的管理有利,但对服务器端的管理不利。因为客户端要与服务器端建立两个连接,其中一个连到一个高位随机端口,而这个端口很有可能被服务器端的防火墙阻塞掉。所以在本文中,我们将使用被动模式,同时要对防火墙进行配置。

2, Linux上搭建ftp服务器

在Linux服务器上,我们选择vsftp作为我们的ftp服务器端软件。首先,CentOS默认并不会安装该软件,我们需要确认并安装:

[guowenxue@centos6 ~]$ sudo rpm -qa | grep vsftpd

[guowenxue@centos6 ~]$ sudo yum install -y vsftpd

接下来修改vsftpd的配置文件如下:

[guowenxue@centos6 ~]$ cat /etc/vsftpd/vsftpd.conf

#允许匿名用户登录,但不允许上传和创建文件夹
anonymous_enable=YES
anon_upload_enable=NO
anon_mkdir_write_enable=NO

#允许本地用户登录,并限制工作目录到/var/ftp下,登录的用户具有读写功能

local_enable=YES
local_root=/var/ftp
write_enable=YES
local_umask=022

#设置vsftpd的日志

xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log

ftpd_banner=Welcome to my FTP service.

listen=YES

# 禁止本地用户切换工作目录
chroot_local_user=YES
pam_service_name=vsftpd

# /etc/vsftpd/ftpusers 该文件中的用户列表与不受任何配置它总是有效,它是一个黑名单!
# 该文件存放的是一个禁止访问FTP的用户列表,通常为了安全考虑,管理员不希望一些拥有过大权限的帐号(比如root)登入FTP,以免通过该帐号从FTP上传或下载一些危险位置上的文件从而对系统造成损坏。

#而 /etc/vsftpd/user_list则是和userlist_enable和userlist_deny两个配置项紧密相关的,它可以有效,也可以无效,有效时它可以是一个黑名单,也可以是一个白名单!

  1. userlist_enable和userlist_deny两个选项联合起来针对的是:本地全体用户(除去ftpusers中的用户)和出现在user_list文件中的用户以及不在在user_list文件中的用户这三类用户集合进行的设置。
  2. 当且仅当userlist_enable=YES时:userlist_deny项的配置才有效,user_list文件才会被使用;当其为NO时,无论userlist_deny项为何值都是无效的,本地全体用户(除去ftpusers中的用户)都可以登入FTP
  3. 当userlist_enable=YES时,userlist_deny=YES时:user_list是一个黑名单,即:所有出现在名单中的用户都会被拒绝登入;
  4. 当userlist_enable=YES时,userlist_deny=NO时:user_list是一个白名单,即:只有出现在名单中的用户才会被准许登入(user_list之外的用户都被拒绝登入);另外需要特别提醒的是:使用白名单后,匿名用户将无法登入!除非显式在user_list中加入一行:anonymous

# 设置/etc/vsftpd/user_list中列出的本地用户能用于ftp登录

userlist_enable=YES
userlist_deny=NO

#设置监听的端口为21,如果想改成其他端口改此处如2211
listen_port=21

#设置并发访问最多100个客户端

max_clients=100

#设置FTP服务器为被动模式,被动端口范围为6000-6100

pasv_enable=YES
pasv_min_port=6000
pasv_max_port=6100

参考上面的配置,去掉红色的注释说明部分后,将vsftpd服务器重启即可:

[guowenxue@centos6 ~]$ sudo service vsftpd restart
Shutting down vsftpd: [ OK ]
Starting vsftpd for vsftpd: [ OK ]

3, Linux防火墙配置

从上面的配置我们可以看出,FTP服务器在正常工作的时候,会使用这些端口号 21, 6000-6100。 而如果Linux系统防火墙如果默认禁止这些端口访问的话,那么FTP服务器还不可以正常工作。这时我们可以修改防火墙配置:

最简单的方法是关掉防火墙,当然这也是最不安全的:

[guowenxue@centos6 ~]$ sudo service iptables stop

当然最好的办法是防火墙策略里添加这些端口的访问许可:

[guowenxue@centos6 ~]$ sudo iptables -A INPUT -p tcp –dport 21 -j ACCEPT
[guowenxue@centos6 ~]$ sudo iptables -A INPUT -p tcp –dport 6000:6100 -j ACCEPT

这时我们就可以通过浏览器或资源管理器访问我们的FTP服务器了:

chrome 资源管理器

 

 4,   无线路由器DDNS及虚拟服务外网穿透

因为我们的服务器使用的是私有IP地址(192.168.2.2),所以上面配置的ftp服务器只能在局域网内被访问。如果需要这个服务被Internet上的其他主机访问的话,则可以使用DDNS(动态域名解析协议)来导出到公网上,否则则需要购买一个公网IP地址才能访问。

在绝大部分的路由器上都有花生壳的客户端,所以我们还需要到花生壳官网(http://www.oray.com/)上申请一个帐号,然后在路由器上设置自动登录:

DDNS

 

绝大部分的路由器同样支持虚拟服务转发,这时我们还需要将相应主机的相应端口导出去:

VS

这时候我们就可以通过DDNS相应的域名访问我们的FTP服务器了:

access

    注意:  如果要使用路由器开启花生壳和虚拟服务器的话,自己的路由器从运营商(如中国电信)那里拿到的一定要是公网IP,否则不行。当初办理50M光纤到户的时候,默认拿到的是一个私有IP地址,没有公网IP,怎么映射都是不行的。后来到工信部网站投诉,才从电信那里要到公网IP解决了这个问题。

 

在线咨询
微信号
13554373241
联系方式
135-5437-3241
邮箱
guowenxue@aliyun.com
返回顶部