Abrindo a porta 80 com aplicação Java no Ubuntu

votos
6

O que eu preciso fazer é executar uma aplicação Java que é um lado RESTful servidor do serviço writtern por Restlet. E este serviço será chamado por um outro aplicativo em execução no Google App Engine.

Devido à restrição de GAE, cada chamada http está limitado a porta 80 e 443 (http e https) com classe HttpURLConnection. Como resultado, eu tenho que implantar o meu aplicativo do lado do servidor na porta 80 ou 443.

No entanto, porque o aplicativo está sendo executado no Ubuntu, e essas portas abaixo de 1024 não pode ser acessado pelo usuário não-root, em seguida, uma exceção de acesso negado será lançada quando eu executar o meu aplicativo.

As soluções que entraram em minha mente inclui:

  1. Alterar a política de JRE, que é os arquivos de segurança reside em /lib/security/java.policy, para grantjava.net.SocketPermission * 0,80 ouvir, conectar, aceitar, resolver permission.However, nem usando linha de comando para incluir esse arquivo ou substitui o conteúdo de arquivo java.policy do JRE, a mesma exceção continua saindo.

  2. tento fazer o login como um usuário root, no entanto, porque a minha falta de familiaridade com Unix, eu não sei como fazê-lo.

  3. outra solução que não tentar é para mapear todas as chamadas para 80 a uma porta maior, como 1234, então eu posso implantar o meu aplicativo em 1234, sem problema, e pedido de chamada GAE enviar para a porta 80. Mas como se conectar a lacuna que falta ainda é um problema.

Atualmente estou usando um método de hacking, que é para empacotar o aplicativo em um arquivo jar, e sudo executar o arquivo jar com privilégios de root. Ele funciona agora, mas definitivamente não é apropriada no ambiente de implantação real.

Então, se alguém tem alguma idéia sobre a solução, muito obrigado!

Publicado 15/03/2010 em 02:34
fonte usuário
Em outras línguas...                            


3 respostas

votos
6

Você pode usar o iptables para redirecionar usando algo parecido com isto:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport http -j REDIRECT --to-ports 8080

Faça as alterações permanente (persistir após a reinicialização) com:

iptables-save
Respondeu 15/03/2010 em 03:24
fonte usuário

votos
2

Solução 1: Não vai mudar nada, isso não é uma limitação Java, que é o sistema operacional que está impedindo você de usar números de portas privilegiadas (portos inferior a 1024).

Solução 2: Não é uma boa ideia IMO, há boas razões para não executar um processo como root.

Solução 3: Use setcapou iptables. Veja esta pergunta anterior .

Respondeu 15/03/2010 em 04:09
fonte usuário

votos
1

Uma solução muito mais fácil é configurar um proxy reverso na Apache httpd, que Ubuntu será executado para você na porta 80 do /etc/init.d.

Há também formas de conseguir aqui com iptables, mas eu não tenho experiência pessoal recente. Eu tenho uma procuração em execução no momento.

Respondeu 15/03/2010 em 02:53
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more