otwarcie portu 80 na Ubuntu AWS


11

Korzystam z serwera tomcat na ubuntukomputerze hostowanym w instancji AWS. Mogę połączyć się z serwerem za pośrednictwem, public_ip:8080ale kiedy zmieniam port nasłuchiwania server.xmlz 8080na 80połączenie, zdalny host odmawia.

Numer portu 80jest włączony AWS firewall.

Sprawdziłem ufwprzez, sudo ufw statusale wynik jestinactive

Czy ufwfront-end mechanizmu zapory?

Jak można włączyć portu 80na firewall?

Z góry dziękuję.

Ouptut z iptables -S:

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

Wyjście z 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

Wyjście netstat -na |grep \:80przed zmianą portu na 80:

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

Wyjście netstat -na |grep \:80po zmianie portu na 80:

tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN

Dane wyjściowe przeglądarki na porcie 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)

Część definicji portu server.xml

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

część Catalina.out podczas uruchamiania tomcat na 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 

AKTUALIZACJA 2:

Zainstalowałem tomcat przez, apt-getwięc jest to przepakowana wersja tomcat. Tutaj napisano, że uruchomienie tomcat jako root rozwiąże problem, ale tutaj jest napisane: Tomcat should not be run under the root user.Czy nie ma żadnego sposobu, aby poradzić sobie z tym za pomocą przepakowanej instancji tomcat?

AKTUALIZACJA 3:

Chyba to jest odpowiedź na moje pytanie


Rozważ uwzględnienie odpowiednich sekcji pliku server.xml, danych wyjściowych programu iptables -S, a najlepiej odpowiednich danych wyjściowych programu netstat -punta z uruchomionym programem tomcat.
Daniel Widrick

Jeśli zainstalowałeś Tomcat za pomocą apt-get, chcę tylko zauważyć, że zmiana portu server.xmlzwykle nie wystarcza, ponieważ port 80 jest portem uprzywilejowanym. Czy sprawdziłeś, catalina.outczy masz komunikat o błędzie?
David Levesque

Zanim zmienisz port w server.xml, jakie są dane wyjściowe netstat -na | grep \: 80 ? Następnie po zmianie portu w server.xml i zrestartowaniu jetty, jakie jest wyjście netstat -na | grep \: 80 ? To nie wydaje się być problemem zapory ogniowej.
Meatflag

Korzystam z
debiana

Odpowiedzi:


11

Tak to jest. To jest jak łatwa w użyciu wersja iptables. Spróbuj napisać, aby zobaczyć reguły zapory iptables:

$ sudo iptables -L

Możesz otworzyć port 80, używając:

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

Mogę opisać tę linię dla ciebie, jeśli jej potrzebujesz. Po prostu mi powiedz :-)


wyjście sudo iptables -Ljest 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 idealne Idealnie byłoby opisać linię, która ma otworzyć port 80. Z góry dziękuję.
gesus

Uruchamiam twoje polecenie, a port 80 jest otwarty i mogę uzyskać dostęp do mojej witryny. Następnie po ponownym uruchomieniu port jest ponownie zamykany, za każdym razem muszę go ponownie otwierać. Czy istnieje sposób, aby go na stałe otworzyć? Używam Ubuntu 14.04 LTS na VPS
KoKo

Będąc nową osobą na AWS Server EC2 (Ubuntu) spędziłem dużo czasu na wiele rzeczy. Użyłem twojego polecenia, aby otworzyć dostosowany port i zadziałało. Chociaż dodałem już ten dostosowany port w Security Group, sekcja wejściowa, ale nadal nie mogłem uzyskać dostępu. Po uruchomieniu polecenia moja witryna działa na moim serwerze wymaganym na niestandardowym porcie. Naprawdę pomocny.
Hammad Hassan

6

To działało dla mnie:

Uruchom jako root:

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.