一般配置ftp服务器,下载apache-ftp默认就能内网链接,但如果需要外网链接,则需要修改模式,原本是主动模式,则需要修改为被动模式。
首先了解,FTP使用两个端口进行通信。一个作为控制端口(登陆用),一个作为数据传输端口。
主动模式:客户端请求21 20两个固定端口进行连接。所以如果要经过外网映射用主动模式通信的话除非把外网端口21映射为内网的21,外网的20映射为内网的20才行。
被动模式:客户端连接到服务器21端口后,服务器返回一个任意>1024的端口给客户端,客户端连接此数据端口。
配置环境参考
res\conf\ftpd-typical.xml文件修改
使用被动模式时,是由服务器端告诉客户端向哪个IP哪些端口发起连接。那么哪个IP,哪些端口?配置如下,其中“xxx.xxx.xxx.xxx”是此服务器的外网IP,“1034-1040”则是可供客户端连接的端口,注意防火墙要将这些端口放行。
<server xmlns="http://mina.apache.org/ftpserver/spring/v1"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://mina.apache.org/ftpserver/spring/v1 http://mina.apache.org/ftpserver/ftpserver-1.0.xsd
"
id="myServer">
<listeners>
<nio-listener name="default" port="21">
<ssl>
<keystore file="./res/ftpserver.jks" password="password" />
</ssl>
<data-connection idle-timeout="60">
<passive ports="1034-1040" external-address="xxx.xxx.xxx.xxx" />
</data-connection>
</nio-listener>
</listeners>
<file-user-manager file="./res/conf/users.properties" />
</server>
apache ftpserver外网访问配置 - shangyingbin - 博客园
修改完文件则需要查看防火墙等端口是否打开,如果是云服务器则查看安全策越。
1、主动FTP:
命令连接:客户端 >客户端的端口 -> 服务器的端口->服务器 ->服务器的端口 -> 客户端的端口 ->客户端
数据连接:客户端 >客户端的端口 <- 服务器
2、被动FTP:
命令连接:客户端 >客户端的端口 -> 服务器的端口 ->服务器->服务器的端口 -> 客户端的端口 ->
客户端-> 服务器的端口 ->服务器
数据连接:客户端 >客户端的端口 -> 服务器 ->服务器的端口<- 客户端
参考
什么是ftp主动模式和被动模式_bytxl的专栏-CSDN博客
java程序参考
Java中apache下面FtpClient主动模式和被动模式 - ngulc - 博客园
内网安全渗透