ftp扫描无法连接网络
昨晚十一点,描无我盯着终端里那行“ftp: connect: Connection refused”发呆。法连这已经是接网第三次尝试了——目标IP是公司新部署的NAS,按理说FTP端口21应该开着。描无可偏偏就是法连连不上,连ping都通了,接网防火墙规则也查过,描无愣是法连找不到原因。
这种问题最磨人。接网网络通,描无端口不通,法连你甚至不知道是接网该怪服务器配置,还是描无怪中间某台交换机偷偷做了ACL。我先把FTP客户端换成被动模式,法连没用。接网又试了主动模式,还是报错。最后干脆用telnet直连21端口,结果对面直接关闭了连接——连FTP的欢迎横幅都不给。
后来我换了思路,用nmap扫了一下,发现21端口确实开着,但状态是“filtered”。这就蹊跷了,filtered意味着防火墙或IDS在干扰,而不是服务本身没启动。你看,问题往往不在你直接看到的那一层。我顺手扫了其他端口,发现22端口是open的,SSH能连。那就好办了,直接SFTP走起,文件传输照样完成。
但这事儿没完。第二天白天我问了运维同事,才知道那台NAS的FTP服务被安全策略限制为只允许内网特定IP段访问,我的测试机IP不在白名单里。防火墙日志里清清楚楚记着“drop”动作。你说气不气?我昨晚折腾半天,其实只要看一眼防火墙规则就能解决。
这种教训我吃过不止一次。有一次客户报障说FTP连不上,我远程排查半天,最后发现是他们办公室的宽带路由器把FTP的21端口给封了——因为那个型号的路由器默认开启“FTP ALG”功能,但实现有bug,导致数据连接建立失败。你光看客户端报错根本看不出问题,非得抓包才能发现是路由器在中间捣鬼。
所以啊,ftp扫描连不上网络,别急着怀疑服务器。先按顺序排查:第一步,ping通不通,不通就是网络层问题;第二步,telnet 21端口,如果连接被重置或超时,大概率是防火墙拦了;第三步,查服务器本地防火墙和SELinux状态,很多Linux服务器默认开着firewalld,FTP服务忘了放行就悲剧了;第四步,如果服务器有多个网卡,确认FTP服务绑定的IP是否正确——我就见过绑定错网卡导致外部怎么都连不上的案例。
要是这些查完还不行,那就抓包吧。tcpdump -i eth0 port 21,看三次握手能不能完成。如果SYN发出去了,对面回了RST,那就是服务端主动拒绝;如果一直没回应,那可能被中间设备静默丢弃了。抓包不丢人,反而能让你少走很多弯路。
最后说个冷门的:有些FTP服务器配置了“banner”隐藏功能,连接后不立即发送220欢迎信息,要等客户端先发命令。但很多扫描工具默认等不到banner就超时了,于是误报“无法连接”。遇到这种,用lftp或者手动发送“USER anonymous”试试,可能就通了。
搞网络这行,最忌讳的就是对着一个报错死磕。换个工具,换种思路,往往柳暗花明。下次再碰到ftp扫描连不上,先冷静三秒,按上面说的顺序查一遍,八成能找到问题所在。