V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
mingtdlb
V2EX  ›  问与答

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

  •  
  •   mingtdlb · 290 天前 · 1022 次点击
    这是一个创建于 290 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    第 1 条附言  ·  289 天前

    感谢各位大佬!!

    13 条回复    2023-07-14 15:46:26 +08:00
    chuckzhou
        1
    chuckzhou  
       290 天前
    要过。本机通讯使用的是虚拟网卡 `lo`
    Worldispow
        2
    Worldispow  
       290 天前 via Android
    走 socket 的应该不用,不知道这个算不算通信。。
    chesha1
        3
    chesha1  
       290 天前   ❤️ 1
    不一定对的答案:

    如果你用的是 Berkeley socket ,本机通信和跨机通信是一样的,都要完整的走网络协议,需要经过防火墙,只是走本机会去虚拟的 Loopback ,在内核态的操作也比跨级通信简单一点
    如果是 Unix domain socket ,不需要走任何网络协议,不走防火墙
    zzboat0422
        4
    zzboat0422  
       290 天前   ❤️ 1
    如果是 TCP/IP 的包,还是要经过 kernel 的三表五链的,所以会被防火墙影响到。
    Danswerme
        5
    Danswerme  
       290 天前
    @chesha1 请教一下 mysql 的 socket 例如 /var/run/mysqld/mysqld.sock 是属于 Unix domain socket 吗? Berkeley socket 的应用场景有哪些呢?
    chesha1
        6
    chesha1  
       290 天前
    @Danswerme mysql 这个我不太清楚,不好意思
    Berkeley socket 就是我们最常用的那个网络 socket 啊,最常见应用场景就是做 tcp 通信
    Danswerme
        7
    Danswerme  
       290 天前
    @chesha1 谢谢,找了一下资料 Unix socket 主要用于本机不同进程之间的通信,MySQL 的 socket 应该也是这种类型;是我混淆了,我一直以为通常使用的网络通讯 Socket 是 Unix Socket 。
    mingtdlb
        8
    mingtdlb  
    OP
       290 天前
    @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
        9
    chuckzhou  
       290 天前   ❤️ 1
    @mingtdlb 你看一下完整的 iptables INPUT ,是不是前面已经被允许了。
    julyclyde
        10
    julyclyde  
       290 天前
    这种问法体现了一种不正确的思维方式,就是“特例”
    不过在这个问题上其实特例是由防火墙上的一条规则来实现的,而不是防火墙本身无视了本地通信
    mingtdlb
        11
    mingtdlb  
    OP
       289 天前
    @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
        12
    chuckzhou  
       289 天前
    @mingtdlb
    8 480 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0

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

    你把你的规则放到最前面,而不是最后面。
    mingtdlb
        13
    mingtdlb  
    OP
       288 天前
    @chuckzhou 嗯 是的,感谢!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3007 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 13:54 · PVG 21:54 · LAX 06:54 · JFK 09:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.