FTP是File Transfer Protocol(文件传输协议),它有两种工作模式,分别是主动模式(post)和被动模式(passive)


PORT主动模式

FTP客户端连接到FTP服务器的21端口,发送用户名和密码登录,登录成功后要list列表或者读取数据时,客户端随机开放一个端口(1024以上),发送 PORT命令到FTP服务器,告诉服务器客户端采用主动模式并开放端口;FTP服务器收到PORT主动模式命令和端口号后,通过服务器的20端口和客户端开放的端口连接,发送数据。


PASV被动模式

FTP客户端连接到FTP服务器的21端口,发送用户名和密码登录,登录成功后要list列表或者读取数据时,发送PASV命令到FTP服务器, 服务器在本地随机开放一个端口(1024以上),然后把开放的端口告诉客户端, 客户端再连接到服务器开放的端口进行数据传输。


  1. 工作在主动模式下

[root@localhost mnt]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
ACCEPT     icmp --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited
[root@localhost mnt]# iptables -I OUTPUT -p tcp --sport 22 -j ACCEPT
[root@localhost mnt]# iptables -P OUTPUT DROP
[root@localhost ~]# iptables -I INPUT -p tcp --dport 21 -j ACCEPT
[root@localhost ~]# iptables -I OUTPUT -p tcp --sport 20:21 -j ACCEPT
[root@localhost ftp]# netstat -anpt | grep vsftp
tcp        0      0 0.0.0.0:21                  0.0.0.0:*                   LISTEN      1895/vsftpd
tcp        0      0 192.168.60.20:21            192.168.60.10:13153         ESTABLISHED 2066/vsftpd

wKioL1e1dISDLRYaAAHI1lMELPA662.png

2. 工作在被动模式下


[root@localhost ftp]# vi /etc/vsftpd/vsftpd.conf
pasv_enable=yes         //开放FTP PASV模式;
pasv_min_port=24500    //开放数据连接端口号24500—24600之间;
pasv_max_port=24600
[root@localhost ftp]# service vsftpd restart
关闭 vsftpd:                                              [确定]
为 vsftpd 启动 vsftpd:                                    [确定]
[root@localhost ftp]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
ACCEPT     icmp --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited
Chain OUTPUT (policy DROP)
target     prot opt source               destination
ACCEPT     tcp  --  anywhere             anywhere            tcp spt:ssh
[root@localhost ftp]# iptables -I INPUT -p tcp --dport 20:21 -j ACCEPT
[root@localhost ftp]# iptables -I INPUT -p tcp --dport 24500:24600 -j ACCEPT
[root@localhost ftp]# iptables -I OUTPUT -p tcp --sport 21 -j ACCEPT
[root@localhost ftp]# iptables -I OUTPUT -p tcp --sport 24500:24600 -j ACCEPT
[root@localhost ftp]# netstat -anpt | grep vsftp
tcp        0      0 0.0.0.0:21                  0.0.0.0:*                   LISTEN      2543/vsftpd
tcp        0      0 192.168.60.20:24537         0.0.0.0:*                   LISTEN      2618/vsftpd
tcp        0  23400 192.168.60.20:24537         192.168.60.10:13417         ESTABLISHED 2620/vsftpd
tcp        0      0 192.168.60.20:21            192.168.60.10:13415         ESTABLISHED 2618/vsftpd

wKioL1e1dXyjRZQ4AAHUxRxyYC0096.png

注意:FTP的工作模式是基于客户端而定,网上有很多这种更改模式的客户端软件(我这里使用的是CuteFtp)