본문으로 건너뛰기

네트워크 관리

Bare Metal Server 서비스에서 네트워크를 관리하는 방법은 다음과 같습니다.

퍼블릭 IP 연결

인스턴스에 퍼블릭 IP를 연결할 수 있습니다.

권한 안내

프로젝트 관리자만 퍼블릭 IP 연결을 할 수 있습니다.

  1. 카카오클라우드 콘솔 > Beyond Compute Service > Bare Metal Server 메뉴로 이동합니다.

  2. 인스턴스 메뉴에서 퍼블릭 IP 인스턴스를 진행할 인스턴스의 [더 보기] 아이콘 > 퍼블릭 IP 연결을 선택합니다.

  3. 퍼블릭 IP 연결 팝업창에서 정보 확인 및 할당할 퍼블릭 IP를 선택하고, [확인] 버튼을 클릭합니다.

    이미지. 퍼블릭 IP 연결 설정 퍼블릭 IP 연결

퍼블릭 IP 연결 해제

인스턴스와 퍼블릭 IP 간의 연결을 해제할 수 있습니다.

권한 안내

프로젝트 관리자만 퍼블릭 IP 연결 및 해제할 수 있습니다.

주의

삭제하지 않고 퍼블릭 IP 연결만 해제한 경우, 실제 자원이 반납되지 않습니다. 따라서 해당 인스턴스를 사용하지 않는 경우에도 요금이 부과됩니다.

  1. 카카오클라우드 콘솔 > Beyond Compute Service > Bare Metal Server 메뉴로 이동합니다.

  2. 인스턴스 메뉴에서 퍼블릭 IP 연결을 해제할 인스턴스의 [더 보기] 아이콘 > 퍼블릭 IP 연결 해제를 선택합니다.

  3. 퍼블릭 IP 연결 해제 팝업창에서 정보를 확인하고, 인스턴스와 연결된 퍼블릭 IP를 연결 해제한 후 자동으로 삭제합니다.를 선택합니다.

  4. [연결 해제] 버튼을 클릭합니다.

다중 네트워크 인터페이스 사용

Bare Metal Server 인스턴스에서는 단일 인스턴스에 복수의 네트워크 인터페이스 설정이 가능하지만, 네트워크 라우팅 이슈가 발생할 수 있기 때문에 해당 구성을 권고하지 않습니다.
동일한 서브넷에서 2개 이상의 네트워크 인터페이스를 인스턴스에 연결할 경우, 비대칭 라우팅과 같은 네트워킹 문제가 발생할 수 있습니다. 따라서 각 네트워크 인터페이스가 서로 다른 서브넷에 연결되도록 설정하는 것을 권장합니다.

만약 하나의 인스턴스의 다중 네트워크 인터페이스를 모두 동일한 서브넷에 연결해야 할 경우 추가적인 설정이 필요합니다. 즉, 외부 통신을 원하는 네트워크 인터페이스에 연결된 게이트웨이만 남도록 다른 네트워크 인터페이스에 연결된 게이트웨이를 삭제해야 합니다.
다중 네트워크 인터페이스를 사용하기 위해 다른 네트워크 인터페이스에 연결된 게이트웨이를 삭제하는 방법은 다음과 같습니다.

안내

루트 사용자 권한으로 sudo를 사용하여 명령어를 실행합니다.

  1. 명령어를 실행하여 인스턴스 라우팅 설정을 확인합니다.

    인스턴스 라우팅 설정 확인
    sudo route -n
    인스턴스 라우팅 설정 확인 예시
    sudo route -n

    Destination Gateway Genmask Flags Metric Ref Use Iface
    0.0.0.0 198.168.0.1 0.0.0.0 UG 100 0 0 eth0
    0.0.0.0 10.10.0.1 0.0.0.0 UG 100 0 0 eth1
    198.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
    10.10.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
  2. 명령어를 실행하여 외부 통신할 네트워크 인터페이스에 연결된 게이트웨이를 남기고, 네트워크 인터페이스에 연결된 다른 게이트웨이는 삭제합니다.

    • 예시: 외부 통신할 네트워크 인터페이스(eth0)에 연결된 게이트웨이가 아닌 (eth1)에 연결된 게이트웨이 삭제

      eth1에 연결된 게이트웨이 삭제
      sudo route del default gw IP Address Adapter
      eth1에 연결된 게이트웨이 삭제 예시
      sudo route del default gw 10.10.0.1 dev eth1

      Destination Gateway Genmask Flags Metric Ref Use Iface
      0.0.0.0 198.168.0.1 0.0.0.0 UG 100 0 0 eth0
      198.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
      10.10.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1

iptables 설정

iptables란 시스템 관리자가 리눅스 상에서 방화벽 설정을 위해 필터링을 적용하기 위한 테이블입니다. 보안 그룹이 제공되기 전까지 사용자가 직접 운영체제(OS) 이미지 iptables에서 정책을 설정할 수 있습니다.

안내

iptables에 대한 자세한 설명은 Netfilter 공식 사이트의 iptables를 참고하시기 바랍니다.

iptables의 기본 용어와 명령어는 다음과 같습니다.

용어설명
TargetIP Packet이 Rule과 일치하는 경우 실행되는 동작
- ACCEPT: packet 허용
- DROP: packet 차단, 사용자에게 오류 메시지를 보내지 않음
- REJECT: packet 차단, 사용자에게 오류 메시지를 보냄
ChainIP Packet에 미리 설정한 Rule을 적용하여 Target 결정
- INPUT: System으로 들어오는 Packet의 Policy Rule
- OUTPUT: System에서 나가는 Packet의 policy Rule
- FORWARD: System에서 다른 System으로 보내는 Packet의 policy Rule

전체 명령어

용어설명
-A (–append)새로운 Rule 추가
- 현재 Rule 뒤에 추가됨
-D (–delete)Rule 삭제
-C (–check)패킷 테스트
-R (–replace)새로운 Rule로 교체
-I (–insert)새로운 Rule 삽입
- 현재 Rule 앞에 추가됨
-L (–list)Rule 조회
-S (–list-rules)Rule 출력
-F (–flush)Chain으로부터 Rule 모두 삭제
-Z (–zero)모든 Chain의 패킷과 바이트 카운터 값을 0으로 만듦
-N (–new)새로운 Chain을 생성
-X (–delete-chain)Chain 삭제
-P (–policy)기본정책 변경
-s (source IP)출발지 IP
-d (destination IP)목적지 IP
–sport (source port)출발지 포트
–dport (destination port)목적지 포트
j (–jump target)특정 정책 설정
p (protocol)TCP, UDP, ICMP 등 사용
i (in-interface)INPUT, OUTPUT chain에서 패킷이 들어오는 인터페이스를 설정할 때 사용
o (out-interface)OUTPUT, FORWARD chain에서 패킷이 나가는 네트워크 장치를 지정할 때 사용
t (tables)filter, nat, mangle 중 선택 가능
- 기본값: filter

정책 설정

카카오클라우드 콘솔의 Bare Metal Server 서비스에는 기본 설치된 iptables v1.6.1SSHGUARD가 있습니다. SSHGUARD는 몇 초 내 다수 로그인 실패와 같은 ssh에 대한 무차별 대입 공격으로부터 호스트를 보호합니다. SSHGUARD는 일반적인 iptables Rule에 해당되는 역할을 수행하지는 않으며, 사용자의 정책 기준에 따라 Rule을 직접 설정해야 합니다.
카카오클라우드 Bare Metal Server Ubuntu 환경에서 사용자가 iptables에 해당되는 Rule을 설정하는 방법은 다음과 같습니다.

안내

SSHGUARD에 대한 자세한 설명은 SSHGUARD 공식 사이트를 참고하시기 바랍니다.

iptables 버전 확인

설치된 iptables의 버전을 확인할 수 있습니다.

iptables 버전 확인
sudo iptables -V
iptables 버전 확인 명령 예시
iptables v1.6.1

Rule 조회

현재 iptables에 설정된 Rule을 조회할 수 있습니다.

Rule 조회
sudo iptables -nL --line-numbers --verbose

SSHGUARD가 설치되어 있으며, 적용된 Rule이 없는 상태입니다.

Rule 조회 명령 실행 결과 예시
sudo iptables -nL --line-numbers --verbose 명령어 실행 결과 (예시)
Chain INPUT (policy ACCEPT 451 packets, 44136 bytes)
num pkts bytes target prot opt in out source destination
1 773 77557 sshguard all -- * * 0.0.0.0/0 0.0.0.0/0

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination

Chain OUTPUT (policy ACCEPT 278 packets, 30411 bytes)
num pkts bytes target prot opt in out source destination

Chain sshguard (1 references)
num pkts bytes target prot opt in out source destination

Rule 출력

전체 Rule을 출력할 수 있습니다. 출력 결과가 iptables-save 방식으로 생성되어 바로 재사용이 가능한 포맷이라는 점에서 iptables Rule 조회 명령어인  sudo iptables -L와 다릅니다.

Rule 출력
sudo iptables -S -v
Rule 출력 명령 예시
sudo iptables -S -v 명령어 실행 결과 (예시)
-P INPUT ACCEPT -c 511 50127
-P FORWARD ACCEPT -c 0 0
-P OUTPUT ACCEPT -c 323 36247
-N sshguard
-A INPUT -c 833 83548 -j sshguard

Rule 생성

새로운 Rule을 생성할 수 있습니다.

주의

iptables에서 정책을 설정할 때, 사용자 접속 및 서비스와 관련된 IP Port가 차단되지 않도록 유의해야 합니다. 특히 외부로 나가는 Packet의 경우 특정 Port만 허용하면 나머지 Port로의 접근은 불가능해지므로 주의하시기 바랍니다. 사용자가 iptables를 직접 제어하다가 발생하는 문제는 서비스 공급자(카카오엔터프라이즈)가 대신 해결할 수 없으며, 사용자가 직접 이미지 재설치를 통해 인스턴스를 초기화하여 해결해야 합니다. 이미지 재설치는 [인스턴스 더 보기]의 리빌드 기능을 통해 할 수 있습니다.

Rule 생성
sudo iptables -A 

Rule 생성 명령 실행 사례

#case1. localhost 인터페이스에 들어오는 모든 패킷을 허용하는 Rule을 생성합니다.
sudo iptables -A INPUT -i lo -j ACCEPT

#case2. 외부에서 모든 목적지의 tcp/22 port로의 접근을 허용하는 Rule을 생성합니다.
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

#case3. 외부에서 모든 목적지의 tcp/80 port로의 접근을 허용하는 Rule을 생성합니다.
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT

#case4. 외부에서 모든 목적지의 tcp/443 port로의 접근을 허용하는 Rule을 생성합니다.
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

#case5. 외부 모든 출발지에서 내부 000.000.00.00 목적지 서버의 tcp/22번 port로의 접근을 허용하는 Rule을 생성합니다.
sudo iptables -A INPUT -d 000.000.00.00 -p tcp --dport 22 -j ACCEPT

Rule 삭제

더 이상 사용하지 않는 Rule을 삭제할 수 있습니다.

Rule 삭제
sudo iptables -D
Rule 삭제 명령 실행 사례
#case1. INPUT 체인의 Rule number 4를 삭제합니다.
sudo iptables -D INPUT 4

#case2. tcp 22 Port 접속 차단 Rule을 삭제합니다.
sudo iptables -D INPUT -p tcp -m tcp --dport 22 -j REJECT

#case3. 내부 모든 서버의 tcp/443번 Port로의 접근을 허용한 Rule을 삭제합니다.
sudo iptables -D INPUT -p tcp --dport 443 -j ACCEPT

Rule 설정 저장

iptables Rule은 시스템을 다시 시작하면 모두 사라지므로, 변경된 Rule 설정을 별도 etc/iptables.rules 파일로 저장합니다.

Rule 설정 저장
sudo iptables-save
저장된 파일 etc/iptables.rules 확인
sudo cat /etc/iptables.rules
sudo cat /etc/iptables.rules
# sudo cat /etc/iptables.rules 명령어 실행 결과
filter
:INPUT ACCEPT [1438:151829]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [845:93350]
:sshguard - [0:0]
-A INPUT -j sshguard
COMMIT
iptables 명령어 예시에 대한 항목별 설명
기본명령어체인Source IPDestination IPProtocolPort매칭동작
iptables-A    INPUT-s-d-p-dport    -j    ACCEPT
iptables-DOUTPUT-s-d-p-dport-jDROP
iptables-IFORWARD-s-d-p-dport-jREJECT