iptables 포트 포워딩

iptables 포트 포워딩

TCP 포트 8080에 Java/J2EE(Tomcat)가 설치된 CentOS 서버가 있습니다. eth0과 lo라는 두 개의 인터페이스가 있습니다.

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

여기서 xxxx는 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

답변1

나는 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

답변2

iptables를 거꾸로 사용하고 있습니다. 명시적으로 iptables -A INPUT -p tcp -m state --state NEW --dport 8080 -i eth0 -j ACCEPT포트를 전 세계에 개방합니다. 필요한 것은 포트가 8080이 아닌 80에 대한 새 연결만 허용하도록 for를 변경하는 ACCEPT것 입니다.DROP

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

관련 정보