我正在为一家 Pentest 公司设置扫描系统。这台机器的带宽很大,我担心测试人员可能会无意中对客户端发起 DoS 攻击。将传出带宽限制在 10mbps 似乎是测试速度和避免 DoS 之间的合理平衡。但是,多个测试人员将在不同的客户端上工作,所以我需要将每个限制为 10mbps,而不是总共 10mbps。
实现这一理想的合理近似方法是根据目标 /24 地址限制流量。例如,到 1.2.3.4 和 1.2.3.5 的流量都将被限制在同一个 10mbps“桶”中,因为它们都在 1.2.3.0/24 中。但 2.3.4.5 将位于单独的 10mbps 桶中。
我该如何在 Linux 上实现这一点?我读过一些关于 tc 的介绍文档,似乎我们需要标记数据包以识别存储桶。我见过一些在配置中硬编码 IP 地址的示例。但是,我想以通用方式执行此操作,而不必每次开始新测试时都重新配置 tc。
答案1
在您的情况下,tc 将不起作用,因为您需要提前创建 2^24 = 16777216 个存储桶。
替代方案是使用 iptables 限制每秒的数据包数量,或者在您的软件中实现整形。