웹사이트 검색

SSH 무차별 로그인 공격을 방지하는 5가지 모범 사례


SSH를 실행하는 서버는 일반적으로 무차별 대입 공격의 소프트 타겟입니다. 해커들은 침입 위험을 더욱 높이는 무차별 대입 공격을 자동화하기 위한 혁신적인 소프트웨어 도구와 봇을 지속적으로 개발하고 있습니다.

이 가이드에서는 RHEL 기반 Linux 배포판 및 Debian 파생 제품에 대한 무차별 대입 공격으로부터 SSH 서버를 보호하기 위해 구현할 수 있는 몇 가지 팁을 살펴봅니다.

SSH 비밀번호 인증 비활성화 및 SSH 키 인증 활성화

SSH의 기본 인증 방법은 사용자 이름/비밀번호 인증입니다. 그러나 앞서 살펴보았듯이 비밀번호 인증은 무차별 대입 공격을 받기 쉽습니다. 안전을 위해 공개 및 비공개 SSH 키 쌍으로 인증이 가능한 키 기반 SSH 인증을 구현하는 것이 좋습니다. 공개 키가 서버에 복사되는 동안 개인 키는 클라이언트의 PC에 남아 있습니다.

SSH 키 인증 시 서버는 클라이언트 PC가 개인 키를 보유하고 있는지 확인합니다. 확인에 성공하면 쉘 세션이 생성되거나 원격 서버로 전송된 명령이 성공적으로 실행된 것입니다. SSH 키 기반 인증을 구성하는 방법에 대한 포괄적인 가이드가 있습니다.

키 기반 인증을 설정한 후에도 비밀번호 인증이 여전히 활성화되어 있다는 단순한 이유 때문에 서버는 여전히 무차별 대입 공격에 취약합니다. 이 기능을 비활성화해야 합니다.

따라서 기본 SSH 구성 파일을 편집하십시오.

sudo vim /etc/ssh/sshd_config

표시된 대로 PasswordAuthentication 매개변수를 no로 설정합니다.

PasswordAuthentication no

그런 다음 파일을 저장하고 SSH를 다시 로드하여 변경 사항을 적용합니다.

sudo systemctl reload ssh

Fail2ban 침입 방지 도구 구현

Python으로 작성된 Fail2ban은 서비스의 로그 파일에서 인증 실패를 검사하고 지정된 시간 동안 비밀번호 인증 확인에 반복적으로 실패하는 IP를 차단하는 오픈 소스 침입 방지 프레임워크입니다.

Fail2ban은 침입 시도 및 기타 악의적인 활동이 있는지 서버 로그 파일을 지속적으로 모니터링합니다. 미리 정의된 횟수만큼 인증에 실패하면(대부분의 경우 3번의 로그인 시도 실패) Fail2ban은 자동으로 원격 호스트의 서버 액세스를 차단합니다. 호스트는 특정 기간 동안 '감옥'에 갇히게 됩니다.

이를 통해 Fail2ban은 잘못된 비밀번호 인증 시도 비율을 크게 줄입니다. Bruteforce 공격으로부터 서버를 보호하기 위해 Linux에서 Fail2ban을 설치하고 구성하는 방법에 대한 가이드를 확인하세요.

최대 SSH 인증 시도 횟수 제한

무차별 공격으로부터 서버를 보호하는 또 다른 간단한 방법은 SSH 로그인 시도 횟수를 제한하는 것입니다. 기본적으로 3으로 설정되어 있지만, 만약 이 값을 더 높게 설정한다면 최대 3번의 연결 시도로 설정하세요.

예를 들어, 최대 연결 시도 횟수를 3으로 설정하려면 다음과 같이 MaxAuthTries 매개변수를 3으로 설정하세요.

MaxAuthTries = 3

다시 한 번 변경 사항을 저장하고 SSH 서비스를 다시 로드합니다.

sudo systemctl reload ssh

클라이언트의 SSH 액세스를 제한하기 위해 TCP 래퍼 구현

TCP 래퍼는 원격 클라이언트의 TCP 서비스 액세스를 제한하는 호스트 기반 액세스 제어 목록(ACL)을 제공하는 라이브러리입니다. IP 주소

원격 호스트가 시스템의 서비스에 액세스하지 못하도록 합니다. TCP 래퍼는 /etc/hosts.allow/etc/hosts.deny 구성 파일(순서대로)을 사용하여 원격 클라이언트가 특정 호스트에 액세스할 수 있는지 확인합니다. 서비스인지 아닌지.

일반적으로 이러한 파일은 주석 처리되어 있으며 모든 호스트는 TCP 래퍼 계층을 통해 허용됩니다. 특정 서비스에 대한 액세스를 허용하는 규칙은 /etc/hosts.allow 파일에 있으며 /etc/hosts.deny 파일의 규칙보다 우선합니다.

모범 사례에서는 들어오는 모든 연결을 차단하는 것이 좋습니다. 따라서 /etc/hosts.deny 파일을 엽니다.

sudo vim /etc/hosts.deny

다음 줄을 추가합니다.

ALL: ALL

변경 사항을 저장하고 파일을 종료합니다.

그런 다음 /etc/hosts.allow 파일에 액세스합니다.

sudo vim /etc/hosts.allow

그림과 같이 SSH를 통해 서버에 연결할 수 있는 호스트 또는 도메인을 구성합니다. 이 예에서는 두 개의 원격 호스트(173.82.227.89173.82.255.55)만 서버에 연결하도록 허용하고 나머지는 거부합니다.

sshd: 173.82.227.89 173.82.255.55
sshd: ALL: DENY

변경 사항을 저장하고 구성 파일을 종료합니다.

이를 테스트하려면 액세스를 허용한 호스트가 아닌 호스트에서 서버에 연결해 보십시오. 표시된 대로 권한 오류가 발생해야 합니다.

ssh [email 

kex_exchange_identification: read: Connection reset by peer
Connection reset by 173.82.235.7 port 22
lost connection

SSH 2단계 인증 구현

2단계 인증은 비밀번호 인증에 보안 계층을 추가하여 무차별 공격으로부터 서버를 더욱 안전하게 만듭니다. 널리 사용되는 2단계 인증 솔루션은 Google Authenticator 앱이며, 2단계 인증 설정 방법에 대한 잘 문서화된 가이드가 있습니다.

결론

이는 SSH 무차별 공격 로그인 공격을 방지하고 서버의 안전을 보장하기 위해 구현할 수 있는 5가지 모범 사례를 요약한 것입니다. OpenSSH 서버를 보호하고 강화하는 방법도 읽을 수 있습니다.