대상 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