SW/ 개발팁 / 추천프로그램, 꿀팁 공유
  • 돌아가기
  • 아래로
  • 위로
  • 목록
  • 댓글
Linux

crowdsec 도입을 위한 소개

김날이 293

3

7

crowdsec이 도대체 무엇인가에 대해 저도 아무 생각이 없었고

opnsense에서 패키지로 설치하여 간단하게 사용하고 있었습니다. 

집에서는 Linux, Promox, Synology가 별도의 서비스를 돌리고 있으며 이는 통합적인 보안 관리가 필요함을 의미하고

이를 위해서 crowdsec을 도입하였습니다.

 

crowdsec을 도입하려면 crowdsec에 대한 간단한 이해가 필요합니다. 

처음에는 fail2ban과 큰 차이가 없는 프로그램이라고 생각하였지만 

crowdsec은 서비스를 다양한 서버에서 진행되는 분산된 환경에 매우 유용하며 이는 대부분의 홈 사용자에게도 이제 해당되는 이야기라고 봅니다. 

fail2ban은 한개의 서버에서 수행되는 서비스들을 방어할 수 있다면 crowdsec은 다양한 여러 서버에서 다양하게 수행되는 서비스를 다양한 방식(iptables, reverse proxy, cloudflare 등)으로 차단할 수 있습니다. 

이는 결국 최근에 대두되고 있는 zero trust를 수행할 수 있는 어느 정도의 요소를 마련해 준다고 봅니다. 

물론 내부망 IP 차단까지 하면서 홈 네트워크 보안을 하기엔 어렵다기 보단 귀찮죠....

 

crowdsec은 크게 4가지로 구성되어 있는데

서버의 로그를 파싱하고 차단할 IP를 필터링하는 agent를 수행하는 하나의 서버 machine

각 machine에서 전송된 차단 IP를 종합관리하는 Local API 서버

crowdsec 사용자들에게 수집된 차단 IP를 모아서 다시 사용자에게 내려줘서 차단하는 Central API 

차단된 IP를 실제 서비스나 방화벽에서 차단 및 해제하는 bouncer로 구성됩니다. 

 

하나의 Local API를 가진 서버에 여러대의 machine을  붙여서 관리할 수 있으며 그를 기반으로

다양한 bouncer에 붙여서 방화벽에 IP기반 차단 관리 가능합니다. 

지원하는 bouncer의 종류는 iptables 기반,  traefik 기반, opnsense,cloudflare 연동 등 다양한 bouncer를  사용가능합니다.

 

다양한 시나리오 기반에 로그를 파싱하기 위해서는 collection 리스트에서 해당 시나리오를 다운 받고

시나리오에서 사용하는 파서를 기반으로 crowdsec 설정의 acquis.yaml에서 해당 로그를 파싱할 수 있도록 정의합니다.

유명한 서비스의 BF(Brute Force), HTTP에 대한 다양한 공격 시도 CVE 취약점에 대해 차단이 간단합니다. 

 

yaml 파일은 구문(띄어쓰기)이 딱 맞아야하므로 복사해서 사용하는 것이 좋습니다. 

 

사실상 이런 서비스는 구성을 어떻게 하느냐가 중요하고 기본적인 시나리오와 내가 맞지 않는 경우가 많으므로 

내가 원하는 시나리오를 기반으로 차단하는게 좋은것 같습니다. 

멀티 서버 구성은  crowdsec.net/blog/multi-server-setup 링크를 참조하시면 되겠습니다.

 

아주 간단하게 설명한다면 서비스가 수행되고 있는 실제 서버에서

crowdsec을 설치, (Local API 서버를 쓰지 않는다면 disable) 

해당 서버에서 수행되는 서비스에 대해 collection 설치, 

설치된 collection에 대한 log 파싱,  

파싱이 수행되는 machine을 local API 서버에 등록, 

차단할 서비스 bouncer 연결을 하시면 됩니다. (Local API 서버 에서만)

 

장점

    1. 다양한 서비스에 대한 collection에 따른 시나리오가 존재하여 서비스 보안 설정이 편리

    2. muti-server에 대해 각 서버별로 bouncer를 설치하여 관리한다면 zero trust 보안 관리에 편리 

    3. cscli 명령어를 통한 log 파싱 현황, 경고 IP 리스트, 차단 IP 리스트 파악이 손쉬움 

    4. bouncer가 여러 형태로 존재하므로 iptables를 사용하지 않더라도 서비스 단에서 차단 가능 

    5. app.crowdsec.net에서 제공하는 통합 모니터링 서비스 

 

단점 

  1. collection 설치후 로그 파싱에 대한 CUI가 없으므로 직접 설정을 하기 귀찮으며, 파싱 결과 확인 필수
  2. muti-server 환경이 아니라면 fail2ban 보다는 복잡한 설치 구성법
  3. single point of failure가 존재하는 구조로 차단의 핵심 역할인 Local API 서버가 죽으면 차단이 이뤄지지 않음 

결국 장점을 최대한 활용하려면 여러대의 서버와 서비스를 통합 관리하는 것이 좋습니다.  

신고공유스크랩
7
1등
DarkAcid 2024.02.08. 07:52
오호! iptable같은 분산되서 관리가 어려운걸 한군데로 몰아주는 형식이군요 재미있네요!
2등
SHISHAMO 2024.02.08. 13:46
traefik 플러그인을 통해 연결하려고 하는데..음 설정을 잘 못한건지 작동 안하는 것 같더라고요.
docker exec crowdsec cscli decisions add --ip로 설정한 ip까지 crowd에서 인식하는데
중요한 바운서가 작동을 안하니 ㅋㅋㅋ

은근 어렵습니다.
김날이 글쓴이 2024.02.08. 21:39
SHISHAMO
crowdsec-traefik-bouncer의 포트가 외부에 열려있어야합니다... 그러면 잘 동작합니다.
저도 그거 트러블 슈팅하는데 오래 걸렸어요.
SHISHAMO 2024.02.09. 04:37
김날이
혹시 도커로 설치하신 건가요?
crowdsec-bouncer-traefik-plugin은 별도의 포트 연결이 없지 않나요?
김날이 글쓴이 2024.02.09. 14:25
SHISHAMO
fbonalair/traefik-crowdsec-bouncer:latest docker에서 8080 포트를 인터넷망에서 접속되도록 해주었습니다.
https://docs.ibracorp.io/crowdsec/crowdsec/docker-compose/traefik-bouncer
위 설정을 따라하시면 어느정도 이해 되실 것 같네요.
traefik에서 forward auth 서비스로 라우팅이 되야하는데 해당 접속되는 client에서도 접속이 되야 차단이 정확하게 동작하는 것 같더라구요.
SHISHAMO 2024.02.10. 14:26
김날이
아.. 보니 클라우드플레어 프록시 문제였네요.
저 같은 경우에는 traefik-crowdsec-bouncer 도커가 아니라 crowdsec-bouncer-traefik-plugin으로 traefik 내부에 설치해서 따로 포트 개방은 필요없었습니다.

댓글 쓰기 권한이 없습니다. 로그인

취소 댓글 등록

cmt alert

신고

"님의 댓글"

이 댓글을 신고하시겠습니까?

댓글 삭제

"님의 댓글"

삭제하시겠습니까?


목록

공유

facebooktwitterpinterestbandkakao story
분류 제목 글쓴이 날짜 조회 추천
정보 Gemini API 사용을 위한 API KEY 발급받기 1 달소 3일 전10:52 159 +1
잡담 traefik v3.0 릴리즈 되었네요 2 사다리 3일 전09:12 111 +1
정보 Wordpress 플러그인 Elementor 4 DarkAcid 4일 전13:39 190 +1
Linux
image
nullyfied 1일 전14:59 91 0
Linux
image
딸기대장 24.04.13.12:51 289 +1
Linux
normal
i7-13700K 24.03.30.19:06 2039 +4
Linux
normal
zepinos 24.03.25.10:24 125 0
Linux
normal
Nasmania 24.03.18.17:25 94 0
Linux
normal
NavyStack 24.03.12.22:28 204 +5
Linux
normal
minnnning 24.03.11.01:12 81 0
Linux
image
냥냥트래기 24.03.08.13:25 342 +3
Linux
normal
SHISHAMO 24.03.06.12:12 248 0
Linux
image
SHISHAMO 24.02.29.18:33 133 +1
Linux
normal
온더락스 24.02.29.13:35 180 +1
Linux
normal
24.02.21.16:53 346 0
Linux
normal
24.02.13.15:35 281 0
Linux
normal
김날이 24.02.08.02:50 293 +3
Linux
image
WHYism 24.01.22.10:40 272 0
Linux
normal
WHYism 24.01.19.09:35 158 +1
Linux
image
WHYism 24.01.17.11:37 252 +2
Linux
normal
WHYism 24.01.17.10:02 165 +1
Linux
image
WHYism 24.01.17.09:23 163 0
Linux
image
핀비 24.01.07.07:54 392 +2