免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5478 | 回复: 8

[网络子系统] nf_conntrack_expect 是否必须实现ftp期望模块,才可以传输ftp协议? [复制链接]

论坛徽章:
7
IT运维版块每日发帖之星
日期:2016-05-27 06:20:00IT运维版块每日发帖之星
日期:2016-06-09 06:20:00操作系统版块每日发帖之星
日期:2016-06-12 06:20:00程序设计版块每日发帖之星
日期:2016-06-12 06:20:00操作系统版块每日发帖之星
日期:2016-06-13 06:20:00IT运维版块每日发帖之星
日期:2016-06-17 06:20:002015-2016NBA季后赛纪念章
日期:2016-06-28 17:42:27
发表于 2017-11-04 22:30 |显示全部楼层
大家好, 最近看连接追踪遇到个问题, 就是看到nf_conntrack对于ftp协议处理的时候需要路由器上实现 nf_conntrack_ftp模块,服务器才可以发起到客户端的数据连接,
那么是不是我的路由器上没有nf_conntrack_ftp模块,就无法实现ftp 通信了? 如果可以是通过什么方式实现的呢? 既然可以不实现expect模块,那么为什么还需要expect模块呢?

网络拓扑是:

ftp client(192.168.5.10)  --> Router(192.168.5.1) wan---> ftp server(112.113.2.4)


论坛徽章:
7
IT运维版块每日发帖之星
日期:2016-05-27 06:20:00IT运维版块每日发帖之星
日期:2016-06-09 06:20:00操作系统版块每日发帖之星
日期:2016-06-12 06:20:00程序设计版块每日发帖之星
日期:2016-06-12 06:20:00操作系统版块每日发帖之星
日期:2016-06-13 06:20:00IT运维版块每日发帖之星
日期:2016-06-17 06:20:002015-2016NBA季后赛纪念章
日期:2016-06-28 17:42:27
发表于 2017-11-07 09:43 |显示全部楼层
没有人清楚的嘛?

最近做了点深入研究,发现nf_conntrack_ftp.c是默认编译进入内核的;
那么问题就是, NAT和连接追踪有关系嘛?

论坛徽章:
20
程序设计版块每日发帖之星
日期:2015-08-17 06:20:00程序设计版块每日发帖之星
日期:2016-07-16 06:20:00程序设计版块每日发帖之星
日期:2016-07-18 06:20:00每日论坛发贴之星
日期:2016-07-18 06:20:00黑曼巴
日期:2016-12-26 16:00:3215-16赛季CBA联赛之江苏
日期:2017-06-26 11:05:5615-16赛季CBA联赛之上海
日期:2017-07-21 18:12:5015-16赛季CBA联赛之青岛
日期:2017-09-04 17:32:0515-16赛季CBA联赛之吉林
日期:2018-03-26 10:02:16程序设计版块每日发帖之星
日期:2016-07-15 06:20:0015-16赛季CBA联赛之江苏
日期:2016-07-07 18:37:512015亚冠之萨济拖拉机
日期:2015-08-17 12:21:08
发表于 2017-11-07 11:22 |显示全部楼层
本帖最后由 nswcfd 于 2017-11-07 11:23 编辑

1. 看防火墙的规则怎么写,如果使用了类似-m state related相关的功能,就需要expect子系统,它实现了多条连接之间的关联。
如果iptables规则不包含related相关的逻辑,则可以忽略expect子系统。
不过这可能不是楼主想要的,因为引入expect的根本原因在于,ftp等应用协商出来的端口是不能提前得知的,没法固化在规则里。

2. 如果没有开启NAT,也就是说不做地址转换,不需要helper子系统完成ALG(应用层网关,这里指七层nat)的功能。
如果开启了NAT,仅仅依靠conntrack完成ip/port的转换(layer3/4)是不够的,像ftp/sip等应用,在layer7的内容里也包含了ip/port的信息,同样需要做“七层nat”,换成网关的ip。

简单的说,如果只有普通的iptables规则,在非nat的场景下,不加载ftp模块不影响ftp的使用。在nat的场景下,必须加载ftp模块完成额外的七层nat功能。

或者这么总结:
a. 不加载conntrack,ftp正常
b. 加载conntrack,无iptables规则,不加载ftp模块,ftp正常
c. 加载conntrack,仅允许new或related的连接,不加载ftp模块,ftp不正常
d. 加载conntrack,开启nat,不加载ftp模块,ftp不正常
  1. |#|CONNTRACKT|NAT|FTP_HELPER|RELATED_ONLY|FTP_OK|
  2. |a|        NO| NO|        NO|          NO|   YES|
  3. |b|       YES| NO|        NO|          NO|   YES|
  4. |c|       YES| NO|        NO|         YES|    NO|
  5. |d|       YES|YES|        NO|          NO|    NO|
复制代码


PS,有些协议,普通helper(expect only)和nat_helper(七层nat)是分成两个模块的。

论坛徽章:
7
IT运维版块每日发帖之星
日期:2016-05-27 06:20:00IT运维版块每日发帖之星
日期:2016-06-09 06:20:00操作系统版块每日发帖之星
日期:2016-06-12 06:20:00程序设计版块每日发帖之星
日期:2016-06-12 06:20:00操作系统版块每日发帖之星
日期:2016-06-13 06:20:00IT运维版块每日发帖之星
日期:2016-06-17 06:20:002015-2016NBA季后赛纪念章
日期:2016-06-28 17:42:27
发表于 2017-11-07 16:52 |显示全部楼层
回复 3# nswcfd

多谢回复
a. 不加载conntrack,ftp正常
b. 加载conntrack,无iptables规则,不加载ftp模块,ftp正常
c. 加载conntrack,仅允许new或related的连接,不加载ftp模块,ftp不正常
d. 加载conntrack,开启nat,不加载ftp模块,ftp不正常


关于b的结论我有疑问,为什么加载conntrack 没有iptables规则 无ftp helper模块,ftp可以正常工作呢?
有NAT的情况下,ftp怎么找到源主机的ip:port呢?

另外,我有点模糊的是,conntrack是实现NAT的基础吧, 那么是不是说,有NAT就必须得有conntrack ?
conntrack可以单独存在吗? 单独存在的意义是什么,除了netfilter中的 state模块, SNAT, DNAT, 还可以作什么?

论坛徽章:
7
IT运维版块每日发帖之星
日期:2016-05-27 06:20:00IT运维版块每日发帖之星
日期:2016-06-09 06:20:00操作系统版块每日发帖之星
日期:2016-06-12 06:20:00程序设计版块每日发帖之星
日期:2016-06-12 06:20:00操作系统版块每日发帖之星
日期:2016-06-13 06:20:00IT运维版块每日发帖之星
日期:2016-06-17 06:20:002015-2016NBA季后赛纪念章
日期:2016-06-28 17:42:27
发表于 2017-11-08 09:48 |显示全部楼层
最近的学习总结:

conntrack是 netfilter架构下的连接跟踪模块,是实现NAT的基础, 也是实现iptables 相关模块的基础,如state模块, SNAT, DNAT, CONNMARK等。
最近思考了很久,不知道是不是正确的,但是我认为应该是正确的:
路由器的作用就是实现的NAT的转换,目的就在于解决现网的IPv4地址不足的情况, 基于这种情况 NAT就是路由器的标志,而 conntrack又是NAT实现的基础,因此conntrack模块是比不可少的, 当然还有别的方式实现的conntrack,比如有的大牛提到的ALG 应用层网关实现(在应用层处理连接追踪), 换句话说, 其实是连接追踪是路由器实现NAT的基础。

这样说对吗?

论坛徽章:
20
程序设计版块每日发帖之星
日期:2015-08-17 06:20:00程序设计版块每日发帖之星
日期:2016-07-16 06:20:00程序设计版块每日发帖之星
日期:2016-07-18 06:20:00每日论坛发贴之星
日期:2016-07-18 06:20:00黑曼巴
日期:2016-12-26 16:00:3215-16赛季CBA联赛之江苏
日期:2017-06-26 11:05:5615-16赛季CBA联赛之上海
日期:2017-07-21 18:12:5015-16赛季CBA联赛之青岛
日期:2017-09-04 17:32:0515-16赛季CBA联赛之吉林
日期:2018-03-26 10:02:16程序设计版块每日发帖之星
日期:2016-07-15 06:20:0015-16赛季CBA联赛之江苏
日期:2016-07-07 18:37:512015亚冠之萨济拖拉机
日期:2015-08-17 12:21:08
发表于 2017-11-15 17:18 |显示全部楼层
是的,对于linux而言,conntrack是NAT的基础。

不过,不是所有的路由器都需要做NAT,比如一个公司内部两个部门之间的路由器,没有必要伪装地址。
NAT一般部署在公司出口面向Internet的网关上。

论坛徽章:
20
程序设计版块每日发帖之星
日期:2015-08-17 06:20:00程序设计版块每日发帖之星
日期:2016-07-16 06:20:00程序设计版块每日发帖之星
日期:2016-07-18 06:20:00每日论坛发贴之星
日期:2016-07-18 06:20:00黑曼巴
日期:2016-12-26 16:00:3215-16赛季CBA联赛之江苏
日期:2017-06-26 11:05:5615-16赛季CBA联赛之上海
日期:2017-07-21 18:12:5015-16赛季CBA联赛之青岛
日期:2017-09-04 17:32:0515-16赛季CBA联赛之吉林
日期:2018-03-26 10:02:16程序设计版块每日发帖之星
日期:2016-07-15 06:20:0015-16赛季CBA联赛之江苏
日期:2016-07-07 18:37:512015亚冠之萨济拖拉机
日期:2015-08-17 12:21:08
发表于 2017-11-15 17:21 |显示全部楼层
对于b,不加载ftp的结果就是conntrack识别不出数据连接和控制连接之间的关联性(无法related),但没有理由影响连通性(非NAT情况下)。

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:53:17
发表于 2017-11-15 19:59 |显示全部楼层
ftp协议比较特殊, 必须用expect来 识别connection,才能正确conntrack —— 才能nat。

论坛徽章:
0
发表于 2017-12-13 14:30 |显示全部楼层
必须明白,FTP有主动模式是被动模式,主动模式需要server连接到client,此时如果路由做了NAT就需要期望连接来放通这个wan端主动发起的连接,路由一般对wan端主动发起的连接是拒绝的,所以需要期待连接来放通。反之,如果用被动模式,数据和控制请求都由client端发起,那么期待模块就没什么用了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP