我制作了一个后端服务器,它将滥用主服务器的用户(在很短的时间内通过太多无效的网页请求)重定向到另一个端口,这样服务器上的负载就会略微减少。
然后我在我的程序中通过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程序,之后我可能会弄明白自己。