목차

Tailscale을 이용한 안전한 SSH 접속 방법

Tailscale은 WireGuard 기반의 제로 트러스트 네트워크 솔루션으로, 방화벽이나 NAT 환경에서도 안전한 원격 접속을 제공합니다.

기존의 SSH 접속 방식은 다음과 같은 문제점이 있습니다:

  • 공개 포트 노출로 인한 무차별 공격 위험
  • 복잡한 방화벽 규칙 설정 필요
  • VPN 서버 구축 및 유지보수 부담
  • NAT 환경에서의 접속 어려움

Tailscale은 이러한 문제를 다음과 같이 해결합니다:

  • 제로 트러스트 아키텍처로 안전성 확보
  • 자동 NAT 트래버설
  • 중앙 집중식 관리
  • 간편한 설치 및 설정

Tailscale은 각 장치에 가상 IP 주소를 할당하고, WireGuard 프로토콜을 사용하여 암호화된 터널을 생성합니다:

클라이언트 → Tailscale 네트워크 → 대상 서버
  (암호화)     (100.x.x.x 대역)     (SSH 접속)

Ubuntu/Debian 기반:

# Tailscale GPG 키 및 저장소 추가
curl -fsSL https://pkgs.tailscale.com/stable/ubuntu/jammy.noarmor.gpg | sudo tee /usr/share/keyrings/tailscale-archive-keyring.gpg >/dev/null
curl -fsSL https://pkgs.tailscale.com/stable/ubuntu/jammy.tailscale-keyring.list | sudo tee /etc/apt/sources.list.d/tailscale.list

# 설치
sudo apt-get update
sudo apt-get install tailscale

# Tailscale 시작 및 인증
sudo tailscale up

CentOS/RHEL 기반:

# Tailscale 저장소 추가
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://pkgs.tailscale.com/stable/rhel/tailscale.repo

# 설치
sudo yum install tailscale

# Tailscale 시작 및 인증
sudo systemctl enable --now tailscaled
sudo tailscale up
  1. 공식 웹사이트에서 설치 파일 다운로드: https://tailscale.com/download/windows
  2. 설치 프로그램 실행
  3. Tailscale 계정으로 로그인
  4. 시스템 트레이에서 Tailscale 아이콘 확인

Homebrew 사용:

brew install tailscale

또는 공식 웹사이트에서 다운로드: https://tailscale.com/download/mac

Tailscale이 설치된 후, SSH 접속을 위한 추가 설정을 진행합니다:

# SSH 서비스 상태 확인
sudo systemctl status sshd

# SSH 서비스가 비활성화되어 있다면 활성화
sudo systemctl enable --now sshd

# Tailscale IP 확인
tailscale ip -4

출력 예시:

100.101.102.103

Tailscale 네트워크에서만 SSH 접속을 허용하려면:

Ubuntu/Debian:

# UFW 방화벽 설정
sudo ufw allow from 100.64.0.0/10 to any port 22
sudo ufw enable

CentOS/RHEL (firewalld):

# Tailscale 네트워크에서만 SSH 허용
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="100.64.0.0/10" port protocol="tcp" port="22" accept'
sudo firewall-cmd --reload

Tailscale IP를 사용하여 접속:

# 기본 접속
ssh username@100.101.102.103

# 포트 지정 (기본값이 아닌 경우)
ssh -p 2222 username@100.101.102.103

# SSH 키 사용
ssh -i ~/.ssh/id_rsa username@100.101.102.103

편리한 접속을 위해 ~/.ssh/config 파일 설정:

Host my-server
    HostName 100.101.102.103
    User freein
    IdentityFile ~/.ssh/id_rsa
    Port 22

Host prod-server
    HostName 100.101.102.104
    User admin
    IdentityFile ~/.ssh/prod_key
    Port 22

이제 간단하게 접속 가능:

ssh my-server

Tailscale은 자체 SSH 기능을 제공합니다:

# Tailscale SSH 활성화 (서버에서)
sudo tailscale up --ssh

# 클라이언트에서 접속 (자동 인증)
ssh freein@my-server

장점:

  • 비밀번호나 SSH 키 불필요
  • Tailscale 계정으로 자동 인증
  • ACL을 통한 세밀한 접근 제어

IP 주소 대신 호스트명으로 접속:

  1. Tailscale Admin Console 접속: https://login.tailscale.com/admin/dns
  2. MagicDNS 활성화
  3. 호스트명으로 접속:
# IP 대신 호스트명 사용
ssh username@my-server-name

# 예시
ssh freein@prod-webserver

Tailscale Admin Console에서 세밀한 접근 제어:

{
  "acls": [
    {
      "action": "accept",
      "src": ["group:developers"],
      "dst": ["tag:production:22"]
    },
    {
      "action": "accept",
      "src": ["user@example.com"],
      "dst": ["*:*"]
    }
  ]
}

Windows에서 Linux 서버 접속:

# PowerShell에서
ssh username@100.101.102.103

# PuTTY 사용
# Host Name: 100.101.102.103
# Port: 22
# Connection Type: SSH

비밀번호 인증 비활성화:

# SSH 키 생성 (클라이언트에서)
ssh-keygen -t ed25519 -C "your-email@example.com"

# 공개 키를 서버에 복사
ssh-copy-id username@100.101.102.103

# 서버에서 비밀번호 인증 비활성화
sudo vi /etc/ssh/sshd_config

/etc/ssh/sshd_config 파일 수정:

PasswordAuthentication no
PubkeyAuthentication yes

SSH 서비스 재시작:

sudo systemctl restart sshd

무차별 대입 공격 방지:

# Fail2ban 설치
sudo apt-get install fail2ban

# 설정 파일 생성
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

# SSH 보호 활성화
sudo vi /etc/fail2ban/jail.local

설정 내용:

[sshd]
enabled = true
port = 22
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600

Fail2ban 시작:

sudo systemctl enable --now fail2ban
sudo fail2ban-client status sshd

자동 키 만료로 보안 강화:

  1. Tailscale Admin Console 접속
  2. Machines 메뉴에서 장치 선택
  3. Key expiry 설정 (기본 180일)
  4. 필요시 키 갱신:
sudo tailscale up --force-reauth

상황:

  • 회사 방화벽이 인바운드 SSH 차단
  • 집에서 서버에 접속 필요

해결책:

# 회사 서버에 Tailscale 설치
sudo apt-get install tailscale
sudo tailscale up

# 집 컴퓨터에서 Tailscale 설치 및 접속
tailscale ip -4  # 서버 IP 확인
ssh admin@100.101.102.103

상황:

  • 개발, 스테이징, 프로덕션 서버 관리
  • 각 서버마다 다른 접근 권한 필요

해결책:

~/.ssh/config 설정:

Host dev-server
    HostName 100.101.102.103
    User developer
    IdentityFile ~/.ssh/dev_key

Host staging-server
    HostName 100.101.102.104
    User deployer
    IdentityFile ~/.ssh/staging_key

Host prod-server
    HostName 100.101.102.105
    User admin
    IdentityFile ~/.ssh/prod_key
    Port 2222

접속:

ssh dev-server      # 개발 서버
ssh staging-server  # 스테이징 서버
ssh prod-server     # 프로덕션 서버

상황:

  • 긴급 상황 발생
  • 스마트폰으로 서버 접속 필요

해결책:

  1. 모바일에 Tailscale 앱 설치 (iOS/Android)
  2. SSH 클라이언트 앱 설치 (Termius, JuiceSSH 등)
  3. Tailscale IP로 SSH 접속

연결 상태 확인:

# Tailscale 상태 확인
sudo tailscale status

# 연결 테스트
ping 100.101.102.103

# Tailscale 로그 확인
sudo journalctl -u tailscaled -f

Tailscale 재인증:

# 로그아웃
sudo tailscale logout

# 다시 로그인
sudo tailscale up

방화벽 규칙 확인:

Ubuntu/Debian:

sudo ufw status verbose

CentOS/RHEL:

sudo firewall-cmd --list-all

올바른 권한 설정:

# 개인 키 권한 (클라이언트)
chmod 600 ~/.ssh/id_rsa

# 공개 키 권한 (서버)
chmod 600 ~/.ssh/authorized_keys
chmod 700 ~/.ssh

Tailscale을 사용하면 방화벽 환경에서도 안전하고 편리하게 SSH 접속이 가능합니다.

핵심 포인트:

  • 제로 트러스트 아키텍처로 안전한 원격 접속
  • 간단한 설치 및 설정으로 빠른 도입 가능
  • NAT 트래버설 자동 처리로 복잡한 네트워크 설정 불필요
  • MagicDNS와 ACL로 편리하고 세밀한 관리
  • 멀티플랫폼 지원으로 어디서든 접속 가능

추가 리소스:

관련 글