Post

무작위 로그인 시도 공격 대응하기

리눅스 서버에 대한 무차별 SSH 로그인 시도 공격을 발견하고, 화이트리스트 기반으로 대응한 과정을 공유합니다.

무작위 로그인 시도 공격 대응하기

로그를 확인하던 중 심상치않은 로그를 발견했어요.

2023-11-20-image1 무작위 SSH 로그인 시도 로그

알고 보니 봇넷이 무차별 대입 공격(Brute Force Attack)을 하고 있었어요. 자동화된 봇이 여러 사용자 이름과 비밀번호 조합을 돌려가며 로그인을 시도하는 건데, 서버를 운영하다 보면 흔하게 겪는 상황이라고 합니다.


해결 방법들

1. 강력한 비밀번호 설정

무차별 대입으로도 찾을 수 없는 복잡한 비밀번호를 설정해요. 구현이 간단하지만 공격 시도는 계속됩니다.

2. Root SSH 로그인 비활성화

1
2
# /etc/ssh/sshd_config
PermitRootLogin no

3. 비밀번호 인증 비활성화

키 기반 인증만 허용합니다.

1
2
3
# /etc/ssh/sshd_config
PasswordAuthentication no
PubkeyAuthentication yes

4. SSH 포트 변경

1
2
# /etc/ssh/sshd_config
Port 2222

자동화된 봇 공격 상당수를 회피할 수 있지만 근본적 해결은 아니에요.

5. Fail2ban 사용

1
2
3
4
5
6
7
8
9
yum install fail2ban -y

# /etc/fail2ban/jail.local
[sshd]
enabled = true
port = ssh
logpath = /var/log/secure
maxretry = 3
bantime = 3600

6. 화이트리스트 기반 접근 제어 (채택)

1
2
3
4
5
6
# /etc/hosts.allow
sshd: 192.168.1.0/24
sshd: 10.0.0.0/8

# /etc/hosts.deny
sshd: ALL

또는 방화벽 규칙을 사용합니다.

1
2
iptables -A INPUT -p tcp --dport 22 -s 192.168.1.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP

선택한 해결 방법

사내 상황에 맞는 화이트리스트만 SSH를 허용하는 방법을 채택했습니다.

선택 이유

  • 이미 public/private key 방식으로 로그인하고 있어 비밀번호 공격이 효과 없음
  • 모든 접속이 사내 네트워크 또는 VPN을 통해 이루어짐
  • 허용된 IP만 접근 가능하여 공격 시도 자체를 차단

화이트리스트 방식을 사용하면 로그에 공격 시도조차 기록되지 않아 서버 리소스도 절약됩니다.


같이 적용하면 좋은 것들

비밀번호 인증 비활성화 + 키 기반 인증, Root 로그인 차단은 기본으로 해두는 게 좋아요. 여기에 상황에 따라 화이트리스트, Fail2ban, 비표준 포트 변경 등을 조합하면 됩니다.

모니터링:

1
2
3
4
5
6
7
8
# SSH 로그인 시도 확인
tail -f /var/log/secure | grep sshd

# 실패한 로그인 시도 통계
grep "Failed password" /var/log/secure | wc -l

# 공격 IP 목록
grep "Failed password" /var/log/secure | awk '{print $(NF-3)}' | sort | uniq -c | sort -nr

처음에 로그를 봤을 땐 혹시나 서버가 털렸나 싶어서 등에 식은땀이 났지만 큰 이슈 없이 해결할 수 있어서 다행이었습니다.

This post is licensed under CC BY 4.0 by the author.