2011-07-06 27 views
8

Giả sử tôi đã mã hóa một ứng dụng Java yêu cầu truy cập Internet. Thông thường tường lửa bật lên và hỏi xem điều này có ổn không. Bây giờ tôi có các tùy chọn để cho phép truy cập Internet hoặc sử dụng các quy tắc cụ thể. Vì tôi chỉ kiểm tra một dịch vụ web nên tôi đã đặt một quy tắc hạn chế quyền truy cập vào chính xác máy chủ đó tại một số cổng.Java so với tường lửa: cách cho phép các ứng dụng Java có bộ quy tắc riêng của chúng

Bây giờ tôi có ứng dụng Java # 2 cũng yêu cầu truy cập Internet. Nếu tôi quyết định cấp quyền truy cập đầy đủ cho ứng dụng # 1 thì # 2 cũng có toàn quyền truy cập. Đối với giải pháp với quy tắc được thiết lập ở trên, tôi cần thêm quy tắc khác hoặc chỉ cần từ bỏ và cấp quyền truy cập đầy đủ và do đó, cũng cấp cho ứng dụng # 1 toàn quyền truy cập.

Tôi đoán bạn có thể thấy vấn đề của tôi là gì. Một thời gian trước, tôi đã gặp phải tình huống tương tự và tôi đã thử một hoặc hai trình bao bọc để chuyển đổi một JAR thành một tệp thực thi. Tôi nhận thấy rằng cuối cùng họ chỉ đơn giản là đưa ra các JVM gây ra nhị phân Java thông thường để mở kết nối Internet.

Vì vậy, câu hỏi của tôi là: Tôi có tùy chọn nào để cho phép người dùng chỉ định các quy tắc tường lửa khác nhau cho mỗi ứng dụng Java?

EDIT: sau khi đọc nhận xét đầu tiên, tôi muốn làm rõ rằng tôi không suy nghĩ về cách cấu hình tường lửa, mà thay vào đó, có một số cách ứng dụng Java có cách độc đáo hơn hoặc ít hơn tự xác định hoặc có cách khác để xử lý truy cập mạng.

+1

Đây là câu hỏi về cách định cấu hình sản phẩm tường lửa cá nhân cụ thể nhưng chưa được đặt tên cho một số hệ điều hành cụ thể nhưng chưa được đặt tên. Nên đi đến SuperUser. –

+0

@Luther Không, tôi nghĩ bạn đã hiểu sai. Đó là một điều về cách làm cho ứng dụng Java nhận diện chính nó một cách khác với tường lửa. Vì vậy, tôi nghĩ rằng đó là một điều mã hóa hoặc cách triển khai một ứng dụng Java. Định nghĩa về các quy tắc tường lửa nên giống như định nghĩa chúng cho bất kỳ ứng dụng không phải Java nào khác. – sjngm

Trả lời

4

Khi bạn yêu cầu quyền truy cập chi tiết hơn. Tại sao không cho phép một tập tin chính sách và cho phép người quản lý bảo mật quản lý SocketPermissions được phân bổ cho chương trình của bạn?

http://download.oracle.com/javase/7/docs/technotes/guides/security/permissions.html.

Ví dụ bên dưới.

grant signedBy "paul" { 
    permission java.net.SocketPermission "localhost:1024-", "accept, connect, listen"; 
}; 
+0

Tôi làm cách nào để chỉ định một gói dưới dạng 'codeBase'? Tài liệu chỉ đề cập đến nội dung địa phương qua "tệp: //" và một số nội dung trên web. – sjngm

2

Tường lửa là giống như một màng bán thấm, cho phép ra bên ngoài nhưng không kết nối gửi:

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


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

Một điều mà bạn có thể làm để làm được việc này là để thiết lập một proxy đó là bên ngoài của tường lửa chấp nhận các kết nối gửi đến từ thế giới bên ngoài, cũng như các kết nối gửi đến từ máy chủ "thực sự" của bạn. Proxy có thể định tuyến các yêu cầu bên ngoài đến một trong các ổ cắm đến từ một trong các máy chủ:

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

Điều đó nói rằng, không biết chính xác tình trạng của bạn, đây có thể không phải là lựa chọn thiết kế tốt nhất. Ví dụ, bạn có thể làm một cái gì đó mà không thực sự yêu cầu chạy một máy chủ, hoặc có thể bạn thực sự muốn chạy một máy chủ, nhưng có lẽ nên chạy một trên cơ sở hạ tầng điện toán đám mây. Rất khó để đề xuất một thiết kế thực tế mà không có chi tiết bổ sung về những gì bạn muốn thực hiện.

0

Cách ngớ ngẩn đơn giản xung quanh điều này. Sao chép và đổi tên java.exe thành các tên khác nhau.

Nếu bạn có hai ứng dụng đổi tên java [w] .exe để:

MyApp.exe

MyApp2.exe

sau đó bạn có thể đặt quy tắc cụ thể trong tường lửa của bạn dựa trên thực thi.

+0

Ồ không. Điều gì nếu cài đặt một phiên bản Java mới? Sau đó, tôi sẽ phải sao chép nhị phân mới đó vào tất cả các tệp thi hành. Theo luật Murphy, tôi sẽ bỏ lỡ ít nhất một kết thúc với nhiều phiên bản Java khác nhau. – sjngm

+0

@sjngm Bạn không thực sự muốn ứng dụng của mình thay đổi nếu họ cài đặt phiên bản Java mới. Điều đó có nghĩa là bạn phải hỗ trợ bất kỳ phiên bản Java mới nào mà không phải chạy nó thông qua QA. Bằng cách bao gồm một phiên bản đã được kiểm tra của VM với sản phẩm của bạn, bạn đảm bảo rằng bạn có một hệ thống đã biết. Với ý tưởng này trong tâm trí, nó không phải là một vấn đề để sao chép và đổi tên java.exe khi một phiên bản mới của Java được phát hành. Bất kỳ trình bao bọc nào khác sẽ có cùng một vấn đề khi bạn nâng cấp các phiên bản java. Cách khác của bạn là liên kết rõ ràng với jvm.dll và sinh ra cá thể máy ảo của riêng bạn bên trong các tệp thực thi gốc. –

+0

mklink firewall.app1.exe java.exe –

0

Chuyển jvm bằng sản phẩm của bạn và viết một tập lệnh để khởi chạy nó và đặt các biến cần thiết để nó hoạt động độc lập với bất kỳ jvm nào khác trên hệ thống.

tức là Classpath /app/mắt/java -jar jar.file

Bằng cách này chỉ phiên bản của java được khởi chạy.

Các vấn đề liên quan