iptables 输入、输出、转发

iptables 输入、输出、转发

好的,我昨天开始深入研究网络,刚刚设置了我的 ubuntu 服务器,所以我完全是个新手。

我想问一下 iptables 中的输入/输出/转发链是什么?假设我想打开端口 22 进行 ssh 访问,我需要使用这三个链吗?还是只需要其中两个?

iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 22 -j ACCEPT
iptables -A FORWARD -p tcp --dport 22 -j ACCEPT

谢谢!

答案1

输入:数据包进来网络和你的服务器。
输出:数据包来源你的服务器网络。FORWARD
:如果/当您的服务器充当不同网络之间的路由器时,由您的服务器转发的数据包。

为了允许 SSH 访问你的服务器,你必须接受 INPUT 链中的流量。

答案2

正如正确解释的那样:

INPUT :传入数据包,即以主机为目标 IP 的数据包

OUTPUT :传出的数据包,即以主机为源 IP 的数据包

FORWARD :源 IP 和目标 IP 都不是主机 IP 的数据包

顺便说一句,谈论主机的 IP 是一种语言滥用。实际上,IP 属于网络接口,而不是主机。事实上,许多主机有多个网络接口(例如 wifi 无线电、以太网端口),每个接口都有自己的 IP。

然而,有人错误地认为,要允许 ssh,您只需添加一条允许传入 ssh 数据包的规则。这是不正确的,您自己很容易就能看到:您将允许 ssh 数据包,但防火墙将丢弃(或拒绝 - 取决于您的默认设置)您为响应该 ssh 连接而发回的任何内容。

诀窍是允许传入的 ssh 连接和通信,并允许传出的 ssh 通信(但如果您不希望主机建立传出的 ssh 连接,则不允许连接)。

实际上,您可以在 iptables 中按以下方式设置:

iptables -A INPUT -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT

iptables -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

(默认行为是删除或拒绝)

请注意,在许多客户端上,您实际上想要相反的设置:允许newestablishedOUTPUT 上(以允许您自己连接到外部世界),并且established仅在 INPUT 上允许(以保护自己免受不必要的连接尝试)。

附言:我在这里扮演死灵法师,但谷歌重定向到这个(部分)不正确的接受答案,所以我认为值得纠正它。

答案3

您只需要第一条规则。

  • 输入:过滤发往你的服务器的数据包
  • 输出:过滤来自你的服务器的数据包
  • FORWARD:过滤数据包到其他网卡可访问的服务器

相关内容