四、主动&被动学习验证
  1.环境介绍:  client 端: 192.168.30.58
  server端:   192.168.30.203
  2.主动模式验证:
  server 端运行tcpdump 监听:

  !!!纠正一个错误:上图中的标注客户端将本机的随机开放的端口发送给服务器内容的那一条,实际上不是在这里发送的,而是在 第一次 ftp-data(20)端口 与 端口49404连接的往上数第四条,是在那儿发送的随机端口。
  客户端登陆执行的命令:

  可能大家会对上述中的client后续随机打开的端口计算方法有点疑问,一开始我也是,后来查了一下,解释如下:
  PORT 命令 用于打开端口的命令。格式为 PORT a,b,c,d,e,f。其中 a,b,c,d 为点分十进制形式的 IP 地址;e,f 表示端口号,为 2 个 10 进制数字,用以标识 e×256 + f 运算出来的端口 号。本文章的e,f也是192,252. 运行上面的公式后,得到了端口号为49404
  3.被动模式验证:
  server 端运行tcpdump 监听:

  其实我们也可以使用 tcpdump 时,在命令后加上 -X ,可以详细的看到报文内容。我也是通过这种方式看到在哪一条进行的端口发送的。
  客户端登陆执行的命令:

  五、总结
  1.主动模式:服务器只需要开启21和20 端口,虽然比较安全,但是如果客户端开启了防火墙,那么可能会无法传输数据。
  2.被动模式:默认开启一个21端口后,后续服务器会对每个用户的连接请求随机开放一个端口,服务器安全性降低。
  3.在iptables 中,我们需要为ftp 加上一个跟踪模块,即:ip_conntrack_ftp
  4.尽量避免在公网中使用ftp传输数据,因为用户及密码是明文传输的。