Java против брандмауэра: как дать приложениям Java собственный набор правил - PullRequest
8 голосов
/ 06 июля 2011

Допустим, я написал приложение Java, которое требует доступа в Интернет.Обычно брандмауэр всплывает и спрашивает, все ли в порядке.Теперь у меня есть варианты, как правило, разрешить доступ в Интернет или использовать определенные правила.Поскольку я проверяю только веб-службу, я установил правило, ограничивающее доступ именно к этому серверу через некоторый порт.

Теперь у меня есть приложение Java №2, которое также требует доступа в Интернет.Если я решил дать приложению № 1 полный доступ, то № 2 также имеет полный доступ.Для решения с указанным выше правилом мне нужно было бы добавить другое правило или просто отказаться и предоставить полный доступ, и, следовательно, также дать приложению № 1 полный доступ.

Я думаю, вы видите, в чем моя проблемаявляется.Некоторое время назад я столкнулся с той же ситуацией и попробовал одну или две оболочки, которые преобразуют JAR в исполняемый файл.Я заметил, что в конце они просто запустили JVM, в результате чего обычный бинарный файл Java открыл интернет-соединение.

Итак, мой вопрос: какие параметры я должен разрешить пользователю указывать различные правила брандмауэра для каждой Javaприложение?

РЕДАКТИРОВАТЬ : после прочтения первого комментария я хотел бы прояснить, что я не думаю о том, как настроить брандмауэр, а скорее как-то, что сами приложения Javaиметь более или менее уникальный способ идентификации себя или другой способ обработки доступа к сети.

Ответы [ 4 ]

4 голосов
/ 06 июля 2011

Когда вам требуется более мелкозернистый доступ.Почему бы не создать файл политики и не разрешить менеджеру безопасности управлять 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";
};
2 голосов
/ 06 июля 2011

Брандмауэр похож на полупроницаемую мембрану, позволяющую исходящие, но не входящие соединения:

                      |
 Outside world <===== | ====== Your computer
                      |
                   Firewall [OK]


                      |
 Outside world ====== X =====> Your computer
                      |
                   Firewall [Disallowed]

Одна вещь, которую вы можете сделать, чтобы обойти это, это настроить прокси, который находится за пределами брандмауэракоторый принимает входящие соединения из внешнего мира, а также входящие соединения с вашего «реального» сервера.Прокси-сервер может перенаправлять внешние запросы на один из входящих сокетов с одного из серверов:

                                   |
 Outside world ===> [Proxy] <===== | ====== Your computer
                                   |
                              Firewall [OK]

При этом, не зная вашей конкретной ситуации, это может быть не лучшим выбором для разработки.Например, вы можете делать что-то, что на самом деле не требует запуска сервера, или, может быть, вы действительно хотите запустить сервер, но, возможно, вам следует запустить его в инфраструктуре облачных вычислений.Трудно рекомендовать реальный дизайн без дополнительных подробностей относительно того, что вы хотите достичь.

0 голосов
/ 24 октября 2015

Поставьте свой jvm вместе с вашим продуктом и напишите скрипт для его запуска и установите необходимые переменные, чтобы он функционировал независимо от любого другого jvm в системе.

т.е. Classpath / app / launch / java -jar jar.file

Таким образом, запускается только ваша версия Java.

0 голосов
/ 06 июля 2011

Простой глупый способ обойти это.Скопируйте и переименуйте java.exe в разные имена.

Если у вас есть два приложения, переименуйте java [w] .exe в:

MyApp.exe

MyApp2.exe

, тогда вы можете установить определенные правилав вашем брандмауэре на основе исполняемого файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...