it-swarm-ko.tech

SSH 서버를 강화하는 방법?

SSH 서버 주변의 보안이 절대적으로 불침 투성이되도록하기 위해 어떤 조치를 취해야합니까?

이것은 처음부터 커뮤니티 위키가 될 것이므로 사람들이 서버를 보호하기 위해 무엇을하는지 볼 수 있습니다.

128
LassePoulsen

올바른 로그인 정보를 제공하지 못한 sshd 블록 클라이언트 IP를 확인하십시오. " DenyHØsts "이 작업을 매우 효과적으로 수행 할 수 있습니다. 나는 어떤 방식 으로든 대외에서 도달 할 수있는 모든 Linux 상자에 이것을 설치했습니다.

이렇게하면 SSHD에 대한 강제 공격이 효과적이지 않지만 비밀번호를 잊어 버린 경우 자신을 잠그는 방법 (0)을 기억하십시오. 액세스 할 수없는 원격 서버에서 문제가 될 수 있습니다.

21
LassePoulsen

암호 대신 인증을 위해 공개/개인 키 쌍을 사용하십시오.

  1. 서버에 액세스해야하는 모든 컴퓨터에 대해 암호로 보호 된 SSH 키를 생성하십시오.

    ssh-keygen

  2. 허용 된 컴퓨터에서 공개 키 SSH 액세스를 허용하십시오.

    각 컴퓨터에서 ~/.ssh/id_rsa.pub의 내용을 서버에서 ~/.ssh/authorized_keys의 개별 줄로 복사하거나 액세스 권한을 부여 할 모든 컴퓨터에서 ssh-copy-id [server IP address]을 실행하십시오 (서버에 들어가야합니다) 프롬프트에서 암호).

  3. 비밀번호 SSH 액세스를 비활성화하십시오.

    /etc/ssh/sshd_config를 열고 #PasswordAuthentication yes라고 표시된 줄을 찾아 PasswordAuthentication no로 변경하십시오. SSH 서버 데몬을 다시 시작하여 변경 사항을 적용하십시오 (Sudo service ssh restart).

이제 서버에 SSH로 연결할 수있는 유일한 방법은 ~/.ssh/authorized_keys의 행과 일치하는 키를 사용하는 것입니다. 이 방법을 사용하면 I는 내 비밀번호를 추측하더라도 거부되기 때문에 무차별 대입 공격에 신경 쓰지 않습니다. 공개/개인 키 쌍을 강제로 강요하는 것은 불가능합니다 오늘날의 기술.

108
Asa Ayers

내가 제안 할게:

  • fail2ban 을 사용하여 무차별 강제 로그인 시도를 방지합니다.

  • SSH를 통한 루트로 로그인 비활성화 이는 공격자가 사용자 이름과 비밀번호를 모두 파악하여 공격을 더욱 어렵게해야한다는 것을 의미합니다.

    PermitRootLogin no/etc/ssh/sshd_config을 (를) 추가하십시오.

  • 서버에 SSH 할 수있는 사용자를 제한합니다. 그룹 별 또는 특정 사용자 별.

    AllowGroups group1 group2 또는 AllowUsers user1 user2를 추가하여 서버에 SSH 할 수있는 사용자를 제한하십시오.

72
Mark Davidson

다른 답변은 보안을 제공하지만 로그를 더 조용하게 만들고 계정이 잠길 가능성이 적은 방법이 있습니다.

서버를 포트 22에서 다른 서버로 이동하십시오. 게이트웨이 또는 서버에서.

보안을 강화하지는 않지만 모든 임의의 인터넷 스캐너가 로그 파일을 어지럽히 지 않음을 의미합니다.

24
Douglas Leeder

HOTP 또는 TOTP 을 사용하여 2 단계 인증을 활성화하십시오. 13.10부터 사용할 수 있습니다.

여기에는 다른 답변과 같이 비밀번호 인증을 통한 공개 키 인증 사용이 포함되지만 사용자는 자신의 개인 키 외에 두 번째 요소 장치를 보유하고 있음을 증명해야합니다.

요약:

  1. Sudo apt-get install libpam-google-authenticator

  2. 각 사용자가 google-authenticator 명령을 실행하여 ~/.google-authenticator을 생성하고 두 요인 장치 (예 : Google OTP (_Authenticator Android app)를 구성하도록 도와줍니다.

  3. /etc/ssh/sshd_config를 편집하고 다음을 설정하십시오.

    ChallengeResponseAuthentication yes
    PasswordAuthentication no
    AuthenticationMethods publickey,keyboard-interactive
    
  4. Sudo service ssh reload을 (를) 실행하여 /etc/ssh/sshd_config에 대한 변경 사항을 선택하십시오.

  5. /etc/pam.d/sshd를 수정하고 다음 줄을 바꾸십시오.

    @include common-auth
    

    와:

    auth required pam_google_authenticator.so
    

다른 구성 옵션에 대한 자세한 내용은 작년의 블로그 게시물입니다. 우분투에서 두 가지 요소 ssh 인증이 더 좋습니다 .

23
Robie Basak

한 가지 쉬운 방법은 다음과 같습니다. install fw ( "복잡하지 않은 방화벽") 그리고이를 사용하여 들어오는 연결을 제한하십시오.

명령 프롬프트에서 다음을 입력하십시오.

$ Sudo ufw limit OpenSSH 

fw가 설치되어 있지 않으면 다음을 수행하고 다시 시도하십시오.

$ Sudo aptitude install ufw 

많은 공격자가 SSH 서버를 사용하여 암호를 무차별 적으로 시도합니다. 동일한 IP 주소에서 30 초마다 6 개의 연결 만 허용합니다.

20
mpontillo

추가 보안을 원하거나 회사 네트워크 내부의 SSH 서버에 액세스해야하는 경우 익명 소프트웨어 Tor 를 사용하여 숨겨진 서비스 를 설정했습니다.

  1. Tor를 설치하고 SSH 서버 자체를 설정하십시오.
  2. Sshd가 localhost에서만 청취하는지 확인하십시오.
  3. /etc/tor/torrc를여십시오. HiddenServiceDir /var/lib/tor/sshHiddenServicePort 22 127.0.0.1:22을 설정하십시오.
  4. var/lib/tor/ssh/hostname를보십시오. d6frsudqtx123vxf.onion와 같은 이름이 있습니다. 이것은 숨겨진 서비스의 주소입니다.
  5. $HOME/.ssh/config를 열고 몇 줄을 추가하십시오 :

    Host myhost
    HostName d6frsudqtx123vxf.onion
    ProxyCommand socat STDIO SOCKS4A:127.0.0.1:%h:%p,socksport=9050
    

또한 로컬 호스트에 Tor가 필요합니다. 설치되어 있으면 ssh myhost를 입력하면 SSH가 Tor를 통해 연결됩니다. 다른 쪽의 SSH 서버는 로컬 호스트에서만 포트를 엽니 다. 따라서 아무도 "일반 인터넷"을 통해 연결할 수 없습니다.

12
qbi

이 주제에 관한 데비안 관리 기사가 있습니다. 기본적인 SSH 서버 구성과 방화벽 규칙을 다룹니다. SSH 서버를 강화하는 것도 흥미로울 수 있습니다.

다음 문서를 참조하십시오 : SSH 액세스 보안 유지 .

8
Huygens

SSH 강화에 대한 나의 접근 방식은 ... 복잡합니다. 다음 항목은 네트워크의 가장 가장자리부터 서버 자체에 이르기까지 내가 수행하는 방식에 관한 것입니다.

  1. 차단 목록에 알려진 서비스 스캐너 및 서명이있는 IDS/IPS를 통한 트래픽의 경계 수준 필터링. 경계 방화벽을 통해 Snort에서이 작업을 수행합니다 (이 방법은 pfSense 어플라이언스입니다). 때로는 VPS와 같이이 작업을 수행 할 수없는 경우도 있습니다.

  2. SSH 포트의 방화벽/네트워크 필터링. 특정 시스템 만 내 SSH 서버에 도달 할 수 있도록 명시 적으로 허용합니다. 이것은 내 네트워크 경계에있는 pfSense 방화벽 또는 명시 적으로 구성되는 각 서버의 방화벽을 통해 수행됩니다. 그래도 내가 할 수없는 경우가 있습니다 (방화벽이 물건을 테스트하는 데 도움이되지 않는 개인 펜 테스트 또는 보안 테스트 랩 환경을 제외하고는 거의 해당되지 않습니다).

  3. 내 pfSense 또는 내부 네트워크를 NAT하고 인터넷과 시스템에서 분리하는 경계 방화벽과 함께VPN 전용 서버 액세스. 인터넷에 연결된 포트가 없기 때문에 서버에 접속하기 위해 VPN을 네트워크에 연결해야합니다. 이것은 모든 VPS에서 제대로 작동하지는 않지만 # 2와 함께 해당 서버에 VPN을 연결하여 하나의 VPS를 '게이트웨이'로 설정 한 다음 다른 상자에 IP를 허용 할 수 있습니다. 그런 식으로 VPN이 가능한 하나의 상자 인 SSH를 사용할 수 있거나없는 것을 정확히 알고 있습니다. (또는 pfSense 뒤의 홈 네트워크에서 VPN 연결이며 VPN 액세스가 가능한 유일한 사람입니다).

  4. # 3을 수행 할 수없는 경우,fail2ban은 4 번의 시도 실패 후 차단하고 1 시간 이상 IP를 차단하도록 구성되어 있습니다.무차별 공격으로 끊임없이 공격하는 사람들에 대한 적절한 보호입니다. fail2ban 및 meh. fail2ban을 구성하는 것은 쉽지 않습니다 ...

  5. SSH 포트를 변경하여 포트 난독 화. 그러나 추가 보안 조치 없이는 수행하지 않는 것이 좋습니다 - "보안을 통한 보안"이라는 용어는 이미 많은 사람들에게 반박되고 논쟁을 벌이고 있습니다 사례. IDS/IPS 및 네트워크 필터링과 함께이 작업을 수행했지만 여전히 자체적으로 수행하는 것은 매우 좋지 않습니다.

  6. 필수 사항 Duo Security의 2 단계 인증 솔루션을 통한 2 단계 인증 인증 . 내 SSH 서버의 모든 단일 서버에 Duo가 구성되어있어 2FA 프롬프트가 발생하고 각 액세스를 확인해야합니다. (이것은 궁극적으로 유용한 기능입니다. 누군가 암호 문구가 있거나 침입하더라도 Duo PAM 플러그인을 통과 할 수 없기 때문입니다). 이것은 무단 액세스로부터 SSH 서버를 보호하는 가장 큰 보호 기능 중 하나입니다. 각 사용자 로그인은 Duo의 구성된 사용자와 다시 연결되어야하며, 제한적인 세트가 있으므로 시스템에 새 사용자를 등록 할 수 없습니다.

SSH를 보호하기위한 2 센트. 또는 적어도 접근에 대한 나의 생각.

6
Thomas Ward

Google OTP를 사용하는 대신 RedHat에서 FreeOTP 앱을 체크 아웃 할 수 있습니다. 때로는 앱을 업데이트 할 때 당신을 잠급니다! ;-)

Yubikey 또는 eToken PASS 또는 NG와 같은 다른 하드웨어 토큰을 사용하거나 많은 사용자 또는 많은 서버가있는 경우 오픈 소스 2 단계 인증 백엔드를 사용하고자 할 수 있습니다.

최근에 나는 howto 를 썼습니다.

1
cornelinux

많은 수의 사용자/인증서의 경우 LDAP 통합을 고려하십시오. 대규모 조직은 인증서가 인증 또는 전자 메일 서명에 사용되는지 여부에 관계없이 배지 또는 Fob에 저장된 사용자 자격 증명 및 인증서의 저장소로 LDAP를 사용합니다. 예를 들어 openLDAP, openDJ, Active Directory, Oracle Universal Directory, IBM Directory Server, snareWorks 등이 있습니다.

컴퓨터와 그룹은 중앙 자격 증명 관리를 제공하는 LDAP로 관리 할 수도 있습니다. 그런 식으로 헬프 데스크는 많은 인구를 처리 할 수있는 원 스톱 상점을 가질 수 있습니다.

다음은 centOS 통합에 대한 링크입니다. http://itdavid.blogspot.com/2013/11/howto-configure-openssh-to-fetch-public.html

0
weller1

GeoIP 데이터베이스를 사용하여 원산지 기반으로 차단할 수도 있습니다.

기본적으로 미국에 거주하는 경우 러시아의 누군가가 SSH에 연결해야 할 이유가 없으므로 자동으로 차단됩니다.

스크립트는 여기에서 찾을 수 있습니다 : https://www.axllent.org/docs/view/ssh-geoip/

Iptables 명령을 추가하여 (내 드롭 릿에 한 것) 해당 트래픽의 모든 트래픽을 자동으로 드롭 할 수 있습니다.

0
Michael A Mike

최근 에이 작업을 수행하는 방법에 대한 작은 자습서를 작성했습니다. 기본적으로 PKI를 사용해야하고 튜토리얼에서는 보안을 강화하기 위해 2 단계 인증을 사용하는 방법도 보여줍니다. 그중 아무 것도 사용하지 않더라도 약한 암호 제품군 및 기타 기본 사항을 제거하여 서버를 보호하는 데 약간의 어려움이 있습니다. https://joscor.com/blog/hardening-openssh-server-ubuntu-14-04/

0
01000101