解决Linux iptables防火墙和vsftpd的问题

运维 系统运维
最近在研究Linux下Firewall的配置,发现配置好防火墙以后ftp就有问题了,一直都不能够用Filezilla 和 CuteFTP登录,在列出目录的时候一直会失败。

最近在研究Linux下Firewall的配置,发现配置好防火墙以后ftp就有问题了,一直都不能够用Filezilla 和 CuteFTP登录,在列出目录的时候一直会失败。但是在命令行下面如果先执行passive off,一切正常。

答案在CU上找到的,主要是要使用 ip_conntrack_ftp

linux.chinaunix.net/bbs/viewthread.php?tid=812400">http://linux.chinaunix.net/bbs/viewthread.php?tid=812400

原文:

使用 -P INPUT DROP 引起的网路存取正常,但是 ftp 连入却失败?

依据前面介绍方式,只有开放 ftp port 21 服务,其他都禁止的话,一般会配置使用:

iptables -P INPUT DROP

iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT

iptables -A INPUT -p tcp --dport 21 -j ACCEPT

iptables -P INPUT DROP

iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT

iptables -A INPUT -p tcp --dport 21 -j ACCEPT

这样的配置,确认 ftp 用户端是可以连到 ftp 主机并且看到欢迎登入画面,不过后续要浏览档案目录清单与档案抓取时却会发生错误...

ftp 协定本身于 data channnel 还可以区分使用 active mode 与 passive mode 这两种传输模式,而就以 passive mode 来说,***是协议让 ftp client 连结到 ftp server 本身指定于大于 1024 port 的连接埠传输资料。

这样配置在 ftp 传输使用 active 可能正常,但是使用 passive mode 却发生错误,其中原因就是因为该主机firewall 规则配置不允许让 ftp client 连结到 ftp server 指定的连结埠才引发这个问题。

要解决该问题方式,于 iptables 内个名称为 ip_conntrack_ftp 的 helper,可以针对连入与连外目的 port 为 21 的 ftp 协定命令沟通进行拦截,提供给 iptables 设定 firwewall 规则的配置使用。开放做法为:

modprobe ip_conntrack_ftp

iptables -P INPUT DROP

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -A INPUT -i lo -j ACCEPT

iptables -A INPUT -p tcp --dport 21 -j ACCEPT

modprobe ip_conntrack_ftp

iptables -P INPUT DROP

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -A INPUT -i lo -j ACCEPT

iptables -A INPUT -p tcp --dport 21 -j ACCEPT

其中 -m state 部分另外多了 RELATED 的项目,该项目也就是状态为主动建立的封包,不过是因为与现有 ftp 这类连线架构会引发另外才产生的主动建立的项目。

不过若是主机 ftp 服务不在 port 21 的话,请使用下列方式进行调整:

CODE:

modprobe ip_conntrack_ftp ports=21,30000

iptables -P INPUT DROP

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -A INPUT -i lo -j ACCEPT

iptables -A INPUT -p tcp --dport 21 -j ACCEPT

iptables -A INPUT -p tcp --dport 30000 -j ACCEPT

modprobe ip_conntrack_ftp ports=21,30000

iptables -P INPUT DROP

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -A INPUT -i lo -j ACCEPT

iptables -A INPUT -p tcp --dport 21 -j ACCEPT

iptables -A INPUT -p tcp --dport 30000 -j ACCEPT

也就是主机本身提供 ftp 服务分别在 port 21 与 30000 上,让 ip_conntrack_ftp 这个 ftp helper 能够正常提供 ftp 用户端使用 passive mode 存取而不会产生问题。

【编辑推荐】

  1. Linux中利用系统库文件来降低工作量
  2. 检测在Linux系统下U盘是否已连接的方法
  3. Linux EXT3下删除MySQL数据库的数据恢复
责任编辑:赵宁宁 来源: 赛迪网
相关推荐

2009-06-30 10:07:23

Linuxiptables防火墙

2011-03-15 16:35:27

2011-03-17 16:00:57

2011-03-15 17:18:45

2011-03-17 10:58:55

Linux防火墙Iptables入门

2011-03-15 15:47:26

LinuxIptables防火墙

2010-01-07 14:12:11

Linux防火墙

2018-10-09 09:00:02

2011-03-15 17:25:38

2011-03-15 09:10:42

Linux防火墙Iptables

2010-02-24 14:02:24

Fedora vsFT

2011-03-15 15:47:15

Iptables防火墙

2010-05-24 17:49:56

2015-08-04 13:50:35

Linux防火墙iptables

2011-03-15 17:12:11

2011-03-15 09:10:43

iptables防火墙

2011-03-15 17:38:24

2018-07-02 09:18:11

Linuxiptables防火墙

2011-03-16 12:46:29

CentOSiptables防火墙

2011-03-16 15:58:40

Iptables防火墙
点赞
收藏

51CTO技术栈公众号