问题标签 [iptables]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
9 回答
51362 浏览

linux - 如何以编程方式即时管理 iptables 规则?

我需要查询现有规则,以及能够轻松添加和删除规则。我还没有找到任何用于执行此操作的 API。有什么我想念的吗?

我最接近的解决方案是iptables-save | iptables-xml用于查询和手动调用 iptables 命令本身来添加/删除规则。我考虑过的另一个解决方案是简单地从我的应用程序的数据库中重新生成整个规则集并刷新整个链,然后再次应用它。但我想避免这种情况,因为我不想丢弃任何数据包——除非有办法自动执行此操作。我想知道是否有更好的方法。

C 中的 API 会很棒;但是,由于我打算将其构建到一个独立的 suid 程序中,因此可以使用任何语言执行此操作的库也可以。

0 投票
2 回答
3789 浏览

linux - 在 Linux 上偶尔会丢弃 SYN 数据包

我们正在运行带有 2.6.16 内核的 D​​ebian,并启用了 iptables。系统正在运行一个定制的 HTTP 代理,该代理受到轻微负载(它在其他站点上的相同负载下工作正常)。该系统由 4 台服务器组成,前面是具有虚拟 IP 的负载平衡器,前面是 4 台 ISA 2004 机器的阵列,因此基本拓扑为:

客户端 -> ISA [1-4] -> 负载均衡器 -> 我们的代理 [1-4] -> 互联网

有时,ISA 会向我们发送一个 SYN 数据包,但没有向该数据包发送 SYN-ACK。3秒后会再试,6秒后会再试第三次,之后会报告proxy down,并切换到直连。在此期间,即在这 3 个 SYN 之前、之中和之后,来自同一 ISA 的其他 SYN 会出现并得到成功响应。

其他人报告了一个非常相似的问题(但是没有解决方案):

所有这些都来自一种名为 CentOS 的 Linux。它的特点是默认启用 iptables。

http://www.linuxhelpforum.com/showthread.php?t=931912&mode=linear http://www.centos.org/modules/newbb/viewtopic.php?topic_id=16147

几乎相同:但有点不同: http ://www.linuxquestions.org/questions/linux-networking-3/tcp-handshake-fails-synack-ignored-by-system.-637171/

似乎也相关: http ://groups.google.com/group/comp.os.linux.networking/browse_thread/thread/b1c000e2d65e0034

我怀疑 iptables 是罪魁祸首,但欢迎提供任何额外的反馈。

0 投票
2 回答
6271 浏览

linux - 如何在 iptables 中打开一个端口以进行 RMI 访问

我正在尝试从我的 Java 应用程序连接到关闭了用于 RMI 的端口 8088 的开发服务器。我感谢有关如何打开该端口的任何帮助。

0 投票
6 回答
68559 浏览

linux - 使用 iptables 更改目标端口

是否可以使用 iptables 更改 UDP 数据包的目标端口?

我正在尝试让 SNMP 代理在 1620 而不是 162 上发送陷阱。不幸的是,到目前为止,我只设法更改了源端口:

iptables -t nat -A POSTROUTING -p udp --dport 162 -j SNAT --to :1620

0 投票
1 回答
918 浏览

linux - SNMP 有效负载地址转换

iptables在 linux 下使用 NAT SNMP 流量。一些 SNMP 数据包具有 VARBIND,其中包含生成它们的设备的(真实)IP 地址。这会混淆标准管理工具,这些工具需要查看 VARBIND 中的 NAT 化地址。因此,除了标题中的地址之外,我还需要翻译有效载荷中的地址。

标准工具是nf_nat_snmp_basic.ko内核模块,但原始版本只翻译地址的第一个八位字节,最新版本完全破坏了数据包。这显然是网络上的“常识”(www.netfilter.org),我已经在自己的设备上验证了它。

在我深入内核之前,有没有其他人研究过这个问题并提出了合适的解决方案?现在,只翻译那些 OID 将其类型指定为 IP 地址的 VARBIND 就足够了。换句话说,我不需要翻译嵌入在字符串数据中的地址,这要困难得多。

感谢您的建议!

0 投票
2 回答
3602 浏览

firewall - Fedora Core 8 下开放端口(用于 VMWare Server)

我刚刚在全新的 Fedora Core 8 安装上安装了 VMWare Server 2.0。VMWare 的 Web 访问控制台的端口是 8222 和 8333(与默认值一样)。

当我尝试对 myserver:8222 进行远程 http 访问时,它失败了。但是当我跑步时

访问成为可能(虽然不是很令人满意)。因此,我更新了conf文件如下

然而,即使重新加载了 iptables 设置,它仍然无法正常工作。有谁知道我做错了什么?

0 投票
2 回答
6706 浏览

linux - 除了 iptables 之外的数据包处理工具?

我正在寻找一个 linux 实用程序,它可以根据一组规则更改网络数据包的有效负载。理想情况下,我会使用iptablesnetfilter内核模块,但它们不支持通用有效负载修饰:iptables会改变各种标头字段(地址、端口、TOS 等),它可以匹配数据包中的任意字节,但显然是无法更改数据包中的任意数据。

内核模块将是一个很大的优势,因为效率是一个问题,但我很高兴探索可以完成工作的任何其他选项。

谢谢你的想法!


久违的更新:

我们选择使用该NFQUEUE模块,这是 Robert Gamble 建议的 QUEUE 模块的最新实现。它看起来相当简单,并且允许我们的代码在用户空间而不是内核空间中运行具有安全奖励。

如果我们只是想改变有效载荷而不改变其大小,那么实现几乎是微不足道的。在这种情况下,我们会定义一个iptables规则来为我们选择“有趣”的数据包并向它们发送NFQUEUE目标。我们将编写一个回调函数来检查来自NFQUEUE的数据包,根据需要修改数据,并重新计算其 TCP 和 IP 标头中的校验和。

但是,我们的用例涉及向数据流中注入额外的字符。这有一些明显的副作用,即增加 TCP 流中相应的 SEQ/ACK 编号,以及不那么明显的副作用,即混淆conntrack模块足以完全破坏 NAT。经过大量的研究、摸索和实验,最方便的解决方案是禁用这些特定数据包的连接跟踪(NOTRACK目标在raw表中)并在我们的回调中处理它。 保存你的西红柿和讨厌的邮件;我一点也不自豪让你了解情况,但这是在下一个冰河时代之前为客户提供可靠产品的唯一途径。这是一个好故事。但我真的很欣赏并分享你的衷心感受。

iptables版本 2 将通过用自定义 NAT 和/或conntrackhelper替换我们的回调和一些规则来利用我们新发现的启示。我们相信当前的练习已经给了我们足够的经验来创建一个内核模块,该模块将有机地融入 netfilter 架构,以解决我们遇到的问题。

0 投票
2 回答
2708 浏览

windows - VMware 和 iptables

在 Windows 上使用 VMware 来托管运行 iptables 的虚拟 linux 机器是否有问题?我有一个似乎可以在物理硬件上运行但在 VMware 下不稳定的配置。

我正在使用 VMware 在 Windows 2003 Server 主机上运行虚拟 linux 2.6.24 机器。linux 应用程序本质上是一个运行iptables. 表中的规则nat包括:

我看到使用 10.10.1.33:80 的传入数据包tcpdump,第一个LOG生成消息,但是DNAT第二个或第二个都没有LOG显示在其数据包计数器上注册的数据包,第二个LOG不生成任何消息,并且tcpdump不显示数据包192.168.0.33。

适配器位于eth010.10.0.0/16 网络上,默认网关为 10.10.1.1;它的辅助地址为 10.10.1.33/32。 /proc/sys/net/ipv4/config/eth0/forwarding设置为 1。

VMware 是罪魁祸首,还是我遗漏了什么?谢谢!


更新:我们简化了测试环境。根本没有 NAT 规则,只是在 Win2k3 服务器主机下运行的 linux VM。测试步骤:

  1. VM 桥接到主机 NIC。虚拟机和主机在同一个子网中,具有与上述相同的默认网关。

  2. VM 与其子网内外的设备进行通信:ICMP、TCP、UDP。通信是双向的:由哪个设备发起并不重要。

  3. 工程师在检查系统时重启了默认网关。

  4. VM 现在与其子网上的设备通信。从第 2 步开始通过网关与同一设备进行通信的任何尝试都无法将数据包放在网络上。 VM 上 eth0 上的 tcpdump 显示没有响应的传出数据包;主机上的 WireShark 在物理网卡上没有显示任何内容。

  5. 停止和重新启动 VM 不会改变其行为。停止 VM 并将其替换为具有适当 IP 地址等的不同VM不会改变行为。

  6. Win2k3 主机在其子网内外继续正常通信。

我只能由此得出结论,虚拟机和主机之间“发生了一些事情”:在 VMware 驱动程序中,或者在主机的网络堆栈中。我又要去上网了……很难想象我们是第一个观察到这一点的人。

他们来时更新。感谢您的想法和讨论。

0 投票
3 回答
2925 浏览

networking - 将某个端口上的所有请求转发到网络上的另一台机器的最佳方法是什么?

我有两台专用服务器,没有硬件防火墙。我想转发通过端口 1008 进入主服务器的所有请求,以由同一网络上的另一台专用服务器完成。我知道我需要设置某种 TCP 代理,但我昨天第一次听说 IPTables。有什么快速提示吗?

0 投票
2 回答
3708 浏览

scalability - 将图像请求重定向到不同的网络服务器的最佳方法?

我试图通过添加“图像服务器”(用于处理图像请求的专用服务器)并将所有对 .gif、.jpg、.png 等的请求重定向到它来减少我的网络服务器上的负载。

我的问题是,处理重定向的最佳方法是什么?

  • 在防火墙级别?(我可以使用 iptables 做到这一点吗?)
  • 在负载均衡器级别?(ldirectord 能处理这个吗?)
  • 在 apache 级别 - 使用重写规则?

感谢您提供有关执行此操作的最佳方法的任何建议。

- 更新 -

我要补充的一件事是,这些域是为第 3 方托管的,因此我不能指望所有开发人员都修改他们的代码并将他们的图像指向另一台服务器。