2017-02-23 232 views
0

要阻止一些URL,使用netfilterNF_INET_LOCAL_OUT链,当我为某些数据包返回NF_DROP时,我得到了多个数据包用于同一请求。我想停止后续数据包,以避免不必要的阻止相同URL的过程。如何在使用netfilter返回NF_DROP后停止后续数据包?

有没有像NF_DROP任何价值,我可以返回阻止这一进程,使请求者 - 即Web浏览器在我的情况 - 显示一些错误页面,而不是重复相同的URL请求的?

我可以在数据包中替换请求的URL,然后返回NF_ACCEPT,这样请求者将获得一个页面并停止请求吗?

回答

0

客户端(在你的情况 - 浏览器)不知道他为什么发送不被服务器接受。客户希望得到一个答案,但事实并非如此。所以他继续重新发送请求。 您应该向客户端发送重置数据包(使用服务器的IP地址)以停止请求。 用于显示错误页面更复杂,但可能。

+0

谢谢。我通过将数据包从内核空间排队到'netfilter'的用户空间来解决这个问题,然后在处理完成后向客户端发送错误的html页面。 –

+0

这很好,但可以窃取数据包,重写IP地址和端口,提高RST标志,修复IP和TCP的校验和并返回NF_ACCEPT。 –