무작위 로그인 시도 공격 대응하기
리눅스 서버에 대한 무차별 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.
