在传统印象中,FTP 服务使用端口 21,SSH 服务使用端口 22。在搭建 FTP 服务时想当然地只放行 21 端口,但在使用中遇到各种问题。
服务器上通过 iptables 设置了入站阻止策略,即所有入站的包只有放行后才能访问。刚开始的 FTP 的防火墙放行策略为:
iptables -I INPUT -p tcp -m tcp --dport 21 -j ACCEPT
在 Windows 上使用文件管理器访问 FTP 服务地址:
ftp://user:passwd@192.168.1.1
在文件列表打开时卡死,在网上寻找答案,提示要修改 Internet 选项:

到此时才发现 FTP 服务远比想象的要复杂,特别是要对其设置防火墙规则时。原来 FTP 的服务还分主动方式和被动方式,两种不同方式对端口的使用还不太一样。
使用 Windows 文件管理器打开 FTP 服务有时能打开,换一台电脑有可能又打不开,在主动与被动方式的选择上成了玄学。于是果断放弃原始的文件管理器打开方式,转而使用专门的 FTP 连接工具 FileZilla 测试 FTP 服务是否正常。
FileZilla 下载地址:
https://filezilla-project.org/download.php?type=client#close
在使用 FileZilla 测试 FTP 服务时遇到了类似的问题,FTP 能登录,但展开目录列表时会出错。此时开始怀疑光放开 21 端口还不够,估计是防火墙将请求阻止了。对终端 IP 放行后,FTP 连接恢复正常,验证了之前的猜想。iptables 放行语句为:
iptables -I INPUT -s 10.20.2.138 -j ACCEPT
通过对终端 IP 进行抓包分析发现,不光有 21 端口的请求,还有其它端口的网络活动记录,抓包命令为:
tcpdump -n -q -t host 10.20.2.138

不同 FTP 服务的工作模式可能会存在差异,所以只放行 21 端口可能会阻塞掉部分通讯的数据包。
因为我调试的 FTP 服务并不面向未知用户,只有固定的几个客户端需要访问,所以可以使用 IP 策略,即只放行部分 IP 。像这种端口是浮动的业务,防火墙策略还是比较难写的。实在不行可以先阻止掉部分端口,再按 IP 放行,毕竟防火墙规则是从上往下生效的。
全文完。
如果转发本文,文末务必注明:“转自微信公众号:生有可恋”。




