TCPポート8080にJava/J2EE(Tomcat)がインストールされたCentOSサーバーがあります。eth0とloの2つのインターフェイスがあります。
TCPポート80から8080に、すべての着信接続を転送する必要があります。
私はうまくいく以下をやってみました:
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j DNAT --to x.x.x.x:8080
iptables -A INPUT -p tcp -m state --state NEW --dport 8080 -i eth0 -j ACCEPT
ここで、x.x.x.xはeth0インターフェースに関連付けられたIPです。
これは、ポート8080を外の世界にも開くように見えますが、これはやりたくないことです。ポート80を外界に公開し、すべてのトラフィックを8080に転送したいだけです。
どんな助けでもいただければ幸いです。
更新:iptables-Lは次のようになります
[root@server admin]# iptables -L
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT tcp -- anywhere anywhere tcp dpt:ssh
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
DROP tcp -- anywhere anywhere state NEW tcp dpt:http
Chain FORWARD (policy DROP)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
[root@server admin]#
iptables -t nat--listは以下のようになります
[root@server admin]# iptables -t nat --list
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DNAT tcp -- anywhere anywhere tcp dpt:http to:x.x.x.x:8080
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
[root@server admin]# ^C
Tomcatを80でリッスンするように設定するか、Apache/nginxをリバースプロキシとして使用するように提案するコメントを投稿しました。これは、実際に行うべきことだと思います。しかし後世のために、私はあなたのiptables
の質問にも答えます。
問題は、あなたがしているのはDNATではなく、ポートリダイレクションだということです。の代わりに -j DNAT
必要です-j REDIRECT
。
例えば。:
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
Iptablesを逆方向に使用しています。 iptables -A INPUT -p tcp -m state --state NEW --dport 8080 -i eth0 -j ACCEPT
明示的に世界へのポートを開きます。必要なのは、ACCEPT
をDROP
に変更することです。そうすると、ポートは新しい接続のみを80に受け入れ、8080には受け入れません。
iptables -A INPUT -p tcp -m state --state NEW --dport 8080 -i eth0 -j DROP