NAT后的FTP服务器部署笔记

      前记:好久没在这里更新文章了,感觉这里写文章虽然不方便,但是每当自己的一篇文章完成时还是成就感满满了,还是要重新捡起在这里写博客的习惯吧,毕竟本科毕业以后这里就成了我唯一写东西的地方了。
      寒假开始以后,过年之前有一个任务,为实验室的人搭建一个FTP,用之前部署好的物理服务器。这本就是网管干的活,干呗,思来想去,为了方便,决定还是采取Linux转发器+Windows服务器的形式,比较方便管理。
      先说说总体的配置吧。
            (1) Linux转发器,两个网卡,配有一个公网IP一个私有IP,私有IP就是该网段的网关。
            (2) Windows服务器,FTP服务器,配有一个网卡,私有IP,配有两块存储分区,第一个分区是系统分区,第二个分区是存储分区,用FileZilla Server作为服务器。
      简单来说,这次的配置里面最为重要的是配置好NAT的部分。Linux的转发之前已经配置并部署好了,因此只需要部署好FTP服务器,写好Linux上面防火墙的配置即可。

拓扑图

图片1

安装步骤

1.先将Linux转发器以及Windows服务器部署上去物理服务器上面,安装好软件,是使得可以远程控制。
图片2
      我这里是用了XShell去远程控制Linux路由器。
图片3
2.Linux路由器和Windows服务器上按照拓扑图的要求设置好IP地址、子网掩码、默认网关、DNS地址等等。进行Ping测试,确保能连接成功。
图片4
图片5

NAT的配置

1.参考网络上面给的文档,要先打开内核路由转发的功能,更改配置文件/etc/sysctl.conf里面的net.ipv4.ip_forward设置为1
图片6
2.写Linux的iptables规则,使用命令

1
vi /etc/sysconfig/iptables

      里面加入两条即可。

1
2
-A PREROUTING -d 172.22.83.63/32 -p tcp -m tcp --dport 21 -j DNAT --to-destination 192.168.100.7:21
-A POSTROUTING -s 192.168.100.0/24 -o eth0 -j SNAT --to-source 172.22.83.63

      稍微解释一下,按照师兄给我的讲解的是。PREROUTING和POSTROUTING是针对网卡来说的,现在外网过来的数据包要进入内网,根据NAT的规则,我们需要将目的地址从路由器的地址转化为私有的内部地址,因此这里也是这样写的,-d代表目的地址,目的端口是21,映射到内网的192.168.100.7的21端口,换言之,将发往172.22.83.63:21的数据包在Linux路由器这里映射为192.168.100.7:21,使用PREROUTING。
      内网出去外网时,按照NAT的规则,我们需要将源地址(此时的源地址为内部主机的私有地址)进行修改,使用路由器的地址代替,才能正确的发送数据包。
3.重启Linux iptables。

1
service iptables restart

FTP主动模式和被动模式

      如果按照上述配置完以后,应该还是无法访问的,当时这里困扰了我相当长的时间,后来师兄给我的提示,他让我想想FTP的传输模式。
      FTP一共有两种传输模式,主动模式和被动模式,先说说默认的情况下,FTP Client是使用被动模式进行连接的。
      FTP被动模式工作原理:在三次握手的过程中,FTP Server监听着自己的21端口
            (1) FTP Client使用端口号x(x>1024)向FTP Server的21端口发起连接请求,同时监听x+1端口,发送PASV命令,告知自己处于被动模式。
            (2) FTP Server发送确认包,同时发送自己的一个可用端口号y。(PORT y)
            (3) FTP Client使用x+1端口去连接FTP Server的y端口,传输数据。
      FTP主动模式工作原理:在三次握手的过程中,FTP Server监听着自己的21端口。
            (1) FTP Client使用端口号x(x>1024)向FTP Server的21端口发起连接请求,同时监听x+1端口,发送PORT命令,告知自己处于主动模式。
            (2) FTP Server发送确认包,使用本地FTP端口(通常是20)来连接x+1端口,进行数据传输。
      因此从上可以知道,这个主动与被动是相对于Server端的来说的。
      在NAT的过程中,由于默认是使用被动模式进行数据传输,我们不知道Server端使用什么端口号去连接,全部端口开放这个不现实,也不安全。因此,为了让我们的iptables支持我们的ftp,根据网上的资料,需要加载两个模块。nf_nat_ftpnf_conntrack_ftp
      最后我们使用命令:

1
2
modprobe nf_conntrack_ftp
modprobe nf_nat_ftp

      还可以使用命令lsmod | grep ftp查看是否已经加载,若已经加载即可。
      为了使得模块的加载不随着防火墙重启而消失,我们可以加入配置文件中。

1
2
3
4
vi /etc/sysconfig/iptables-config
#在配置文件中加入两句话。
IPTABLES_MODULES="nf_conntrack_ftp"
IPTABLES_MODULES="nf_nat_ftp"

      保存并测试ftp即可。

文章目录
  1. 1. 拓扑图
  2. 2. 安装步骤
  3. 3. NAT的配置
  4. 4. FTP主动模式和被动模式
|