LinuxMint(Ubuntu ver)配置FTP 的 iptables 防火墙

sudo iptables -P INPUT DROP

sudo iptables -P OUTPUT ACCEPT

sudo iptables -P FORWARD DROP

sudo iptables -A OUTPUT -p tcp --sport 21 -j ACCEPT

sudo iptables -A INPUT -p tcp --dport 21 -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 20 -j ACCEPT

sudo iptables -A INPUT -p tcp --dport 20 -j ACCEPT

sudo iptables -A INPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT



参考:

http://lumingming1987.iteye.com/blog/1044358


这里先说说FTP传输的两种模式吧: 
在正常模式下﹕ 
1. FTP client 开启一个随机选择的高于 1024 的 port 呼叫 FTP server 的 port 21 
请求联机。当顺利完成 Three-Way Handshake 之后﹐联机就成功建立﹐但这仅是命 
令通道的建立。 
2. 当两端需要传送数据的时候﹐client 透过命令通道用一个 port 命令告诉 server 
﹐客户端可以用另一个高于 1024 的 port 做数据信道﹐并准备好 socket 资源。 
3. 然后 server 用 port 20 和刚才 client 所告知的 socket 建立数据联机。请注意 
﹕联机方向这是从 server 到 client 的﹐TCP 封包会有一个 SYN 旗标。 
4. 然后 client 会返回一个带 ACK 旗标的确认封包﹐并完成另一次的 Three-Way 
Handshake 手续。这时候﹐数据信道才能成功建立。 
5. 开始数据传送。 
在 passive 模式下﹕ 
1. FTP client 开启一个随机选择的高于 1024 的 port 呼叫 FTP server 的 port 21 
请求联机﹐并完成命令通道的建立。 
2. 当两端需要传送数据的时候﹐client 透过命令通道送一个 PASV 命令给 server﹐ 
要求进入 passive 传输模式。 
3. 然后 server 像上述的正常模式之第 2 步骤那样﹐挑一个高于 1024 的 port ﹐ 
并用命令通道告诉 client 关于 server 端用以做数据信道的 socket。 
4. 然后 client 用另一个高于 1024 的 port 呼叫刚才 server 告知的 scoekt 来建 
立数据信道。此时封包带 SYN 标签。 
5. server 确认后回应一个 ACK 封包。并完成所有交握手续﹑成功建立数据信道。 
6. 开始数据传送。 

iptables会自上而下的对比规则﹐找到符合的就不再往下找了。根据这样的特性﹐我们可以将 NAT 外部界面进入的某些联机﹐在那行 syn 过滤规则之前 ACCEPT 进来。 

iptables -A INPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT这条命令可以解决问题, 只开了20 21 是没用的,要是连被动的ftp服务器,边上21后,服务器端是随机端口和你的连接的,,ESTABLISHED,RELATED -j ACCEPT 可以解决此问题



你可能感兴趣的:(LinuxMint(Ubuntu ver)配置FTP 的 iptables 防火墙)