web-dev-qa-db-ja.com

iptablesポートフォワーディング

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
4
ManiP

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
1
bahamat

Iptablesを逆方向に使用しています。 iptables -A INPUT -p tcp -m state --state NEW --dport 8080 -i eth0 -j ACCEPT明示的に世界へのポートを開きます。必要なのは、ACCEPTDROPに変更することです。そうすると、ポートは新しい接続のみを80に受け入れ、8080には受け入れません。

iptables -A INPUT -p tcp -m state --state NEW --dport 8080 -i eth0 -j DROP
0
Braiam