假设我编写了一个需要访问Internet的Java应用程序。通常会弹出防火墙并询问是否正常。现在,我可以选择通常允许Internet访问或使用特定规则。由于我只检查一个Web服务,因此我设置了一个限制在某个端口访问该服务器的规则。
现在我有Java应用程序#2,也需要Internet访问。如果我决定给应用程序#1完全访问权限,那么#2也具有完全访问权限。对于上面规则集的解决方案,我需要添加另一条规则,或者只是放弃并授予完全访问权限,因此也可以为应用程序#1提供完全访问权限。
我想你可以看出我的问题是什么。前段时间我遇到了同样的情况,我尝试了一个或两个将JAR转换为可执行文件的包装器。我注意到最后他们只是启动了JVM,导致通常的Java二进制文件打开了Internet连接。
所以我的问题是:我有哪些选项允许用户为每个Java应用程序指定不同的防火墙规则?
编辑:在阅读完第一条评论之后,我想明确表示我并没有考虑如何配置防火墙,而是让Java应用程序自己拥有更多或更多的方式。不那么独特的识别方式或使用其他方式处理网络访问的方式。
答案 0 :(得分:4)
当您需要更精细的访问权限时。为什么不编写策略文件并允许安全管理员管理分配给您的程序的SocketPermissions
?
http://download.oracle.com/javase/7/docs/technotes/guides/security/permissions.html
以下示例。
grant signedBy "paul" {
permission java.net.SocketPermission "localhost:1024-", "accept, connect, listen";
};
答案 1 :(得分:2)
防火墙就像一个半透膜,允许出站而非入站连接:
|
Outside world <===== | ====== Your computer
|
Firewall [OK]
|
Outside world ====== X =====> Your computer
|
Firewall [Disallowed]
您可以做的一件事就是设置一个位于防火墙之外的代理,它接受来自外部世界的入站连接,以及来自“真实”服务器的入站连接。代理可以将外部请求路由到其中一个服务器的入站套接字之一:
|
Outside world ===> [Proxy] <===== | ====== Your computer
|
Firewall [OK]
尽管如此,如果不知道您的具体情况,这可能不是最佳设计选择。例如,您可能正在做一些不需要运行服务器的事情,或者您确实想要运行服务器,但也许应该在云计算基础架构上运行一个服务器。如果没有关于您希望实现的目标的更多细节,很难推荐实际设计。
答案 2 :(得分:0)
简单的愚蠢方式。将java.exe复制并重命名为其他名称。
如果你有两个应用程序将java [w] .exe重命名为:
MyApp.exe的
MyApp2.exe
然后您可以根据可执行文件在防火墙中放置特定规则。
答案 3 :(得分:0)
将jvm与您的产品一起发送并编写脚本以启动它并设置必要的变量,使其独立于系统上的任何其他jvm。
即 类路径 / app / launch / java -jar jar.file
这样只会启动你的java版本。