AWSインスタンスでホストされているubuntu
マシンでTomcatサーバーを実行しています。 public_ip:8080
を介してサーバーにアクセスできますが、server.xml
のリスニングポートを8080
から80
に変更すると、リモートホストによって接続が拒否されます。
ポート番号80
がAWS firewall
で有効になっています。
ufw
をSudo ufw status
で確認しましたが、結果はinactive
です
ufw
は基盤となるファイアウォールメカニズムのフロントエンドですか?
firewall
でポート80
を有効にするにはどうすればよいですか?
少し早いですがお礼を。
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" />
port 80
でTomcatを起動したときのCatalina.outの一部:
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の再パッケージバージョンです。 ここ Tomcatをrootとして実行すると問題が解決することを示していますが、- ここ はTomcat should not be run under the root user.
を再パッケージしたTomcatインスタンスで処理する方法はありませんか? ?
更新3:
たぶん これ は私の質問への答えです
はい、そうです。これは、iptablesの使いやすいバージョンのようなものです。 iptablesファイアウォールルールを確認するには、次のように記述してください。
$ Sudo iptables -L
次を使用してポート80を開くことができます。
$ Sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
この行は、必要に応じて説明できます。ただ私に言って :-)
これは私のために働きました:
ルートとして実行:
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080