rmi firewall

0

Napisałem standardowy serwer wykorzystując javowe RMI.

public static main(String[] args) {
 ServerAuthorization authorization = new ServerAuthorization();
 LocateRegistry.createRegistry(8000);
 Naming.rebind("rmi://localhost:8000/authorization", authorization);
 //ServerAuthorization to moja klasa dziedzicząca po UnicastRemoteObject
}

Uruchamiam go NIE uruchamiając rmiregistry

java -Djava.rmi.server.hostname=123.123.123.123 -jar Server.jar

Po uruchomieniu otwiera on 2 porty

tcp6       0      0 :::8000                 :::*                    LISTEN      9344/java
tcp6       0      0 :::55393                :::*                    LISTEN      9344/java

Wszystko ładnie śmiga dopóki klient ma dostęp do tych portów, ale jak ustawić teraz firewall na serwerze?
O ile dostęp to portu 8000 to nie problem, o tyle drugi port jest losowy.
Można jakoś tą losowość wyeliminować, aby w firewallu dać dostęp do 2 portów i po sprawie?

Z góry dziękuje za każdą wskazówkę jak to powinno być zrobione.

0

Ja to kiedys zrobilem tak: LocateRegistry.createRegistry(8000) tak jak u ciebie.
UnicastRemoteObject ma konstruktor ktory bierze port - wiec wykorzystaj go! Z tego co pamietam, nawet mozesz dla wielu obiektow uzyc 8000 (ten sam co registry) poniewaz rmi potrafi sobie grzecznie poustawiac obok siebie takie obiekty - rmiregistry to tak naprawde osobny obiekt rmi - i w zaleznosci jaki stub bedzie wykorzystany do zdalnego wywolania, ten obiekt zostanie wybrany, ale na tym samym porcie. Nie dziala to jesli rmiregistry uruchomisz osobno.
Ale sprawdz to jeszcze, moglem cos pokielbasic. I napisz co i jak bo ciekawi mnie to.

0

Dzięki, wszystko się zgadza.
Dodanie portu do konstruktora rozwiązało problem. Serwer otwiera tylko jeden port: 8000
Na serwerze na firewallu wszystko jest po blokowane za wyjątkiem portu 8000 i klient śmiga bez zająknięcia.

Tak przy okazji. Jest jakiś prosty sposób aby to połączenie teraz zaszyfrować?

0

RMIServerSocketFactory / RMIClientSocketFactory, maja metody typu setSocketFactory(), jako argument podajesz obiekty typu SslRMIServerSocketFactory / SslRMIClientSocketFactory. Teraz sockety zwracane do runtime RMI beda dzialac na ssl. Certyfikaty itp to juz sobie dalej poradzisz.

1 użytkowników online, w tym zalogowanych: 0, gości: 1