以编程方式从linux路由缓存中删除一个IP

时间:2015-10-27 20:54:59

标签: c linux caching routing iptables

我制作了一个后端服务器,它将滥用主服务器的用户(在很短的时间内通过太多无效的网页请求)重定向到另一个端口,这样服务器上的负载就会略微减少。

然后我在我的程序中通过exec()发出此命令来阻止来自常规服务的IP:

iptables -t nat -I <tableforport> -p tcp --src <offending ip> -j REDIRECT --to-port <port of my server>

问题是当我使用实际的2台计算机设置进行测试时,其中一台是客户端垃圾邮件服务器(我实际上是按住F5几分钟来测试),内部端口重定向似乎没有立即开始。如果我暂停按住F5几分钟然后再试一次,那么内部重定向就会起作用,来自我服务器软件的阻止消息就会起作用。

我觉得这是由于linux(运行服务器运行)缓存远程IP地址条目及其端口以及导致新iptables规则(如上所述)的其他指令被跳过,直到路由缓存被刷新为止对于那个IP。

在linux中,我可以通过以下方式轻松刷新每个IP版本的路由缓存:

echo 1 > /proc/sys/net/ipvn/route/flush

其中ipvn中的n是4或6。

问题在于,如果我执行它,那么缓存中的所有好的IP都将被刷新,这反过来会为所有人创建一个更慢的体验。我只想为潜在的黑客创造​​糟糕的体验。

如何从路由缓存中仅删除一个IP地址,以便在向iptables添加重定向规则时(如上所述),重定向会立即在客户端刷新页面时发生(不是几次刷新,几秒钟或几分钟后?)

一旦我得到答案,我希望能够制作一个C程序,之后我可能会弄明白自己。

0 个答案:

没有答案