abriendo el puerto 80 en Ubuntu AWS

11

Estoy ejecutando un servidor Tomcat en una ubuntumáquina alojada en una instancia de AWS. Puedo llegar al servidor a través de, public_ip:8080pero cuando cambio el puerto de escucha server.xmlde 8080a 80conexión, el host remoto rechaza la conexión.

El número de puerto 80está activado AWS firewall.

He comprobado ufwa través sudo ufw status, pero es consecuenciainactive

¿Es el ufwfront-end del mecanismo de firewall subyacente?

¿Cómo puedo habilitar el puerto 80de firewall?

Gracias de antemano.

Salida de iptables -S:

-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT

Salida de netstat -punta

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      785/mysqld
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      613/sshd
tcp        0      0 172.31.1.56:22          92.45.23.114:3913       ESTABLISHED 5825/sshd: ubuntu [
tcp        0      0 172.31.1.56:22          92.45.23.114:19374      ESTABLISHED 7320/sshd: ubuntu [
tcp        0      0 172.31.1.56:22          92.45.23.114:28051      ESTABLISHED 6901/sshd: ubuntu [
tcp        0    272 172.31.1.56:22          92.45.23.114:9327       ESTABLISHED 7428/sshd: ubuntu [
tcp        0      0 172.31.1.56:22          92.45.23.114:7597       ESTABLISHED 7034/sshd: ubuntu [
tcp        0      0 127.0.0.1:3306          127.0.0.1:45655         ESTABLISHED 785/mysqld
tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      7275/java
tcp6       0      0 :::8080                 :::*                    LISTEN      7275/java
tcp6       0      0 :::22                   :::*                    LISTEN      613/sshd
tcp6       0      0 127.0.0.1:45655         127.0.0.1:3306          ESTABLISHED 7275/java
udp        0      0 0.0.0.0:68              0.0.0.0:*                           538/dhclient3

Salida de netstat -na |grep \:80antes de cambiar el puerto a 80:

tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN
tcp6       0      0 :::8080                 :::*                    LISTEN

Salida de netstat -na |grep \:80después de cambiar el puerto a 80:

tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN

Salida del navegador en el puerto 80:

ERROR

The requested URL could not be retrieved

The following error was encountered while trying to retrieve the URL: http://54.194.236.229/TransportationAutomation/personnel.xhtml

Connection to 54.194.236.229 failed.

The system returned: (111) Connection refused

The remote host or network may be down. Please try the request again.

Your cache administrator is webmaster.


Generated Fri, 14 Feb 2014 15:01:06 GMT by proxy (squid/2.7.STABLE7)

Parte de la definición de puerto de server.xml

<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           URIEncoding="UTF-8"
           redirectPort="8443" />

parte de Catalina.out al iniciar tomcat en port 80:

Feb 14, 2014 3:04:25 PM org.apache.coyote.AbstractProtocol init
SEVERE: Failed to initialize end point associated with ProtocolHandler ["http-bio-80"]
java.net.BindException: Permission denied <null>:80
  at org.apache.tomcat.util.net.JIoEndpoint.bind(JIoEndpoint.java:391)
  at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:554)
  at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:409)
  at org.apache.coyote.http11.AbstractHttp11JsseProtocol.init(AbstractHttp11JsseProtocol.java:119)
  at org.apache.catalina.connector.Connector.initInternal(Connector.java:956)
  at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
  at org.apache.catalina.core.StandardService.initInternal(StandardService.java:559)
  at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
  at org.apache.catalina.core.StandardServer.initInternal(StandardServer.java:815)
  at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
  at org.apache.catalina.startup.Catalina.load(Catalina.java:594)
  at org.apache.catalina.startup.Catalina.load(Catalina.java:619)
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  at java.lang.reflect.Method.invoke(Method.java:606)
  at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:281)
  at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:449)
Caused by: java.net.BindException: Permission denied
  at java.net.PlainSocketImpl.socketBind(Native Method)
  at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:376)
  at java.net.ServerSocket.bind(ServerSocket.java:376)
  at java.net.ServerSocket.<init>(ServerSocket.java:237)
  at java.net.ServerSocket.<init>(ServerSocket.java:181)
  at org.apache.tomcat.util.net.DefaultServerSocketFactory.createSocket(DefaultServerSocketFactory.java:49)
  at org.apache.tomcat.util.net.JIoEndpoint.bind(JIoEndpoint.java:378)
... 17 more 

ACTUALIZACIÓN 2:

Instalé tomcat vía, apt-getasí que es una versión reempaquetada de tomcat. Aquí dice que ejecutar tomcat como root resolverá el problema, pero aquí dice Tomcat should not be run under the root user.¿No hay alguna forma posible de manejarlo con la instancia de tomcat reempaquetada?

ACTUALIZACIÓN 3:

Supongo que esta es la respuesta a mi pregunta.

gesus
fuente
Considere incluir las secciones relevantes de su server.xml, la salida de iptables -S, e idealmente la salida relevante de netstat -punta con Tomcat ejecutándose.
Daniel Widrick
Si instaló Tomcat usando apt-get, solo quiero señalar que cambiar el puerto server.xmlgeneralmente no es suficiente, porque el puerto 80 es un puerto privilegiado. ¿Te registraste catalina.outpara ver si tienes algún mensaje de error?
David Levesque
Antes de cambiar el puerto en server.xml, ¿cuál es el resultado de netstat -na | grep \: 80 ? Luego, después de cambiar el puerto en server.xml y reiniciar jetty, ¿cuál es el resultado de netstat -na | grep \: 80 ? Esto no parece ser un problema de firewall.
meatflag
Estoy ejecutando debian wheezy y descubrí que necesitaba editar / etc / default / tomcat7 en lugar de /etc/init.d/tomcat7
Ruut

Respuestas:

11

Sí lo es. Es como una versión fácil de usar de iptables. Intente escribir para ver las reglas de firewall de iptables:

$ sudo iptables -L

Puede abrir el puerto 80 utilizando:

$ sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT

Puedo describir esta línea para usted, si la necesita. Sólo dime :-)

Adionditsak
fuente
salida de sudo iptables -Les Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Sería perfecto para describir la línea que tiene como objetivo abrir el puerto 80. Gracias de antemano.
gesus
Ejecuto su comando y el puerto 80 está abierto, y puedo acceder a mi sitio web. Luego, después de reiniciar, el puerto se cierra nuevamente, tengo que volver a abrirlo cada vez. ¿Hay alguna manera de abrirlo permanentemente? Estoy ejecutando Ubuntu 14.04 LTS en un VPS
KoKo
Ser una persona nueva en AWS Server EC2 (Ubuntu) pasó mucho tiempo en muchas cosas. Usé su comando para abrir un puerto personalizado y funcionó. Aunque ya he agregado ese puerto personalizado en el grupo de seguridad, sección de entrada, pero aún no he podido acceder. Después de ejecutar su comando, mi sitio web se ejecuta en el servidor de mi aplicación necesaria en un puerto personalizado. De mucha ayuda.
Hammad Hassan
6

Esto funcionó para mí:

Ejecutar como root:

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
demandar
fuente