iptables 输入、输出、转发

bas*_*sh- 5 networking ubuntu iptables

好吧,我昨天开始深入研究网络,只是设置了我的 ubuntu 服务器,所以我是一个完整的菜鸟。

我想问一下iptables中的输入/输出/转发链是什么?假设我想打开端口 22 以进行 ssh 访问,我是否需要使用所有 3 个端口?或者只是其中两个之一?

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
Run Code Online (Sandbox Code Playgroud)

谢谢!

Mas*_*imo 6

INPUT:数据包来网络中去你的服务器。
OUTPUT:数据包始发你的服务器,并打算网络。
FORWARD:您的服务器转发的数据包,如果/当它充当不同网络之间的路由器时。

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


小智 6

正如正确解释的那样:

\n

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

\n

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

\n

FORWARD :源 ip 和目标 ip 都不是主机\xe2\x80\x99s IP 的数据包

\n

附带说明一下,谈论主机\xe2\x80\x99s IP 是一种语言滥用。实际上,IP 属于网络接口,而不是主机。事实上,许多主机都有多个网络接口(例如 WiFi 无线电、以太网端口),每个接口都有自己的 IP。

\n

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

\n

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

\n

实际上,您可以在 iptables 中这样设置:

\n
iptables -A INPUT -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT\n\niptables -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n

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

\n

PS:我在这里玩死灵法师,但谷歌重定向到这个(部分)错误接受的答案,所以我认为\xe2\x80\x99d值得纠正它。

\n