Linux使用vsftpd启动ftp服务,内网其他机器通过xshell连接目标机器的vsftpd服务,命令:ftp 192.168.1.222
提示:ftp: connect: No route to host
由于已经修改了vsftpd端口为14333,将14333加入防火墙白名单仍然无效,getenforce得到的结果是SELinux状态是disabled的,说明无法设置为Passive模式,需要修改/etc/selinux/config中的SELINUX配置:
然后需要重启系统才能生效。。。
重启完成后,通过setenforce 0命令启动Passive模式。然后尝试连接仍然不行,尝试将防火墙关闭service iptables stop,连接成功。说明是防火墙的问题,vim /etc/sysconfig/iptables-config
将IPTABLES_MODULES="ip_nat_ftp ip_conntrack_ftp"
或者直接加载模块:
modprobe ip_nat_ftp
modprobe ip_conntrack_ftp
其中在centos 7系统中使用 modprobe -l | grep ftp 命令不可以使用,改用lsmod|grep ftp。然后重启防火墙尝试连接,仍然不行。。。
实在没有办法,最后将同一局域网内的地址段都加白名单:
然后重启防火墙连接ftp:open 192.168.1.222 14333,输入用户名密码,尝试dir可以看到该用户下的目录。。
实践了一下,还有一种可能是vsftpd.conf配置了Passive模式的最大端口和最小端口范围,这个范围也需要加入防火墙白名单:
重启防火墙之后,使用java代码上传文件成功。
最终通过修改防火墙规则搞定,在/etc/sysconfig/iptables文件中,添加如下两条规则:
-I INPUT -p tcp -m tcp --dport 21 -j ACCEPT
-I INPUT -p tcp -m tcp --dport 20 -j ACCEPT
//其中可以指定固定源IP -s 10.50.0.6
// -I INPUT -s 10.50.0.6 -p tcp -m tcp --dport 21 -j ACCEPT
// -I INPUT -s 10.50.0.6 -p tcp -m tcp --dport 20 -j ACCEPT