※ 이 글은 공식 문서에 나와 있는 내용을 기반으로 해서 작성되었습니다.
오라클 클라우드를 웹서버 등의 목적으로 사용하기 위해서 해야하는 작업 중 하나가 바로 방화벽 설정입니다. 특히나 오라클 클라우드는 방화벽이 오라클 클라우드 방화벽과 OS 방화벽으로 이중으로 설정되어 있어서 더더욱 까다롭지요. 그래도 하는 법만 알게 된다면 그렇게까지 어렵지 않습니다.
오라클 클라우드 방화벽 설정
먼저 오라클 클라우드가 제공하는 '가상 클라우드 네트워크'의 방화벽을 설정합니다.
인스턴스에 들어가면 '인스턴스 세부정보' 밑에 '가상 클라우드 네트워크'라는 항목이 있을 것입니다. 이것을 클릭해줍니다.
'가상 클라우드 네트워크'의 좌측 하단을 보면 '보안 목록'이 보입니다. 별다른 설정을 하지 않았다면 'Default Security List for ~~'와 같은 이름의 보안 목록이 있을 것입니다. 여기가 우리가 가야할 곳입니다.
이 화면은 이것저것 수정을 한 상태이긴 합니다만, 웹페이지를 서비스하기 위해서는 대략 이런 모습으로 설정을 하시면 됩니다.
소스 유형은 그대로 'CIDR'로 설정합니다.
소스 CIDR은 '0.0.0.0/0'으로 설정합니다. 이는 이 IP로 오는 모든 통신을 의미합니다.
IP 프로토콜은 해당 인스턴스로 무엇을 할 것인가에 따라 달라집니다만, 웹페이지를 서비스 하기 위해서는 TCP로 설정해야 합니다.
소스 포트 범위는 빈 칸으로 둔 채 대상 포트 범위를 설정합니다. HTTP는 80, HTTPS는 443 포트가 열려 있어야 합니다.
설명은 선택사항입니다.
OS 방화벽 설정
이제 OS의 방화벽을 설정할 차례입니다. 다만 오라클 클라우드가 제공하는 여러 OS 중 'Oracle Linux'와 'Ubuntu'만을 써보았으며 둘 다 모두 iptables
를 사용했던지라, 이에 대한 방법만 알려드릴 수 있습니다.
Oracle Linux와 Ubuntu 모두 iptables를 통해 방화벽 기능을 제공하므로, iptables 설정 방법에 대해 알려드리겠습니다.
먼저 다음 명령어를 입력합니다.
sudo iptables -L --line-numbers
위 사진은 이미 방화벽 설정이 완료된 화면입니다만, 이와 비슷한 화면이 나올 것입니다.
여기서 확인해야 할 것은 Chain INPUT (policy ACCEPT)
아래에 있는 REJECT
항목입니다. 대부분의 경우 여섯번째 항목이며, REJECT all -- anywhere anywhere
와 같은 형태를 띄고 있습니다.
해당 항목의 번호를 기억한 후, 다음 명령어에 해당 번호를 넣어 입력합니다.
sudo iptables -D INPUT <reject line number>
// 예시: sudo iptables -D INPUT 6
만약 REJECT 항목이 여섯번째에 있었다면 두번째 줄의 주석 처리된 명령어를 입력하면 되겠지요.
이후 입력을 허용할 포트를 지정해서 열어주어야 합니다.
다음 명령어는 각각 80번 포트와 443번 포트를 엽니다.
sudo iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -m state --state NEW -p tcp --dport 443 -j ACCEPT
여기서 굳이 state를 NEW
로 지정해주는 이유는 이미 Chain INPUT (policy ACCEPT)
의 첫번째 항목이 RELATED, ESTABLISHED
를 허용해주고 있기 때문입니다. 이미 허용하고 있는데 또 다시 걸러낼 필요가 없는 것입니다.
필요한 포트를 모두 열었다면 다시금 sudo iptables -L --line-numbers
로 모든 것이 정상적으로 적용되었는가 확인합니다.
하지만 이 상태에서 그대로 설정을 끝마친다면 인스턴스가 재시작되었을 때 iptables가 초기화 될 수 있습니다. 따라서 미리 현재 설정 완료된 iptables를 저장해야 합니다.
root 계정으로 다음 명령어를 입력합니다.
netfilter-persistent save
// 아니면: iptables-save > /etc/iptables/rules.v4
만약 netfilter-persistent
가 작동하지 않는다면 두번째 줄의 iptables-save
명령어를 이용하세요.