iptables配置FTP服务

来源:互联网 发布:java 并发控制 编辑:程序博客网 时间:2024/04/28 00:12

参考文章:

http://os.51cto.com/art/201108/285209.htm

http://www.ahlinux.com/server/ftp/16979.html

http://vbird.dic.ksu.edu.tw/linux_server/0410vsftpd.php


一、FTP的主动模式和被动模式

这部分可以参考《鸟哥的Linux私房菜-服务器篇》或者是网上其他人写的一些介绍,基本都介绍得很详细。


主动模式交互的过程如上图所示,

1、客户端会随机取一个大于 1024 以上的端口 (port AA) 来与 FTP 服务器端的 port 21 建立连接,这个过程需要正常建立TCP连接的三次握手。建立连接后客户端便可以透过这个连接来对 FTP 服务器下达命令。

2、通知 FTP 服务器端使用 active 且告知连接的端口号
FTP 服务器的 21 端口主要用在命令的下达,但是当牵涉到数据流时,就不是使用这个连接了。 客户端在需要数据的情况下,会告知服务器端要用什么方式来建立连接,如果是主动式 (active) 连接时, 客户端会先随机启用一个端口 (图 21.1-1 当中的 port BB) ,且透过命令通道告知 FTP 服务器这两个信息,并等待 FTP 服务器的连接;

3、FTP 服务器主动向客户端发起连接
FTP 服务器由命令通道了解客户端的需求后,会主动的由 20 这个端口向客户端的 port BB 发起连接, 这个连接当然也会经过TCP的三次握手。此时 FTP 的客户端与服务器端共会建立两条连接,分别用在命令的下达与数据的传递。 而预设 FTP 服务器端使用的主动连接端口就是 port 20。



被动模式的交互过程如上图所示:

1、用户与服务器建立命令信道:
同样的需要建立命令通道,透过三次握手就可以建立起这个通道了。

2、客户端发出 PASV 的连接要求:
当有使用数据信道的指令时,客户端可透过命令通道发出 PASV 的被动式连接要求 (Passive 的缩写), 并等待服务器的回应;

3、FTP 服务器启动数据端口,并通知客户端连接:
如果你的 FTP 服务器是能够处理被动式连接的,此时 FTP 服务器会先启动一个端口在监听。 这个端口号码可能是随机的,也可以自定义某一范围的埠口,端看你的 FTP 服务器软件而定。 然后你的 FTP 服务器会透过命令通道告知客户端该已经启动的端口 (图中的 port PASV), 并等待客户端的连接。

4、客户端随机取用大于 1024 的端口进行连接:
然后你的客户端会随机取用一个大于 1024 的端口号来对主机的 port PASV 进行连接。 如果一切都顺利的话,那么你的 FTP 数据就可以透过 port BB 及 port PASV 来传送了。


二、iptables的配置

使用的操作系统是:Red Hat Enterprise Linux Server release 6.2 (Santiago) 

FTP软件是vsftp

服务端:192.168.1.10

客户端:192.168.1.12

配置iptables的策略是在服务端进行配置,客户端默认没有启用iptables

1、主动模式下,配置策略

vi /etc/sysconfig/iptables

-A INPUT -s 192.168.1.12 -p tcp --dport 21 -j ACCEPT

-A INPUT -s 192.168.1.12 -p tcp --dport 20 -j ACCEPT


2、被动模式下,配置策略

被动模式下,客户端会随机起一个大于1024的端口去跟客户端的一个大于1024的端口建立数据通道的连接,根据这个原理我们可以这样配置iptables:


vi /etc/sysconfig/iptables

-A INPUT -s 192.168.1.12 -p tcp --dport 21 -j ACCEPT

-A INPUT -s 192.168.1.12 -p tcp --dport 1024: -j ACCEPT


#重启iptables服务

service iptables restart


但是这样存在严重安全问题,这样的策略相当于将服务端大于1024的端口都向客户端开放了。利用vsftp对端口的配置,我们可以这样解决这个问题。


#指定固定的端口范围来建立FTP被动式连接的数据通道,(亲测最小端口和最大端口可以一样,但是开放的端口范围太小的话,会影响同时使用FTP服务的人数)

vi /etc/vsftpd/vsftpd.conf

pasv_min_port=65400

pasv_max_port=65410


#重启vsftp服务

service vsftpd restart


#配置iptables

vi /etc/sysconfig/iptables

-A INPUT -s 192.168.1.12 -p tcp --dport 21 -j ACCEPT

-A INPUT -s 192.168.1.12 -p tcp --dport 65400:65410 -j ACCEPT


#重启iptables服务
service iptables restart

3、利用状态防火墙,配置主被动模式都能用的策略

在iptables上一共有四种状态,分别被称为NEW、ESTABLISHED、INVALID、RELATED,这四种状态对于TCP、UDP、ICMP三种协议均有效。像FTP这种需要用不同的端口建立两次连接的情况,特别适合用状态防火墙。

#在iptables加入ip_nat_ftp和ip_conntrack_ftp模块

vi /etc/sysconfig/iptables-config
IPTABLES_MODULES="ip_nat_ftp ip_conntrack_ftp"


#配置iptables的策略

vi /etc/sysconfig/iptables
-A INPUT -s 192.168.1.12 -p tcp --dport 21 -j ACCEPT
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT


#重启iptables服务
service iptables restart

因为我的iptables的OUTPUT链是默认ACCEPT,所以无需再对OUTPUT链最配置。



0 0