时光流转,先森竟然已经近一年没有发过博客了,现在先森的工作是腾讯云公有云的大客户售后运维,平时比较忙,博客这边就基本处于荒废状态了。
本文是昨天处理的一个客户遇到的问题,虽然问题不是很难,但是比较难为先森,先森做运维,做的是Linux运维,对Windows着实不是很熟悉。
问题背景
客户反馈,Windows服务器上,配置完IIS的FTP服务器后,安全组需要配置全端口放通才能正常访问FTP。
Windows先森不是很懂,但是FTP还是挺熟悉的,上一家公司做运维的时候,FTP环境还是搭建过不少的,不过搭建的都是vsftpd。
这个问题先森这边一看,想到的就是被动端口的问题。
FTP有主动模式和被动模式两种:
主动模式:主动模式下,FTP客户端从任意的非特殊的端口(N > 1023)连入到FTP服务器的命令端口--21端口。然后客户端在N+1(N+1 >= 1024)端口监听,并且通过N+1(N+1 >= 1024)端口发送命令给FTP服务器。服务器会反过来连接用户本地指定的数据端口,比如20端口。
被动模式:被动模式下,FTP客户端会用一个大于等于1024的端口N去连接FTP服务器的命令端口(21端口),然后服务器侧会告知客户端一个端口,让客户端再用本地N+1的端口去连接服务器告知的这个端口,用于传输数据,而服务器这个端口就叫做被动端口
解决问题
让客户参考腾讯云官方文档《Windows 云服务器搭建 FTP 服务》中的第六步,设置安全组及防火墙:
腾讯云官方文档-步骤6
客户这个问题,其实答案本身就在上图中了。FTP的被动模式,默认的被动端口范围就是1024-65535。客户也说了,所有端口全放通是能够正常使用的。所以客户的需求是缩小被动端口范围。
上面的步骤6的第二点,其实是有说明怎么配置被动端口范围的。但是客户连我们精心准备的腾讯云文档都不愿意看,难道还想让客户去看满是英文的微软官方文档么。微软官方文档中的第四步也说明了怎么配置被动端口:
微软官方文档(已翻译)
但是微软官方文档是真的耿直,通篇文档一张图片示意都没有,且跟着做了其实也有坑。
先森这边也让客户按照指引,在FTP防火墙支持中配置被动端口的范围。可是客户配置之后,在安全组中放通了相应端口,结果还是会出现报错:
打开 FTP 服务器上的文件夹时发生错误,请检查是否有权限访问改文件夹。详细信息:操作超时
这个问题看着是权限问题,其实还是被动端口没有放通的问题导致。
另外有一点,配置FTP防火墙支持的时候,除了可以配置被动端口的范围,还有一个“防火墙的外部 IP 地址”,最好也一并配置上,需要配置为服务器的公网IP地址,否则可能遇到下面的报错:
227 Entering Passive Mode
先森对windows服务器着实不太熟悉,没办法,最后买了一台Windows服务器按照步骤做测试。仅按照腾讯云文档及微软文档配置,确实会报错操作超时。最后发现,配置完成之后,还需要在“开始->管理工具->服务”中,找到【Microsoft FTP Service】服务,重启该服务才能生效:
重启【Microsoft FTP Service】服务
重启服务后,先森再按照客户的操作,直接在本地windows资源管理器中键入“ftp://公网IP:命令端口”进行测试,访问正常:
测试连接FTP正常
比较迷的是,在【FTP 防火墙支持】中,“防火墙的外部 IP 地址”一经设置,立刻生效,但同一个配置地点的被动端口却要重启服务才能生效。可能这就像MySQL的配置,有些可以动态生效,有些就必须重启才能生效。且这些配置都是在IIS管理器里配置的,IIS管理器旁边也有一个重启的按钮:
重启FTP站点
这个重启点了是一点用都没有,不过溯源来看也可以理解,这毕竟是重启的站点,而不是服务。比较起来,果然还是Linux比较可爱。
转载请注明出处来自https://www.capjsj.cn/iis_ftp_pasv.html