Chinaunix

标题: 请教关于访问两层防火墙后面的ftp服务器问题 [打印本页]

作者: xiao_root    时间: 2010-01-08 17:11
标题: 请教关于访问两层防火墙后面的ftp服务器问题
最近公司有比较特殊的需求,要向外网开放ftp服务,ftp服务器位于两层防火墙后面;这样操作是否可行?
    目前在外网防火墙上配置好端口转发到内网防火墙上,再从内网防火墙配置端口转发到ftp服务器上:ftp客户端<=>外网防火墙:21端口<=>内网防火墙的:21端口<=>ftp服务器的21端口;
    防火墙的配置应该没有问题,ftp服务器配置应该也正常,单独使用外网防火墙或者内网防火墙,主动模式、被动模式都正常;
    但从外网ftp进来,用户身份验证正常,但执行ls、put、get等命令时不行;
作者: ssffzz1    时间: 2010-01-08 17:13
改被动或主动模式试试??

2 墙都是啥型号。
作者: xiao_root    时间: 2010-01-08 17:16
通过外网ftp时,被动模式下:ls命令返回:
        227 Entering Passive Mode (内网防火墙IP,164,15.
            ftp: connect: No route to host
根据网上某位大大的说法,在ftp服务器端,配置pasv_address为外网防火墙IP时,返回:
        227 Entering Passive Mode (外网防火墙IP,144,236)
            阻塞在这里,没有下文了;


通过外网ftp时,主动模式下:ls命令返回:
       200 PORT command successful. Consider using PASV.
          阻塞在这里,没有下文了;
作者: ssffzz1    时间: 2010-01-08 17:20
没看明白你3楼如何搞的。
作者: xiao_root    时间: 2010-01-08 17:20
外网的墙型号,具体不是太清楚,只知道是思科的;
内网的墙,其实就是redhat9,做的简易小墙,ftp的nat补丁都打上了,确认没有问题;
内网的墙采用的iptables做端口转发,对外是全放开,对内做21端口的映射
单独使用外网墙或者内网墙,对同一台ftp服务器测试,都正常;
作者: ssffzz1    时间: 2010-01-08 17:22
哦。这样啊。给你个测试的方法。

你把内网的LINUX映射去掉。然后在LINUX上开FTP服务器,在外网做主动和被动模式分别测试是否正常。
作者: ssffzz1    时间: 2010-01-08 17:23
原帖由 ssffzz1 于 2010-1-8 17:22 发表
哦。这样啊。给你个测试的方法。

你把内网的LINUX映射去掉。然后在LINUX上开FTP服务器,在外网做主动和被动模式分别测试是否正常。


然后TCPDUMP抓一次正常的FTP包发上来。
作者: xiao_root    时间: 2010-01-08 17:23
我要做的目的是对外开放我的ftp服务器;
3楼所做的实验是,从外网进行访问内网的ftp服务器;
实际上访问的是外网防火墙的IP和端口;由外网防火墙通过端口转发给内网防火墙,内网防火墙在通过端口转发给真正的ftp服务器
作者: ssffzz1    时间: 2010-01-08 17:24
你的目的我知道。但是你如何配置的以及如何测试的我不知道。

你先按我的说法测试一下吧。
作者: xiao_root    时间: 2010-01-08 17:24
你把内网的LINUX映射去掉。然后在LINUX上开FTP服务器,在外网做主动和被动模式分别测试是否正常。

这种实验都没有问题,单台墙都正常;
作者: ssffzz1    时间: 2010-01-08 17:25
那好。帖LINUX配置给我。
作者: ssffzz1    时间: 2010-01-08 17:26
LINUX机器的。ifconfig -a ip route list iptables-save
作者: seven007    时间: 2010-01-08 17:28
还需要把20端口也做一些映射
作者: xiao_root    时间: 2010-01-08 17:28
从外网ftp时,在内网墙上抓的ls包: 非正常包
15:16:30.433820 0:24:14:30:28:ff 0:d0:68:5:db:31 ip 72: 外网客户端IP.32899 > 内网防火墙IP.8221: P [tcp sum ok] 35:41(6) ack 106 win 5840 <nop,nop,timestamp 72131182 372326882> (DF) (ttl 47, id 44958, len 5
                         4500 003a af9e 4000 2f06 4383 d38c 7612
                         0a00 04fe 8083 201d d827 4361 6862 1d76
                         8018 16d0 15d1 0000 0101 080a 044c a26e
                         1631 41e2 5041 5356 0d0a
15:16:30.434498 0:d0:68:5:db:31 0:24:14:30:28:ff ip 114: 内网防火墙IP.8221 > 外网客户端IP.32899: P [tcp sum ok] 106:154(4 ack 41 win 91 <nop,nop,timestamp 372332611 72131182> (DF) (ttl 63, id 3355, len 100)
                         4500 0064 0d1b 4000 3f06 d5dc 0a00 04fe
                         d38c 7612 201d 8083 6862 1d76 d827 4367
                         8018 005b 681e 0000 0101 080a 1631 5843
                         044c a26e 3232 3720 456e 7465 7269 6e67
                         2050 6173 7369 7665 204d 6f64 6520 2831
                         302c 302c 342c 3235 342c 3230 352c 3931
                         292e 0d0a
15:16:30.574781 0:24:14:30:28:ff 0:d0:68:5:db:31 ip 66: 外网客户端IP.32899 > 内网防火墙IP.8221: . [tcp sum ok] 41:41(0) ack 154 win 5840 <nop,nop,timestamp 72131197 372332611> (DF) (ttl 47, id 44959, len 52)
                         4500 0034 af9f 4000 2f06 4388 d38c 7612
                         0a00 04fe 8083 201d d827 4367 6862 1da6
                         8010 16d0 afda 0000 0101 080a 044c a27d
                         1631 5843
作者: ssffzz1    时间: 2010-01-08 17:34
外网执行LS等命令后的抓包呢???

你仔细看看我前面的帖。你把抓包的.CAP文件帖上来。要一次LINUX开FTP服务器的抓包。

你都搞的啥啊,把我绕晕了。
作者: xiao_root    时间: 2010-01-08 17:35
通过内网某台机器(处于内网防火墙和外网防火墙之间),直接外网外网防火墙的端口,正常的ls包:
也是在内网防火墙上抓的包
15:14:27.237750 0:15:58:8b:bc:30 0:d0:68:5:db:31 ip 72: 内网IP.46387 > 内网防火墙IP.8221: P [tcp sum ok] 35:41(6) ack 106 win 183 <nop,nop,timestamp 340097323 372203775> (DF) [tos 0x10]  (ttl 64, id 12758, len 5
                         4510 003a 31d6 4000 4006 eb93 0a00 0447
                         0a00 04fe b533 201d dc0b 0b9f f73f 32e9
                         8018 00b7 bc4e 0000 0101 080a 1445 792b
                         162f 60ff 5041 5356 0d0a
15:14:27.238444 0:d0:68:5:db:31 0:15:58:8b:bc:30 ip 115: 内网防火墙IP.8221 > 内网IP.46387: P [tcp sum ok] 106:155(49) ack 41 win 91 <nop,nop,timestamp 372209394 340097323> (DF) (ttl 63, id 2809, len 101)
                         4500 0065 0af9 4000 3f06 1356 0a00 04fe
                         0a00 0447 201d b533 f73f 32e9 dc0b 0ba5
                         8018 005b c2f0 0000 0101 080a 162f 76f2
                         1445 792b 3232 3720 456e 7465 7269 6e67
                         2050 6173 7369 7665 204d 6f64 6520 2831
                         302c 302c 342c 3235 342c 3130 392c 3232
                         3829 2e0d 0a
15:14:27.238597 0:15:58:8b:bc:30 0:d0:68:5:db:31 ip 66: 内网IP.46387 > 内网防火墙IP.8221: . [tcp sum ok] 41:41(0) ack 155 win 183 <nop,nop,timestamp 340097324 372209394> (DF) [tos 0x10]  (ttl 64, id 12759, len 52)
                         4510 0034 31d7 4000 4006 eb98 0a00 0447
                         0a00 04fe b533 201d dc0b 0ba5 f73f 331a
                         8010 00b7 56d3 0000 0101 080a 1445 792c
                         162f 76f2
15:14:27.239143 0:15:58:8b:bc:30 0:d0:68:5:db:31 ip 72: 内网IP.46387 > 内网防火墙IP.8221: P [tcp sum ok] 41:47(6) ack 155 win 183 <nop,nop,timestamp 340097324 372209394> (DF) [tos 0x10]  (ttl 64, id 12760, len 5
                         4510 003a 31d8 4000 4006 eb91 0a00 0447
                         0a00 04fe b533 201d dc0b 0ba5 f73f 331a
                         8018 00b7 aa1d 0000 0101 080a 1445 792c
                         162f 76f2 4c49 5354 0d0a
15:14:27.239821 0:d0:68:5:db:31 0:15:58:8b:bc:30 ip 105: 内网防火墙IP.8221 > 内网IP.46387: P [tcp sum ok] 155:194(39) ack 47 win 91 <nop,nop,timestamp 372209395 340097324> (DF) (ttl 63, id 2810, len 91)
                         4500 005b 0afa 4000 3f06 135f 0a00 04fe
                         0a00 0447 201d b533 f73f 331a dc0b 0bab
                         8018 005b 41db 0000 0101 080a 162f 76f3
                         1445 792c 3135 3020 4865 7265 2063 6f6d
                         6573 2074 6865 2064 6972 6563 746f 7279
                         206c 6973 7469 6e67 2e0d 0a
15:14:27.242867 0:d0:68:5:db:31 0:15:58:8b:bc:30 ip 90: 内网防火墙IP.8221 > 内网IP.46387: P [tcp sum ok] 194:218(24) ack 47 win 91 <nop,nop,timestamp 372209398 340097324> (DF) (ttl 63, id 2811, len 76)
                         4500 004c 0afb 4000 3f06 136d 0a00 04fe
                         0a00 0447 201d b533 f73f 3341 dc0b 0bab
                         8018 005b 9164 0000 0101 080a 162f 76f6
                         1445 792c 3232 3620 4469 7265 6374 6f72
                         7920 7365 6e64 204f 4b2e 0d0a
15:14:27.243006 0:15:58:8b:bc:30 0:d0:68:5:db:31 ip 66: 内网IP.46387 > 内网防火墙IP.8221: . [tcp sum ok] 47:47(0) ack 218 win 183 <nop,nop,timestamp 340097328 372209395> (DF) [tos 0x10]  (ttl 64, id 12761, len 52)
                         4510 0034 31d9 4000 4006 eb96 0a00 0447
                         0a00 04fe b533 201d dc0b 0bab f73f 3359
                         8010 00b7 5689 0000 0101 080a 1445 7930
                         162f 76f3
作者: jdknet    时间: 2010-01-08 17:36
最好能用wireshark之类的软件抓包……
老大亲自出马帮你指点了,bless
作者: xiao_root    时间: 2010-01-08 17:39
不好意思,这些包都是在内网的防火墙上抓的,前面的一些ftp等登录验证指令都正常,就没有贴出来,只贴了ls不正常的情况,需要从ftp开始的包嘛?
等下我看看在ftp服务器上能不能抓到包?是需要这个嘛?
作者: xiao_root    时间: 2010-01-08 17:41
新手,只会用tcpdump;非常感谢老大指点
作者: xiao_root    时间: 2010-01-08 17:48
我比较困惑的在于,经过两层防火墙之后,对外提供的http、ssh服务都正常;只有ftp不正常;
在被动模式下,外网ftp客户端建立数据连接时,尝试的是我内网防火墙IP;
主动模式下,没有任何数据应答;

还弱弱的问一下老大,我最好是在ftp服务器上抓包,还是内网防火墙抓包,更能发现问题?
作者: ssffzz1    时间: 2010-01-08 17:49
我都绕的不行了。
通过内网某台机器(处于内网防火墙和外网防火墙之间),直接外网外网防火墙的端口,

矛盾啊????
作者: xiao_root    时间: 2010-01-08 17:57
不好意思,老大,可能没有表达清楚:
我们公司的网络环境是
出口是一台思科的防火墙,接下来是办公网,办公网下面有一个redhat的防火墙,接的是数据子网;
ftp服务器是房子数据子网中的,因此要向对公网开放ftp服务,要经过两处防火墙(最外层的思科防火墙、内层的redhat防火墙)的端口转发;
第一次发的包是从外网某台机器上,直接ftp进来时,访问的是思科防火墙,被动模式下的ls指令;
第二次发的包是从办公网上某台机器,访问的是内层redhat防火墙开放的端口,正常情况下的ls指令包
作者: xiao_root    时间: 2010-01-08 18:00
目前转发的配置情况是,最外层思科防火墙开放的是8221端口,端口映射策略是转发到redhat防火墙的8221端口上,在redhat防火墙的配置策略是,8221转发到ftp服务器的21端口
作者: xiao_root    时间: 2010-01-08 18:01
我都绕的不行了。
通过内网某台机器(处于内网防火墙和外网防火墙之间),直接外网外网防火墙的端口,

矛盾啊????


不好意思,错字,直接外网外网防火墙,写错了,是直接访问内网防火墙开放的端口
作者: ssffzz1    时间: 2010-01-08 18:10
LINUX机器的:
ifconfig -a
lsmod
ip route list
iptables-save

的输出。好好看帖,已经问你要了2次了。
作者: jdknet    时间: 2010-01-08 18:12
关注,支持……学习
最好能简单的画个拓扑图出来……
作者: ssffzz1    时间: 2010-01-08 18:13
先下了。把上面我要的东西,还有外网防火墙的配置给我看看。OK。
作者: xiao_root    时间: 2010-01-08 18:16
ifconfig -a (eth0暂时没用)
eth0      Link encap:Ethernet  HWaddr 000:68:05B:2C  
          inet addr:192.168.1.1 Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:5489 errors:0 dropped:0 overruns:0 frame:0
          TX packets:10 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:252496 (246.5 Kb)  TX bytes:420 (420.0 b)
          Interrupt:11 Base address:0xd000 Memory:e0000000-e0000038

eth1      Link encap:Ethernet  HWaddr 000:68:05B:2D  
          inet addr:10.1.10.254  Bcast:10.1.10.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:20984573 errors:0 dropped:0 overruns:0 frame:0
          TX packets:18308475 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:4030241145 (3843.5 Mb)  TX bytes:2097648392 (2000.4 Mb)
          Interrupt:11 Base address:0xd040 Memory:e0001000-e0001038

eth2      Link encap:Ethernet  HWaddr 000:68:05B:2E  
          inet addr:10.2.10.254  Bcast:10.2.10.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:33560881 errors:0 dropped:0 overruns:0 frame:0
          TX packets:18752108 errors:0 dropped:0 overruns:1 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:1061311508 (1012.1 Mb)  TX bytes:3813103207 (3636.4 Mb)
          Interrupt:9 Base address:0xd080 Memory:e0002000-e0002038

eth3      Link encap:Ethernet  HWaddr 000:68:05B:2F  
          inet addr:10.3.10.254  Bcast:10.3.10.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:34665598 errors:0 dropped:0 overruns:0 frame:0
          TX packets:31114475 errors:0 dropped:0 overruns:1 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:2624653737 (2503.0 Mb)  TX bytes:3568428383 (3403.1 Mb)
          Interrupt:10 Base address:0xd0c0 Memory:e0003000-e0003038

eth4      Link encap:Ethernet  HWaddr 000:68:05B:30  
          inet addr:10.8.10.254  Bcast:10.8.10.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:3261151 errors:1 dropped:0 overruns:0 frame:1
          TX packets:1912621 errors:0 dropped:0 overruns:1 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:127367196 (121.4 Mb)  TX bytes:166691254 (158.9 Mb)
          Interrupt:10 Base address:0xd100 Memory:e0004000-e0004038

eth5      Link encap:Ethernet  HWaddr 00:D0:68:05:DB:31  
          inet addr:10.0.4.254  Bcast:10.0.4.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:65001639 errors:0 dropped:0 overruns:0 frame:0
          TX packets:77534995 errors:0 dropped:0 overruns:1 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:4196494714 (4002.0 Mb)  TX bytes:4027911350 (3841.3 Mb)
          Interrupt:9 Base address:0xd140 Memory:e0005000-e0005038

ipsec0    Link encap:Ethernet  HWaddr 00:D0:68:05:DB:31  
          inet addr:10.0.4.254  Mask:255.255.255.0
          UP RUNNING NOARP  MTU:1492  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:10
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

ipsec1    Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
          NOARP  MTU:0  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:10
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

ipsec2    Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
          NOARP  MTU:0  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:10
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

ipsec3    Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
          NOARP  MTU:0  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:10
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:650 errors:0 dropped:0 overruns:0 frame:0
          TX packets:650 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:34803 (33.9 Kb)  TX bytes:34803 (33.9 Kb)
作者: xiao_root    时间: 2010-01-08 18:17
lsmod指令:
ipsec                 265632   2
ipt_iprange             1048  10  (autoclean)
sch_htb                20064   6  (autoclean)
ipt_length               920   8  (autoclean)
ipt_multiport           1080  13  (autoclean)
ipt_LOG                 4416  23  (autoclean)
ipt_psd                43428   2  (autoclean)
softdog                 2908   1
essockopt               2636   0  (unused)
ipt_ipp2p               7448   0  (unused)
ip_nat_pptp             2996   0  (unused)
ip_nat_proto_gre        1956   0  (unused)
ip_conntrack_pptp       3928   1
ip_conntrack_proto_gre    4084   0  [ip_nat_pptp ip_conntrack_pptp]
e100                   47204   6
ipt_state                952 108  (autoclean)
作者: xiao_root    时间: 2010-01-08 18:18
ip route list指令:
192.168.1.0/24 dev eth0  scope link
10.0.4.0/24 dev eth5  scope link
10.0.4.0/24 dev ipsec0  proto kernel  scope link  src 10.0.4.254
10.1.10.0/24 dev eth1  scope link
10.3.10.0/24 dev eth3  scope link
10.8.10.0/24 dev eth4  scope link
10.2.10.0/24 dev eth2  scope link
169.254.0.0/16 dev eth5  scope link
127.0.0.0/8 dev lo  scope link
default via 10.0.4.1 dev eth5
作者: renwd    时间: 2010-01-09 12:42
我遇到 该情况,可以参考一下我的解决方法:http://blog.chinaunix.net/u/24215/showart.php?id=2065953
作者: tanxin8651    时间: 2010-01-09 13:52
方法一:
可以不用防火墙转发。

可使用ssh tunnels功能
1 .可以设定ftp server上使用被动模式,指端口范围例:2022-2026,ftp 监听:2021
2 在第一道防火墙做转发  1024后任意 转到第二道防火墙
3 在第二道防火墙端口转发到 ftp server上,即可。

方法二:
直接使用ssh tunnels
用sftp 上传下载文件~~  (linux 下很好用)

[ 本帖最后由 tanxin8651 于 2010-1-9 13:57 编辑 ]
作者: ssffzz1    时间: 2010-01-09 17:37
已经看完。

这种配置不出问题我都会感觉很奇怪的。
作者: xiao_root    时间: 2010-01-11 09:24
原帖由 ssffzz1 于 2010-1-9 17:37 发表
已经看完。

这种配置不出问题我都会感觉很奇怪的。


可以给出在那里出问题的建议嘛,单独这台linux的墙是能够正常做ftp端口转发
作者: ssffzz1    时间: 2010-01-11 09:25
1、你要从外网环境测试,别试图在内网下用外网的IP地址访问,这种测试方法一般不成功。
2、仔细看看你的IPTABLES加载的模块和配置。
作者: xiao_root    时间: 2010-01-11 09:31
原帖由 renwd 于 2010-1-9 12:42 发表
我遇到 该情况,可以参考一下我的解决方法:http://blog.chinaunix.net/u/24215/showart.php?id=2065953


这位大哥,你好。我尝试了使用你的方法,增加pasv_address的参数,通过外网ftp时,被动模式下不在出现连接内网墙的IP问题,但,ls还是依然没有数据出来,
直接阻塞在:227 Entering Passive Mode (ip:port)
作者: xiao_root    时间: 2010-01-11 09:46
原帖由 ssffzz1 于 2010-1-11 09:25 发表
1、你要从外网环境测试,别试图在内网下用外网的IP地址访问,这种测试方法一般不成功。
2、仔细看看你的IPTABLES加载的模块和配置。


没有理解问题1:我的整个测试环境是通过公网的一台linux服务器,直接访问外网防火墙的公网IP和端口,在被动模式下使用ls命令,会尝试连接内网防火墙的IP;这个问题在增加pasv_address参数后,解决了;但依然没有内容出来;
问题2:iptable加载的模块应该没有什么问题吧,可能有些模块已经编译到内核里了吧,iptables的配置,里面东西太多,我是经过剪切后的结果;
作者: xiao_root    时间: 2010-01-11 10:02
另外从内网墙上抓下的包来看,其他命令包都正常,被动模式下ls命令正常情况下,应该有7个包,而实际上在内网墙上只有三个包,测试现象上看应该是被外网墙过滤掉了。即使增加了pasv_address参数情况下,也只有3个包,是否还有端口?
可为什么会这样,不是很理解
作者: ssffzz1    时间: 2010-01-11 10:41
没有理解问题1:我的整个测试环境是通过公网的一台linux服务器,直接访问外网防火墙的公网IP和端口,在被动模式下使用ls命令,会尝试连接内网防火墙的IP;这个问题在增加pasv_address参数后,解决了;但依然没有内容出来;
###仔细看看你前面告诉我的信息,是这样吗?

问题2:iptable加载的模块应该没有什么问题吧,可能有些模块已经编译到内核里了吧,iptables的配置,里面东西太多,我是经过剪切后的结果;
###你都把你自认为不重要的都删掉了,然后再给我看有意义吗?

另外从内网墙上抓下的包来看,其他命令包都正常,被动模式下ls命令正常情况下,应该有7个包,而实际上在内网墙上只有三个包,测试现象上看应该是被外网墙过滤掉了。即使增加了pasv_address参数情况下,也只有3个包,是否还有端口?
可为什么会这样,不是很理解
###你再自己翻翻前面的帖子,你直说多少包多少包,我那里知道你这些包是干吗的啊,里面的内容是什么啊,是否是正确的,已经几次让你把抓包的.cap发上来了,你都发了吗?


1、你改帖的不贴,该说的不说。即使说了也前后矛盾,乱糟糟。
2、把你自己认为不重要的删掉,但是你认为不重要的,就对我们没意义了吗? 如果是这样的话,问题你自己早就解决了。
3、即使帖出来也改掉很多信息,有必要吗??? 你的那些内网IP有必要改掉吗??? 搞的我看起来乱糟糟的,都绕晕了。外网IP的话你改掉1位也就足够了啊。
4、没见过你这么墨迹的,就和求神一样的问你要点信息,我有必要这么贱吗? 既然来问,又不相信这里,那你来干吗啊?
5、你说的情况我以前做过,就在前天还专门给你的情况搭了个环境测试了一下,完全没有问题。无论被动还是主动模式都通过测试的。
6、先自己回去好好看看前面的帖子再说吧。

[ 本帖最后由 ssffzz1 于 2010-1-11 10:43 编辑 ]
作者: scorer1120    时间: 2010-01-11 16:09
原帖由 xiao_root 于 2010-1-8 17:48 发表
我比较困惑的在于,经过两层防火墙之后,对外提供的http、ssh服务都正常;只有ftp不正常;
在被动模式下,外网ftp客户端建立数据连接时,尝试的是我内网防火墙IP;
主动模式下,没有任何数据应答;

还弱弱 ...


我看你2墙的INPUT链规则没问题的
难道你2墙中有作OUTPUT链的限制了(估计是你的LINUX防火墙)?尝试下主动模式下,允许20端口出去。
作者: xiao_root    时间: 2010-01-11 16:11
对不起,第一次到网上问问题,主要还是自己思路还没完全理清楚,表达起来就有点乱。
非常感谢老大的指点。
我的思路和老大的思路可能不一致,我实验的重点还是在数据包上,而默认墙和配置都是正确的。
现在我的问题暂时使用变通的方法解决了,还需要进一步的对ftp的源码和内核中ftp_nat的源码去了解一下;
作者: xiao_root    时间: 2010-01-11 16:26
解决思路是:
通过从外网ftp客户端上进行抓包,重点对ls命令的包进行解析;同时在内网防火墙上和ftp服务器上抓包,对比在这个过程中数据包的异常;
在抓包的过程中发现:三处抓包地方都只有ls的“指令”传输的三个数据包,正常情况下,客户端应该再发送ls的“数据”传输请求,但没有;
通过对ftp服务器应答包的数据对比中发现,内网墙中数据包流经后,正常的打上ftp_nat的包内容,但外网的墙却没有,导致ftp客户端解析包出错;
考虑到是否和端口有关,后来试试在内网墙上转发21端口,欺骗一下外网墙,没想到竟然成功了,为什么成功,还是不解;
原来的数据走向是:外网ftp客户端=>外网墙的8221端口=>内网墙的8221端口=>ftp服务器的21端口
现在修改后的数据走向:外网ftp客户端=>外网墙的8221端口=>内网墙的21端口=>ftp服务器的21端口
作者: xiao_root    时间: 2010-01-11 16:31
弱弱的问一下,老大在做两台墙的实验中,转发的端口是21,还是其他的?

无法解释,其他没有任何改动和变化,仅仅只是在内网墙中,把原来转发的8221,现在直接改为21,就正常了;
这样也带来了一个新的问题,如果内网墙后面另外的机器想在开ftp服务,内网墙就没有端口可以做转发了。

希望老大能给点解释和建议,或者説,真是我的内网墙配置有问题?
作者: scorer1120    时间: 2010-01-11 16:58
我看你得先搞清楚端口转发和FTP通信端口和数据端口的概念
开始又不说怎么做的端口转发,用抓包把问题复杂化了。
作者: sunki    时间: 2010-01-11 17:25
一个是数据端口,一个是控制端口,控制端口一般为21,而数据端口不一定是20,这和FTP的应用模式有关,如果是主动模式,应该为20,如果为被动模式,由服务器端和客户端协商而定。


楼主看看开放那些协商的端口,是否允许那些协议端口通过。
作者: xiao_root    时间: 2010-01-11 17:33
原帖由 scorer1120 于 2010-1-11 16:58 发表
我看你得先搞清楚端口转发和FTP通信端口和数据端口的概念
开始又不说怎么做的端口转发,用抓包把问题复杂化了。


内网墙上的端口转发我采用的就是:iptables -t nat -I PREROUTING -m iprange --dst-range IP1-IP2 -p tcp --syn --dport 8221 -j DNAT --to-destination FTPIP:21
外网墙上是思科的配置,具体怎么写不知道,实际的工作模式就是把访问外网的8221端口数据转发给内网墙的8221端口,再由内网墙把数据转发给真正的ftp服务器的21端口;

FTP的通信端口和数据端口:对FTP还仅仅停留在使用上,深入的对东西不是太了解,只知道21和20,由于思科的墙不能随意动和配置,所以我更多的还只能依赖被动模式下来实现;

问题复杂化:还是没有经验导致,刚开始我把问题简单化了,认为是两台墙造成的结果,所以表达的不是很清楚,后来又没能理解老大的意思,又发了抓包的贴,把问题复杂化了。

是否ftp的端口转发,只能转发到21端口上,转发到其他端口会不行?
作者: xiao_root    时间: 2010-01-11 17:38
两台墙,从内到外都是全放开的, 不存在防火墙上做了限制,从外访问内,都是通过端口转发的;
ftp的也只是开了一个端口转发:
外网墙:访问外网墙的8221端口转发给内网墙的8221端口上;
内外墙:访问内网墙的8221端口转发给ftp服务器的21端口;

这里只是把内网墙的8221端口改成21端口,即
外网墙:访问外网墙的8221端口转发给内网墙的21端口上;
内外墙:访问内网墙的21端口转发给ftp服务器的21端口;
就正常了。

我现在还是不明白的是,内外墙上的端口一定只能是21?还是我的墙配置出了问题?
作者: ssffzz1    时间: 2010-01-11 17:40
默认墙和配置都是正确的

既然你敢下这个结论,那就啥都无话可说了。一切都是正确的话,还是不能够访问,那只能说是天意。
作者: r2007    时间: 2010-01-11 22:27
原帖由 xiao_root 于 2010-1-11 17:38 发表
两台墙,从内到外都是全放开的, 不存在防火墙上做了限制,从外访问内,都是通过端口转发的;
ftp的也只是开了一个端口转发:
外网墙:访问外网墙的8221端口转发给内网墙的8221端口上;
内外墙:访问内网墙的 ...

STFW
http://www.wangchao.net.cn/bbsdetail_1450737.html
供参考
================================================
使用NAT时解决FTP用非标准端口的办法
  当对方 FTP Server 用非标准端口时会出现问题:
  可以 Ping 通,也可以登录,但会出现如下错误:invalid port command 。
  这是由于 发送 ftp port 命令的 IP 包的负载(payload)里面是包含了源ip 地址的,对于标准端口(21)的 ftp应用,Cisco 地址转换(NAT)能自动将嵌入在ip包负载里面的 源地址也作转换,ftp 应用可以正常进行。
  但是,如果是非标准端口的 ftp 应用,如果没有其他特别的设置,Cisco路由器不能辨别这是 Ftp 的应用,因而不对 负载里面的IP 地址作转换,因此出现上述的错误。
  Cisco 路由器针对这种情况有个解决的方法。就是显式告诉路由器,那些端口是 ftp 的端口:
  router(config)#ip nat service list 1 ftp tcp port 20010(非标准端口)
  router(config)#ip nat service list 1 ftp tcp port 21 (标准端口)
  router(config)#access-list 1 permit host 201.1.1.10 (对方Ftp Server 地址)
作者: xiao_root    时间: 2010-01-12 10:51
 Cisco 路由器针对这种情况有个解决的方法。就是显式告诉路由器,那些端口是 ftp 的端口:
  router(config)#ip nat service list 1 ftp tcp port 20010(非标准端口)
  router(config)#ip nat service list 1 ftp tcp port 21 (标准端口)
  router(config)#access-list 1 permit host 201.1.1.10 (对方Ftp Server 地址)

我们的思科防火墙是5540型号的,刚刚把你的帖子转发给我们的网管,他竟然説不支持ip nat命令,超郁闷;
没有玩过cisco的墙,俺也不懂。r2007大哥,能不能针对5540的型号,给个命令,谢谢了。
作者: ssffzz1    时间: 2010-01-12 11:18
Cisco 路由器针对这种情况有个解决的方法。

看好了,R没说是防火墙。
作者: r2007    时间: 2010-01-12 11:48
这有一文章,供参考。墙貌似不支持这个命令。

ftp.pdf

21.97 KB, 下载次数: 28


作者: fangtong2008    时间: 2010-01-12 23:16
为什么不放在第一层防火墙的后面,当成一个DMZ来处理
作者: rainbow    时间: 2010-01-13 09:12
ftp由于涉及命令通道和数据通道,同时又涉及被动模式和主动模式,所以有些复杂。 针对楼主的情况, 我个人建议服务器采用被动模式, 同时在防火墙上把被动模式的端口打开就可以了。

至于PASS_ADDRESS,一般是用在集群环境中的,单机环境应该不需要的。
作者: sleepcats    时间: 2010-01-13 10:20
1、服务器采用被动模式,
2、指定数据通信端口,
3、在防火墙上给端口加访问权限。
作者: dayuan555    时间: 2010-01-13 12:56
我试过这个,我也碰到了类似的问题,我的ftp服务器是部署在公司内网的suse10,我在家里通过公网ftp过来的时候是没有问题的,通过pasv on的话是没有问题的,但是执行quote pasv 后就 不能访问了,服务器直接断掉了和客户端的链接,但是客户端却没什么反应。本来也应该没什么关系,但是有个客户是SIO的服务器,要执行pasv模式好像一定要用命令quote pasv.气死我了
作者: xiao_root    时间: 2010-01-13 13:10
非常感谢大家对小弟问题的热心,经过这么多天的折腾,终于搞明白了。
是我把问题复杂化了,我这个问题实际上就是典型的非标准端口的ftp的应用,一开始被两层防火墙误导了。
作者: dayuan555    时间: 2010-01-13 13:13
详细点啊,我这边还没解决呢,指望着你呢
作者: xiao_root    时间: 2010-01-13 13:23
基本思路:
由于小弟的ftp服务器是对方开放的,无法知道客户端的环境,因此只能采用被动模式
为了支持被动模式下非标准端口的ftp应用,ftp服务器做如下设置:
增加对pasv_ip和pasv_port的参数设置(在linux下的vsftp即增加pasv_min_port、pasv_max_port、pasv_address);pasv_ip必需设置为公网的IP,pasv_port端口范围我这里设置的为:60000~60009;
两台防火墙上其他所有设置不变,只要新增pasv_port端口范围的地址转发(或映射)功能即可;
映射:
  外网防火墙的8221端口=>内网防火墙的8221端口=>ftp服务器的21端口
  外网防火墙的60000端口=>内网防火墙的60000端口=>ftp服务器的60000端口
  外网防火墙的60001端口=>内网防火墙的60001端口=>ftp服务器的60001端口
  外网防火墙的60002端口=>内网防火墙的60002端口=>ftp服务器的60002端口
  外网防火墙的60003端口=>内网防火墙的60003端口=>ftp服务器的60003端口
  外网防火墙的60004端口=>内网防火墙的60004端口=>ftp服务器的60004端口
  外网防火墙的60005端口=>内网防火墙的60005端口=>ftp服务器的60005端口
  外网防火墙的60006端口=>内网防火墙的60006端口=>ftp服务器的60006端口
  外网防火墙的60007端口=>内网防火墙的60007端口=>ftp服务器的60007端口
  外网防火墙的60008端口=>内网防火墙的60008端口=>ftp服务器的60008端口
  外网防火墙的60009端口=>内网防火墙的60009端口=>ftp服务器的60009端口
作者: xiao_root    时间: 2010-01-13 13:29
发点ftp的基本资料,希望对小弟和其他初学者有用

    FTP是仅基于TCP的服务,不支持UDP。 与众不同的是FTP使用2个端口,一个数据端口和一个命令端口(也可叫做控制端口)。通常来说这两个端口是21-命令端口和20-数据端口。但当我们发现根据(FTP工作)方式的不同数据端口并不总是20时,混乱产生了。
    在主动模式下,FTP客户端随机开启一个大于1024的端口N向服务器的21号端口发起连接,然后开放N+1号端口进行监听,并向服务器发出PORT N+1命令。服务器接收到命令后,会用其本地的FTP数据端口(通常是20)来连接客户端指定的端口N+1,进行数据传输。
    在被动模式下,FTP库户端随机开启一个大于1024的端口N向服务器的21号端口发起连接,同时会开启N+1号端口。然后向服务器发送PASV命令,通知服务器自己处于被动模式。服务器收到命令后,会开放一个大于1024的端口P进行监听,然后用PORT P命令通知客户端,自己的数据端口是P。客户端收到命令后,会通过N+1号端口连接服务器的端口P,然后在两个端口之间进行数据传输。
    主动FTP:
       命令连接:客户端 >1023端口 -> 服务器 21端口
       数据连接:客户端 >1023端口 <- 服务器 20端口
    被动FTP:
       命令连接:客户端 >1023端口 -> 服务器 21端口
       数据连接:客户端 >1023端口 -> 服务器 >1023端口
    下面是主动与被动FTP优缺点:
    主动FTP对FTP服务器的管理有利,但对客户端的管理不利。因为FTP服务器企图与客户端的高位随机端口建立连接,而这个端口很有可能被客户端的防火墙阻塞掉。
    被动FTP对FTP客户端的管理有利,但对服务器端的管理不利。因为客户端要与服务器端建立两个连接,其中一个连到一个高位随机端口,而这个端口很有可能被服务器端的防火墙阻塞掉。
    幸运的是,有折衷的办法。既然FTP服务器的管理员需要他们的服务器有最多的客户连接,那么必须得支持被动FTP。我们可以通过为FTP服务器指定一个有限的端口范围来减小服务器高位端口的暴露。这样,不在这个范围的任何端口会被服务器的防火墙阻塞。虽然这没有消除所有针对服务器的危险,但它大大减少了危险。
作者: xiao_root    时间: 2010-01-13 13:31
现在的防火墙中大多数都已增加了ip_nat_ftp及ip_conntrack_ftp的模块,用于对被动模式下ftp数据端口的映射,这里有个问题在于,只能针对的是ftp服务器的端口是标准的21;如果ftp侦听的端口不是标准端口21或者其他的非21端口的ftp应用都将无法正常工作;只能采用设置pasv_port和pasv_ip参数的形式;
作者: iwome    时间: 2010-01-13 13:47
这个问题是因为如果客户端使用PASV命令时,服务器端发送的地址是内部地址,不是实际的外网地址。当然这个可以通过客户端来设置,不使用PASV命令返回的IP地址,而直接使用控制连接的IP地址。
    另外端口的问题,使用PASV命令时,默认的FTP服务器会在1024-65535之间任意一个端口。这样你得防火墙就需要进行映射了,理论上来说你2层防火墙都需要做映射。不过我觉得做端口映射,不如做成IP映射的了。具体防火墙没研究过。需要你自己搞。
作者: xiao_root    时间: 2010-01-13 14:19
原帖由 iwome 于 2010-1-13 13:47 发表
这个问题是因为如果客户端使用PASV命令时,服务器端发送的地址是内部地址,不是实际的外网地址。当然这个可以通过客户端来设置,不使用PASV命令返回的IP地址,而直接使用控制连接的IP地址。
    另外端口的问题 ...


通过客户端来设置不使用pasv命令返回的IP地址,这个小弟不会用,还没思考过这个问题;
至于不用地址映射,公网地址的资源可是有限的,只能用做端口映射了。
作者: zhxd    时间: 2010-01-13 21:55
先在一层墙后面测试看有没有问题,如果没有问题,再在二层墙后面再看。
如果一层墙后面没问题,那就是二层墙有问题。
新出来的的墙加了很多参数,够你研究的。


先划分问题可能存在的范围,再在那个范围里逐个排查。

[ 本帖最后由 zhxd 于 2010-1-13 21:56 编辑 ]
作者: WTO432    时间: 2010-01-14 22:53
标题: 谢谢
来积分的
作者: xiao_root    时间: 2010-01-15 15:31
在防火墙上直接利用ip_nat_ftp的包模块实现对ftp非标准端口的应用:
在思科的防火墙上,可以利用命令:
Configure FTP protocol inspection on non standard TCP port
You can configure the FTP Protocol Inspection for non standard TCP ports with these configuration lines (replace XXXX with the new port number):
access-list ftp-list extended permit tcp any any eq XXXX
!
class-map ftp-class
  match access-list ftp-list
!
policy-map global_policy
  class ftp-class
   inspect ftp
参考:
http://www.cisco.com/en/US/produ ... 86a00807ee585.shtml

如果是利用iptables搭建的防火墙,需要借助ip_nat_ftp、ip_conntrack_ftp两个模块
Ip_conntrack_ftp模块是用来本机作为ftp服务器时起作用;
Ip_nat_ftp模块是通过本机做Nat的ftp应用;
注意:这两个一定要编译成模块,我就是卡在把这两个编译进内核了,怎么也找不到配置端口的地方;加载模块时采用命令:
Modprobe ip_conntrack_ftp ports=XXX
Modprobe ip_nat_ftp ports=XXX
XXX为端口
配置好对应的访问控制策略和端口映射,防火墙就能够成功支持非标准端口的ftp服务器了;
这里还需要注意的是:增加ESTABLISHED、RELATED选项包的ACCEPT,作用是允许连接的被动访问;
Iptables的策略如下:
如果是本机实现ftp:iptables –I INPUT –m state --state ESTABLISHED,RELATED –j ACCEPT
如果是做Nat:iptables –I FORWARD –m state --state ESTABLISHED,RELATED –j ACCEPT
作者: xiao_root    时间: 2010-01-15 15:33
结合前面的采用设置pasv_port和pasv_ip参数的形式办法,我的问题是全部解决;
都发出来,希望对有需要的朋友有帮助;

本帖到此了结,谢谢各位大哥的帮助。
作者: xiao_root    时间: 2010-01-15 15:34
原帖由 zhxd 于 2010-1-13 21:55 发表
先在一层墙后面测试看有没有问题,如果没有问题,再在二层墙后面再看。
如果一层墙后面没问题,那就是二层墙有问题。
新出来的的墙加了很多参数,够你研究的。


先划分问题可能存在的范围,再在那个范围里 ...


谢谢,我的问题已经解决了。
作者: WTO432    时间: 2010-01-16 21:44

作者: WTO432    时间: 2010-01-16 22:08
一来一回
作者: r2007    时间: 2010-01-16 22:57
原帖由 xiao_root 于 2010-1-15 15:31 发表
在防火墙上直接利用ip_nat_ftp的包模块实现对ftp非标准端口的应用:
在思科的防火墙上,可以利用命令:
Configure FTP protocol inspection on non standard TCP port
You can configure the FTP Protocol  ...


Linux的也可修改配置文件

/etc/modules.conf:

options ip_conntrack_ftp ports=21,xxx
options ip_nat_ftp ports=21,xxx

BTW: PIX/ASA的那个不错,收藏了。

[ 本帖最后由 r2007 于 2010-1-16 22:59 编辑 ]
作者: WTO432    时间: 2010-01-17 18:56





欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2