Pregunta
Como podria abrir estos dos puertos y que no solo este abierto para localhost. Sino que esten abiertos para la web ( por no saber otra manera de decirlo ).
Esto es para el puerto de shutdown del Tomcat.
Respuesta
Si tomcat es el pid (identificador de proceso) número 5121 (tu caso va
a ser diferente), entonces el comando
# netstat -ltnp | grep 5121
muestra la salida
tcp6 0 0 :::8443 :::* LISTEN 5121/java
tcp6 0 0 127.0.0.1:8005 :::* LISTEN 5121/java
tcp6 0 0 :::8009 :::* LISTEN 5121/java
tcp6 0 0 :::8080 :::* LISTEN 5121/java
Primero tienes que fijarte que la dirección por donde escucha sea
0.0.0.0 (si es ip4) o ::: (ip6 + ip4). Entonces sabes que escucha por
todas las interfaces. Para HTTP, HTTPS, y AJP, este es el
comportamiento por defecto. Bastaría con abrir los puertos en el
firewall del equipo para que funcione desde la red. Para ayudarte
necesitamos saber la distribución que utilizas.
Fíjate que el puerto de shutdown, que es 8005 en mi caso (seguramente
es diferente en el tuyo) está escuchando únicamente por 127.0.0.1.
Esto significa que no importa si abres el puerto del firewall, no ha a
recibir shutdown por red de ninguna manera. Tomcat NO va a permitir
que el puerto de shutdown escuche por otra interfaz que no sea
127.0.0.1.
Si realmente necesitas apagarlo por la red, se me ocurren algunas opciones:
1) Cambiar el sistema de nombramiento, únicamente para tomcat, para
que "localhost" resuelva a la dirección "0.0.0.0". Esto me parece muy
avanzado.
2) Hackear el tomcat. Puedes bajarte el código fuente y cambiar el
archivo java/org/apache/catalina/core/StandardServer.java, más o menos
por la línea 370 (dependiendo de la versión exacta), compilarlo y usar
el tuyo. Obviamente consideraciones de seguridad convienen para evitar
ataque de negación de servicio.
3) Utilizar un tunel ssh para bajarlo desde la red (lo que yo llamo la
VPN del hombre pobre). mira cuidadosamente las opciones -R y -L de ssh
y elige tu estrategia.
4) ¿stunnel en reversa?
5) ¿portmapper o algo parecido?
6) La respuesta estándar de Sun es JMX, pero no funciona en este caso
porque no existe un mbean que haga el shutdown y baje el puerto de
shutdown. ¿Mal diseño de tomcat tal vez?
Obviamente, al abrir el puerto de shutdown por la red, te expones a
ataques de negación de servicio. Recomendaría implementar un token de
una vez en lugar de utilizar una cadena única de caracteres, que por
defecto es "SHUTDOWN" y aceptar cualquier petición en un hilo. He
visto que hay alguna lógica de aleatoriedad en el protocolo del
shutdown, de modo que tal vez estoy equivocado y ya tiene esto
implementado.
Yo estoy trabajando con tomcat desde que empecé mi tesis de la U, hace
casi 10 años. Lo conozco de arriba para abajo. Me parece increíble que
ahora todo el mundo lo usa.
Ah!, BTW, estoy asumiendo que usas tomcat 6.
Aclaracion a la pregunta
Sabes uso Ubuntu 8.04 en un server en Canada, y bueno uso el ssh de los pobres. jejeje
Ahora como podria abrir los puertos porque me sale esto:
Warning: Unable to bind to the given port number. Please select another one.
Respuesta a la aclaracion de la pregunta
Ese es un error de bind. Bind es la operación que asocia un puerto con
un "escuchador de sockets". ¿Qué te muestra netstat -lntp?, ¿qué
muestra iptables -L -n?
Tienes que ser más específico en los errores que salen. ¿dónde?, ¿cuándo?.
Aclaracion a la primera aclaracion
Bueno, lo que sucede es lo siguiente:
Estoy instalando JasperServer, es un servidor para crear reportes, bueno este en su all in one installer trae ya todo incluido el Tomcat, Mysql, y obiemante el servidor de reportes en si.
Este instalador tien un wizard que te va preguntando donde poner le servidor de reportes...pero en un paso del wizar d te pregunta el puerto por el cual se va conectar el tomcat que por defecto te dice que el 8080, ahora el sgte paso te pregunta un puerto para el shutdown y te dice por defecto que es el 8005, pero el problema es q coloco le puerto por defecto me sale el error del bind, asi que pienso que es el puerto que es el que esta bloqueado, pero como dices no es el firewall, ahora el iptables muestra que el puerto si eta escuchando pero al diferencia de los otros puertos este tiene un ip 127.0.0.1 y los otros tienen 0.0.0.0, y eso me hace pensar que es que el puerto solo esta disponible dentro el server y no para afuera.
Por eso es mi pregunta de como se puede abrir ese puerto o que configuracion hay apr esto de los puertos de tomcat.
Respuesta a la segunda aclaracion
Típicamente un error de bind será porque hay otro proceso que está
escuchando en ese puerto. No tiene nada que ver con un bloqueo, ni con
netfilter ni iptables. Antes de elegir puertos para servicios nuevos,
corre el siguiente commando:
$ lsof -i:8005
siendo 8005 el puerto donde quieres escuchar. Si muestra algo es
estado LISTEN, utiliza otro puerto para evitar errores de bind.
Generalmente no va importar qué puertos utilices, mientras tengas
listeners de http, https, o ajp escuchando por la red. No creo que
necesites configurar nada más que no sea durante el mencionado wizard.
¿APR?. ¿Tienes que usar APR?. En todo caso recomendaría no usar APR
hasta que la configuración básica no haya sigo superada. ¿Trae APR ese
all-in-one?, ¿viene para ubuntu o lo compila durante la instalación?.
Esta sería definitivamente una medida que muestra la madurez del
jasper. ¿No te parece?.
Otra respuesta mas
Se puede usar puertos de 1 a 65535, pero los puertos menores a 1024
requieren privilegios de root para ser utilizados. Eso quiere decir que
el proceso se debe lanzar como usuario privilegiado (root) de modo que
tenga permiso para abrir el puerto. Los puertos mayores a 1024 no tienen
esa restricción.