대상 OS: Ubuntu Server 24.04 LTS
SSH는 서버 운영의 필수지만, 공격자의 자동화 스캔도 늘 SSH부터 시작합니다.
키 인증을 쓰고 포트를 바꿔도 ‘시도’ 자체는 끝없이 들어오고, 로그는 금방 오염됩니다.
Fail2ban이 대표 솔루션이지만, 환경에 따라 더 가볍고 단순한 방식을 원할 때가 있습니다.
sshguard는 SSH/메일 등 인증 실패 로그를 보고 공격 IP를 자동으로 차단하는 도구로, 비교적 설치/운영이 단순한 편입니다.
이 글은 Ubuntu Server 24.04에서 sshguard로 SSH 브루트포스를 자동 차단하는 구성을 “설치→로그 소스 확인→백엔드(ufw/iptables) 선택→오탐 대응” 순서로 정리합니다.
---
1) sshguard가 맞는 환경 / 아닌 환경
1)
단일 서버 또는 소수 서버에서 “가벼운 자동 차단”을 빠르게 붙이고 싶다
2)
journald 기반 로그를 그대로 활용하고 싶다
3)
Fail2ban의 룰/필터 튜닝이 부담스럽다
4)
대규모 분산 공격/봇넷 대응을 정교하게 하려면(중앙 연동, 복잡한 정책) Fail2ban + WAF/상위 방화벽 조합이 더 적합할 수 있다
sshguard는 만능은 아니지만, “SSH 노이즈를 줄이고 반복 시도 비용을 올리는” 목적엔 실용적입니다.
---
2) 변경 전 점검: SSH 로그가 어디에 찍히는지
Ubuntu 24.04는 sshd 로그가 journald로 들어가는 경우가 많습니다.
1)
최근 SSH 로그 확인
sudo journalctl -u ssh -n 200 --no-pager
2)
sshd 설정에서 LogLevel 확인(필요 시 조정)
sudo sshd -T | grep -i loglevel
---
3) 설치 및 서비스 활성화
1)
패키지 설치
sudo apt update
sudo apt -y install sshguard
2)
서비스 상태 확인
systemctl status sshguard --no-pager || true
systemctl status sshguard.service --no-pager || true
배포판/버전에 따라 유닛 이름이 다를 수 있으니 status로 확인하는 습관이 안전합니다.
---
4) 차단 백엔드 선택: ufw vs iptables
sshguard는 차단을 어떤 방화벽 체계로 적용할지에 따라 동작 방식이 달라집니다.
1)
UFW를 이미 운영 중이면: UFW 백엔드가 운영 친화적
2)
UFW가 없고 iptables/nftables를 직접 쓰면: iptables 백엔드가 단순
이 글에서는 “백엔드가 무엇이든” 운영자가 확인해야 할 체크 포인트를 중심으로 다룹니다.
---
5) sshguard 설정 파일 확인 및 기본 튜닝
Ubuntu에서 sshguard 설정은 보통 /etc/sshguard/ 아래에 있습니다.
1)
설정 디렉터리 확인
sudo ls -la /etc/sshguard 2>/dev/null || true
2)
기본 설정 파일 확인(있는 것만)
sudo ls -la /etc/default/sshguard 2>/dev/null || true
sudo cat /etc/default/sshguard 2>/dev/null | sed -n '1,200p' || true
3)
권장 튜닝 포인트(개념)
- 공격 판단 임계치(실패 횟수)
- 차단 시간(너무 길면 오탐이 사고)
- 화이트리스트(관리망/VPN/점프서버 IP)
---
6) 화이트리스트(운영 필수): 관리망은 절대 막히면 안 된다
오탐으로 운영자 IP가 차단되면, sshguard는 “보안 도구”가 아니라 “장애 유발 장치”가 됩니다.
1)
관리망/VPN/점프서버 대역을 정한다
2)
화이트리스트 파일(있다면) 확인
sudo ls -la /etc/sshguard/whitelist 2>/dev/null || true
sudo cat /etc/sshguard/whitelist 2>/dev/null || true
3)
예시: whitelist에 관리망 추가
sudo tee /etc/sshguard/whitelist >/dev/null /dev/null | head -n 120 || true
nftables 환경인 경우(백엔드에 따라)
sudo nft list ruleset 2>/dev/null | head -n 200 || true
---
8) 오탐 대응 절차(정해두면 운영이 편해진다)
1)
“접속 안 된다”가 들어오면 먼저 sshguard/ssh 로그를 확인
sudo journalctl -u sshguard -n 200 --no-pager || true
sudo journalctl -u ssh -n 200 --no-pager
2)
해당 IP를 화이트리스트에 추가(정당한 경우에만)
sudo tee -a /etc/sshguard/whitelist >/dev/null