WireGuard · 2026-04-12

WireGuard와 Fail2Ban으로 브루트포스 차단

WireGuard 로그를 방화벽 단계에서 수집하고 Fail2Ban과 연동해 자동 차단 체계를 만드는 구성과 구현 방법 설명으로 보안 설정

작성일 : 2026-04-12 ㆍ 작성자 : 관리자
post
목차

개요

WireGuard는 가볍고 성능이 우수한 VPN이다. 하지만 UDP 기반이라 전통적 인증 실패 로그만으로는 브루트포스를 탐지하기 어렵다. 본문에서는 WireGuard Fail2Ban 설정을 통해 네트워크 레벨에서 시도를 로깅하고 Fail2Ban으로 자동 차단하는 실무적 접근을 설명한다. 단계별 예제와 테스트 방법을 포함해 처음 접하는 사람도 이해할 수 있도록 구성했다.

원리와 준비물

왜 별도 로깅이 필요한가

WireGuard는 세션 기반 인증 로그를 남기지 않는다. 따라서 공격자가 반복적으로 핸드셰이크를 시도하더라도 시스템 로그에는 명확한 실패 항목이 표시되지 않을 수 있다. 해결책은 방화벽(nftables/iptables)에서 WireGuard 포트로 들어오는 패킷을 식별해 로그로 남기고, 그 로그를 Fail2Ban이 분석해 차단하도록 만드는 것이다.

준비 항목

  • WireGuard 서버(예: 51820/udp)
  • nftables 또는 iptables로 로그 생성 권한
  • rsyslog 또는 syslog-ng로 로그 분리
  • Fail2Ban 설치 및 기본 사용법 숙지

구현 개요

구현 흐름은 다음과 같다.

  • 방화벽 규칙으로 WireGuard 포트의 의심스러운 패킷을 로그에 남김
  • rsyslog가 로그를 전용 파일로 분리
  • Fail2Ban이 전용 로그를 모니터링해 반복 시도 IP를 차단

단계별 구현

1) nftables 로그 규칙 추가

nftables에 간단한 로깅 규칙을 넣는다. prefix는 Fail2Ban 필터에서 식별하기 쉬운 문자열로 정한다.

table inet filter {
    chain input {
        type filter hook input priority 0;
        policy accept;
        udp dport 51820 counter log prefix "WG-ATTEMPT: " flags all
    }
}

2) rsyslog로 전용 로그 파일 만들기

로그를 별도 파일로 분리하면 Fail2Ban 필터 작성과 운영이 편해진다. /etc/rsyslog.d/30-wireguard.conf 예시:

if $msg contains "WG-ATTEMPT:" then /var/log/wg_attempts.log
& stop

설정 적용 후 systemctl restart rsyslog로 재시작한다.

3) Fail2Ban 필터 작성

방화벽 로그의 형식에 따라 정규식을 맞춰야 한다. nftables 로그는 보통 SRC=IP 형태를 포함하므로 이를 활용한다. /etc/fail2ban/filter.d/wireguard.conf 예시:

[Definition]
failregex = WG-ATTEMPT: .*SRC=
ignoreregex =

실제 로그 예시는 다음과 같다.

Apr 12 12:34:56 host kernel: WG-ATTEMPT: IN=eth0 OUT= MAC=... SRC=203.0.113.45 DST=198.51.100.10 LEN=60 ...

로그 형식이 다르면 failregex를 그에 맞게 조정한다.

4) Fail2Ban jail 설정

Fail2Ban이 전용 로그를 모니터링하도록 jail을 추가한다. /etc/fail2ban/jail.d/wireguard.conf 예시:

[wireguard]
enabled = true
filter = wireguard
logpath = /var/log/wg_attempts.log
maxretry = 5
bantime = 3600
findtime = 600
action = iptables-multiport[name=wg, port="51820", protocol=udp]

설정 적용 후 fail2ban-client reload 또는 서비스를 재시작한다.

5) 테스트 방법

테스트는 실제 UDP 패킷을 보내 로그가 남는지 확인한다. 간단한 예:

printf "test" | nc -u -w1 서버_IP 51820

또는 로컬에서 직접 로그 라인을 생성해 Fail2Ban 반응을 확인할 수 있다.

logger "WG-ATTEMPT: IN=eth0 SRC=203.0.113.45 DST=198.51.100.10"

Fail2Ban에서 차단 상태 확인:

fail2ban-client status wireguard
fail2ban-client set wireguard ban 203.0.113.45
fail2ban-client set wireguard unban 203.0.113.45

튜닝과 운영 팁

  • 로그 볼륨이 클 때 디스크 부담을 줄이기 위해 nftables에서 rate limit을 추가한다. 예:
    udp dport 51820 limit rate 10/second accept
  • 정상 사용자의 네트워크 특성에 따라 maxretry와 findtime을 조절해 오탐을 줄인다.
  • 허용 목록(whitelist)을 만들어 내부 네트워크나 관리 IP는 차단 대상에서 제외한다.
  • 로그 로테이션(/etc/logrotate.d/)을 설정해 /var/log/wg_attempts.log가 무한히 커지지 않도록 관리한다.

한계와 보완책

이 방식은 패킷 기반의 의심스러운 접근을 차단하는 데 유효하지만, 공격자가 IP를 자주 변경하거나 프록시를 사용하면 한계가 있다. 추가 방어로는 다음을 권장한다.

  • 클라이언트 키 관리 강화 및 불필요한 클라이언트 삭제
  • 포트 변경, 포트 knocking 같은 보안 기법 고려
  • 네트워크 레벨의 추가 방화벽 규칙 및 중앙화된 침입 탐지 시스템 연동

맺음말

WireGuard 브루트포스 방지를 위해서는 네트워크 단에서의 로그 수집과 Fail2Ban 연동이 현실적인 방법이다. 위 절차는 WireGuard Fail2Ban 설정과 Fail2Ban WireGuard 연동을 염두에 두고 작성되었으며, 환경에 맞춰 규칙과 정규식을 조정하면 안정적인 방어 체계를 구축할 수 있다.

WireGuard Fail2Ban 설정 WireGuard 브루트포스 방지 Fail2Ban WireGuard 연동 WireGuard 보안 Fail2Ban 설정 nftables 로그 VPN 보안 로그 분석 보안