问题:情况是这样的,本人日常用的fedora 13(实体机)开启了vsftpd和sshd服务,主要浏览网页。vsftpd为主动模式。今天对vsftpd进行了设置,见下:
[root@fedora13 ~]# iptables -L -n
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 这个地方是执行iptables -I INPUT 1 -i lo -p all-j ACCEPT的结果,别以为是对所有访问放行
LOG all -- 0.0.0.0/0 0.0.0.0/0 state INVALID LOG flags 6 level 4 prefix `DROP INVALID'
DROP all -- 0.0.0.0/0 0.0.0.0/0 state INVALID
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 state NEW
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:21
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:20
Chain FORWARD (policy DROP)
target prot opt source destination
Chain OUTPUT (policy DROP)
target prot opt source destination
LOG all -- 0.0.0.0/0 0.0.0.0/0 state INVALID LOG flags 6 level 4 prefix `DROP INVALID'
DROP all -- 0.0.0.0/0 0.0.0.0/0 state INVALID
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 state NEW
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 state NEW
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:443 state NEW
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:53 state NEW
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:21
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:20
但问题是,我在同局域网内的另一台机器上用ftp 连接时,总是提示与远程主机断开连接。
回答:其实,出现这样的问题,并不是防火墙的配置出了什么问题。如果非要说防火墙有什么问题,也只能说,在OUTPUT链,因为有了“ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED”这行配置,所以“ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:21”这行和ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:20这行都是可以删掉的。当然这不能算是错,只能说不够严谨和完美。
这是防火墙配置上的问题。
客户端不能访问vsftpd服务问题到底出在哪里呢?下面揭晓——
客户端要顺利访问vsftpd服务,还应加载三个模块,指令如下:
modprobe ip _conntrack
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
这三个模块的作用分别是:
ip_conntrack模块能够使防火墙具有连接跟踪能力。(通过输入 "cat /proc/net/ip_conntrack" 可以查看您的机器参与的活动网络连接。)加载这个模块后,基本上所有有状态的返回包都能识别,例:telnet,http,QQ,mail,ping,dns等。
实际上,加载了ip_conntrack模块,ftp已经能够登陆,并能使用象pwd,cd等命令,但当使用ls命令显示文件内容时,就会timeout。原因在于显示文件列表的包防火墙无法识别,就会进入默认策略----禁止,此时就需要加载ip_conntrack_ftp模块。ip_conntrack_ftp模块使防火墙能够识别FTP某类特殊的返回包。
如果防火墙上对所有出去的返回包作了伪装,就需要加载ip_nat_ftp模块。ip_nat_ftp模块在出去的包作了伪装以后,必须加载,否则防火墙无法知道返回的包该转发到哪里。