내 sshd를 안전하게 구성하기(자동화를 통해)

내 sshd를 안전하게 구성하기(자동화를 통해)

여러 시스템을 수동으로 구성했습니다. 이제 좀 더 체계적으로 일을 시작하고 싶어요.

비밀번호 추측 공격을 제외하기 위해 데비안 기본 설정보다 더 엄격하게 openssh-server를 구성했습니다.

그래서 몇 가지 시스템 구성 순서를 살펴보았습니다. SSH가 문제라는 것을 알았습니다. Debian에 openssh-server를 설치하면 Fedora와 달리 기본 구성으로 즉시 실행되기 시작합니다.

문제: 이 경합 상태를 방지하려면 SSH가 구성되는 순서를 안전하게 구성하는 것이 좋습니다.


예를 들어 데스크탑 시스템에서 SSH를 사용하려고 하는데 다른 사용자에게는 SSH 액세스가 필요하지 않습니다. 그들은 원격 액세스 시스템을 사용하지 않습니다. "보안 비밀번호"를 시행하는 것은 시간 낭비입니다. 원격 액세스를 제한하는 것이 /etc/sshd_config더 간단하고 더 나은 보안을 제공합니다.

가끔 테스트 목적으로 로컬 계정을 만들기도 합니다. (당황스럽게도 내 계정 중 하나가 SSH 웜의 희생양이 되었습니다.)

답변1

주문하다

  1. /etc/ssh/sshd_not_to_be_runopenssh-server가 설치되지 않은 경우 빈 파일이 생성됩니다. (이 조건을 작성하기 위한 몇 가지 옵션여기)
  2. openssh-서버 설치
  3. /etc/ssh/sshd_config필요에 따라 편집
  4. 제거하다/etc/ssh/sshd_not_to_be_run

  5. 달리기

    systemctl enable ssh
    systemctl systemctl restart ssh
    

    또는 완전히 테스트된 동등한 제품입니다. restart서비스가 아직 시작되지 않았다면 정상적으로 작동하는 것 같습니다(비교condrestart try-restart). systemctl enable --now서비스가 활성화되어 있지만 실행되지 않으면 서비스가 시작되지 않는 것으로 나타났습니다 .

사용하지 않은 옵션

이것은 내가 발견하고 사용하지 않기로 결정한 다른 옵션입니다.

  1. 이 문제는 다음에서 논의되었습니다.데비안 사용자. 불행하게도 경쟁 조건은 아직 해결되지 않았습니다. 데비안 관리자는 패키지에서 호출을 policy-rc.d차단하도록 구성할 것을 권장합니다 . 부피가 큰 것도 있어요invoke-rc.d ssh startpostinstall세부 사항세부 사항은 어색하지만 달성 가능합니다. 불행하게도 그렇지 않습니다. 경쟁 조건을 방지하지 않습니다. 패키지가 실행하는 명령과는 아무런 관련이 없습니다 policy-rc.d. update-rc.d ssh enable이는 잘못된 시간에 정전이나 시스템 충돌로 인해 노출될 수 있습니다.

  2. openssh-server포장에 적힌 권장사항을 꼭 참고해주세요 ufw:) Ubuntu는 ufw매우 간단한 방화벽으로 만들어졌습니다 . "사용자 스토리"가 무엇인지 조금 혼란스러워요처음에는Windows와 마찬가지로 신뢰할 수 있는 네트워크 개념을 지원하기 위해 Ubuntu Oneiric으로 작성되었습니다.

    이를 설치 ufw하고 이를 구성할 때까지 SSH를 차단하도록 남용할 수 있습니다. 물론 이는 ufw현재 네트워크를 신뢰할 수 있다고 간주하는 구성이 없다는 가정입니다 . 헤헤.

    이 옵션을 좋아하지 않는 데에는 두 가지 다른 이유가 있습니다. 저는 시퀀스를 별도의 ansible문자로 작성해 왔습니다. 첫째, 이 옵션은 SSH 역할이 방화벽 구성을 방해한다는 것을 의미합니다. 호스트에도 방화벽이 필요하지 않습니다. (또는 이러한 시퀀스를 점진적으로 작성하는 경우... 쉬운 자동화를 위해 ufw와 같은 명령조차 없는 기존 방화벽이 있을 수 있습니다.)

    두 번째 단점은 Ansible 역할이 멱등성을 가지도록 설계되었다는 것입니다. Ansible 역할을 업데이트하고 단일 명령을 실행하여 이를 적용할 수 있습니다. 실제로 시스템을 변경하는 작업과 일치된 작업을 강조 표시합니다. 구성이 수정되었는지(이미 일치하지 않음) 여부에 따라 서비스를 다시 시작할 수 있습니다. 방화벽 구성을 무조건 켜고 끄는 모델에는 맞지 않습니다. openssh-server가 아직 설치되지 않은 경우 이를 조건부로 설정할 수 있지만 이는 문서 예제에서 볼 수 있는 일반적인 관용구 중 하나가 아닙니다. 적용하려면 ansible 2.2가 필요 check_mode: yes하거나service name=sshdpkg 관련 스크립트.

  3. 편집 : 당신은 할 수 있습니다심볼릭 링크 생성마스크를 ssh.service설치하기 전에 패키지를 설치하십시오. systemd를 사용한다고 가정해도 괜찮습니다., 그러나 이를 자동화하는 것은 약간 성가실 수 있습니다. 패키지 설치 시 오류가 반환되고 설치된 패키지는 그대로 유지되지만 "구성되지 않음" 상태인 것 같습니다. 구성을 수정한 후 패키지를 "재구성"하는 것은 어렵지 않습니다. 귀찮게도 패키지 설치 중 오류를 무시해야 합니다. 다른 오류가 발생할 경우 계속 진행할 위험이 있습니다. 이는 특히 적절한 자동화의 문제이지만 수동 체크리스트를 따르는 경우에도 성가실 수 있습니다..

  4. sshd_config미리 하나 만들어 보세요. 이것을 테스트했는데 적용되지 않았습니다. 문제: 포장이 sshd_config누락되었습니다. (Fedora에서도 이것을 시도했습니다. 경고 메시지가 표시되고 sshd_config.rpmnew가 생성됩니다.) 패키지 구성을 기반으로 구성하려는 경우 패키지의 파일이 손실되지 않더라도 복잡해집니다.

  5. @Ipor-Sircer에 연결된 답변 중 하나는 Debian을 사용할 수 있다고 말합니다 dpkg-divert. 옵션 1을 결합하여 전송할 수 있습니다 . 지금 우리는 두 개의 임시 스크립트를 작성 중입니다...debootstrapstart-stop-daemonupdate-rc.d

  6. 덜 방해적이므로 전송에 이것을 사용해 볼 수 있습니다 /etc/sshd_config. 이렇게 하면 압축된 구성 파일을 검사용으로 보존할 수 있으며 명시적으로 덮어쓰기를 방지함으로써 더욱 강력해질 수 있습니다. 불행하게도 파일은 설치 후 스크립트에 의해 동적으로 생성되기 때문에 dpkg-divert영향을 미치지 않는 것으로 나타났습니다 . sshd_config이는 옵션 5에 경고가 없다는 것을 설명할 수 있습니다.

마지막 부분은 패키지를 가리키는 누군가가 나에게 설명했습니다.소스 코드. 그런 다음 sshd_not_to_be_runpostrm 스크립트에서 참조를 발견했습니다 .

관련 정보