iptables 포트 리디렉션이 작동하지 않습니다

iptables 포트 리디렉션이 작동하지 않습니다

localhost:8082에서 실행되는 웹 서버를 설정하고 포트 80을 이 서버로 리디렉션하려고 합니다.

사전 경로 리디렉션 nat 테이블을 사용하여 이 작업을 수행했지만 작동하지 않는 것 같습니다. 패킷이 규칙에 도착하지만 전달되지 않는 것 같습니다.

내 iptables는 다음과 같습니다.

ubuntu@ip-172-31-31-104:~$ sudo iptables -t nat -L -v -n
Chain PREROUTING (policy ACCEPT 6 packets, 348 bytes)
 pkts bytes target     prot opt in     out     source               destination
    6   320 REDIRECT   tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80 redir ports 8082    
    2    84 REDIRECT   tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:443 redir ports 8082   
    0     0 REDIRECT   tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:38204 redir ports 38204

Chain INPUT (policy ACCEPT 14 packets, 752 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 381 packets, 27905 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain POSTROUTING (policy ACCEPT 381 packets, 27905 bytes)
 pkts bytes target     prot opt in     out     source               destination

localhost:8082로 컬링하면 내 서버 로그는 다음과 같습니다.

2019/09/16 11:47:36 "GET http://localhost:8082/ping HTTP/1.1" from 127.0.0.1:40386 - 200 87B in 83.384µs

그러나 postman을 사용하여 외부 ei에서 요청을 시도하면 ip 테이블은 다음과 같습니다.

ubuntu@ip-172-31-31-104:~$ sudo iptables -t nat -L -v -n
Chain PREROUTING (policy ACCEPT 6 packets, 348 bytes)
 pkts bytes target     prot opt in     out     source               destination
   11   580 REDIRECT   tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80 redir ports 8082    
    2    84 REDIRECT   tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:443 redir ports 8082   
    0     0 REDIRECT   tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:38204 redir ports 38204

Chain INPUT (policy ACCEPT 19 packets, 1012 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 395 packets, 28995 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain POSTROUTING (policy ACCEPT 395 packets, 28995 bytes)
 pkts bytes target     prot opt in     out     source               destination

pkts 및 bytes 열은 변경되므로 패킷이 시스템에 도달하는 것처럼 보이지만 서버 로그에는 새 로그가 나타나지 않습니다.

걱정해야 할 또 다른 방화벽이나 추상화 수준이 있습니까?

당신의 도움을 주셔서 감사합니다!

고쳐 쓰다 이것은 netstat입니다. 내 서버는 centrifuge라고 불리므로 포트 8082에서 수신 대기합니다.

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:8082          0.0.0.0:*               LISTEN      4163/centrifuge
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      -
tcp        0      0 127.0.0.1:52698         0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:38204           0.0.0.0:*               LISTEN      4163/centrifuge
tcp6       0      0 :::22                   :::*                    LISTEN      -
tcp6       0      0 :::8088                 :::*                    LISTEN      26143/pm2-gui slave
tcp6       0      0 ::1:52698               :::*                    LISTEN      -

답변1

@msp9011 및 @user4556274가 설명하려고 시도한 것처럼 서버가 "127.0.0.1" 주소가 아닌 "모든 주소"에서 수신 대기하도록 해야 합니다. 따라서 웹 서버 소프트웨어에 따라 소위 "수신 주소"를 다음과 같이 변경할 수 있습니다.

  • 127.0.0.1을 공백으로 바꾸십시오. 즉, 구성을 삭제하십시오.
  • 127.0.0.1을 0.0.0.0으로 바꾸면 모든 IP에서 수신 대기한다는 의미입니다.
  • 기본 127.0.0.1을 재정의하려면 0.0.0.0 구성을 추가하세요.
  • 이 라인을 따라 "수신" 또는 "바인딩" 주소에 대한 문서와 로컬 주소만 수신하지 않도록 만드는 방법을 확인하세요.

귀하가 보유하고 있는 웹 서버 소프트웨어에 대해 더 자세히 알려주시면 위 프로세스에 대한 자세한 내용을 제공하는 데 도움을 드릴 수 있습니다.

그러나 성공하면 현재 netstat 출력에 다음 줄이 나타납니다.

tcp        0      0 127.0.0.1:8082          0.0.0.0:*               LISTEN      4163/centrifuge

구성을 성공적으로 업데이트한 후에는 다음과 같아야 합니다.

tcp        0      0 0.0.0.0:8082            0.0.0.0:*               LISTEN      4163/centrifuge

@user4556274가 인용한 문서는 로컬 IP 주소 123.456.78.9의 인터페이스를 사용하여 새 연결이 들어오면 REDIRECT 대상이 대상 포트를 8082로 변경하고 대상 호스트를 123.456.78.9(예: 127.0.0.1이 아닌)로 변경한다는 것을 의미합니다. ). 0.1). 구성은 127.0.0.1에서만 수신 대기하므로 다른 대상 주소가 있는 패킷은 표시되지 않습니다. 주소 0.0.0.0은 특별합니다. 즉, 모든 주소를 수신한다는 의미입니다.

관련 정보