java - 阻止 IP 的最佳做法是什么?

标签 java tomcat server

我有一个在 Tomcat 7 服务器上运行的应用程序 Java。哪里有许多尝试我的网络应用程序并“吃掉”资源的机器人。我应该在哪个级别阻止这些机器人的 IP?

  1. 我认为在应用程序级别这不是一个好主意,但在这种情况下我可以动态添加新的阻止 IP。

  2. 我阅读了有关 Tomcat 上的 Valves 的信息,并以这种方式进行了测试,但是 IP 的数量是否会大于 1000 或大于 10000?在每次添加程序后,我都必须重新启动 tomcat。这也不是那么可爱。

  3. 还有另一种方法 - 服务器防火墙 - 但在这种情况下我无法动态添加 IP,而且我认为在这种情况下我无法为 403 错误创建自定义页面。

什么是最好的方法?

最佳答案

On which level should I block IP of these bots?

在防火墙级别。例如,使用 IPtables 或外部防火墙。

在应用程序内(或在 Tomcat 堆栈中)阻塞意味着您的 seb 服务器代码在决定关闭它们之前必须接受不需要的连接。比这早得多地过滤掉数据包效率要高得多。节省系统资源,更能抵御DoS攻击。

Where is one more way - server firewall - but in this case I can't add dynamically IP, and I think I can't make custom page for 403 error in this case.

您可以即时、快速地更新基于 IPtables 的防火墙。

你不应该给那些人一个 403。如果你决定阻止他们,大概是因为他们忽略了你的“robots.txt”和/或做其他反社会的事情。他们不值得 403 响应。只是“黑洞”他们的连接尝试。

您还可以考虑在您的网络交换机中实现数据包过滤,但我不知道即时添加/删除 block 是否可行。

关于java - 阻止 IP 的最佳做法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31140695/

相关文章:

java - 对方法的引用是模棱两可的,具有泛型,奇怪的行为

java - ".": Illegal @MultipartConfig location

spring - 在 jsp 文件中使用 taglib 会抛出 500 错误

apache - 什么是 502 代理错误?如何解决

c - 我正在尝试将多个客户端连接到该服务器,但代码似乎不起作用>

Node.js 集群没有 fork 任何东西

c - 当客户端断开连接时,选择调用设置服务器的套接字

java - 在 JDBC for Oracle 中设置客户端信息

java - 将显式 Intent 更改为隐式 Intent Android

java - 无法连接到公开的 Docker 端口