지식 요소의 가공과 분석, 그리고 여러가지 도구의 활용에 관한 내용

외부에서 가정용 맥북에 ssh를 통해 접근하기 위한 설정: IPv6 Host Exposure 및 SSH key

최근에 네트워크 외부에서 집에 있는 맥북에 접근해야 할 일이 있어서, 설정한 김에 정리한 글입니다. 일단 집에서 사용하고 있는 것은 독일에서 흔히 보이는 Vodafone Station이고요, 제가 사용하는 경우에는 IPv4의 Port Forwarding을 지원하지 않아서, IPv6 Host Exposure를 이용하였습니다. 요즘은 ChatGPT가 참 도움을 많이 줘서 이런 설정등에 시간낭비가 크지는 않았는데, 그래도 제가 사용하는 시스템의 기록을 남길 겸, 혹시 필요한 사람이 있을까봐 절차를 여기 남겨둡니다.

먼저 보안상 주의할 지점을 이야기하자면, IPv6 Host Exposure의 경우에는 라우터에서 MAC Address를 지정한 단말기가 외부에 접속 권한이 노출됩니다. 그렇기에 먼저 접속 경로에 대해서 보안을 고려해야 하는데, 일단 제가 한 방법은 다음을 이용합니다.
– 기본적으로 SSH 접근 테스트 자체는 내부망에서 먼저 이루어진 다음에 IPv6 Host Exposure를 통해 외부망에서 허용했습니다.
– Mac Sharing 옵션은 Remote Login에서 처음에는 제 특정 user id/password를 기반으로 허용했고, 나중에 설정 파일을 건드려서 등록된 SSH key를 통해서만 진행되도록 했습니다 (즉, id/password기반의 접속은 permission denied되도록 설정했습니다)

  1. Mac SSH connection 설정하기 (맥 두대간의 연결이므로 편의상 guest Mac과 host Mac으로 구분하겠습니다)
  • Host Mac에서 System Settings -> Sharing -> Remote Login을 허용합니다.
    여기서 세부정보에서 “Allow access for”에서 “Only these users”에서 제가 원하는 사용자만 추가했고요. Allow full disk access는 해지해도 제 사용에서는 무방했습니다.
  • Guest Mac에서 SSH key를 생성합니다. 이는 기본적으로 private key와 public key를 제공하고, private key는 외부로 반출되지 않고, public key만을 Host Mac으로 공유하게 되는 시스템입니다. 예로 들어 다음과 같습니다.
    >> ssh-keygen -t ed25519 -f ~/.ssh/test -C "test ssh key"
    -t는 알고리듬 유형이고요, 여기서는 ed25519를 사용했습니다.
    -f는 목적 private file명이고요. public은 여기에 확장자가 .pub가 더 붙습니다.
    -C는 주석입니다. 여러 키가 있을때 확인하기 좋습니다.
    이때 passphrase를 묻는데, 일종의 해당 키를 사용할 때의 비밀번호입니다. 잘 기억해 둘 필요가 있습니다.
  • Public key의 내용을 Host Mac에서 ssh접속시 기본적으로 참조하게 되는 ~/.ssh/authorized_keys같은 파일을 만들어서 넣어둡니다. Public key자체는 문자열을 그대로 복사해와도 큰 문제가 없습니다 (즉 노출에 대한 위험도가 낮습니다).
  • 파일 사용 권한을 현재 파일소유자에게만 허용합니다.
    >> chmod 600 ~/.ssh/authorized_keys

2. 다음으로 넘어가기 전에 로컬에서 테스트하고, user id/password 접속은 제한하기

  • 일단 다른것을 하기전에 로컬에서 guest Mac등에서 접근되는지 확인해볼 필요가 있습니다. 아직 id/password 접근을 끄지않았으므로, 네트워크망 내부에서는 host Mac의 IP를 가지고 guest Mac에서 먼저 ssh를 통해 접속을 시도해봅니다.
    >> ssh id@ip.address
    password로 로그인이 성공하면 일단 첫 단계는 끝난 것입니다. >> exit으로 접속을 종료하고 이번에는 ssh key를 이용한 로그인이 되는지도 확인해 봅니다. 중요한 부분은 위에서 guest Mac의 public key를 host Mac에서 등록되어 있어야 한다는 것입니다.
    >> ssh -i ~/.path/test id@ip.address
    (아직까지는 IPv6을 설정하지 않아서 -6 옵션을 주지는 않았습니다)
    접속을 확인하고 종료합니다.
  • SSH서버 설정을 확인하고 조절하기
    Host Mac에서 다음을 확인합니다.
    >> grep '^Include' /etc/ssh/sshd_config
    만약 출력이 “Include /etc/ssh/sshd_config.d/*” 같은 형태이면, 해당 폴더안에 있는 설정파일을 이름순대로 자동으로 읽어들여서 처리합니다. 만약 폴더에 이미 설정파일이 없다면, (예로들어) /etc/ssh/sshd_config.d/test.conf“를 만들어놓고 다음 명령어를 등록합니다:
    PasswordAuthentication no
    KbdInteractiveAuthentication no
    PubkeyAuthentication yes

    해당 등록이 끝난 다음에 확인을 해보고요
    >> sudo /usr/sbin/sshd -t
    특별한 출력이 없고 이상이 없으면 실제 적용되는 설정을 확인해봅시다
    >> sudo /usr/sbin/sshd -G | grep -E '^(passwordauthentication|kbdinteractiveauthentication|pubkeyauthentication) '
    결과 값이 위의 conf와 같으면 됩니다.
  • Host Mac의 Remote Login을 off한 다음에 on을 합니다.
  • Guest Mac에서 SSH connection을 다시 id/password와 SSH key로 테스트합니다. 이제 id/password에서는 permission denied가 뜨고 SSH key로만 접속이 되어야 합니다.

3. IPv6 Host Exposure 설정

  • Host Mac의 MacAddress확인
    맥북에는 보안상 하드웨어 MacAddress말고 WiFi 설정에서 확인할수 있는 Wifi Address가 따로 있습니다. 여기 “fixed”로 설정되어있는지 확인해보고, 라우터에서 해당 WiFi Address를 등록해야할 필요가 있습니다.
  • Router에서 IPv6 Host Exposure로 해당 MacAddress를 등록
    일단 라우터마다 다르겠지만, 저는 Vodafone Station을 사용하고 있고, 여기서는 해당 옵션을 메뉴에 찾아서 등록할 수 있습니다. 저는 MacAddress와 TCP 22번을 허용했습니다.
  • Host Mac에서 IPv6 주소 확인
    >> ifconfig en0 | grep inet6
    여기서 여러 종류의 IP들이 나오는데, fe80::으로 시작하는 주소는 내부망에서 인식하는 번호라고 알고 있습니다. 그 다음 번호들중에서 temporary등은 무시하고 찾으면 됩니다.
  • Guest Mac을 외부 네트워크에 연결 (모바일 핫스팟 등)한 다음에 시도하기
    제대로 된 IPv6 주소를 찾는다면 Guest Mac을 외부 네트워크에 연결한 다음에 다음에 SSH 연결을 시도해 봅니다. 그런데 Guest Mac에서도 IPv6이 허용되어 있어야 합니다. 저의 경우에는 옵션이 꺼져 있어서 접속이 안되어서, 해당부분을 찾는데 시간이 걸렸네요. Guest Mac의 Wi‑Fi 설정에서 확인할 수 있습니다.
    접속은 다음과 같습니다. -6 옵션이 추가되는데, IPv6을 위한 옵션입니다.
    >> ssh -i ~/.ssh/test -6 id@IPv6.address
    제대로 된 주소를 넣게 된다면 접속이 성공하고, 아니라면 경로를 찾을 수 없다는 에러 등이 나옵니다.

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *