解决Linux iptables防火墙和vsftpd的问题
创始人
2024-04-08 09:01:04
0

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

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

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数据库的数据恢复

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...