여러가지/오류

[트러블슈팅] 80포트 요청을 8080포트로 리다이렉션하기(feat. AWS)

hyeseong-dev 2024. 6. 16. 15:01

포트 80에서 포트 8080으로의 리다이렉션 설정

 

느낀점

이번 작업을 통해 여러 가지 중요한 교훈을 얻을 수 있었습니다.

1. 네트워크 인터페이스 확인의 중요성:

  • 서버 환경에 따라 네트워크 인터페이스 이름이 다를 수 있으므로, 작업 전에 항상 활성화된 인터페이스를 확인해야 합니다. 이를 통해 불필요한 오류를 피하고, 설정 작업을 더 효율적으로 수행할 수 있습니다.

2. 정확한 정보의 필요성:

  • 인터넷 블로그나 튜토리얼에서 제공하는 정보는 일반적인 환경을 기반으로 하기 때문에, 이를 맹목적으로 따르기보다는 자신의 환경에 맞게 수정하는 것이 필요합니다. 특히 네트워크 인터페이스와 관련된 정보는 서버마다 다를 수 있으므로, 정확한 정보를 바탕으로 설정을 진행해야 합니다.

3. AWS 보안 그룹 설정의 중요성:

  • AWS EC2 인스턴스의 보안 그룹에서 올바른 인바운드 규칙을 설정하는 것이 매우 중요합니다. 이를 통해 외부에서의 접근이 가능해지고, 필요한 포트에 대해 적절한 접근 권한을 부여할 수 있습니다.

4. 방화벽 설정의 중요성:

  • 방화벽 설정이 올바르게 되어 있는지 확인하는 것은 네트워크 작업에서 매우 중요합니다. 방화벽 설정이 잘못되어 있으면 외부에서의 접근이 차단될 수 있기 때문에, UFW나 iptables와 같은 방화벽 설정을 항상 확인하고 필요한 경우 수정해야 합니다. 이번 작업에서는 UFW 방화벽을 비활성화하여 SSH 연결 문제를 해결했습니다.

5. 문제 해결 과정의 체계화:

  • 문제를 해결하기 위해 체계적으로 접근하는 것이 중요합니다. 발생한 문제를 분석하고, 원인을 파악하며, 단계별로 해결해 나가는 과정을 통해 더욱 효율적으로 문제를 해결할 수 있었습니다. 이 과정에서 다양한 도구와 명령어를 활용하여 문제의 원인을 찾아내고 해결하는 경험은 매우 유익했습니다.

---

개요

리눅스 서버에서 포트 80으로 들어오는 HTTP 요청을 포트 8080으로 리다이렉트하는 작업의 일련의 과정을 다루고 있습니다. 작업의 목적, 시도한 방법, 발생한 오류 및 해결 과정, 잘못된 접근, 최종 교훈, 그리고 결과를 포함합니다.

목적

리눅스 서버에서 포트 80으로 들어오는 HTTP 요청을 포트 8080에서 실행 중인 애플리케이션으로 리다이렉트하여, 외부 사용자가 포트 80을 통해 웹 애플리케이션에 접근할 수 있도록 설정합니다.

시도한 것

1. 네트워크 인터페이스 확인

  • 서버에서 활성화된 네트워크 인터페이스를 확인하기 위해 ip addr 명령어를 사용했습니다.

2. iptables 규칙 추가

  • 포트 80으로 들어오는 요청을 포트 8080으로 리다이렉트하기 위해 iptables 규칙을 설정했습니다. 
  • sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080

3. 규칙 확인

  • 설정한 iptables 규칙이 적용되었는지 확인하기 위해 다음 명령어를 사용했습니다.
    sudo iptables -t nat -L PREROUTING -v -n

4. AWS 보안 그룹 인바운드 규칙 설정

5. UFW 방화벽 설정 확인 및 수정

  • 초기에는 UFW 방화벽이 비활성화되어 있었으나, 포트 80과 8080을 허용하는 설정을 추가했습니다. 하지만 이로 인해 포트 22 (SSH)가 차단되어 로컬 PC에서 SSH 연결이 불가능했습니다. 
  • sudo ufw allow 80/tcp sudo ufw allow 8080/tcp

6. SSH 연결 문제 해결

  • 로컬 PC에서 EC2 서버로의 SSH 연결이 불가능한 문제를 해결하기 위해, VPC 설정을 확인하고 문제 없음을 확인한 후 UFW 방화벽 설정을 비활성화했습니다.운영 서버에 방화벽을 적절히 설정하지 않고 비활성화하는 것은 매우 권장되지 않습니다.
    개발 목적과 학습 목적으로 사용하는 것을 당부합니다.
    sudo ufw disable

발생한 오류 및 해결 과정

1. 잘못된 인터페이스 사용

  • 초기 설정에서 잘못된 인터페이스(eth0)를 사용했습니다. 서버에서 실제 활성화된 인터페이스는 ens5였습니다.
  • ip addr 명령어를 사용하여 올바른 인터페이스를 확인하고, iptables 규칙을 수정했습니다.
    sudo iptables -t nat -D PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
    sudo iptables -t nat -A PREROUTING -i ens5 -p tcp --dport 80 -j REDIRECT --to-port 8080

2. SSH 연결 문제

  • UFW 방화벽 설정에서 포트 22 (SSH)를 허용하지 않아 로컬 PC에서 EC2 서버로의 SSH 연결이 불가능했습니다.
  • 이를 해결하기 위해 UFW 방화벽 설정을 비활성화했습니다.
    sudo ufw disable

3. AWS 보안 그룹 인바운드 규칙 설정 확인

  • AWS EC2 인스턴스의 보안 그룹에서 포트 80과 8080에 대한 인바운드 규칙이 올바르게 설정되었는지 확인했습니다. 이를 통해 외부에서의 접근이 가능하도록 설정했습니다.

잘못된 접근

  • 잘못된 네트워크 인터페이스(eth0)를 사용한 초기 접근.
  • 초기에는 방화벽이 비활성화되어 리다이렉션 설정이 문제가 있다고 잘못 판단.
  • UFW 방화벽 설정에서 포트 22를 허용하지 않아 SSH 연결이 불가능했던 문제.

 

결과

  • 올바른 인터페이스(ens5)를 사용하여 iptables 규칙을 설정한 후, 포트 80에서 포트 8080으로의 리다이렉션이 성공적으로 작동했습니다.
  • AWS 보안 그룹에서 포트 80과 8080에 대한 인바운드 규칙을 설정하여 외부에서의 접근을 허용했습니다.
  • 방화벽 설정을 비활성화하여 SSH 연결 문제를 해결하고, 외부에서 포트 80을 통해 웹 애플리케이션에 접근할 수 있게 되었습니다.
  • 리눅스 서버에서 iptables를 사용하여 포트 리다이렉션을 설정하는 과정에서 발생할 수 있는 문제와 해결 방법에 대한 실질적인 예시를 제공합니다. 이를 통해 향후 유사한 작업을 수행할 때 참고할 수 있는 유용한 자료가 될 것입니다.