Linux 中本机和本机通信数据包会经过防火墙吗?

302 天前
 mingtdlb

小弟请教一个问题,Linux 中本机和本机通信数据包是不是不经过防火墙?

1037 次点击
所在节点    问与答
13 条回复
chuckzhou
302 天前
要过。本机通讯使用的是虚拟网卡 `lo`
Worldispow
302 天前
走 socket 的应该不用,不知道这个算不算通信。。
chesha1
302 天前
不一定对的答案:

如果你用的是 Berkeley socket ,本机通信和跨机通信是一样的,都要完整的走网络协议,需要经过防火墙,只是走本机会去虚拟的 Loopback ,在内核态的操作也比跨级通信简单一点
如果是 Unix domain socket ,不需要走任何网络协议,不走防火墙
zzboat0422
302 天前
如果是 TCP/IP 的包,还是要经过 kernel 的三表五链的,所以会被防火墙影响到。
Danswerme
302 天前
@chesha1 请教一下 mysql 的 socket 例如 /var/run/mysqld/mysqld.sock 是属于 Unix domain socket 吗? Berkeley socket 的应用场景有哪些呢?
chesha1
302 天前
@Danswerme mysql 这个我不太清楚,不好意思
Berkeley socket 就是我们最常用的那个网络 socket 啊,最常见应用场景就是做 tcp 通信
Danswerme
302 天前
@chesha1 谢谢,找了一下资料 Unix socket 主要用于本机不同进程之间的通信,MySQL 的 socket 应该也是这种类型;是我混淆了,我一直以为通常使用的网络通讯 Socket 是 Unix Socket 。
mingtdlb
302 天前
@chuckzhou @zzboat0422 过的话,受防火墙规则限制么?
我试了一下,好像不受限制
```
[root@t-38-191 ~]# ss -lnt | grep 8989
LISTEN 0 128 *:8989 *:*
[root@t-38-191 ~]#
[root@t-38-191 ~]# iptables -nvL | grep 8989
0 0 DROP tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:8989
[root@t-38-191 ~]#
[root@t-38-191 ~]# curl 10.17.38.191:8989
10.17.38.191
[root@t-38-191 ~]# curl 127.0.0.1:8989
10.17.38.191
[root@t-38-191 ~]#
```
chuckzhou
302 天前
@mingtdlb 你看一下完整的 iptables INPUT ,是不是前面已经被允许了。
julyclyde
302 天前
这种问法体现了一种不正确的思维方式,就是“特例”
不过在这个问题上其实特例是由防火墙上的一条规则来实现的,而不是防火墙本身无视了本地通信
mingtdlb
302 天前
@chuckzhou
```sh
[root@t-38-191 ~]# iptables -L INPUT -v -n
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
72245 62M ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
8 480 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
35724 62M INPUT_direct all -- * * 0.0.0.0/0 0.0.0.0/0
35724 62M INPUT_ZONES_SOURCE all -- * * 0.0.0.0/0 0.0.0.0/0
35724 62M INPUT_ZONES all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate INVALID
35701 62M REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
0 0 DROP tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:8989
[root@t-38-191 ~]#
[root@t-38-191 ~]# ss -lnt | grep 8989
LISTEN 0 128 *:8989 *:*
[root@t-38-191 ~]#
[root@t-38-191 ~]# curl localhost:8989
10.17.38.191
[root@t-38-191 ~]#
[root@t-38-191 ~]# curl 127.0.0.1:8989
10.17.38.191
[root@t-38-191 ~]#
[root@t-38-191 ~]# curl 10.17.38.191:8989
10.17.38.191
[root@t-38-191 ~]#
```
chuckzhou
301 天前
@mingtdlb
8 480 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0

这个 lo 就是我前面说的用于本机通讯的虚拟网卡。

你把你的规则放到最前面,而不是最后面。
mingtdlb
300 天前
@chuckzhou 嗯 是的,感谢!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/956089

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX