免责声明: 本文档可能包含第三方产品信息,该信息仅供参考。阿里云对第三方产品的性能、可靠性以及操作可能带来的潜在影响,不做任何暗示或其他形式的承诺。
概述
本文主要介绍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未指定被动模式的端口范围
在
/etc/sysconfig/iptables-config
中添加IPTABLES_MODULES="ip_conntrack_ftp"
,加载ip_conntrack_ftp模块以过滤传输与FTP控制连接相关的数据连接中经过的数据。修改设置后执行以下命令,使新的模块加载。
service iptables restart
iptables配置如下,允许访问21端口。
iptables -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
vsftpd指定被动模式的端口范围
也可以使用vsftpd未指定被动模式的端口范围”中的方案,或者可以在iptables的INPUT链中放行对指定范围端口的访问。
比如在
/etc/vsftpd/vsftpd.conf
中设置如下内容。pasv_enable=YES pasv_min_port=6666 pasv_max_port=8888
在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