CentOS 6.0 安装 vsftp,就像过关打小怪兽

2011-11-04 阅读 36

第一关 iptables 中配置vsftp的访问

很好的文章 不做解释了 直接转载 源地址 <http: blog.csdn.net="" moreorless="" article="" details="" 5289147="">

FTP的主动模式(active mode)和被动模式(passive mode):

大多数的TCP服务是使用单个的连接,一般是客户向服务器的一个周知端口发起连接,然后使用这个连接进行通讯。但是,FTP协议却有所不同,它使用双向的多个连接 ,而且使用的端口很难预计。一般,FTP连接包括:
一个控制连接 (control connection)
这个连接用于传递客户端的命令和服务器端对命令的响应。它使用服务器的21端口,生存期是整个FTP会话时间。

几个数据连接 (data connection)
这些连接用于传输文件和其它数据,例如:目录列表等。这种连接在需要数据传输时建立,而一旦数据传输完毕就关闭,每次使用的端口也不一定相同。而且,数据连接既可能是客户端发起的,也可能是服务器端发起的。

在FTP协议中,控制连接使用周知端口21 ,因此使用ISA的IP PACKET FILTER就可以这种连接进行很好的安全保护。相反,数据传输连接的目的端口通常实现无法知道,因此处理这样的端口转发非常困难。F

TP协议使用一个标准的端口21作为ftp-data端口,但是这个端口只用于连接的源地址是服务器端的情况,在这个端口上根本就没有监听进程。

FTP的数据连接和控制连接的方向一般是相反的,也就是说,是服务器向客户端发起一个用于数据传输的连接。连接的端口是由服务器端和客户端协商确定的。FTP协议的这个特征对ISA 转发以及防火墙和NAT的配置增加了很多困难。

除此之外,还有另外一种FTP模式,叫做被动模式 (passive mod)。在这种模式下,数据连接是由客户程序发起的,和刚才讨论过的模式(我们可以叫做主动模式 )相反。

是否采取被动模式取决于客户程序,在ftp命令行中使用passive命令就可以关闭/打开被动模式。

iptables中配置vsftp

问题:配置iptables后, vsftpd不能用。常见现象是能够登录到服务器,LIST列目录失败(超时)。

分析:

主动模式 下,客户连接 TCP/21,服务器通过 TCP/20 连接客户的随机端口

————这种情况下,通过状态防火墙可以解决 iptables -A INPUT -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
被动模式 下,客户连接 TCP/21,客户再通过其他端口连接服务器的随机端口

卡住的原因,是因为服务器在被动模式下没有打开临时端口让 client 连过来,因此需要几个条件

1、client 没有防火墙时,用主动模式连接即可
2、server 没有防火墙时,用被动模式即可
3、双方都有防火墙时,vsftpd 设置被动模式高端口范围,server 打开那段范围,client 用被动模式连接即可
4、加载 ip_conntrack_ftp 模块,使 server 支持 connection tracking,支持临时打洞,client 用被动模式即可
5、server 使用 ip_conntrack_ftp、client 使用 ip_conntrack_ftp 和 ip_nat_ftp,支持临时打洞和临时 NAT 穿越打洞,双方使用主动或被动模式均可

  • “打洞”的配置说明:
  • 优点:不影响ftp配置;缺点:客户会感觉到连接有些延迟。原因参见ip_conntract的实现原理

在/etc/modprobe.conf中添加

<pre style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-style: initial; border-color: initial; word-wrap: break-word; white-space: normal; border-top-style: inset; border-right-style: inset; border-bottom-style: inset; border-left-style: inset; border-color: initial; overflow-x: auto; overflow-y: auto; width: 640px; text-align: left; ">    alias ip_conntrack ip_conntract_ftp ip_nat_ftp
```
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; ">
	在/etc/rc.local中添加</p>
<pre style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-style: initial; border-color: initial; word-wrap: break-word; white-space: normal; border-top-style: inset; border-right-style: inset; border-bottom-style: inset; border-left-style: inset; border-color: initial; overflow-x: auto; overflow-y: auto; width: 640px; text-align: left; ">    /sbin/modprobe ip_conntract /sbin/modprobe ip_conntrack_ftp /sbin/modprobe ip_nat_ftp
```
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; ">
	这个作用就是完成上面所说的“临时打洞”的方法。</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; ">
	&nbsp;</p>
  • 限制被动模式连接端口的配置说明
  • 优点:对连接速度没有影响。缺点:限制了被动模式下,客户端并发连接的数量。

在/etc/vsftpd/vsftpd.conf中添加

<pre style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-style: initial; border-color: initial; word-wrap: break-word; white-space: normal; border-top-style: inset; border-right-style: inset; border-bottom-style: inset; border-left-style: inset; border-color: initial; overflow-x: auto; overflow-y: auto; width: 640px; text-align: left; ">    pasv_min_port=2222 pasv_max_port=2225
```
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; ">
	iptables中开放这段端口</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 30px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; ">
	<span style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; background-color: rgb(192, 192, 192); ">-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; "><br>
	-A INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; "><br>
	-A INPUT -p tcp --dport 2222:2225 -j ACCEPT</span></p>
<p>
	第二关 限制用户目录</p>
<p>
	&nbsp;</p>
<p>
	设置如下参数:</p>
<p>
	chroot_local_user=NO</p>
<p>
	chroot_list_enable=YES</p>
<p>
	chroot_list_file=/etc/chroot_list</p>
<p>
	#其中chroot_list 包含所有要限制的用户。每行一个用户名</p>
<p>
	#重启ftp</p>
<p>
	第三关&nbsp;&nbsp;500 OOPS: cannot change directory</p>
<p>
	有人说了是selinux的问题</p>
<p>
	关了试试</p>
<p>
	setenforce 0</p>
<p>
	真的好了 不行还得开开 不安全啊</p>
<p>
	setenforce 1</p>
<p>
	有人说了这样能行</p>
<p>
	setsebool ftpd_disable_trans 1</p>
<p>
	事实证明 提示的是</p>
<p>
	Could not change active booleans: Invalid boolea</p>
<p>
	扯淡了吧</p>
<p>
	继续找 结果是这个可以</p>

vsftp centos iptables selinux chroot

/http:

更新于 2023年03月28日