[온라인저지] 외부접속 환경 구축(Ubuntu 서버 포트포워딩, 도메인 연결, 방화벽 설정)

Seohyun-kim·2022년 9월 21일
0

Online Judge System

목록 보기
2/9
post-thumbnail

온라인저지 서버를 오픈소스를 통해 구축하였고,
이를 사용자에게 제공하기위해

  1. 외부에서 Http를 통해 접근할 수 있도록 설정하고
  2. ip주소 대신 웹 페이지 주소로 접근할 수 있도록 설정하려고 한다.

1. 네트워크

1.1 ip 주소와 네트워크

  • 인터넷을 사용하기 위해서는 공인ip(고유한 값)가 필요하다.

  • 공인 ip는 고유한 값 이므로 모든 장비에 할당하기에는 부족하다.

  • 그래서 공유기를 통해 네트워크를 각 기기에 분배하게 된다.

  • 공유기에 연결된 각 기기(컴퓨터, 휴대폰,..)를 사설ip 주소로 구분하게 된다.


1.2 포트포워딩의 필요성

  • 인터넷이 연결 된 기기 중 컴퓨터 1번을 서버 컴퓨터로 사용한다고 가정해본다.

  • 이 컴퓨터에 다른 사람들이 http 웹 서버 80번 포트로 접근을 하고자 한다면

  • 컴퓨터 1번의 사설ip는 중복되기 때문에 외부에서는 접근할 수 있는 방법이 없다.

  • 따라서 우리는 고유한 주소인 공인ip를 통해 컴퓨터 1번에 접근할 수 있도록 연결해주어야 한다.

  • 이렇게 연결해 주는 것이 바로 포트포워딩(port forwarding)이다.


1.3 우분투에서 공인 ip주소 확인

$ curl ifconfig.me


2. 포트 포워딩 (port forwarding)

우리는 http 프로토콜을 통해 80번 포트로 들어오는 인터넷을
컴퓨터 1번의 80번 포트로 연결해주고자 한다.

보안 상의 이유로 포트번호를 임의로 지정하기도 하지만,
일단 그대로 80번을 사용해보고자 한다.

2.1 관리자 권한으로 변경

$ su

입력 후, 패스워드를 쳐 주면 된다.


2.2 iptables 조회

# iptables -t nat -L --line-numbers

현재 설정되어있는 상태를 확인할 수 있다.


2.3 포트포워딩 등록

# iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 80
  • 등록 후 조회를 해 보면 아래와 같이 나온다.

2.4 (참고) 포트포워딩 삭제

# iptables -t nat -D PREROUTING {num 숫자}

--line-numbers 옵션을 주고 조회를 하면 num값이 나오게 되는데
이 때의 번호로 삭제해주면 된다.


2.5 재부팅시에도 설정 유지

  • iptables 유지 패키지 설치

    # sudo apt install iptables-persistent
  • 현재 iptables 상태 저장

    # sudo netfilter-persistent save


3. 도메인 연결

3.1 도메인 구입

사용자가 노출이 쉽고 접근성이 떨어지는 ip주소 말고
naver.com과 같은 편한 영문 주소로 접근할 수 있도록 하기 위해서
고유의 도메인을 구입해야한다.

여러 호스팅 페이지가 있을텐데,
그 중 사용자가 많다는 호스팅케이알(HK) 에서 구입을 하였다.

3.1.1 원하는 도메인 검색

내가 쓰고 싶은 도메인 이름이 사용할 수 있는지 검색을 한 번 해본다.

abc라는 이름을 쓰고 싶다고 한다면

아래와 같이 사용가능한 주소와 이미 사용 중인 주소가 나올 것이다.

가격을 비교해보고 원하는 도메인을 선택하면 된다.

단, 각 도메인 별로 주의사항이 존재하기도 한다.
예를들면 비영리 목적으로만 사용해야 한다던지...

3.1.2 도메인 구입

  • 원하는 도메인을 골랐으면 결제해주면 된다.

  • 관리하려면 회원가입은 필수..!

  • 아래에 예시를 들기 위해 abc.re.kr를 샀다고 가정해보자.


3.2 도메인 연결

3.2.1 도메인 관리 접속

  • 로그인 후 나의 서비스 > 도메인 관리 에 접속

3.2.2 나의 도메인

  • 보유중인 도메인 목록이 뜬다.
    설정하고자 하는 도메인 클릭!

3.2.3 DNS 레코드 추가

  1. 해당 도메인의 네임서버/DNS탭 클릭
  1. 쭉 내려서 DNS 레코드 관리 > 새 DNS 레코드 추가
  1. ip 주소 입력

    • ip주소로 지정해주려면 유형은 A 그대로 두면 된다.

    • 이름에는 abc.re.kr 앞에 붙을 이름을 설정해 주는 것이다.
      즉, onlinejudge 라고 작성을 하면 onlinejudge.abc.re.kr로 접속을 할 수 있게 된다.

    • 값에는 지금 내가 사용하고 있는 컴퓨터의 공인 ip주소를 작성해주면 된다. (1.3 에서 명령어를 통해 확인한 그 ip주소!)

    • 아까 포트포워딩을 해 줬으니까 80번 포트로 들어오면 judge 데몬이 돌아가고 있는 컴퓨터의 80번 포트로 연결해 줄 것이다.

    • 저장을 해 주면 끝!!! 1분 정도 기다리면 적용이 된다.



4. 방화벽(UFW) 설정

ip주소를 입력하면 기본 게이트웨이에서 요청을 어느 곳으로 보낼 지 결정하게 된다.
이 때 외부 데이터가 들어오려면 그 포트의 방화벽을 열어주어야 한다.

4.1 방화벽 활성화

$ sudo ufw enable

4.2 80번 포트 접속 허용

$ sudo ufw allow 80

어느 ip에서든(anywhere) 접속 할 수 있도록 한다.

4.3 UFW 상태 확인

$ sudo ufw status




이제 끝!!
외부환경에서 우리가 구축해 놓은 온라인 저지 서버가 접속이 잘 될것이다!

여기에서는 http://onlinejudge.abc.re.kr 로 접속이 가능하단 소리다!
어디에서나!

0개의 댓글