본문 바로가기
서버구축 (WEB,DB)

Nginx를 사용한 CONNECT 프록시 설정 가이드

by 날으는물고기 2023. 10. 14.

Nginx를 사용한 CONNECT 프록시 설정 가이드

How to Use NGINX as an HTTPS Forward Proxy Server - Alibaba Cloud Community

Nginx를 사용하여 HTTPS CONNECT 요청을 통해 웹사이트에 연결하기 위한 전체 가이드입니다.

이 가이드에는 Nginx의 기본 설치, 모듈 설치, 설정 방법, 예제 내용 및 각 옵션의 설명이 포함되어 있습니다.

Nginx 설치

  1. Nginx를 설치합니다. (운영 체제에 따라 패키지 관리자를 사용하여 설치할 수 있습니다.)
    • Ubuntu/Debian:
      sudo apt-get update
      sudo apt-get install nginx
    • CentOS/RHEL:
      sudo yum install epel-release
      sudo yum install nginx
  2. Nginx 서비스를 시작하고 부팅 시 자동으로 실행되도록 설정합니다.
    sudo systemctl start nginx
    sudo systemctl enable nginx

Nginx 모듈 설치

Nginx에서 HTTPS CONNECT를 사용하려면 ngx_http_proxy_connect_module 모듈을 추가로 설치해야 합니다. 이 모듈을 사용하려면 Nginx를 재빌드해야 합니다. (--add-dynamic-module 옵션으로 동적모듈도 가능)

  1. 필요한 소프트웨어 및 도구를 설치합니다.
    sudo apt-get install build-essential libssl-dev
  2. Nginx의 소스 코드를 다운로드하고 압축을 해제합니다.
    wget http://nginx.org/download/nginx-1.19.10.tar.gz
    tar -zxvf nginx-1.19.10.tar.gz
  3. ngx_http_proxy_connect_module 모듈을 다운로드합니다.
    git clone https://github.com/chobits/ngx_http_proxy_connect_module.git
  4. Nginx를 빌드합니다.
    cd nginx-1.19.10
    ./configure --add-module=../ngx_http_proxy_connect_module
    make
    sudo make install

Nginx 설정

  1. Nginx 설정 파일 (nginx.conf) 예제:
    server {
        listen                         3128 ssl;
    
        # 자체 서명된 인증서 및 키 경로
        ssl_certificate_key            /경로/서버.key;
        ssl_certificate                /경로/서버.crt;
        ssl_session_cache              shared:SSL:1m;
    
        # DNS 리졸버 설정 (포워드 프록시용)
        resolver                       8.8.8.8;
    
        # CONNECT 요청을 위한 포워드 프록시 설정
        proxy_connect;
        proxy_connect_allow            all; # 모든 포트 허용
        proxy_connect_connect_timeout  10s;
        proxy_connect_data_timeout     10s;
    
        # 일반적인 요청을 위한 리버스 프록시 설정 (자신에게 맞게 수정)
        location / {
            proxy_pass http://$host;
            proxy_set_header Host $host;
        }
    }
    • proxy_connect: CONNECT 메서드 지원 활성화.
    • proxy_connect_allow: 프록시 CONNECT 메서드로 허용할 포트 또는 포트 범위 지정.
    • proxy_connect_connect_timeout: 프록시 서버와 연결을 설정하는데 허용되는 시간 설정.
    • proxy_connect_data_timeout: 클라이언트 또는 프록시 서버 연결 간에 전송되는 데이터 간의 허용 시간 설정.
       
  2. curl을 사용한 HTTPS CONNECT 요청 예제:
    curl https://example.com -sv -x localhost:3128 --proxy-insecure
    • --proxy-insecure 옵션은 Nginx 프록시 서버와의 SSL 연결에 대한 인증서 확인을 비활성화하며, 백엔드 서버에 대한 검증은 비활성화하지 않습니다.

Nginx 서비스 재시작

Nginx 설정을 변경한 후에는 Nginx 서비스를 재시작해야 합니다.

sudo systemctl restart nginx

이제 Nginx를 사용하여 HTTPS CONNECT 요청을 통해 웹사이트에 연결할 수 있습니다.

이 가이드를 따라 설정하면 안전한 웹사이트에 연결할 수 있는 Nginx 프록시 서버를 보유하게 됩니다.

 

Nginx의 ngx_http_proxy_connect_module 모듈을 사용하여 SSH 프로토콜을 통한 접근을 가능하게 할 수 있습니다. SSH는 일반적으로 HTTP 프록시를 통해 접근하지 않지만, 이 모듈을 사용하면 SSH를 포함한 다른 프로토콜에도 적용할 수 있습니다.

SSH Tunneling and Proxying

아래는 SSH 접근을 가능하게 하는 방법과 추가 설정에 대한 설명입니다.

SSH 프록시 설정

  1. Nginx 설정 파일 (nginx.conf)을 열고 다음 내용을 추가합니다. 이 예제에서는 SSH 접근을 위한 포트 22를 사용합니다.
    server {
        listen                         3128 ssl;
    
        # 자체 서명된 인증서 및 키 경로
        ssl_certificate_key            /경로/서버.key;
        ssl_certificate                /경로/서버.crt;
        ssl_session_cache              shared:SSL:1m;
    
        # DNS 리졸버 설정 (포워드 프록시용)
        resolver                       8.8.8.8;
    
        # CONNECT 요청을 위한 포워드 프록시 설정
        proxy_connect;
        proxy_connect_allow            22; # SSH 포트 허용
        proxy_connect_connect_timeout  10s;
        proxy_connect_data_timeout     10s;
    
        # 일반적인 요청을 위한 리버스 프록시 설정 (자신에게 맞게 수정)
        location / {
            proxy_pass http://$host;
            proxy_set_header Host $host;
        }
    }
  2. Nginx 서비스를 다시 시작하여 변경 사항을 적용합니다.
    sudo systemctl restart nginx

SSH 연결 테스트

이제 SSH 연결을 테스트할 수 있습니다. SSH 클라이언트를 사용하여 Nginx 프록시를 통해 SSH 서버에 연결합니다.

ssh -o "ProxyCommand=nc -x localhost:3128 %h %p" username@ssh_server_ip
  • ProxyCommand 옵션을 사용하여 SSH 연결을 Nginx 프록시 서버를 통해 라우팅합니다.
  • username을 SSH 서버의 실제 사용자 이름으로 바꾸고 ssh_server_ip를 SSH 서버의 IP 주소로 바꿉니다.

 

이로써 SSH를 통해 Nginx 프록시를 사용하여 원격 서버에 연결할 수 있게 됩니다. SSH 이외의 다른 프로토콜에도 위와 같은 방식으로 접근할 수 있습니다. 다만, 해당 프로토콜의 포트 번호를 proxy_connect_allow 옵션에 추가로 설정해야 합니다.

 

참고: 이 설정은 보안상 주의가 필요하며, 필요한 경우 추가적인 보안 및 접근 제어를 구현해야 합니다. 또한, SSH 프록시에 대한 외부 액세스를 허용하기 전에 보안 정책 및 사용 규칙을 신중하게 검토해야 합니다.

728x90

댓글