본문 바로가기

IT/Django

장고(django)서비스를 위한 방화벽 설정

web 서비스는 기본적으로 80, 443(ssh)를 사용하여 서비스를 합니다.  오라클 클라우드에 서버(인스탄스)를 생성하게 되면 기본적으로 ssh포트(22번)만 외부에서 접속할 수 있도록 되어 있습니다.

 

사용자가 원하는 서비스를 하기 위해서는 해당 서비스 포트를 접속할 수 있도록 해줘야 서비스가 가능합니다.

서비스 포트를 접속할 수 있도록 하는 방법은 2단계를 거쳐야 합니다.

 

오라클 클라우드는 기본적으로 idc 센터에서 가상서버로 서비스를 하기 때문에 각 사용작별로 가상네트워크가 생성이 되어 서비스를 하는 것으로 보입니다. 따라서 서비스 포트를 접속하게 하려면 먼저 각 사용자의 가상 네트워크에서 80, 443 포트를 접속이 가능하도록 규칙을 추가하여야 합니다.

 

그 다음에는 해당 서버에서 iptables를 이용하여 서비스 포트를 접속이 가능하도록 해야합니다.

 

80,443 규치 추가

오라클클라우드에 로그인 후, 

컴퓨트>인스턴스>서버선택> 서버 인스탄스 상세페이지로 이동합니다.

 

서브넷을 클릭합니다.

 

서브넷 상세페이지

네트워킹 > 가상클라우드 네트워크 메뉴의 서브넷 세부 정보 페이지로 이동합니다.

 

서브넷 상세페이지에서 보안목록 내의 링크를 클릭합니다.

 

보안목록 상세페이지

보안목록 세부정보 페이지입니다. 여기서 수신규칙 추가 버튼을 클릭합니다.

 

수신규칙에 등록된 포트는 이미 등록되어 있는 포트입니다.

22 : 터미널 접속(ssh)

3306 : db 접속

 

수신규칙 추가

수신 규칙을 추가하겠습니다.

 

1) 소스 CIDR 부분에 0.0.0.0/0 추가

2) 대상포트 범위에 80,443 추가

3) 설명에 간단하게 무슨 포트인지를 적어 놓습니다.

 

※ 0.0.0.0/0은 모든 아이프의 접속을 허용하겠다는 의미입니다.

※ 80 포트는 http, 443은 https(ssl) 포트입니다.

 

여기까지가 1단계입니다. 여기에 수신 규칙을 추가했지만 80, 443으로 접속이 되지 않습니다. 

이제 서버에 방화벽 해제를 하도록 하겠습니다.

 

서버 방화벽 해제 - iptables

 

80, 443 포트를 해제하려는 서버에서 터미널(SSH)로 접속합니다.

 

iptables 명령어를 통해 방화벽 규칙을 관리할 수 있습니다.

80,443 포트를 열도록 아래 명령어를 실행합니다.

 

$ iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT

$ iptables -I INPUT 1 -p tcp --dport 443 -j ACCEPT

$ iptables --list

 

대부분의 검색해서 오라클 클라우드 설정에 관한 자료들을 보면 여기까지 하고 다른 부분으로 넘어가는 경우가 많이 있습니다. 저역시도 그렇게 하면 되는지 알고 다음 단계로 넘어갔는데, 서버를 재시작하고 다시 로그인 하면 80, 443포트로 접속이 되지 않는 다는 겁니다.

 

최종 마무를 해주기 위해서는 다음 명령어를 실행 해주어야 합니다.

 

$ sudo netfilter-persistent save

$ sudo netfilter-persistent reload

$ sudo service iptables restart

 

위 명령어를 실행하면 방화벽 해제를 위한 명령어를 실행하면서 추가했던 포트에 대한 정보가 /etc/iptables의 rules.v4, v6에 정보가 저장이 되어 다시 리부팅하거나 할 경우에도 방화벽 해제가 실행된다는 것이다.

 

 

장고 서버 실행하기 - ubuntu mysqlclient 설치

장고 서버를 실행하게 되면 mysqlclient가 필요하다는 로그 메시지가 나옵니다.

 

$ pip mysqlclient 로 설치하면 됩니다.

만약 에러가 발생하면 아래의 명령어를 실행하면 됩니다.

$ apt-get update

$ apt-get install python3-dev default-libmysqlclient-dev build-essential

$ pip install mysqlclient