Fail2Ban 돌연사 사건 및 해결방법 (feat. 그지같은 nftables)

2025. 11. 15. 03:11·Infra/DevOps

Fail2Ban... 돌연사하다

말로 할 때 범인 나와라 진짜로

며칠 전까지 문제 없이 잘 돌아가던 Fail2Ban 컨테이너가, 필터를 조금 수정한 후 돌연사했다

??? 일 안할게~
??? unhealthy 할게~

갑자기 연속적으로 부팅 실패와 unhealthy 상태, 그리고 fail2ban-client status 실행 불가 같은 문제가 발생했다

아니 이렇게 갑자기 문제가 이렇게 터진다고?

나 요즘 급한 일 있다고 ㅠㅠ K8S도 미뤄두고 하고 있구만 캭!!!!


심지어 Nextcloud 접속 좀 했다고 [내 스마트폰 IP가 차단됨 → 접속 불가] 같은 웃지 못할 상황까지 발생했다 ㅋㅋ
그래서 문제를 근본적으로 파악하기 위해 전체 구조를 분석해봤다

 

급해가지고 로그 캡처도 몇개 못했네 ㅠㅠ

더보기

- 이 글을 쓰고 하루 뒤에 다시 문제가 생겨서 결국 nft로 체제 전환을 했습니다...

- 혹시 fail2ban을 계속 쓰실 생각이시라면 (1) fail2ban을 로컬에 설치한다. (2) nft로 전환한다 두가지 중 하나가 여러분의 정신건강에 이롭다는 말씀 드리고 싶네요 ㅠ

https://ratatou2.tistory.com/299

 

Fail2Ban, nftables 체제로 완전 전환하기 (feat. 눈물겨운 이유와 Ubuntu 22.04)

결국 nft로 전환하게 되었네요... 어제 포스팅 이후 Fail2Ban의 filter와 jail 업데이트를 진행했다10초 내에 5번 이상 404를 유도하는 요청은 누가봐도 이상하다 싶어서 벤하려고 filter와 jail을 새로 작

ratatou2.tistory.com



2025.11.24 최신화

- 저는 아래 방법으로 해결했습니다..!

https://ratatou2.tistory.com/303

 

Fail2Ban, 다시 iptables-nft 체제로 전환하기 (feat. 3트 후 최최최종ver)

결국.. 다시 여기로저번에 Fail2Ban이 iptable vs nft 문제로 터지고 나서 2번의 시도 이후에 다시 iptables로 돌아왔다그 뒤로도 nft가 문제가 많았음...서버가 네트워크가 안되는걸 해결하면 컨테이너가

ratatou2.tistory.com


1. 삽질 과정

이거↗ 어디까지↗ 들↗어↗가↗는 거에↗요?↘

급하신 분은 이부분 건너뛰고 해결부터 보셔도 됩니다!


1) fail2ban.sock이 생성되지 않음 → fail2ban이 부팅 자체에 실패 

- fail2ban-client status 실행 불가
- unhealthy 상태 반복

2) 처음에는 필터 에러로 의심함 → filter 문법 오류 해결

- % 처리, 정규식 오류 등 수정
- 하지만 여전히 fail2ban 부팅 실패
= 즉 filter 문제는 아니었음!!!

3) docker-compose.yml을 수정하며 여러 설정을 시도

- /etc/fail2ban 마운트 제거
- network_mode: host 제거
- privileged: true 추가
- volumes 재정리

= 하지만 여전히 fail2ban.sock 생성 X

(*) privileged를 true로 주면, 컨테이너가 완전한 root 권한을 가진다

그러면 iptables를 직접 수정 가능하고 체인 생성, DOCKER-USER 접근도 가능해진다

즉, host network mode 없이도 firewall 조작 가능!!!


4) filter 파일 자체를 삭제 / 적용 제외 처리해도 문제 유지

= 필터와 무관하게 더 깊은 문제일수도??

5) fail2ban 컨테이너 안에서 데몬을 직접 실행해봄

fail2ban-server -xb --logtarget=STDOUT

= jail 시작 단계에서 iptables 체인 생성 실패가 명확히 드러남

6) “어? chain을 만들 수 없어?” → iptables 문제로 집중

- fail2ban은 DOCKER-USER 체인에 규칙 추가해야 함
- 그런데 에러 발생!!!
iptables: No chain/target/match by that name.

- iptables에서 DOCKER-USER 체인이 안 보임

7) “그럼 도커 체인이 꼬였나?” → Docker User Chain 초기화 시도

sudo iptables -L DOCKER-USER
= 아예 없음
= 도커에서 만든 체인 자체가 iptables에서는 사라진 상태

8) 초기화 명령 실행 시도 → 권한/백엔드 관련 에러

- iptables 명령 실행이 실패
- "permission denied" 또는 "no chain" 에러 발생

9) “이건 docker 권한 문제가 아니라, 방화벽 백엔드 문제다” 의심 시작

- iptables 명령이 nft 커널 백엔드에 도달 못하고 있음
- nft 구조에서 DOCKER-USER 체인이 다른 테이블에 존재하고 있음

10) nft ruleset을 직접 확인 → DROP 룰 수십 개가 nft에만 존재

sudo nft list ruleset
= iptable이 아니라 nfttables가 실사용 중임을 확신하게 된 결정적 단계

 

정리하고 보니 깔끔하고 흐름 순서가 자연스러운데 실제로는 엄청 빙글빙글 돌았다... ㅠ


2. nftables이란 원인을 찾다

ㅇ...아앗... ㅊ..찾았다..!
디져 그냥!!

결국 원인은 iptables가 nftables로 자동 전환된 것이 문제였다

host network 모드에서 iptables 초기화가 실패해서 fail2ban-process가 즉시 종료함

 

당연히 난 따로 설정한 적 없었고 오늘 컨테이너 터져서 이리저리 삽질하다보니 지 멋대로 nftables를 쓰고 있더라

(알고보니 Docker는 그냥 system backend를 따라갈 뿐이고, Ubuntu 22.04버전부터 nft가 디폴트 됐다고...)

 

nftables는 iptables를 대체할 차세대 방화벽... 이름하여 방화벽계의 MZ 되시겠다;;;

더 빠르고 구조적이지만 아직 호환성 문제가 조금 있음

 

실제로 Ubuntu는 22.04 되고부터 nft를 기본값으로 사용하게 됐다니까 진짜 얼마 안된 것!

Docker는 nftables에 등록할 수 있지만, Fail2Ban은 iptables 기반이라 nftables 지원이 약하다

 

결국엔, Fail2Ban에서 iptables을 읽어오려는데 Docker는 nftables 사용 중이라 권한도 없고 서로 호환도 안되니 에러가 터진 것


다시 정리해서 진짜 쉽게 말하자면 아래와 같은 플로우

1) Docker랑 Fail2Ban은 원래 iptables로 소통하기로 약속함
2) 근데 우분투 22.04부터는 기본 세팅이 iptables-nft (nft wrapper)임
3) Docker는 system backend 세팅 따라가니까 자연스레 nftables라는 언어로 방화벽이랑 말하고 있었음
3) 그걸 전혀 모르던 Fail2Ban은 iptables로 말함
4) Fail2Ban이 말한걸 Docker가 못알아 들어서 결국 컨테이너 부팅에 필요한 chain을 못 찾음
5) 결국 Fail2Ban은 필요한 걸 못 들고 가서 그대로 나자빠짐

그리고 내가 마주한 Fail2Ban 컨테이너 실행 실패 로그들

ERROR   iptables: No chain/target/match by that name.
ERROR   Failed to start jail
ERROR   fail2ban.sock missing

[1]: ERROR 71039429dab0 -- stderr: 'iptables: No chain/target/match by that name.'
[1]: ERROR Failed to start jail 'nginx-badbots-access' action 'iptables-docker': Error starting action Jail('nginx-badbots-access')/iptables-docker: 'Script error'
[102]: ERROR Failed to access socket path: /var/run/fail2ban/fail2ban.sock. Is fail2ban running?

그 와중에 내 스마트폰 IP는 계속 차단됨 ㅋㅋㅋ

아래 명령어를 입력해도 나오는 것은 없었다;;

sudo iptables -L DOCKER-USER -n --line-numbers


# 원래는 아래처럼 예시가 뜬다
num  target     prot opt source        destination
1    DROP       all  --  111.77.222.33    0.0.0.0/0
2    DROP       all  --  192.168.0.2  0.0.0.0/0

그러다가 아래 명령어로 수십개의 ip들이 차단되어 있음을 찾았다

sudo nft list ruleset

iptables가 아닌 nft를 사용하고 있다는 사실 적발 완!


3. nftables 퇴치하고 iptables 다시 세팅해서 해결하기

결국 꼬일대로 꼬이고 IP 차단들도 여러가지 테이블에 동시에 등록된 상황

일일이 관리하고 해결하느니 싹 다 밀어버리기로 했다

잘가라 nftable 크큭...

그렇다면 일단 아래 순서로 진행하면 될 것 같았다

1) nftables 비활성화
2) Docker가 iptables를 사용하도록 강제 고정
3) 도커 데몬 재시작 후 DOCKER-USER 체인 복구
4) Fail2Ban 재실행 후 상태 보기

1) nftables에 등록된 모든 Drop rule 삭제

nftables는 이제 안쓸거니까 등록된 모든걸 삭제해줬다

sudo nft flush ruleset

2) Docker가 legacy iptables를 사용하도록 강제 고정

아까 말했듯 Docker는 system backend 설정 따라갈 뿐이다

그러니 아래 명령어로 iptables를 쓰도록 고정해준다

이러면 OS가 업데이트되건 Docker가 업데이트되건 다시 nftables로 바뀔 일은 없다

sudo update-alternatives --set iptables /usr/sbin/iptables-legacy
sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy

3) 도커 데몬 재시작 후 DOCKER-USER 체인 복구

Docker를 재실행해서 다시 체인을 만들어준다

쉽게 말해 Docker이름으로 iptables에 규칙 추가할 수 있게 해주는 것임

sudo systemctl restart docker
sudo iptables -L DOCKER-USER -n

4) Fail2Ban 재실행 후 상태 보기

docker compose restart fail2ban
docker exec -it fail2ban fail2ban-client status

번외

진짜 덕분에 오늘도 별짓을 다해봤다

하... 진빠져...

Fail2Ban의 filter는 굉장히 섬세한 친구라(줘패고 싶음) 살살 다뤄줘야한다

특히, '%' 문자열을 쓸 때 Fail2Ban은 내부적으로 문자열 포맷용 특수기호로 사용하므로 조심해야한다

그래서 정규식으로 쓸 땐 아래처럼 써야함

# 백퍼 에러 터짐
%2e%2e

# 아래처럼 2번씩 써야함
%%2e%%2e

쌔삥이 된 Fail2Ban의 jail

3천개까지 차곡차곡 모으기까지 4-5달 걸린거 같은데 언제 또 모으지...?

뭐 뻘짓 하는 요청 많으니까 또 금방 쌓일거라 본다

지긋지긋하다 증말


인프라 같은 안정성 기반 서비스는 왜 보수적으로 접근하는가?

를 완벽히 이해해버렸달까...?

안 그러면 개복치마냥 나자빠져 있는 내 서비스를 발견할 수 있으니까...

개복치같은 Fail2Ban...

2014년도부터 나온게 nft란다

근데 그러면 뭐해 Fail2Ban이 아직 완벽하게 지원을 안하는데;;;

구글링해서 찾아보니 나같은 사람들이 한둘이 아니었다

https://www.enginyring.com/en/blog/fixing-fail2ban-with-dockerized-vaultwarden-behind-caddy-why-bans-dont-block-and-how-to-solve-it

 

Fixing Fail2Ban with Dockerized Vaultwarden Behind Caddy: Why Bans Don't Block and How to Solve It

Administrators running Dockerized Vaultwarden behind Caddy reverse proxy on Debian frequently encounter a perplexing security failure: Fail2Ban...

www.enginyring.com

이 분도 Fail2Ban 쓰시는데 nft 때문에.. 마이그레이션 하는걸 적어두셨더라

https://github.com/fail2ban/fail2ban/issues/1814

 

fail2ban not creating rules while configured with nftables · Issue #1814 · fail2ban/fail2ban

We will be very grateful, if your problem was described as completely as possible, enclosing excerpts from logs (if possible within DEBUG mode, if no errors evident within INFO mode), and configura...

github.com

Fail2Ban에서는 6년 전부터 이 부분을 인지하고 쭉 개선해오긴 했던 것 같다

/etc/fail2ban/action.d에 nft 관련 파일들이 있음

궁금해서 찾아보니 실제로 Fail2Ban 컨테이너 내부에 nft 관련된 파일들도 확인할 수 있었다


고전은 영원하다

아무리 그래도 그렇지 몇 달을 멀쩡하던게 1분만에 고장나는걸 보니 어처구니가 없더라;;;

역시 고전은... 다 이유가 있는 법이다

믿습니다...


그럼에도...

이쯤되니까 이 기회에 한번 nft로 업데이트 해볼걸 그랬나... 싶기도하고

일단 요 근래는 일정이 빠듯하니 하고 싶은 일 리스트에 추가해둬야겠다 

흠냐링

 

반응형

'Infra > DevOps' 카테고리의 다른 글

Fail2Ban, 다시 iptables-nft 체제로 전환하기 (feat. 최최최종ver)  (0) 2025.11.24
Fail2Ban, nftables 체제로 완전 전환하기 (feat. 눈물겨운 이유와 Ubuntu 22.04)  (0) 2025.11.15
SSH 22번 포트 자동 복구 시스템 구축하기 (feat. 서버 잃고 뇌 약간 고치기 ㅠ)  (0) 2025.10.24
나만의 VPN 서버 만들기 (feat. 홈서버 + WireGuard)  (4) 2025.10.23
서버 부하 테스트 해보기 (feat. K6 스트레스 테스트 & 분산 구조 튜닝)  (0) 2025.10.23
'Infra/DevOps' 카테고리의 다른 글
  • Fail2Ban, 다시 iptables-nft 체제로 전환하기 (feat. 최최최종ver)
  • Fail2Ban, nftables 체제로 완전 전환하기 (feat. 눈물겨운 이유와 Ubuntu 22.04)
  • SSH 22번 포트 자동 복구 시스템 구축하기 (feat. 서버 잃고 뇌 약간 고치기 ㅠ)
  • 나만의 VPN 서버 만들기 (feat. 홈서버 + WireGuard)
Ratatou2
Ratatou2
온갖 정보들을 기록해두는 메모보드 블로그
  • Ratatou2
    nak-z
    · Ratatou2 ·
  • 전체
    오늘
    어제
  • 공지사항

    • 블로그 이전 진행 중 (24.11.25 ~)
    • 분류 전체보기 (303) N
      • OS (89) N
        • Linux (39)
        • Window (24)
        • Mac (21) N
        • Android (5)
      • Infra (83) N
        • DevOps (38) N
        • Docker (14)
        • Jenkins (9)
        • n8n (13)
        • Nextcloud (8)
        • Rasberry Pi (1)
      • Dev (17)
        • JAVA (7)
        • Python (1)
        • DB (3)
        • Vue (2)
        • AI (4)
        • Git (0)
      • Tools (10)
      • Study (69)
        • Algorithm (66)
        • CS (3)
      • Game (10)
        • Project Zomboid (9)
        • Don't Starve Together (1)
      • etc (24)
        • Temp (0)
      • 개발 외 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 인기 글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
Ratatou2
Fail2Ban 돌연사 사건 및 해결방법 (feat. 그지같은 nftables)
상단으로

티스토리툴바