【问题标题】:How to build a kind of firewall如何建立一种防火墙
【发布时间】:2009-01-27 02:24:07
【问题描述】:

实际上我正在尝试构建的就像一种防火墙。它应该能够了解从我的机器发出的所有请求。它应该能够停止选定的那些。我什至不知道如何开始。我正在使用带有框架 2.0 的 VS 2008/2005。请让我知道是否有任何特定的课程我可以开始,是否有任何样品我可以得到。

【问题讨论】:

  • 我不会删除它们,因为我不知道它们为什么在那里......但是标签(asp.net、proxy、proxy-classes 和 ajax)是怎么回事。它们与防火墙有什么关系?
  • 评论,因为它没有回答你的问题:防火墙不应该“停止选定的”,他们应该完全停止除了你特别允许的那些之外的所有东西。换句话说,使用白名单,而不是黑名单。
  • PAX 在现场,Microsoft Vista 使用选择加入例外列表,而 Sygate 个人防火墙(在 Vista 上不起作用)使用选择退出例外列表......拥有黑名单是针对网络管理员的谁没有更好的办法更新黑名单,白名单有助于捕获恶意应用

标签: c# visual-studio firewall


【解决方案1】:

防火墙确实应该在网络堆栈中相当低的位置实现;我强烈建议 NDIS。 This article 可能感兴趣。

【讨论】:

    【解决方案2】:

    这样的内容可能会帮助您入门:http://www.mentalis.org/soft/projects/pmon/

    此 C# 项目允许 Windows NT 管理员拦截通过计算机上的网络接口之一发送的 IP 数据包。这对于调试网络软件或监控不受信任的应用程序的网络活动非常方便。

    【讨论】:

      【解决方案3】:

      正如马特所说,它确实必须是 NDIS。

      请务必分配大量时间来开发驱动程序,我建议 6 到 12 个月才能使其进入 alpha 发布阶段。与 NDIS 打过交道后,我可以向您保证,这是一种前所未有的痛苦。

      如果您计划向公众发布您的产品,您需要向微软支付一些费用以使驱动程序获得批准 (WHQL),否则您的用户将在安装时遇到多个令人讨厌的对话框(“this软件是严重不安全的”品种)。审批过程很慢,并且不再适用于 Windows 2000,很可能很快就会不适用于 XP。 64 位批准是单独付款。

      您被锁定在使用 C 中,但任何微小的错误都会被放大为蓝屏(例如空引用或轻微的缓冲区溢出)。您无法创建线程,您的 API 与普通用户模式 ​​API 100% 不同,实际上尝试与用户模式通信意味着要处理令人毛骨悚然的 IRP 系统。

      NDIS 本身以一种糟糕的 MFC 风格的方式过度设计。您仅限于内核 API 的一个子集(这使得某些事情变得非常困难,例如注册表访问)。不这样做会导致立即取消 WHQL 资格(不,您不会拿回您的钱!)。

      需要彻底检查每一行代码,以确保它在运行的 IRQL 级别上正确运行(它基本上决定了您的代码是否可以被其他进程中断)。在错误的级别调用 API 函数会导致蓝屏。此外,在堆栈上创建超过 500 - 1000 字节的结构会导致堆栈溢出(当然是蓝屏)。当你有一个 15 行深的调用堆栈并且每个函数中都有一些小分配时,仅此一项就可以产生一些有趣的调试会话。

      尽管如此,尽管 NDIS 已经经历了 6 次修订,但如果您想要挑战,这确实是值得的。奖励是一个卖得很好的软件产品,因为没有多少人敢与这类事情纠缠不清。一项重要要求是了解汇编语言(用于调试)。阅读 Windows 内核的工作原理也很有帮助(不仅仅是 NDIS)。

      【讨论】:

        【解决方案4】:

        几年前,我需要了解 Windows 系统上所有应用程序使用的网络带宽。

        在不知道我正在执行的任务的规模的情况下,我开始学习如何编写 TDI 过滤器驱动程序。

        大约花了两年时间。两年全职,因为我靠一些股票期权为生。不过,NDIS 比 TDI 更容易。 Prolly 正如男人所说,全职一年。

        您可以在 TDI 级别做防火墙的事情,这很好,因为您可以将套接字与应用程序相关联(这在 NDIS 中是做不到的)。您还可以阻止和/或带宽形状发送。您可以阻止接收,但您不能在 TDI 上真正调整接收,因为您不允许暂停(接收代码路径在 DISPATCH_LEVEL 执行)。我想出了一个解决方法并为此申请了专利,但我不会从技术 POV 推荐它。

        OTOH 真正的黑客只会绕过 TDI 并直接与 NDIS 驱动程序对话; TDI 防火墙是可以绕过的。

        【讨论】:

          猜你喜欢
          • 2021-08-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-09-27
          • 1970-01-01
          • 1970-01-01
          • 2011-08-09
          • 1970-01-01
          相关资源
          最近更新 更多