1. Bastion 서버란?
Bastion 서버란 클라우드 환경, 네트워크 환경에서 보안 게이트웨이 역할을 하는 서버로, 외부 네트워크에서 private 서버로 접속할 때 보안을 강화해 주고 접근제어를 구현해 준다. 외부 사용자가 특정 IP에서만 Bastion 서버에 접속하도록 설정할 수 있으며, private 서버들은 Bastion 서버를 통해서 트래픽을 철저하게 관리할 수 있다. 이번 포스트에선 Bastion서버의 설정 방법과, 다중 서버를 Bastion 서버에서 관리할 시 접속상태를 한눈에 구분할 수 있는 방법에 대해 알아보자.
2. Bastion 서버 설정 방법
2-1.aws 인스턴스 생성
- t2 micro~t3 micro - 소규모 개발팀
- t3 small - 중간 규모팀
- T3.medium, M5.large - 대규모팀 (다수 개발자, 운영팀)
인스턴스 생성 후 bastion 서버로 접속하고자하는 ip를 보안그룹에 등록해 준다. (ssh : 22 port)
2-2. 키 파일 포워딩
Bastion 서버를 구성하는 방식은 크게 두가지가 있다.
- bastion 서버 내에 실제 접속 서버들의 키파일을 보관하여, 각 서버로 접속 시에 사용
- Bastion 서버가 해킹될 경우 모든 운영 서버에 접근 가능
- 키파일의 업로드 및 관리 어려움
- 로컬의 키파일을 forwarding하여 접속 시에 사용 (권장)
그중 개발자 개개인의 로컬 키파일을 forwarding 하는 사용하는 방식으로 적용해 보자.
eval "$(ssh-agent -s)" && ssh-add "키파일" && sudo ssh -A -i "키파일" ec2-user@"IP
이렇게 Bastion서버에 접속하면, Bastion 서버에서 로컬 키파일을 forwarding 받아 바로 다른 서버로 ssh 접속이 가능하다.
2-3. 호스트 등록
bastian 서버에서 매번 ssh 커맨드와 여러 개의 ip를 직접 입력하는 것은 불편하고 위험하다.
그럴 때 Bastion 서버에서 ~/. ssh/config 파일에 호스트를 등록하고 간편하게 사용 가능하다.
이렇게 설정하면 (여러 개 설정 가능)
ssh "호스트명
으로 각 서버에 바로 ssh 접속이 가능하다.
3. 서버별 접속상태 구분하기
이렇게 bastion 서버에서 여러 서버로의 접근은 이제 가능하지만, 불편한 점이 있다. bastion에서 수십 개의 서버를 접속한다고 하면, 자동등록된 호스트명으로 접속하더라도 접속이 잘되었는지, ssh 연결이 끊어졌는지 구분이 잘 되지 않아 불편하고 사고로 이어질 수 있다.
3-1. PS1환경변수 사용
콘솔에서 서버 간의 구분을 명확히 하기 위해 PS1 환경변수를 사용해 프롬프트를 변경하거나 표시되는 정보를 추가할 수 있다,
Bastion 서버의 `~/. bashrc` 또는 `~/. zshrc` 파일에 다음을 추가해 보자
export PS1="[\e[33m][Bastion: \u@\h \W]\$[\e[0m]
[Bastion:\...]
: 프롬프트에 “Bastion"이라는 표시를 추가.\u
: 사용자 이름.\h
: 호스트 이름.\W
: 현재 디렉터리.
변경 후 source ~/. bashrc로 적용을 하면, bastion 서버에 연결된 상태일 때는 다음과 같이 표시된다.
필요하다면 각 서버에 PS1환경변수로 그에 맞는 헤더를 설정하면, 쉽게 구분된 상태로 서버 간 접속을 할 수 있다.