热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

关于内网FTP服务器架设的不完全解析

关于内网FTP服务器架设的不完全解析--Linux企业应用-Linux服务器应用信息,下面是详情阅读。
  首先要提到的是这里的内网是指一般我们网吧内部环境的内网,对局域网内网我没什么好说的,愿花钱的去DNS0755好了。一个基本条件:一个公网IP,对网关有操作权限。

  FTP服务器端192.168.0.100,我选用Win2K+Serv-U 4.1.0.0,很普通常用的一个组合网关是最简单的双网卡PC,一接外网一接内网,这里假设外网IP为218.4.218.4,内网IP为192.168.0.1。

  提一些概念性的东东:

  一次完整的FTP会话,包含有两个连接,一个称之为命令通道,一个称之为数据通道。命令通道用来传递一些"命令"和反馈,包括用户名密码登陆,而且众所周知是明文数据通道用来传递实际数据----列目录、文件传输,一旦需要列目录或文件传输,数据通道就会被建立起来,这里分两种方式,一是PORT二是PASV。

  你会在因特网上找到许多FTP服务器,有的要么只支持PORT,有的要么只支持PASV,有的是因为考虑安全因素,有的是因为条件限制等等。我想把我的FTP做成PORT和PASV方式都能支持的,这样不会使客户端在连接上受到困扰,特别是一些新手,对于PORT和PASV的定义,比较容易理解的解释是针对FTP服务端而言的:

  PORT是主动模式,在建立数据通道时,服务端去连接别人;

  PASV是被动模式,在建立数据通道时,服务端被别人连接;

  建立数据通道时,用PORT模式还是PASV模式,选择权在于FTP客户端。

  现在要做的,就是端口映射了,最基本的是命令通道的映射,这里选用默认的21,我想把在网关外网接口收到的对218.4.218.4端口21的连接请求,转发到192.168.0.100的21端口去。

  Win2K网关

  系统自带简单的端口转发程序,就是能给我们提供连接共享的ICS/RRAS,这两种方式原理是一样的,而且都能提供这类业务的端口转发设置过程比较简单,我也不抓图了,以前有过很多。

  就是在"服务与端口"中,注册一条类似"公用网络与端口218.4.218.4:21 To 专用网络与端口192.168.0.100:21"这样格式的规则设置好后,别人就能访问你的内网FTP服务器了,但你很快会发现你的FTP服务器只支持PORT方式,如果客户端也在内网环境则PORT方式也用不了了这是为什么呢?我们来分析一下,因为在PASV方式,服务器接到客户端的PASV命令后,会指定一个本地的随机端口来作为PASV端口,并通知客户端,然后等待客户端的连接,在通知消息里包含有FTP服务器的IP地址和打开的PASV端口,我FTP服务器的IP地址是什么?

  现在是192.168.0.100,那么对方收到的PASV通知将是这样格式的227 Entering Passive Mode (192,168,0,100,m,n)mn是定义了PASV端口的值,计算方式是m*256+m,如果这里m是10而n是20,那么PASV端口就是2580客户端收到这条通知后,当它想发起数据通道的连接,它会向192.168.0.100:2580这个目标地址发送SYN请求,毫无疑问将不会收到应答,因为这个IP在公共网络事实上是不存在的解决的办法是让FTP服务器发送带公网IP的PASV通知,我们的Serv-U支持这个功能。

  然后在网关上把需要打开的PASV端口跟21端口一样做映射到192.168.0.100

  你也许会疑惑了,PASV是服务器动态打开的随机端口,我怎么会知道它会用哪个?怎么映射啊?没有问题,Serv-U同样可以定义每次使用固定的PASV端口,当然为了同时承接多个连接会话,你需要多设置几个成一段,然后在网关上一一对应映射到FTP服务器上去,图中设置了20个。
推荐阅读
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 禁止程序接收鼠标事件的工具_VNC Viewer for Mac(远程桌面工具)免费版
    VNCViewerforMac是一款运行在Mac平台上的远程桌面工具,vncviewermac版可以帮助您使用Mac的键盘和鼠标来控制远程计算机,操作简 ... [详细]
  • 本文详细介绍了云服务器API接口的概念和作用,以及如何使用API接口管理云上资源和开发应用程序。通过创建实例API、调整实例配置API、关闭实例API和退还实例API等功能,可以实现云服务器的创建、配置修改和销毁等操作。对于想要学习云服务器API接口的人来说,本文提供了详细的入门指南和使用方法。如果想进一步了解相关知识或阅读更多相关文章,请关注编程笔记行业资讯频道。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • PHP设置MySQL字符集的方法及使用mysqli_set_charset函数
    本文介绍了PHP设置MySQL字符集的方法,详细介绍了使用mysqli_set_charset函数来规定与数据库服务器进行数据传送时要使用的字符集。通过示例代码演示了如何设置默认客户端字符集。 ... [详细]
  • 信息安全等级保护是指对国家秘密信息、法人和其他组织及公民的专有信息以及公开信息和存储、传输、处理这些信息的信息系统分等级实行安全保护,对信息系统中使用的信息安全产品实 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 本文详细介绍了相机防抖的设置方法和使用技巧,包括索尼防抖设置、VR和Stabilizer档位的选择、机身菜单设置等。同时解释了相机防抖的原理,包括电子防抖和光学防抖的区别,以及它们对画质细节的影响。此外,还提到了一些运动相机的防抖方法,如大疆的Osmo Action的Rock Steady技术。通过本文,你将更好地理解相机防抖的重要性和使用技巧,提高拍摄体验。 ... [详细]
  • 本文详细介绍了华为4GLTE路由器B310的外置天线安装和设置方法。通过连接电源和网线,输入路由器的IP并登陆设置页面,选择手动设置和手动因特网设置,输入ISP提供商的用户名和密码,并设置MTU值。同时,还介绍了无线加密的设置方法。最后,将外网线连在路由器的WAN口即可使用。 ... [详细]
  • 本文讨论了前端工程化的准备工作,主要包括性能优化、安全防护和监控等方面需要注意的事项。通过系统的答案,帮助前端开发者更好地进行工程化的准备工作,提升网站的性能、安全性和监控能力。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • MyBatis错题分析解析及注意事项
    本文对MyBatis的错题进行了分析和解析,同时介绍了使用MyBatis时需要注意的一些事项,如resultMap的使用、SqlSession和SqlSessionFactory的获取方式、动态SQL中的else元素和when元素的使用、resource属性和url属性的配置方式、typeAliases的使用方法等。同时还指出了在属性名与查询字段名不一致时需要使用resultMap进行结果映射,而不能使用resultType。 ... [详细]
author-avatar
手机用户2602931615
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有