웹사이트 검색

OpenSSH 서버를 보호하고 강화하는 방법


서버, 라우터 및 스위치와 같은 원격 장치에 액세스할 때 SSH 프로토콜은 트래픽을 암호화하고 연결을 도청하려는 사람을 차단할 수 있는 기능을 제공하므로 적극 권장됩니다.

그러나 SSH의 기본 설정은 오류가 없는 것은 아니며 프로토콜을 더욱 안전하게 만들려면 추가 조정이 필요합니다. 이 가이드에서는 서버에서 OpenSSH 설치를 보호하고 강화하는 데 사용할 수 있는 다양한 방법을 살펴봅니다.

1. SSH 비밀번호 없는 인증 설정

기본적으로 SSH는 사용자가 로그인할 때 비밀번호를 제공하도록 요구합니다. 그러나 해커는 비밀번호를 추측하거나 특수 해킹 도구를 사용하여 무차별 대입 공격을 수행하고 시스템에 액세스할 수도 있습니다. 안전을 위해 SSH 비밀번호 없는 인증을 사용하는 것이 좋습니다.

첫 번째 단계는 공개 키개인 키로 구성된 SSH 키 쌍을 생성하는 것입니다. 개인 키는 호스트 시스템에 있고 공개 키는 원격 서버에 복사됩니다.

공개 키가 성공적으로 복사되면 이제 비밀번호를 제공하지 않고도 SSH를 통해 원격 서버에 원활하게 연결할 수 있습니다.

다음 단계는 비밀번호 인증을 비활성화하는 것입니다. 이를 위해서는 SSH 구성 파일을 수정해야 합니다.

sudo vim /etc/ssh/sshd_config

구성 파일 내에서 스크롤하여 다음 지시어를 찾습니다. 주석 처리를 해제하고 'yes' 옵션을 'no'로 변경합니다.

PasswordAuthentication no

그런 다음 SSH 데몬을 다시 시작하십시오.

sudo systemctl restart sshd

이 시점에서는 SSH 키 인증을 통해서만 원격 서버에 액세스할 수 있습니다.

2. 사용자 SSH 비밀번호 없는 연결 요청 비활성화

서버 보안을 강화하는 또 다른 권장 방법은 비밀번호가 없는 사용자의 SSH 로그인을 비활성화하는 것입니다. 다소 이상하게 들리지만 때때로 시스템 관리자가 사용자 계정을 생성하고 암호 할당을 잊어버릴 수 있습니다. 이는 매우 나쁜 생각입니다.

비밀번호가 없는 사용자의 요청을 거부하려면 다시 /etc/ssh/sshd_config의 구성 파일로 이동하여 아래 지시어가 있는지 확인하세요.

PermitEmptyPasswords no

그런 다음 변경 사항을 적용하려면 SSH 서비스를 다시 시작하십시오.

sudo systemctl restart sshd

3. SSH 루트 로그인 비활성화

해커가 루트 암호를 무차별 대입 공격하면 어떤 일이 일어날 수 있는지는 전혀 생각할 필요가 없습니다. 원격 루트 로그인을 허용하는 것은 시스템 보안을 위태롭게 할 수 있는 항상 나쁜 생각입니다.

이러한 이유로 항상 SSH 원격 루트 로그인을 비활성화하고 대신 루트가 아닌 일반 사용자를 사용하는 것이 좋습니다. 다시 한 번 구성 파일로 이동하여 표시된 대로 이 줄을 수정합니다.

PermitRootLogin no

완료되면 SSH 서비스를 다시 시작하여 변경 사항을 적용하십시오.

sudo systemctl restart sshd

이제부터 원격 루트 로그인이 비활성화됩니다.

4. SSH 프로토콜 2 사용

SSH는 SSH 프로토콜 1프로토콜 2의 두 가지 버전으로 제공됩니다. SSH 프로토콜 2는 2006년에 도입되었으며 강력한 암호화 검사, 대량 암호화 및 강력한 알고리즘 덕분에 프로토콜 1보다 더 안전합니다.

기본적으로 SSH는 프로토콜 1을 사용합니다. 이를 더욱 안전한 프로토콜 2로 변경하려면 구성 파일에 아래 줄을 추가하세요.

Protocol 2

항상 그렇듯이, 변경 사항을 적용하려면 SSH를 다시 시작하세요.

sudo systemctl restart sshd

앞으로 SSH는 기본적으로 프로토콜 2를 사용합니다.

SSH 프로토콜 1이 더 이상 지원되는지 테스트하려면 다음 명령을 실행하세요.

ssh -1 user@remote-IP

"SSH 프로토콜 v.1은 더 이상 지원되지 않습니다"라는 오류가 표시됩니다.

이 경우 명령은 다음과 같습니다.

ssh -1 [email 

또한 프로토콜 2가 사용 중인 기본 프로토콜인지 확인하기 위해 -2 태그를 지정할 수도 있습니다.

ssh -2 [email 

5. SSH 연결 시간 초과 유휴 값 설정

유휴 SSH 연결을 사용하여 PC를 오랫동안 방치하면 보안 위험이 발생할 수 있습니다. 누군가가 그냥 지나가다가 SSH 세션을 이어받아 원하는 대로 무엇이든 할 수 있습니다. 문제를 해결하려면 유휴 시간 초과 제한을 설정하는 것이 좋습니다. 이를 초과하면 SSH 세션이 닫힙니다.

다시 한 번 SSH 구성 파일을 열고 “ClientAliveInterval” 지시문을 찾으세요. 합리적인 값을 할당합니다. 예를 들어 제한을 180초로 설정했습니다.

ClientAliveInterval 180

이는 180초에 해당하는 3분 후에 활동이 등록되지 않으면 SSH 세션이 삭제된다는 것을 의미합니다.

그런 다음 SSH 데몬을 다시 시작하여 변경 사항을 적용합니다.

sudo systemctl restart sshd

6. 특정 사용자에게 SSH 액세스 제한

추가된 보안 계층의 경우 시스템에 로그인하고 원격 작업을 수행하기 위해 SSH 프로토콜이 필요한 사용자를 정의할 수 있습니다. 이렇게 하면 귀하의 승인 없이 귀하의 시스템에 접근하려는 다른 사용자를 차단할 수 있습니다.

항상 그렇듯이 구성 파일을 열고 "AllowUsers" 지시문과 부여하려는 사용자 이름을 추가합니다. 아래 예에서는 'tecmint' 및 'james' 사용자가 SSH를 통해 시스템에 원격으로 액세스할 수 있도록 허용했습니다. 원격 액세스를 시도하는 다른 사용자는 차단됩니다.

AllowUsers tecmint james

그런 다음 변경 사항을 유지하려면 SSH를 다시 시작하세요.

sudo systemctl restart sshd

7. 비밀번호 시도 제한 구성

보안 계층을 추가할 수 있는 또 다른 방법은 SSH 로그인 시도 횟수를 제한하여 여러 번의 시도 실패 후 연결이 끊어지는 것입니다. 따라서 다시 한 번 구성 파일로 가서 "MaxAuthTries" 지시어를 찾아 최대 시도 횟수에 대한 값을 정의하세요.

이 예에서는 표시된 대로 제한이 3회 시도로 설정되었습니다.

MaxAuthTries 3

마지막으로 이전 시나리오와 마찬가지로 SSH 서비스를 다시 시작합니다.

다음 SSH 관련 기사도 유용할 수 있습니다.

  • Linux의 소스에서 OpenSSH 8.0 서버를 설치하는 방법
  • CentOS/RHEL 8에서 SSH를 보호하기 위해 Fail2Ban을 설치하는 방법
  • Linux에서 SSH 포트를 변경하는 방법
  • Linux에서 SSH 터널링 또는 포트 전달을 만드는 방법
  • Linux에서 SSH 연결 속도를 높이는 4가지 방법
  • Linux에서 실패한 SSH 로그인 시도를 모두 찾는 방법
  • Linux에서 비활성 또는 유휴 SSH 연결을 끊는 방법
결론

이상은 SSH 원격 연결을 보호하기 위해 취할 수 있는 몇 가지 조치를 요약한 것입니다. 무차별 대입 공격을 막기 위해 원격 액세스 권한이 있는 사용자에게는 항상 강력한 비밀번호를 할당해야 한다는 점을 추가하는 것이 중요합니다. 이 가이드가 귀하에게 유용한 정보가 되었기를 바랍니다. 귀하의 의견을 환영합니다.