我有一个我一直在开发的java应用程序。我使用我无法控制的外部数据库服务器。我想模拟它的连接错误,但我无法做到。我尝试使用 iptables 和 tc 来创建这种情况,但是在 java 程序运行后它可以创建对数据库的查询。如果我重新启动应用程序,则阻止会成功。有什么我不明白的吗?
答案1
您首先不明白的是,如果您不向我们展示您的 iptables 规则,我们就无法调试它们。
话虽这么说,我看到了一个潜在的陷阱。但当然我不知道这是否是你的问题。
Java 应用程序很可能在启动时就一次性建立了与数据库的 TCP 连接。如果您的防火墙仅阻止连接建立数据包并允许属于已建立的 TCP 会话 ( iptables -A -p tcp -m state --state ESTABLISHED,RELATED -j ALLOW
) 一部分的数据包通过,那么您的应用程序将能够继续与数据库通信。为了阻止通信,您需要在启动应用程序之前设置防火墙,或者阻止所有目的地为数据库端口的 TCP 数据包。