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 可以解决此问题
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) 做ntp时间服务器Linux及Windows做客户端的配置方法
- LinuxMint(Ubuntu ver) Iptables How To
- Ubuntu Server 12.04 配置防火墙iptables
- Ubuntu下使用UFW配置防火墙(简化iptables的操作)
- Ubuntu 14.04 配置iptables防火墙
- 【linux】Ubuntu上的防火墙iptables的基本配置与使用
- Ubuntu使用iptables配置防火墙提示:unrecognized service(Ubuntu配置iptables防火墙)
- 阿里云 Ubuntu 16 配置iptables防火墙
- 在Ubuntu Server是配置iptables防火墙
- Ubuntu的防火墙配置-ufw-iptables
- Ubuntu 14.04 配置iptables防火墙
- Ubuntu 14.04 配置iptables防火墙
- 阿里云linux,ubuntu16.04,lnmp,ftp,防火墙,nginx下thinkphp5的配置
- Ubuntu 14.04 配置iptables防火墙
- Ubuntu的防火墙配置-ufw-iptables
- Ubuntu的防火墙配置-ufw-iptables
- Ubuntu的防火墙配置-ufw-iptables(端口的开关)
- Ubuntu 14.04 配置iptables防火墙
- Ubuntu的防火墙配置-ufw-iptables
- 防火墙中配置FTP