DIY SSH 요새 호스트

8419 단어 devopstutorial
Ubuntu 20.04 LTS를 사용하여 가장 작은 SSH 요새 호스트 (점프 상자) 를 처음부터 구축하고 설정합니다.

보루 주인은 무엇입니까?


보루 는 군사 용어 로, 뜻 은 '방어 공사 의 두드러진 부분' 이다
가정 와이파이 공유기가 거대하고 위험한 인터넷과 로컬 네트워크에서 일반적으로 안전하지 않은 장치 사이에 있는 것처럼 보루 호스트는 공공 인터넷과 내부 네트워크(예를 들어 VPC) 사이에 위치하고 내부 호스트에 도착하는 스위치를 충당하며 공공 인터넷의 황야에 직접적으로 노출되지 않도록 보호한다.Bastion 호스트는 일반적으로 OpenSSH 또는 원격 데스크톱 서버를 실행합니다.
요새 호스트는 네트워크의 중요한 병목이다.그 지위를 감안하면 감사와 세션 로그 기록, 내부 호스트의 사용자 신분 검증, 고급 위협 검측 등 많은 책임을 질 수 있다.하지만 그럴 필요 없어요.SSH 연결 에이전트를 지원하는 보루를 처음부터 구축하는 간단한 절차를 밟겠습니다.그리고 나서 우리는 우리가 할 수 있는 더 재미있는 일들을 토론할 것이다.

왜 요새 주인이야?


내부 네트워크가 있고 공공 인터넷에서 호스트에 접근해야 한다면 bastion 호스트는 간단한 선택입니다.
보루가 필요하십니까?거의 모든 기술 결정과 마찬가지로 구체적인 상황에 달려 있다.다음은 네가 고려할 수 있는 선택들이다.

요새의 대체품


IPsec VPN 설정


SSH나 RDP보다 내부 네트워크에 더 깊이 있게 액세스하려면 VPN이 필요할 수 있습니다.
그러나 다른 옵션(요새 호스트 포함)에 비해 IPsec VPN은 복잡성과 유지보수 부담을 많이 증가시켰다.

덮어쓰기 네트워크 설정


오버레이 네트워크는 보행시선 끝을 지원하는 더 가볍고 간단한 VPN입니다.그것은 여전히 약간의 설정이 필요하다.가장 흔히 볼 수 있는 소스 오픈 옵션은 WireguardNebula이다.내부 네트워크 (예: VPN) 의 가장자리에서 하나를 실행하거나, 접근할 수 있는 모든 호스트에서 실행하고, 이를 통해 SSH 데이터를 터널할 수 있습니다.모든 고객이 Wireguard나 Nebula를 실행해야 합니다.

관리형 에이전트 사용


Google IAPAWS Session Manager는 SSH 트래픽 터널을 내부 클라우드 네트워크에 연결하는 호스팅 솔루션입니다.이 장점은 클라우드 IAM 역할로 인증을 할 수 있고 더 복잡한 보안 정책 (보안 키 정책이나 장치 등급 정책, IP 기반 정책이 아닌 장치 등급 정책) 을 실행할 수 있다는 것입니다. 만약에 자신의 bastion 호스트를 실행한다면 이러한 정책은 실행할 수 없습니다.이 서비스들은 무료로 사용할 수 있지만 IAP와 AWS 세션 관리자가 순수한 SSH보다 복잡하고 GCP나 AWS에 잠금을 추가한 것이 단점이다.

보루를 세우다


몇 가지 가정을 해 봅시다.
  • 이 요새가 SSH 연결을 내부 호스트로 전송하기를 바랄 뿐입니다.여기서 SSH를 사용하기 때문에 사용자는 먼저 요새에 대한 인증을 한 다음에 내부 호스트에 대한 인증을 해야 합니다.연결을 완료하려면 두 호스트의 유효한 증빙서류가 필요하지만, 요새와 내부 호스트에 대해 서로 다른 증빙서류를 사용할 수 있기 때문에 이 기능을 이용할 것입니다.
  • 우리는 모든 사람에게 공유 사용자를 제공할 것이며 인터랙티브 터미널 세션을 사용할 수 없습니다.
  • 사용자는 ssh -J [bastion] [internal host] 또는 ProxyJump 블록의 Match Host 명령을 사용하여 내부 호스트에 연결합니다.
  • 실례를 시작합니다.


    당신이 가장 좋아하는 클라우드 공급자에 리눅스 실례를 만듭니다.Ubuntu 20.04 LTS는 매우 간단하고 지원이 양호하며 최근에 발표된 OpenSSH 8.2를 포함하여 사용할 것입니다.
    방화벽이나 보안 그룹 정책을 설정하여 포트 22 (SSH) 에 대한 연결을 제한합니다. 가능하면 신뢰하는 IP로만 연결할 수 있습니다.

    요새를 배치하다.


    우리는 우리의 보루를 준비하기 위해 몇 가지 일을 해야 한다.

    OpenSSH 구성
    우리는 강제 집행을 건의한다Mozilla's OpenSSH security guide.불행하게도, 그들의 안내서는 OpenSSH 6.7만 포함한다.다음은 OpenSSH 8.2와 여전히 관련된 지침입니다.

  • 짧은 양을 활성화합니다.모듈은 SSH 연결이 시작될 때 키 교환에 사용됩니다.Mozilla는 보안을 강화하기 위해 3071비트 이상의 모델만 사용하는 것을 권장합니다.이 작업을 수행하려면 다음과 같이 하십시오.
  • awk '$5 >= 3071' /etc/ssh/moduli > /etc/ssh/moduli.tmp && mv /etc/ssh/moduli.tmp /etc/ssh/moduli`
    
  • .ssh/config에서 다음 SSHD 구성 매개변수를 고려합니다.
  • # Supported HostKey algorithms by order of preference.
    HostKey /etc/ssh/ssh_host_ed25519_key
    HostKey /etc/ssh/ssh_host_ecdsa_key
    HostKey /etc/ssh/ssh_host_rsa_key
    
    # Password based logins are disabled - only public key based logins are allowed.
    AuthenticationMethods publickey
    
    # LogLevel VERBOSE logs user's key fingerprint on login. 
    # Needed to have a clear audit track of which key was using to log in.
    LogLevel VERBOSE
    
    PermitRootLogin no
    
    # Log sftp level file access (read/write/etc.) that would not be easily logged otherwise.
    Subsystem sftp  /usr/lib/ssh/sftp-server -f AUTHPRIV -l INFO
    
  • 어떤 알고리즘과 키 형식을 지원할지 고려해야 합니다.Mozilla는 OpenSSH 기본값보다 엄격한 키 유형을 사용하는 것이 좋습니다.
  • KexAlgorithms [email protected],ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group-exchange-sha256
    Ciphers [email protected],[email protected],[email protected],aes256-ctr,aes192-ctr,aes128-ctr
    MACs [email protected],[email protected],[email protected],hmac-sha2-512,hmac-sha2-256,[email protected]
    
    Mozilla의 권장사항(OpenSSH 6.7에만 해당) 외에도 SSHD 보안을 강화하기 위한 몇 가지 작업을 수행할 수 있습니다.

  • 보안 키 필요:
    SSHD를 FIDO U2F 보안 토큰만 사용할 수 있는 키로 설정할 수 있습니다.
  • PubkeyAcceptedKeyTypes [email protected],[email protected],[email protected]
    

    Note: This will prevent future connections to the host using the original PEM key you got upon launch. So, you'll need to generate a new -sk type key for the ubuntu account. .

    Note: This requires all of your clients to have OpenSSH 8.2+.


    보안 그룹 규칙에서 IP 주소로 액세스를 제한하지 않으려면 몇 가지 추가 강화 조치를 고려해야 합니다.
  • 기본 SSH 포트를 변경합니다.이것은 많은 기본적인 로봇을 막을 것이다.
  • Port 37271
    

  • Set up port knocking
    포트 노크는 요새에 연결하는 작업을 복잡하게 할 수 있지만, 어떤 IP 주소에도 사용할 수 있는 요새가 필요하다면 좋은 선택일 수도 있습니다.
  • 설치intrusion detection 및 예방 소프트웨어

  • 전달 비활성화
    셸 접근을 허용하지 않기 때문에, TCP 전송을 제외한 모든 전송을 금지하고 싶습니다. TCP 전송 /etc/ssh/sshd_config 은 요새를 지원하는 데 사용됩니다.
    AllowAgentForwarding no
    AllowStreamLocalForwarding no
    X11Forwarding no
    
    SSH 게이트웨이만 있으면 요새 자체에서 셸 접근을 비활성화할 수 있습니다.
    Match User *,!ubuntu
            ForceCommand /bin/echo 'This bastion does not support interactive commands.'
    
    기본적으로 SSHD의 TCP 포트 전달은 사용자가 전용 네트워크의 모든 원격 TCP 포트에 연결을 전달할 수 있도록 합니다.다른 유형의 트래픽을 내부 호스트로 전송하지 않으려면 포트 22(SSH)로 전송을 제한할 수 있습니다.
    PermitOpen *:22
    

    SSHD 재부팅(손가락 교차)

    ssh -J를 사용하여 구성을 테스트하고 SSHD 서버를 재부팅할 수 있습니다.계속하기 전에 sshd -t기계에 들어갈 수 있도록 확보하세요!😱

    사용자의 SSH 키를 요새로 보내기

  • 사용자가 몇 명만 있다면 모든 사람이 사용할 요새에 계정을 만들고 모든 사용자의 공개 키가 추가될 수 있습니다.
  • 사용자가 많으면 단기 SSH 인증서를 사용하고 발급하십시오.
  • 클라우드에 로그 보내기


    당신은 set up the AWS CloudWatch agent나 구글Cloud Logging Agent을 사용하면 SSH 로그가 클라우드에 들어갈 수 있습니다.이 기능을 사용하면 의심스러운 SSH 작업에 대한 경고를 설정할 수 있습니다.

    긴급 루트 액세스 허용


    호스트에 대한 긴급 액세스를 허용하는 보안 방법은 Google 설명서를 참조하십시오.
    비상 접근 키를 설정하면 루트 사용자가 접근할 수 있는 다른 옵션을 비활성화할 수 있습니다. 이 컴퓨터에서 ssh 계정을 자주 사용할 이유가 없기 때문입니다.

    내부 호스트를 SSH 액세스만 허용하도록 설정


    이것은 중요한 제로 신뢰 정책입니다. 연결된 내부 호스트는 보루에서 온 SSH 연결만 허용해야 합니다.이 점을 실현하는 가장 간단한 방법은 입구 1G를 사용하는 것이다

    SSH 클라이언트를 구성합니다.


    고객은 이미 알고 있는 호스트가 제공하는 새 호스트 키를 받아들여서 호스트 키를 더욱 쉽게 회전시켜야 합니다.이것은 향후 OpenSSH의 기본 설정이 됩니다.
    UpdateHostKeys yes
    
    그리고 bastion을 통해 내부 호스트에 쉽게 접근할 수 있도록 설정 명령을 추가할 수 있습니다.모든 내부 호스트의 이름이 있다고 가정하십시오.AWS와 같은 내부 도메인이 명령을 사용하여 연락할 수 있습니다.
    Host *.internal
      ProxyJump bastion.example.com
    
    그리고 root bastion을 통해 내부 호스트에 연결하기만 하면 됩니다.내부 호스트 이름은 로컬 기기가 아닌 bastion의 DNS 검색을 통해 해석된다는 미묘한 힌트가 있습니다.따라서 bastion이 내부 이름과 IP를 통해 내부 호스트를 찾는 방법을 알면 이것이 필요합니다.
    SSH 인증서에 대한 자세한 내용은 를 참조하십시오.당신은 심지어 우리의 무료 위탁 관리 서비스를 시도하여 5분도 안 되는 시간 안에 SSH 인증서의 가치를 체험할 수 있습니다!

    좋은 웹페이지 즐겨찾기