티스토리 뷰
기본 지식
- 오픈소스 보안 솔루션
- 분산형 - 다중 서버에서 IP 차단 및 허용 규칙 공유
- fail2ban의 단일서버 커버리지 단점의 대안
- 에이전트-커맨드센터 구성으로, 여러 서버들의 위협 감지를 한곳에서 가능하게
구성요소
Collection
파서 + 시나리오 + 포스트 오버플로우 묶음
- Crowdsec Hub에서 다양한 컬렉션을 찾아 설치 가능.
- 파서 (Parsers): Fail2ban의 패턴 매칭과 유사하게 로그 파일을 필터링하는 역할을 합니다. SSH 서비스의 경우, 실패한 로그인 시도만 골라내는 식입니다.
- 시나리오 (Scenarios): 특정한 상황을 나타내는 임계값 역할을 합니다. 예를 들어 SSH 서비스에서 60초 동안 10번의 로그인 실패가 있을 경우, 무차별 대입 공격으로 간주하는 시나리오를 설정할 수 있습니다.
- 포스트 오버플로우 (Postoverflows): 컬렉션에 포함될 수 있는 목록입니다.
- 종류 사례
- crowdsecurity/sshd SSH를 보호하는 데 필요한 모든 것
- crowdsecurity/nginx 웹 서버 보호
- crowdsecurity/linux 일반적인 Linux 로그 및 동작
- crowdsecurity/wordpress WordPress 관련 공격을 감지합니다.
- crowdsecurity/mysql MySQL 서비스를 보호합니다
Decision
탐지된 악성 IP 주소, 범위, 사용자 등에 대해 취해지는 조치
- ip decision의 경우 ipset (iptable 개선판) 차단 및 허용 수행
Bouncer
결정을(조치를) 실행
- 에이전트로부터 결정을 받아 해당 IP 주소의 접근을 차단하거나 Captcha를 제시하는 등의 대응 수행
- CrowdSec 커뮤니티에서 공유된 IP 평판 데이터베이스를 활용하여 악성 IP 주소를 사전에 차단
- 종류
- Firewall Bouncer: iptables, nftables, ipset, pf 등의 방화벽과 연동하여 IP 주소 차단.
- Traefik Bouncer: Traefik 리버스 프록시와 연동하여 악성 IP의 접근 제어.
- Nginx Bouncer: Nginx와 연동하여 Lua 스크립트를 통해 IP 주소를 검사하고 차단.
- Cloudflare Bouncer: Cloudflare 방화벽과 연동하여 Cloudflare에서 악성 트래픽 차단.
Metric
- 어떤 로그들을 수집하는가 - 측정 획득 조회
- yaml 설정 파일에 설정된 사례
file:/var/log/auth.log
file:/var/log/nginx.access.log
다중 서버 설정
개요
172.26.0.0/16 Private Network
├── lapi (172.26.0.10) - LAPI 서버 (중앙 집중식)
├── web1 (172.26.0.11) - Agent + Bouncer
└── web2 (172.26.0.12) - Agent + Bouncer
lapi 서버가 중앙 LAPI 서버 역할을 하고,
web1과 web2는 에이전트로 LAPI 서버에 알림을 전송하며,
모든 서버에 동일한 차단 룰을 공유.
공통 설치
CrowdSec 설치
# CrowdSec 저장소 추가 및 설치
curl -s https://install.crowdsec.net | sudo sh && \
command -v cscli && \
cscli status
관리자 또는 관리사무실의 WAN IP를 whitelist 결정으로 등록
sudo cscli decisions add --ip <관리자IP> --type whitelist
IP 허용 목록 생성하고 허용할 IP들 추가
sudo cscli allowlist create my_allowlist -d 'created from the docs' && \
sudo cscli allowlist add my_allowlist 192.168.0.0/16 && \
sudo cscli allowlist add my_allowlist 172.16.0.0/12 && \
sudo cscli allowlist add my_allowlist 10.0.0.0/8 && \
sudo cscli allowlist add my_allowlist <관리자IP>/32 && \
sudo cscli allowlist inspect my_allowlist && \
sudo systemctl restart crowdsec && \
sudo systemctl status crowdsec --no-pager --full
LAPI 서버 설정
/etc/crowdsec/config.yaml 파일을 편집하여 모든 인터페이스에서 수신하도록 설정
api:
server:
listen_uri: 0.0.0.0:8080
trusted_ips:
- 127.0.0.1
- ::1
- 172.26.0.0/16 # Allow private network
CrowdSec 서비스 시작
sudo systemctl enable crowdsec && \
sudo systemctl start crowdsec && \
sudo systemctl enable crowdsec-firewall-bouncer && \
sudo systemctl start crowdsec-firewall-bouncer
LAPI 상태 확인
sudo cscli lapi status
바운서 추가
sudo cscli bouncers add WebBouncer
생성된 바운서 API Key는
각 web 서버들의 /etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml 파일 항목 중
api_key 값으로 아래에서 지정 예정이므로 별도 기록해두기
API key for 'WebBouncer':
ulOPOSWxLcD8LaNmOMKOkYaG7AQYY+qZ2ho7pPyCAIU
Please keep this key since you will not be able to retrieve it!
ls -al /etc/crowdsec/bouncers/
바운서 구성 파일 확인 /etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml
api_url: http://127.0.0.1:8080/
api_key: <lapi-bouncer에서 생성된 API 키>
web1 서버 설정 (Agent + Bouncer)
CrowdSec 설치
sudo apt install -y crowdsec-firewall-bouncer-iptables && \
sudo cscli allowlist inspect my_allowlist && \
sudo cscli allowlist add my_allowlist 127.0.0.1 && \
sudo cscli allowlist inspect my_allowlist && \
sudo cscli metrics show acquisition && \
sudo cscli console enroll -e context cmbiut885000bju0871etz588 && \
sudo cscli allowlist inspect my_allowlist && \
sudo systemctl restart crowdsec && \
sudo systemctl status crowdsec --no-pager --full
sudo cscli collections list && \
sudo cscli collections install crowdsecurity/whitelist-good-actors && \
sudo cscli allowlist add my_allowlist 10.0.0.0/8 && \
sudo cscli allowlist add my_allowlist 172.26.0.0/16 && \
sudo cscli allowlist add my_allowlist 192.168.0.0/16 && \
sudo systemctl reload crowdsec && \
sudo systemctl status crowdsec --no-pager --full
sudo cscli metrics show decisions
Agent 구성 (LAPI 비활성화)
/etc/crowdsec/config.yaml에서 로컬 API 서버 섹션을 제거하거나 비활성화
api:
server:
enable: false # Add this
listen_uri: 127.0.0.1:8080
로컬 API 자격 증명 구성
/etc/crowdsec/local_api_credentials.yaml 파일 편집
url: http://172.26.0.10:8080
login: web1
password: <설정된 대로 놔두기, 수정하지 마시오>
방화벽 바운서 설치 및 구성
sudo apt install -y crowdsec-firewall-bouncer-iptables
sudo vim /etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml
/etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml 파일의 api_url 값을 LAPI 서버로 지정
api_url: http://172.26.0.10:8080/
api_key: <LAPI 머신 bouncer에 지정되어 있는 API 키>
서비스 시작
sudo systemctl enable crowdsec && \
sudo systemctl start crowdsec && \
sudo systemctl status crowdsec --no-pager --full && \
sudo systemctl enable crowdsec-firewall-bouncer && \
sudo systemctl start crowdsec-firewall-bouncer && \
sudo systemctl status --no-pager --full
LAPI 서버에 web 서버 등록
sudo cscli lapi register --machine web1 --url "http://172.26.0.10:8080"
web2 서버 설정 (Agent + Bouncer)
web1과 동일한 과정을 반복하되, 머신 이름을를 web2로 수행
LAPI 서버에서 머신 승인
각 에이전트가 등록을 요청한 후, log 서버에서 승인:
# 머신 목록 조회
sudo cscli machines list
# 머신 승인
sudo cscli machines validate web1
sudo cscli machines validate web2
설정 확인 및 테스트
각 서버에서 상태 확인
# CrowdSec 상태 확인
sudo systemctl status crowdsec --no-pager --full
# 메트릭 확인
sudo cscli metrics
sudo cscli metrics show acquisition
# 결정 목록 확인
sudo cscli decisions list
# 바운서 상태 확인
sudo cscli bouncers list
# 컬렉션 목록 조회
sudo cscli collections list
# 수집 시나리오 목록 조회
sudo cscli scenarios list
차단 테스트
lapi 서버에서 테스트 IP 차단 추가
# 테스트 IP 차단 (5분간)
sudo cscli decisions add -t ban -d 5m -i 1.2.3.4
모든 서버에서 차단 룰 동기화 확인
# 각 서버에서 실행
sudo cscli decisions list && \
sudo ipset list | grep 1.2.3.4
로그 모니터링 설정
각 서버에서 적절한 로그 파일 모니터링 설정
web1, web2 서버
/etc/crowdsec/acquis.yaml
filenames:
- /var/log/nginx/access.log
- /var/log/nginx/error.log
- /var/log/apache2/access.log
- /var/log/apache2/error.log
labels:
type: nginx
---
filenames:
- /var/log/auth.log
- /var/log/syslog
labels:
type: syslog
업데이트 자동화
정기적인 상태 확인 및 업데이트를 위해
모든 서버에서 정기적으로 실행 스케쥴링
sudo crontab -e
0 4 * * * cscli hub update && cscli hub upgrade
선택사항
대시보드
LAPI 서버에서 Metabase 대시보드 설정
sudo cscli dashboard setup -l 0.0.0.0 -p 3000 --password your-dashboard-password
WordPress 특화 설정 (web1, web2)
WordPress 서버에 특화된 컬렉션 설치
sudo cscli hub update && \
sudo cscli collections install -y crowdsecurity/wordpress && \
sudo systemctl reload crowdsec
참고
CrowdSec: The Open-Source IPS That Fights Back Against Real-World Attacks | by Muhammed Dhulkifli k - Freedium
🧭 Index 1. What Is CrowdSec? 2. How to Install CrowdSec on Ubuntu 3. What Are CrowdSec Bouncers? 4. How to Install the iptables Bouncer 5. Official Documentation 6. How CrowdSec Detects Threats: Parsers, Scenarios & Collections 7. Understanding acquis.y
freedium.cfd
About multi-server setup | CrowdSec
Introduction
docs.crowdsec.net
'보안' 카테고리의 다른 글
Ubuntu Nginx 웹서버 기본 보안 설정 (0) | 2025.06.04 |
---|---|
Nginx + 무료 웹방화벽 Modsecurity 3.x 조합 Docker 셋팅 (0) | 2025.05.29 |
Nginx 무료 에디션 위한 무료 WAF(웹방화벽) (1) | 2025.05.29 |
- Total
- Today
- Yesterday
- mssql
- Wordpress
- IE
- nginx
- Android
- macos
- nodejs
- classic asp
- iis
- JQuery
- git
- CSS
- API
- IOS
- 워드프레스
- PHP
- centos
- 안드로이드
- Prototype
- laravel
- JSON
- Mac
- sencha touch
- iphone
- Debug
- 한글
- ASP
- Docker
- Linux
- javascript
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |