Linux实例中vsftpd主被动模式下iptables的设置

说明

免责声明: 本文档可能包含第三方产品信息,该信息仅供参考。阿里云对第三方产品的性能、可靠性以及操作可能带来的潜在影响,不做任何暗示或其他形式的承诺。

概述

本文主要介绍Linux实例中vsftpd主被动模式下iptables的设置。

详细信息

FTP连接包括以下两种:

  • 一个控制连接:这个连接用于传递客户端的命令和服务器端对命令的响应,比如登录使用的用户名与密码、变更目录命令CWD、PUT 、GET文件。它使用TCP 21端口。

  • 多个数据连接:这些连接用于传输文件和其它数据,比如目录列表命令LIST。使用端口依据FTP服务端工作模式决定。

vsftpd主动与被动模式的区别在于PORT命令的发出方,或者数据连接的主动发起方。

  • 主动模式下,由客户端通过PORT告知服务端自己的监听端口,然后服务端通过自己定义的主动模式下的端口(默认为20)发起到客户端宣告的端口的连接。

  • 被动模式下,服务端在接到客户端的PASV命令后,通过PORT发送端口号给客户端,客户端连接这个端口进行数据传输。

主动模式下iptables设置

这个模式下,因为是客户端需要连接服务端的21端口,同时服务端的20端口主动外联客户端的端口,所以要确保INPUT方向的21允许访问,同时OUTPUT方向的20允许通过(通常OUTPUT默认ACCEPT,所以这个不用设置。如果为DROP,则需要添加外出方向的20访问规则),以及创建的RELATED与ESTABLISHED规则。具体如下:

iptables -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

被动模式下iptables设置

针对vsftpd的设置可以使用不同策略,具体如下:

  • vsftpd未指定被动模式的端口范围

    1. /etc/sysconfig/iptables-config中添加IPTABLES_MODULES="ip_conntrack_ftp",加载ip_conntrack_ftp模块以过滤传输与FTP控制连接相关的数据连接中经过的数据。

    2. 修改设置后执行以下命令,使新的模块加载。

      service iptables restart

    3. iptables配置如下,允许访问21端口。

      iptables -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
      iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

  • vsftpd指定被动模式的端口范围

    1. 也可以使用vsftpd未指定被动模式的端口范围”中的方案,或者可以在iptables的INPUT链中放行对指定范围端口的访问。

    2. 比如在/etc/vsftpd/vsftpd.conf中设置如下内容。

      pasv_enable=YES
      pasv_min_port=6666
      pasv_max_port=8888

    3. 在iptables中开放这段端口。

      iptables -A INPUT -p tcp --dport 21 -j ACCEPT
      iptables -A INPUT -p tcp --dport 6666:8888 -j ACCEPT
      iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

适用于

  • 云服务器 ECS