Linux为FTP服务器添加iptables规则--案例分析
作者:飞走不可 发布时间:[ 2016/8/18 11:07:27 ] 推荐标签:操作系统 Linux
一、故障描述
由于开发提出需求,为他们搭建内部ftp服务器,搭建好后,提交给他们,测试可以正常使用。后来过了一段时间后,有无法登陆了。于是去ftp主机上检查问题,ftp的配置文件没有改动,端口监听也正常。telnet也可以通。但是用网页,或者winscp 访问是无法连接。后来谷歌后,发现ftp的iptables 规则比其它应用不太像,有点特别。需要特别的修改下防火墙。(询问后,得知之前其它运维同事加固过该机器的防火墙....)
二、解决方式
1.在原有的防火墙规则中加入以下规则。
-A INPUT -p tcp -s 192.168.30.0/24 -p tcp -m state NEW --dport 21 -j ACCEPT
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
2.加入规则,重启后,虽然能登陆了,但是使用ftp工具时一直报这个错误。无法列出目录。
图1.
图2.
3.后来在iptables 的配置文件中,加入一个模块后,可以了。可以使用以下命令去添加,生效。如下:
sed -i '$ a IPTABLES_MODULES="ip_conntrack_ftp"' /etc/sysconfig/iptables-config
之后重启iptables,即可将该ftp跟踪模块加载到内核中。ip_conntrack_ftp模块是专用于跟踪ftp连接的。
三、原因分析
1.涉及到了主动和被动模式
主动模式: client 打开一个随机端口 port1 去连接 server的 21 号端口,与server的默认21号端口建立连接后。这个时候,client会再打开一个随机端口 port 2等待服务器来连接。服务器收到用户端的命令后,使用20专用数据传输端口去连接client随机开放的port 2端口。
(注:如果客户端开了防火墙,可能会阻塞ftp 服务器20端口与port 2 之间的连接,这个时候,被动模式出现了。)
如下图:
注:图片来源于文末的参考资料
被动模式:client使用一个随机端口 去连接ftp server 的21 端口,并发出PASV的要求。 server 去回应 client,并告知clinet : 我已经将本机的 port 3 打开。你来连接吧。之后 client 会收到 server 发送的 服务器ip+port3的 数据包。 client 会在本机上打开一个随机的端口 port 4 ,用 port 4去连接服务器上的 port3 端口。这样client 和server 建立了数据传输的连接。
如下图:
注:图片来源于文末的参考资料
2. 期间我通过使用tcpdump 的分析,也更加的对以上的知识原理进行了进一步的实践和学习。
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11