AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1121244
Accepted
Jeremy Friesner
Jeremy Friesner
Asked: 2023-01-27 16:40:30 +0800 CST2023-01-27 16:40:30 +0800 CST 2023-01-27 16:40:30 +0800 CST

有没有办法通过 INADDR_ANY 排除网络接口的绑定?

  • 772

在网络编程中,通常将INADDR_ANY(or IN6ADDR_ANY) 作为第二个参数的一部分传递给bind(),告诉网络堆栈您希望套接字从机器恰好具有的任何网络接口接收连接/流量。许多程序都这样做,因为它通常是最有用的行为。另一个常见的选项是指定要绑定到的单个网络接口。

但是,我有一个用例,我希望我的 Linux 机器上的一个特定网络接口被“保留”,因为它不包含在绑定到INADDR_ANY. 特别是,我希望这个网络接口只能被明确绑定到它的 IP 地址的套接字使用(或者可能已经执行了一些其他明确的步骤来表明他们知道这个网络接口的特殊状态并希望使用无论如何)——如果您愿意的话,可以说是一种“套接字白名单”,以确保只有少数精心挑选的应用程序可以通过该网络接口发送/接收流量。(如果重要的话,这些应用程序可能是我编写并亲自控制的应用程序)

在 Linux 中是否有任何机制可以实现这一点?

我考虑过但并不完全满意的一些方法:

  1. 修改所有应用程序以显式绑定到他们想要使用的网络接口,而不是绑定到INADDR_ANY,并且不在集合中包括此网络接口。(工作量太大,而且我可能无权修改所有此类应用程序)
  2. 在网络接口上设置防火墙,以便只接受特定端口上的流量。(这可能有点工作,但这意味着我必须提前指定我将在界面上使用的所有端口,这排除了需要动态端口分配的软件......当然仍然有可能出现一些意想不到的情况应用程序变得“幸运”并且恰好绑定到白名单端口之一,这是不可取的)
  3. 切换到 SELinux 或类似的具有细粒度 ACL 的面向安全的发行版(这里不是一个现实的选择,出于各种原因我不会进入)
linux
  • 1 1 个回答
  • 31 Views

1 个回答

  • Voted
  1. Best Answer
    Christiyan
    2023-01-27T21:36:19+08:002023-01-27T21:36:19+08:00

    您是否尝试过或考虑过 iptables(我知道很难准确指定要求,但可能值得尝试并尝试直到成功):

    仅允许来自 IP 地址 10.0.0.1 和端口 80 的流量转发到保留的网络接口

    iptables -A FORWARD -i <reserved_interface> -s 10.0.0.1 -p tcp --dport 80 -j ACCEPT
    

    然后阻止所有其他

    iptables -A FORWARD -i <reserved_interface> -j DROP
    
    

    或者使用network-manager创建一个虚拟网络接口,把你要保留的IP地址移到虚拟接口上,这样应用程序默认是不能绑定的,你也可以使用防火墙规则虚拟接口。我会看这篇文章,看看最终结果会是什么。

    • 1

相关问题

  • Linux 主机到主机迁移

  • 如何在 Linux 机器上找到有关硬件的详细信息?

  • 如何在 Linux 下监控每个进程的网络 I/O 使用情况?

  • 在 RHEL4 上修改 CUPS 中的现有打印机设置

  • 为本地网络中的名称解析添加自定义 dns 条目

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve