您的位置:首页 > 运维架构 > Linux

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

2014-10-08 13:34 483 查看
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 可以解决此问题
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: