เปิดพอร์ต 80 บน Ubuntu AWS


11

ฉันใช้เซิร์ฟเวอร์ Tomcat บนubuntuเครื่องที่โฮสต์ในอินสแตนซ์ของ AWS ฉันสามารถเข้าถึงเซิร์ฟเวอร์ผ่านทางpublic_ip:8080แต่เมื่อฉันเปลี่ยนพอร์ตฟังบนserver.xmlจาก8080การ80เชื่อมต่อถูกปฏิเสธโดยโฮสต์ระยะไกล

หมายเลขพอร์ตเปิดใช้งานบน80AWS firewall

ฉันตรวจสอบufwผ่านsudo ufw statusแต่ผลลัพธ์คือinactive

คือufwfront-end ของกลไกไฟร์วอลล์พื้นฐาน?

ฉันสามารถเปิดใช้งานพอร์ต80บนfirewall?

ขอขอบคุณล่วงหน้า.

Ouptut ของiptables -S:

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

ผลผลิตของ 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

เอาต์พุตของnetstat -na |grep \:80ก่อนเปลี่ยนพอร์ตเป็น80:

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

ผลลัพธ์ของnetstat -na |grep \:80หลังจากเปลี่ยนพอร์ตเป็น80:

tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN

ผลลัพธ์ของเบราว์เซอร์บนพอร์ต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)

ส่วนนิยามพอร์ตของ server.xml

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

ส่วนหนึ่งของ Catalina.out เมื่อเริ่มต้น tomcat บน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 

อัปเดต 2:

ฉันติดตั้งโพงผ่านapt-getดังนั้นมันจึงเป็นเวอร์ชั่นใหม่ของโพงแคท ที่นี่มีข้อความระบุว่าการใช้ Tomcat เป็นรูทจะช่วยแก้ปัญหา แต่ที่นี่มันบอกว่าTomcat should not be run under the root user.ไม่มีวิธีที่เป็นไปได้ที่จะจัดการกับอินสแตนซ์ Tomcat ที่บรรจุใหม่หรือไม่

อัปเดต 3:

ฉันเดาว่านี่คือคำตอบสำหรับคำถามของฉัน


โปรดพิจารณารวมถึงส่วนที่เกี่ยวข้องของ server.xml, เอาต์พุตของ iptables -S, และผลลัพธ์ที่เกี่ยวข้องจาก netstat -punta ด้วยการรัน tomcat
Daniel Widrick

หากคุณติดตั้ง Tomcat โดยใช้apt-getฉันแค่ต้องการชี้ให้เห็นว่าการเปลี่ยนพอร์ตserver.xmlโดยทั่วไปไม่เพียงพอเพราะพอร์ต 80 เป็นพอร์ตที่มีสิทธิพิเศษ คุณเช็คอินcatalina.outเพื่อดูว่าคุณมีข้อผิดพลาดหรือไม่?
David Levesque

ก่อนที่คุณจะเปลี่ยนพอร์ตใน server.xml เอาต์พุตของnetstat -na | grep \: 80คืออะไร แล้วหลังจากที่คุณเปลี่ยนพอร์ตใน server.xml และเริ่มต้นใหม่ท่าเทียบเรือสิ่งที่เป็นผลผลิตของ-na netstat | grep \: 80 ? ดูเหมือนว่านี่จะไม่ใช่ปัญหาไฟร์วอลล์
meatflag

ฉันใช้เสียงดัง debian และพบว่าฉันต้องการแก้ไข / etc / default / tomcat7 แทน /etc/init.d/tomcat7
Ruut

คำตอบ:


11

ใช่แล้ว. มันเหมือนรุ่น iptables ที่ใช้งานง่าย ลองเขียนเพื่อดูกฎไฟร์วอลล์ iptables:

$ sudo iptables -L

คุณสามารถเปิดสำหรับพอร์ต 80 โดยใช้:

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

ฉันสามารถอธิบายบรรทัดนี้สำหรับคุณถ้าคุณต้องการมัน เพียงแค่บอกฉัน :-)


เอาท์พุทของsudo iptables -Lคือ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 มันจะสมบูรณ์แบบในการอธิบายบรรทัดที่มีวัตถุประสงค์เพื่อเปิดพอร์ต 80 ขอบคุณล่วงหน้า
gesus

ฉันเรียกใช้คำสั่งของคุณและพอร์ต 80 เปิดและฉันสามารถเข้าถึงเว็บไซต์ของฉัน จากนั้นหลังจากที่ฉันรีบูตพอร์ตจะปิดอีกครั้งฉันต้องเปิดใหม่ทุกครั้ง มีวิธีเปิดอย่างถาวรหรือไม่ ฉันใช้ Ubuntu 14.04 LTS ใน VPS
KoKo

การเป็นคนใหม่บน AWS Server EC2 (Ubuntu) ใช้เวลามากมายในหลาย ๆ เรื่อง ฉันใช้คำสั่งของคุณเพื่อเปิดพอร์ตที่กำหนดเองและใช้งานได้ แม้ว่าฉันได้เพิ่มพอร์ตที่กำหนดเองในกลุ่มความปลอดภัยแล้วส่วนขาเข้า แต่ก็ยังไม่สามารถเข้าถึงได้ หลังจากรันคำสั่งของคุณเว็บไซต์ของฉันกำลังทำงานบนแอปของฉันต้องการเซิร์ฟเวอร์ที่พอร์ตที่กำหนดเอง มีประโยชน์จริงๆ
Hammad Hassan

6

สิ่งนี้ใช้ได้กับฉัน:

เรียกใช้เป็นราก:

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.