https://haksuperman.tistory.com/68
이렇게 VCN, 서브넷, 인스턴스, Bastion 서버까지 생성했다. SSH 접속뿐만 아니라 애플리케이션과 데이터베이스가 사용하는 포트를 통해 접근할 수 있도록 네트워크 설정을 진행해야 한다.
1. 시큐리티 리스트 규칙 추가
현재 퍼블릭 서브넷에 배포한 애플리케이션 서버는 퍼블릭 IP 주소와 프라이빗 IP 주소를 모두 받았지만 데이터베이스 서버는 프라이빗 IP 주소만을 부여 받았다. 또한 화이트리스트 기반의 방화벽 관리가 동작돼서 기본적인 SSH 접속을 제외한 모든 프로토콜 접근이 차단되어 있다.
각 애플리케이션 서버와 데이터베이스 서버가 사용하는 포트번호인 5000번과 3306번 포트를 개방하는 시큐리티 리스트 규칙을 추가할 것이다.
화이트리스트 기반 관리
보통 모든 프로토콜을 차단하고 지정된 대상만을 허용 목록(화이트리스트)에 등록해서 해당 모록에 포함된 대상만을 접근이 가능하게 하는 접근 제어 방식이다.
이를 통해 불필요한 트래픽 및 악성 공격을 차단하고 시스템 보안성을 향상시킬 수 있다.
1) 퍼블릭 서브넷의 5000번 포트 허용
[Networking → Virtual cloud network] 선택
OCI_DEMO 선택
public subnet-OCI_DEMO 선택
Default Security List for OCI_DEMO 시큐리티 리스트가 적용되어 있다.
Default Security List for OCI_DEMO 시큐리티 리스트는 모든 네트워크(0.0.0.0/0)에서의 SSH, ICMP와 VNC 네트워크 내(10.0.0.0/16)에서의 ICMP가 허용되어 있다.
Add Ingress Rules를 선택해 해당 시큐리티 리스트에 규칙을 추가할 수 있다.
모든 네트워크 대역(0.0.0.0/0)에서의 5000번 포트로 향하는 패킷 허용
Add Ingress Rules를 선택해 해당 규칙 추가
2) 프라이빗 서브넷의 3306 포트 허용
[Networking → Virtual cloud network] 선택
OCI_DEMO 선택
private subnet-OCI_DEMO 선택
security list for private subnet-OCI_DEMO 시큐리티 리스트가 기본적으로 적용되어 있다.
VCN 내에서의 SSH, ICMP와 모든 네트워크에서의 ICMP가 허용되어 있다.
Add Ingress Rules를 선택해 이 시큐리티 리스트에 새로운 규칙 추가
VCN(10.0.0.0/16) 내에서 들어오는 3306번 포트 트래픽 허용
Add Ingress Rules 선택해 해당 규칙 추가
2. Bastion 서비스 세션 추가
Bastion 서버를 생성하긴 했지만, Bastion 서비스를 통해 프라이빗 서브넷에 배포한 데이터베이스 서버에 접속하려면 세션을 생성해야 한다.
[Identity & Security → Bastion] 선택
앞서 생성한 ocidemobastion 선택
Create session 선택
Session type : SSH port forwarding session
Session name : session-oci-demo-db
Connect to the target host by using : Instance name
Compute Instance : oci-demo-db(해당 인스턴스가 Running 상태여야 함)
Port : 22
Add SSH key : Choose SSH key file 선택 후 이전에 생성한 SSH 퍼블릭 키 업로드
생성한 세션은 기본적으로 180분으로 설정된다.
기본 값으로 180분을 변경하기 위해 세션 생성할 때 같이 변경해야 한다.
(생성된 세션 값의 TTL 값을 변경할 수 있으면 보안적으로 악용될 가능성이 있다)
SSH 포트 포워딩
SSH 포트 포워딩 또는 SSH 터널링은 SSH 연결을 통해 암호화된 데이터를 전송하는 방법을 말한다. 이를 통해 로컬 포트와 원격 시스템 간에 보안 채널을 생성해 데이터를 안전하게 전달할 수 있다.
이 기술은 인터넷 접근이 가능한 Bastion 호스트나 서비스를 통해 프라이빗 네트워크에 있는 자원에 접근할 때 사용되는 방법 중 하나이다.
3. 애플리케이션 및 데이터베이스 서버 접속
1) 로컬 컴퓨터에서 애플리케이션 서버로 SSH 접속
퍼블릭 IP 확인
ssh -i <프라이빗 키 파일> opc@<접속 대상 호스트> 로 접속
(MobaXterm과 같은 프로그램을 통해 접속해도 된다)
OCI 패스워드 인증 방법
OCI 리눅스 인스턴스는 기본적으로 SSH 키 페어 인증 방식을 사용한다. 특정 상황에 패스워드 인증 방식을 사용할 수 있는데, 먼저 프라이빗 키로 로그인 한 후에 패스워드 인증 방식으로 변경해야 한다.
(OCI 리눅스 인스턴스의 기본 사용자 opc 외에 별도 사용자를 생성해 진행해도 된다)
하지만 패스워드 인증 방식은 보안 상 취약하기 때문에 가능하면 SSH 키 페어 인증 방식을 권장하며, 필요한 경우에만 사용해야 한다.
1) opc 유저 패스워드 설정
2) 패스워드 인증 방식의 원격 접속 허용
sudo passwd opc
3) sshd 설정 파일 에러 체크 및 데몬 재실행
/etc/ssh/sshd_config 파일에서 PasswordAuthentication 값 Yes로 변경
sudo /sbin/sshd -t
sudo systemctl restart sshd
sudo systemctl status sshd
2) Bastion 서비스를 활용해 프라이빗 서브넷의 데이터베이스 서버 접속
이전에 생성한 Session을 통해 접속할 수 있다. 접속하는 방법은 Session 섹션에서 확인 가능하다.
[Identity & Security → Bastion] 선택
생성한 Bastion 선택
위에서 생성한 세션 햄버거 메뉴 선택
Copy SSH command 선택
메모장에서 형태 확인
<privateKey> 부분을 로컬 컴퓨터에 저장된 프라이빗 키의 경로와 파일명으로 변경
<localPort> 부분을 Bastion에 연결하려는 로컬 포트로 변경
개인키 경로 입력 및 로컬 포트로 22222번 사용
SSH config
로컬 컴퓨터가 OpenSSH 9 버전 이상을 사용하면 Bastion 서비스를 통해 프라이빗 서브넷의 호스트에 접근 시 "no matching host key type found"와 같은 RSA 키 인증 오류가 발생할 수 있다.
이 경우 인증 알고리즘을 지정하는 내용의 config 파일을 로컬 컴퓨터의 .ssh 디렉터리에 생성해서 해결할 수 있다.
% ssh -V
OpenSSH_9.0p1, LibreSSL 3.3.6
% sudo vi ./.ssh/config
Host *
HostkeyAlgorithms +ssh-rsa
PubkeyAcceptedAlgorithms +ssh-rsa
먼저 Bastion 서비스로 연결되고, RSA key fingerprint가 내부 Bastion 호스트에 등록되는 과정을 거친다.
Bastion을 통해 포트포워딩 시키는 명령을 입력해놓은 터미널을 켜두고, 별도 터미널 창에서 ssh 접속
(로컬 포트로 지정한 포트로 접속해야 정상적인 포트 포워딩이 이루어짐)
hostname 명령으로 oci-demo-db 가상 머신 인스턴스에 접속한 것 확인
이전에 ssh 명령으로 접속한 적이 있다면 "Someone cloud be eavesdropping on you right now (man-in-the-middle attack)!"과 같은 메시지와 함께 접속에 실패할 수 있다.
이 경우 로컬 컴퓨터 .ssh 디렉터리 아래에 "known_hosts" 파일을 삭제하고 다시 수행하면 된다.
4. 애플리케이션, 데이터베이스 통신 포트 개방 설정
애플리케이션과 데이터베이스 서버 간의 포트 통신을 설정해야 한다.
SSH 22번 포트를 제외하고는 가상 머신 호스트 레벨에서 모든 통신이 차단되어 있기 때문에 5000번 포트와 3306번 포트에 대한 호스트 레벨의 방화벽 개방 작업도 필요하다.
1) 애플리케이션 서버 가상 머신 자체의 방화벽 설정
애플리케이션 서버 가상 머신 SSH 접속
firewall-cmd 명령으로 5000번 포트 개방
sudo firewall-cmd --permanent --zone=public --add-port=5000/tcp sudo firewall-cmd --reload sudo firewall-cmd --list-all |
2) 데이터베이스 서버 가상 머신 자체의 방화벽 설정
데이터베이스 서버 가상 머신 SSH 접속
firewall-cmd 명령으로 3306번 포트 개방
sudo firewall-cmd --permanent --zone=public --add-port=3306/tcp sudo firewall-cmd --reload sudo firewall-cmd --list-all |
'Cloud > OCI(Oracle Cloud Infrastructure)' 카테고리의 다른 글
[OCI] 애플리케이션 배포 (Feat. Flask, PyMySQL, Faker) (0) | 2024.06.21 |
---|---|
[OCI] 데이터베이스 설치 및 기본 구성 (Feat. MySQL) (0) | 2024.06.20 |
[OCI] 오라클 클라우드에서의 Bastion 서버(점핑 호스트) (0) | 2024.06.19 |
[OCI] 가상 머신 생성 (Feat. ssh-keygen 키 생성) (0) | 2024.06.18 |
[OCI] 컴파트먼트(Compartment), 그룹(Group), 유저(User), 정책(Policy) 생성 (Feat. 유저 로그인) (0) | 2024.06.16 |
개인 공부 목적으로 사용하는 블로그입니다 :)
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!