네트워크 관리
Bare Metal Server 서비스에서 네트워크를 관리하는 방법은 다음과 같습니다.
퍼블릭 IP 연결
인스턴스에 퍼블릭 IP를 연결할 수 있습니다.
프로젝트 관리자만 퍼블릭 IP 연결을 할 수 있습니다.
-
카카오클라우드 콘솔 > Beyond Compute Service > Bare Metal Server 메뉴로 이동합니다.
-
인스턴스 메뉴에서 퍼블릭 IP 인스턴스를 진행할 인스턴스의 [더 보기] 아이콘 > 퍼블릭 IP 연결을 선택합니다.
-
퍼블릭 IP 연결 팝업창에서 정보 확인 및 할당할 퍼블릭 IP를 선택하고, [확인] 버튼을 클릭합니다.
퍼블릭 IP 연결
퍼블릭 IP 연결 해제
인스턴스와 퍼블릭 IP 간의 연결을 해제할 수 있습니다.
프로젝트 관리자만 퍼블릭 IP 연결 및 해제할 수 있습니다.
삭제하지 않고 퍼블릭 IP 연결만 해제한 경우, 실제 리소스가 반납되지 않습니다. 따라서 해당 인스턴스를 사용하지 않는 경우에도 요금이 부과됩니다.
-
카카오클라우드 콘솔 > Beyond Compute Service > Bare Metal Server 메뉴로 이동합니다.
-
인스턴스 메뉴에서 퍼블릭 IP 연결을 해제할 인스턴스의 [더 보기] 아이콘 > 퍼블릭 IP 연결 해제를 선택합니다.
-
퍼블릭 IP 연결 해제 팝업창에서 정보를 확인하고, 인스턴스와 연결된 퍼블릭 IP를 연결 해제한 후 자동으로 삭제합니다.를 선택합니다.
-
[연결 해제] 버튼을 클릭합니다.
네트워크 인터페이스 연결
인스턴스에 네트워크 인터페이스를 연결할 수 있습니다.
- 2024년 현재 다중 네트워크 인터페이스는 아직 지원되지 않습니다.
-
카카오클라우드 콘솔 > Beyond Compute Service > Bare Metal Server 메뉴로 이동합니다.
-
인스턴스 메뉴에서 네트워크 인터페이스를 추가로 연결할 인스턴스의 [더 보기] 아이콘 > 네트워크 인터페이스 연결을 선택합니다.
-
네트워크 인터페이스 연결 팝업창에서 정보를 확인하고, 연결할 네트워크 인터페이스를 선택합니다.
-
[확인] 버튼을 클릭합니다.
네트워크 인터페이스 분리
인스턴스에 연결된 보조 네트워크 인터페이스의 연결을 분리할 수 있습니다.
- 기본(Primary) 네트워크 인터페이스는 분리할 수 없습니다.
-
카카오클라우드 콘솔 > Beyond Compute Service > Bare Metal Server 메뉴로 이동합니다.
-
인스턴스 메뉴에서 네트워크 인터페이스를 추가로 연결할 인스턴스의 [더 보기] 아이콘 > 네트워크 인터페이스 분리 선택합니다.
-
네트워크 인터페이스 분리 팝업창에서 정보를 확인하고, 분리할 네트워크 인터페이스를 선택합니다.
-
[확인] 버튼을 클릭합니다.
다중 네트워크 인터페이스 사용
Bare Metal Server 인스턴스에서는 단일 인스턴스에 다중 네트워크 인터페이스 설정이 가능하지만, 네트워크 라우팅 이슈가 발생할 수 있기 때문에 해당 구성을 권고하지 않습니다.
동일한 서브넷에서 2개 이상의 네트워크 인터페이스를 인스턴스에 연결할 경우, 비대칭 라우팅과 같은 네트워킹 문제가 발생할 수 있습니다. 따라서 각 네트워크 인터페이스가 서로 다른 서브넷에 연결되도록 설정하는 것을 권장합니다.
만약 하나의 인스턴스의 다중 네트워크 인터페이스를 모두 동일한 서브넷에 연결해야 할 경우 추가적인 설정이 필요합니다. 즉, 외부 통신을 원하는 네트워크 인터페이스에 연결된 게이트웨이만 남도록 다른 네트워크 인터페이스에 연결된 게이트웨이를 삭제해야 합니다.
다중 네트워크 인터페이스를 사용하기 위해 다른 네트워크 인터페이스에 연결된 게이트웨이를 삭제하는 방법은 다음과 같습니다.
루트 사용자 권한으로 sudo
를 사용하여 명령어를 실행합니다.
-
명령어를 실행하여 인스턴스 라우팅 설정을 확인합니다.
인스턴스 라우팅 설정 확인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 -
명령어를 실행하여 외부 통신할 네트워크 인터페이스에 연결된 게이트웨이를 남기고, 네트워크 인터페이스에 연결된 다른 게이트웨이는 삭제합니다.
-
예시: 외부 통신할 네트워크 인터페이스(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의 기본 용어와 명령어는 다음과 같습니다.
용어 | 설명 |
---|---|
Target | IP 패킷이 규칙과 일치하는 경우 실행되는 동작 - ACCEPT: 패킷 허용 - DROP: 패킷 차단, 사용자에게 오류 메시지를 보내지 않음 - REJECT: 패킷 차단, 사용자에게 오류 메시지를 보냄 |
Chain | IP 패킷에 미리 설정한 규칙을 적용하여 대상 결정 - INPUT: System으로 들어오는 패킷의 규칙 - OUTPUT: System에서 나가는 패킷의 규칙 - FORWARD: System에서 다른 System으로 보내는 패킷의 규칙 |
전체 명령어
용어 | 설명 |
---|---|
-A (–append) | 새로운 규칙 추가 - 현재 규칙 뒤에 추가됨 |
-D (–delete) | 규칙 삭제 |
-C (–check) | 패킷 테스트 |
-R (–replace) | 새로운 규칙로 교체 |
-I (–insert) | 새로운 규칙 삽입 - 현재 규칙 앞에 추가됨 |
-L (–list) | 규칙 조회 |
-S (–list-rules) | 규칙 출력 |
-F (–flush) | Chain으로부터 규칙 모두 삭제 |
-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.1과 SSHGUARD가 있습니다. SSHGUARD는 몇 초 내 다수 로그인 실패와 같은 ssh에 대한 무차별 대입 공격으로부터 호스트를 보호합니다. SSHGUARD는 일반적인 iptables 규칙에 해당되는 역할을 수행하지는 않으며, 사용자의 정책 기준에 따라 규칙을 직접 설정해야 합니다.
카카오클라우드 Bare Metal Server Ubuntu 환경에서 사용자가 iptables에 해당되는 규칙을 설정하는 방법은 다음과 같습니다.
SSHGUARD에 대한 자세한 설명은 SSHGUARD 공식 사이트를 참고하시기 바랍니다.
iptables 버전 확인
설치된 iptables의 버전을 확인할 수 있습니다.
sudo iptables -V
iptables v1.6.1
규칙 조회
현재 iptables에 설정된 규칙을 조회할 수 있습니다.
sudo iptables -nL --line-numbers --verbose
SSHGUARD가 설치되어 있으며, 적용된 규칙이 없는 상태입니다.
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
규칙 출력
전체 규칙을 출력할 수 있습니다.
출력 결과가 iptables-save 방식으로 생성되어 바로 재사용이 가능한 포맷이라는 점에서 iptables 규칙 조회 명령어인 sudo iptables -L
와 다릅니다.
sudo iptables -S -v
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
규칙 생성
새로운 규칙을 생성할 수 있습니다.
iptables에서 정책을 설정할 때, 사용자 접속 및 서비스와 관련된 IP Port가 차단되지 않도록 유의해야 합니다. 특히 외부로 나가는 Packet의 경우 특정 Port만 허용하면 나머지 Port로의 접근은 불가능해지므로 주의하시기 바랍니다. 사용자가 iptables를 직접 제어하다가 발생하는 문제는 서비스 공급자(카카오엔터프라이즈)가 대신 해결할 수 없으며, 사용자가 직접 이미지 재설치를 통해 인스턴스를 초기화하여 해결해야 합니다. 이미지 재설치는 [인스턴스 더 보기]의 리빌드 기능을 통해 할 수 있습니다.
sudo iptables -A
규칙 생성 명령 실행 사례
#case1. localhost 인터페이스에 들어오는 모든 패킷을 허용하는 규칙을 생성합니다.
sudo iptables -A INPUT -i lo -j ACCEPT
#case2. 외부에서 모든 목적지의 tcp/22 port로의 접근을 허용하는 규칙을 생성합니다.
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
#case3. 외부에서 모든 목적지의 tcp/80 port로의 접근을 허용하는 규칙을 생성합니다.
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
#case4. 외부에서 모든 목적지의 tcp/443 port로의 접근을 허용하는 규칙을 생성합니다.
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
#case5. 외부 모든 출발지에서 내부 000.000.00.00 목적지 서버의 tcp/22번 port로의 접근을 허용하는 규칙을 생성합니다.
sudo iptables -A INPUT -d 000.000.00.00 -p tcp --dport 22 -j ACCEPT
규칙 삭제
더 이상 사용하지 않는 규칙을 삭제할 수 있습니다.
sudo iptables -D
#case1. INPUT 체인의 Rule number 4를 삭제합니다.
sudo iptables -D INPUT 4
#case2. tcp 22 Port 접속 차단 규칙을 삭제합니다.
sudo iptables -D INPUT -p tcp -m tcp --dport 22 -j REJECT
#case3. 내부 모든 서버의 tcp/443번 Port로의 접근을 허용한 규칙을 삭제합니다.
sudo iptables -D INPUT -p tcp --dport 443 -j ACCEPT
규칙 설정 저장
iptables 규칙은 시스템을 다시 시작하면 모두 사라지므로, 변경된 규칙 설정을 별도 etc/iptables.rules
파일로 저장합니다.
sudo iptables-save
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 IP | Destination IP | Protocol | Port | 매칭 | 동작 |
---|---|---|---|---|---|---|---|---|
iptables | -A | INPUT | -s | -d | -p | -dport | -j | ACCEPT |
iptables | -D | OUTPUT | -s | -d | -p | -dport | -j | DROP |
iptables | -I | FORWARD | -s | -d | -p | -dport | -j | REJECT |