무차별 로그인 시도(brute force) 막는 현실적인 방법


    서버를 외부에 공개하면 곧바로 전 세계의 자동화된 봇들이 로그인을 시도합니다. 아이디와 비밀번호를 끝없이 바꿔가며 뚫으려는 것을 **무차별 대입 공격(brute force)**이라 합니다. auth.log를 열어보면 하루에도 수천 건씩 실패한 시도가 쌓여 있을 정도입니다. 이 글에서 현실적인 방어법을 정리합니다.

    1. 공격 흔적 직접 확인하기

    먼저 내 서버가 얼마나 공격받고 있는지 봅니다.

    sudo grep "Failed password" /var/log/auth.log | wc -l
    

    생각보다 많은 숫자에 놀랄 수 있습니다. 이것이 방어가 필요한 이유입니다.

    2. fail2ban 도입 (가장 효과적)

    가장 현실적이고 강력한 방법은 fail2ban입니다. 정해진 횟수 이상 로그인에 실패한 IP를 자동으로 일정 시간 차단합니다.

    sudo apt install fail2ban -y
    

    설치만 해도 기본 규칙으로 SSH를 보호합니다. 차단 정책은 설정 파일에서 조정할 수 있습니다.

    [sshd]
    enabled = true
    maxretry = 5
    bantime = 1h
    

    5회 실패하면 1시간 차단하는 설정입니다. 차단된 IP는 다음 명령으로 확인합니다.

    sudo fail2ban-client status sshd
    

    3. 비밀번호 로그인 자체를 없애기

    근본적인 해결책은 비밀번호 대신 SSH 키 인증만 허용하는 것입니다. 키 없이는 아예 로그인이 불가능하므로, 무차별 대입 공격은 의미가 없어집니다.

    PasswordAuthentication no
    

    키 인증이 정상 동작하는 것을 확인한 뒤에 적용하세요.

    4. 기본 포트 변경

    22번 포트는 봇들이 가장 먼저 두드리는 문입니다. 포트를 바꾸면 무작위 공격 시도가 눈에 띄게 줄어듭니다. 단, 이는 보조 수단일 뿐 근본 대책은 아니라는 점을 기억하세요.

    5. 접속 가능한 IP 제한

    관리용 접속을 신뢰하는 IP에서만 허용하면 가장 확실합니다. 고정 IP가 있다면 방화벽에서 그 IP만 SSH를 허용하도록 설정합니다.

    sudo ufw allow from 203.0.113.10 to any port 22
    

    6. 흔히 노려지는 계정 보호

    봇들은 root, admin, test, ubuntu 같은 흔한 계정명을 집중적으로 노립니다. root 직접 로그인을 막고, 추측하기 어려운 계정명을 쓰는 것만으로도 위험을 줄일 수 있습니다.

    마무리

    무차별 공격은 멈추지 않지만, fail2ban + 키 인증 + IP 제한의 조합이면 사실상 무력화할 수 있습니다. 특히 비밀번호 로그인을 없애고 키 인증만 쓰는 것이 가장 확실한 방어입니다. 서버를 공개하기 전에 이 방어선을 미리 구축해 두세요.

    답글 남기기

    이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다