iptables中的OUTPUT和FORWARD链有什么区别?


22

CentOS的6.0

我正在研究iptables,并且对FORWARD和OUTPUT链之间的区别感到困惑。在我的培训文档中,它指出:

如果您要附加(-A)或从(-D)删除链,则需要将其应用于沿以下三个方向之一传播的网络数据:

  • 输入-根据此链中的规则检查所有传入数据包。
  • 输出-根据该链中的规则检查所有传出数据包。
  • 转发-根据此链中的规则检查所有发送到另一台计算机的数据包。

这使我感到困惑,因为在我看来,留给主机的数据包将传出。那么,是否存在一种情况,即数据包将发送到另一台计算机但不会“发送”?iptables如何区分两者?

Answers:


26

OUTPUT用于主机发出的数据包。它们的目的地通常是另一台主机,但可以通过环回接口成为同一主机,因此实际上并非所有通过OUTPUT的数据包都传出。

FORWARD用于既不由主机发出也不定向到主机的数据包。它们是主机仅在路由的数据包。

当您开始研究数据包处理和NAT时,整个过程就更加复杂了


有趣的是...因此,以我的理解为目的,可以说输出是用于“起源于”系统的数据包...而FORWARD则用于非源自系统或目的地为的数据包。它,而是“通过”系统?
Mike B

1
不完全是,“转发”的数据包也会通过网络接口“输出”。.就像数据包在“转发”之前是“输入”一样。.数据包进入目的地为外部系统的数据包进入“转发”链,iptables决定其可以转发,数据包进入“输出链”,iptables检查,查看其“确定”以输出,数据包离开..简单!
2013年

2
@Grizly没有,从内存(我承认写这个答案的时候我还没有具体测试),并根据图我链接到,一个数据包总是经过三个正好一个filter链(INPUTOUTPUTFORWARD)。(假设其他一些链没有删除过。)manglenat链不同,也许您在考虑该mangle链?
吉尔(Gilles)'所以

0

据我了解:

输入:dst IP在主机上,即使它具有多个端口和多个子网

输出:src IP来自主机,任一端口

转发:主机上的dst IP或主机上的src IP均不可用

在此处输入图片说明

例如,到路由器A

输入为:

192.168.10.1-> 192.168.10.199

192.168.10.1-> 192.168.2.1

输出是:

192.168.10.199-> xxxx

192.168.2.1-> xxxx

前进是:

192.168.10.1-> 192.168.2.199

192.168.10.1-> 192.168.8.1

192.168.10.1-> 192.168.8.199

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.