외부 접근을 위한 프록시 설정

학교의 모든 지식. SMwiki
둘러보기로 이동 검색으로 이동

개요[편집 | 원본 편집]

아쉬움[편집 | 원본 편집]

  • 회사망이나 학교 내부에서 웹서버 따위를 운용할 때 외부에서의 접속이 막혀 있어 범용성에서 제약이 있다.
  • 학교 내부에서 사용할 때에도 하나의 공유기가 아니라 여러 공유기를 이용하는데, 모두가 동일한 공유기에 모두가 접속해야 하는 불편이 있어 외부에서 웹서버를 이용할 수 있는 전략이 필요하다.
  • 학생들이 만든 웹사이트, 서비스를 꾸준히 이용하고자 할 때 학생 개인의 사비를 들여 외부에 개인 서버를 구축하여 사용하는 경우가 많다.
  • 아마존 등에서 클라우드 서비스를 이용한다 하더라도 행정적 빈틈으로 결재가 늦어지는 상황이 발생하여 불편을 겪는 경우가 있다.

단계[편집 | 원본 편집]

단계 설명 비고
본 서버 nginx설정 기본적으로 nginx로 운영한다고 가정한다.
  • 다음과 같이 구성했을 때 내부 서버로 접속하면 웹서버가 잘 작동함을 확인한다.
  • 미디어위키 설정에서 $wgServer, $wgCanonicalServer 따위의 옵션을 요구하는데, 여기엔 일단 본 서버의 ip를 넣는다.(리다이렉트를 하기 때문에 요청과 서버의 ip가 맞지 않으면 403 에러가 뜬다.)
server {
    listen 80;
    # 프록시, 로컬, 도메인이이 다 들어가야 점검할 때 편함.
    server_name smwiki.info 100.101.144.125 100.117.229.125 192.168.0.8;

    root /var/www/html/mediawiki;
    index index.php index.html index.htm;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    # 특정 PHP 파일만 실행 (보안 강화)
    location ~ ^/(index|api|load)\.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    # 모든 다른 PHP 파일 실행 차단
    location ~ \.php$ {
        return 403;
    }

    location ~ /\.ht {
        deny all;
    }
    # 업로드 파일 크기 제한
    client_max_body_size 20M;
}
프록시 서버 설정
  • 프록시 서버의 nginx 옵션을 다음과 같이 작성한다.
  • 1080옵션을 쓰는 이유는 통신사에서 1080 포트를 열어주지 않는 경우가 많기 때문에.
  • 미디어위키 설정에서 $wgServer, $wgCanonicalServer 옵션을 요청할 프록시 서버의 ip로 둔다.(이 옵션을 기준으로 리다이렉트 하기 때문에;)
  • 프록시의 1080 포트로 접속했을 때 사이트가 잘 뜬다면 프록시 서버 설정까지 이상 없음.
server {
    listen 1080;
    # 서버네임 옵션.. 불편. 마지막에 완성하고 도메인만 살리면 된다.
    #server_name smwiki.info 100.117.229.125 192.168.0.8;
    server_tokens off;

    location / {
        proxy_pass http://100.101.144.125:80;  # 본 서버의 ip 지정
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
포트포워딩 및 클라우드플레어 설정
  • 포트포워딩을 프록시 서버의 1080포트로 지정해준다.
  • 클라우드플레어에서 구입한 도메인을 사용하는 설정 후, 공유기의 1080 포트로 요청이 연결되게끔 구생한다.
  • 도메인으로 접속했을 때 이상 없으면 문제 없음.

결론[편집 | 원본 편집]

보안 관련[편집 | 원본 편집]

  • 기본적으로 100.x.x.x 형태의 ip는 tailscale이 연결된 기기 간에서만 사용할 수 있기에 외부 기기에서 접속은 불가하다. ssh 등의 탈취 위험이 적다.
  • 외부에서 허용된 server_name은 도메인 뿐이고, 열려있는 포트는 본 서버 입장에선 오로지 80번 포트이기에 해킹 등 조작의 위험이 적다.

자주 하는 실수, 문제해결.[편집 | 원본 편집]

  • ss -tulnp | grep 10000 로 특정 포트가 열려 있는지 쉽게 확인 가능. 안되어 있다면 이전의 설정에서 문제가 생긴 것.
  • nginx site-available에서 작성하고 enabled로 안옮기면 적용이 안됨. sudo ln -s /etc/nginx/sites-available/your_config_file /etc/nginx/sites-enabled/