限制SSH流量?


11

我希望能够限制服务器上的SSH带宽。也就是说,每个sshd进程应限制为200Kb / s或类似的速率。

scp具有此功能,但是ssh更加适合响应性交互式使用,似乎没有此选项。但是,我想结合使用-D(SOCKS代理)功能和某种方式来限制流量。

对此是否有任何选择?


您要在SSH服务器上执行此操作,还是可以在两台计算机之间的防火墙上执行此操作?
马克·亨德森

我真的希望在服务器上执行此操作,因为我无权访问防火墙。
user10640 2009年

如果您愿意在客户端上执行此操作,请尝试使用命令行实用程序“ drizzle”。
Alex J

尽管drizzle命令看起来很有用,但我最终还是不信任用户来运行它。看起来我一直在苦苦寻找比我期望的要复杂的东西:P。谢谢大家!
user10640

Answers:


4

我不确定信任用户是否是其中的一部分,但是trickle对于限制给定命令的速度非常方便。当我从家里上传包裹时,WoW瘾君子的室友会注意到我忘记了类似的东西,因为它几乎占据了整个管道。


1
Trickle可以作为守护程序运行,并管理同一台计算机上多个命令的总带宽。当您要同时启动许多其他独立的传输操作但希望它们使用的总数据速率不超过设定的数据速率时非常方便。
David Spillett

1
不幸的是,我认为这不会对sshd有所帮助-随着新连接的加入,它会派生出新的sshd。我可能会停留在某些防火墙级别的解决方案上,实施起来会有些棘手。
2009年

wtf为什么这是最佳答案?trickle不适用于任何派生的进程。包括sshd!
纳文

1

值得研究使用tc实现HTB流量整形。我对类似问题的解决方案是使用htb.init脚本,该脚本位于 http://sourceforge.net/projects/htbinit/

我是基于限制来自端口22的流量进行设置的,但是您也可以使用iptables标记/破坏数据包,然后根据该标记对它们进行处理。


+1是tc迄今为止唯一的相关答案。
后台打印程序'18

1
scp -l 8192 file.txt user_name@111.111.1.11:/tmp
//8192  = 8192 KB per second

我知道这个线程已经很老了,但是希望这可以对某人有所帮助。


1
令人讨厌的是,有两个人对您的回答不满意,至少没有发表评论。我想是因为这scp是ssh的一个相当特定的用例。我已经测试过scp -l并且可以正常工作,但是请注意,它是每秒千位(kb),而不是千位(kB)。
mwfearnley'1

0

有一些选择。

一种常见的做法是在服务器和客户端之间的防火墙/路由器的端口22上实现QoS。

如果它们是在同一个本地网(即没有路由器和它们之间的防火墙),我相信你可以使用iptables来限制带宽的端口22 ... 看看这里了解如何做到这一点的详细信息。


1
您需要谨慎地将iptables的速率限制器与类似ssh的服务一起使用,因为“重要的是要观察到速率限制在概念上与带宽限制/限制不同;带宽限制的连接将使数据包排队并限制它们的速率速率限制将不会执行此操作;例如,当您对所标识的传入TCP连接尝试使用速率限制时,超过指定限制的连接将被拒绝;不会对数据包进行排队。”
msanford,2009年

嗯好点
马克·亨德森

0

您可以查看类似iprelay的内容

User-space bandwidth shaping TCP proxy daemon
iprelay can shape the TCP traffic forwarded through it to a specified
bandwidth and allow this bandwidth to be changed on-the-fly. Multiple
data streams to different sockets may be shaped to the same total
bandwidth, much like a traffic shaping router would. However, this
application runs in user space, and works by acting as a TCP proxy.
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.