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

traefik 플러그인, crowdsec-bouncer-traefik-plugin 설치했어요!

SHISHAMO 210

3

8

traefik을 설치하고, 리버스프록시까지 성공하고.

 

2번 째로 보안모듈 설치를 목적으로 traefik을 또 열심히 만졌습니다.

 

일단 crowdsec을 설치하고, traefik과 연결할려고 마음먹었는데요.

traefik-crowdsec-bouncer 도커 대신에 crowdsec-bouncer-traefik-plugin으로 설치하기로 결정했습니다. 플러그인 형식이라 조금 더 깔끔한 것 같아서요.

 

 

문젠 플러그인을 설치하는 것 부터 매우 버벅겨렸습니다 ㅋㅋㅋ

 

분명 Traefik Static Configuration에 코드를 넣으면 된다고 해서, Traefik.toml 파일에다가 

[experimental.plugins.crowdsec-bouncer-traefik-plugin]
  moduleName = "github.com/maxlerebourg/crowdsec-bouncer-traefik-plugin"
  version = "v1.2.0-rc2"

이렇게 넣었거든요. 그런데 설치가 전혀 되지 않았습니다 ㅠㅜ

대시보드에서 미친듯이 보이는 에러... 그래도 에러 원인 파악하기에는 Traefik 확실히 좋다는 걸 한 번 더 겪은...

 

아무튼 초장부터 열심히 삽질하다, 설치 자체가 안 되는 것 같고, toml 파일 구문으로 어떻게 설치하는 거지(?) 초보자의 쓸대없는 의문으로 아예 compose 파일에 넣어서 compose up 하면 설치 되지 않을까 싶었고

--experimental.plugins.crowdsec-bouncer-traefik-plugin.modulename=github.com/maxlerebourg/crowdsec-bouncer-traefik-plugin
--experimental.plugins.crowdsec-bouncer-traefik-plugin.version=v1.2.0-rc2

이렇게 삽입하니..드디어 설치가 완료되었습니다!

 

여기까지  깨닫는데 하루는 넘께 걸린 듯...ㅋㅋㅋ

 

이 다음로 이제 플러그인 설정을 해야 만 했습니다.

 

 [http.middlewares.crowdsec] 
      [http.middlewares.crowdsec.plugin]
        [http.middlewares.crowdsec.plugin.crowdsec-bouncer-traefik-plugin]
          CrowdsecLapiKey = "lapi키"
          Enabled = "true"
          logLevel = "DEBUG"
          CrowdsecMode = "live"
          CrowdsecLapiHost = "crowdsec:8080"
          CrowdsecLapiScheme = "http"
          RedisCacheEnabled = "true"
          RedisCacheHost = "Redis-CrowdSec:6379"

일단 처음에 설정한 것은 이 정도였습니다.

사실 로컬이긴 해도, treafik과 crowdsec이 https로 작동하길 원했는데, crowdsec에 tls 인증서를 설치하고, 이를 연결해 줘야 하더라고요. crowdsec에 tls 인증서를 설치 하는 법부터, 인증서 유효기간 처리는 어떻게 해야 하는지까지

 

이건 너무 어려워서 포기했습니다.

 

crowdsec 콘솔을 통해서 treafik 바운서가 crowdsec과 연결된 것도 확인한 다음, 

docker exec crowdsec cscli decisions add --ip ip주소 -d 10m

로 제 외부 ip를 등록해서 잘 작동하는지 확인하는데....

 

어떤 도커 웹페이지는 잘 작동하고, 어떤 도커 웹페이지는 전혀 작동하지 않습니다.

 

여기서 다시 뻘짓 시작!

 

 [http.middlewares.crowdsec]
      [http.middlewares.crowdsec.plugin]
        [http.middlewares.crowdsec.plugin.crowdsec-bouncer-traefik-plugin]
          CrowdsecLapiKey = "lapi키"
          Enabled = "true"
          logLevel = "DEBUG"
          CrowdsecMode = "live"
          CrowdsecLapiHost = "crowdsec:8080"
          CrowdsecAppsecEnabled = "true"
          CrowdsecAppsecHost = "crowdsec:7422"
          CrowdsecAppsecFailureBlock = "true"
          CrowdsecLapiScheme = "http"
          RedisCacheEnabled = "true"
          RedisCacheHost = "Redis-CrowdSec:6379"

혹시  crowdsec의 웹방화벽 기능인 appsec도 켜야 하나 싶어, crowdsec에서 활성화도 해주고, 플러그인과 연결도 해 줬는데, 아닙니다.

아닐께 뻔한데 혹시나 해서 했었지만...아닙니다 ㅋㅋㅋㅋ

 

그래서 플러그인 환경변수들을 잘 보니, 하나 눈에 띄는 환경변수가 있습니다.

ForwardedHeadersTrustedIPs

설명을 보니, "trafefik 앞에 있는 신뢰할 수 있는 프록시의 IP 목록(ex: Cloudflare)"이라고 적혀 있습니다.

 

조금 더 찾아보니, 프록시 연결이 되면, 클라이언트 ip가 프록시 ip로 보이기 때문에, 저 명령어로  프록시의 IP 목록을 삽입해서 진짜 클라이언트 ip를 찾아야 한다 뭐 이런 느낌이었습니다.

 

    [http.middlewares.crowdsec-cloudfrareproxy]
      [http.middlewares.crowdsec-cloudfrareproxy.plugin]
        [http.middlewares.crowdsec-cloudfrareproxy.plugin.crowdsec-bouncer-traefik-plugin]
          CrowdsecLapiKey = "lapi키"
          Enabled = "true"
          logLevel = "DEBUG"
          CrowdsecMode = "live"
          CrowdsecLapiHost = "crowdsec:8080"
          CrowdsecAppsecEnabled = "true"
          CrowdsecAppsecHost = "crowdsec:7422"
          CrowdsecAppsecFailureBlock = "true"
          CrowdsecLapiScheme = "http"
          RedisCacheEnabled = "true"
          RedisCacheHost = "Redis-CrowdSec:6379"
          ForwardedHeadersTrustedIPs = ["173.245.48.0/20", "103.21.244.0/22", "103.22.200.0/22", "103.31.4.0/22", "141.101.64.0/18", "108.162.192.0/18", "190.93.240.0/20", "188.114.96.0/20", "197.234.240.0/22", "198.41.128.0/17", "162.158.0.0/15", "104.16.0.0/13", "104.24.0.0/14", "172.64.0.0/13", "131.0.72.0/22", "2400:cb00::/32", "2606:4700::/32", "2803:f800::/32", "2405:b500::/32", "2405:8100::/32", "2a06:98c0::/29", "2c0f:f248::/32"]

그래서.. 추가 했는데도 불구하고, 그래도 안되요.

처음 한 번은 막히고, 2번 째, 실험에서는 막히지 않았으니 희망은 있습니다.

 

ForwardedHeadersCustomName

다음으로 눈에 띈 환경변수. 클라이언트의 실제 IP를 검색해야 하는 헤더의 이름라고 합니다.

 

클라우드플레어에서 찾아보니, CF-Connecting-IP와 X-Forwarded-For를 둘 다 사용하네요. 저 환경변수를 삽입해서 변경하지 않으면 기본 헤더는 X-Forwarded-For입니다. 그중 CF-Connecting-IP는 Cloudflare를 통해 원본 웹 서버에 연결하는 사용자의 IP를 전달하는 클라우드플레어 전용(?) 헤더 같았습니다.

 

    [http.middlewares.crowdsec-cloudfrareproxy]
      [http.middlewares.crowdsec-cloudfrareproxy.plugin]
        [http.middlewares.crowdsec-cloudfrareproxy.plugin.crowdsec-bouncer-traefik-plugin]
          CrowdsecLapiKey = "lapi키"
          Enabled = "true"
          logLevel = "DEBUG"
          CrowdsecMode = "live"
          CrowdsecLapiHost = "crowdsec:8080"
          CrowdsecAppsecEnabled = "true"
          CrowdsecAppsecHost = "crowdsec:7422"
          CrowdsecAppsecFailureBlock = "true"
          CrowdsecLapiScheme = "http"
          RedisCacheEnabled = "true"
          RedisCacheHost = "Redis-CrowdSec:6379"
          ForwardedHeadersTrustedIPs = ["173.245.48.0/20", "103.21.244.0/22", "103.22.200.0/22", "103.31.4.0/22", "141.101.64.0/18", "108.162.192.0/18", "190.93.240.0/20", "188.114.96.0/20", "197.234.240.0/22", "198.41.128.0/17", "162.158.0.0/15", "104.16.0.0/13", "104.24.0.0/14", "172.64.0.0/13", "131.0.72.0/22", "2400:cb00::/32", "2606:4700::/32", "2803:f800::/32", "2405:b500::/32", "2405:8100::/32", "2a06:98c0::/29", "2c0f:f248::/32"]
          ForwardedHeadersCustomName = "CF-Connecting-IP"

혹시나 해서 환경변수를 CF-Connecting-IP로 변경하니...!!

 

Screenshot 2024-02-10 at 14.23.29.png.jpg

드디어! 클라우드플레어 프록시로 연결된 도커 웹페이지도 403페이지가 정상적으로 뜹니다!!!

 

여기까지 진짜, 얼마나 시간을 사용한건지...ㅋㅋ

이런 쪽에 대한 이해도가 전혀 없으니, 하나하나 하는데에도 너무 오래 걸리네요.

그렇게, 무사히 crowdsec과 연결할 수 있습니다.

 

 

 

---------------------------------------------------------------------------------

 

이  crowdsec을 연결하기 전, 연습삼아 다른 플러그인도 설치해 보았습니다.

 

 

GeoBlock이라는 플러그인이었는데요. 지정된 국가만 허용하고 그 외 국가는 차단하게 해 주는 플러그인입니다. 반대도 가능하고요.

[http.middlewares.my-geoblock2]
      [http.middlewares.my-geoblock2.plugin]
        [http.middlewares.my-geoblock2.plugin.geoblock]
          silentStartUp = false
          allowLocalRequests = true
          logLocalRequests = true
          logAllowedRequests = true
         logApiRequests = true
          api = "https://get.geojs.io/v1/ip/country/{ip}"
          apiTimeoutMs = 750
          cacheSize = 25
          forceMonthlyUpdate = true
          allowUnknownCountries = false
          unknownCountryApiResponse = "Unknown"
          blackListMode = false
          countries = ["KR"] 

요렇게 하니 잘 작동하네요.

 

allowLocalRequests = true 이 환경변수였나, 아무튼 Private IP 도 차단 가능하게 해 주는데, 이거 차단 하니깐, 제 컴터에서 막히는 도커 웹 페이지들이 있는 겁니다 ㅋㅋㅋ

내부망을 접속을 하나.... 그래서 true로 했더니 잘 작동하네요.

 

 

아무튼, 확실히 traefik이 이런 플러그인 요소들도 있고, 문제가 있으면 대시보드로 확인이 쉬우니 좋네요. 

힘들었지만, 설치한 보람이 있습니다 :)

 

다들 traefik 한 번 찍어 드셔 보시죠 ㅋㅋㅋㅋ

신고공유스크랩
8
profile image
NavyStack 2024.02.11. 03:34
SHISHAMO
조금 AS 해드리자면,
저는 docker-compose.yml 복잡해져서
toml로 넣은겁니다 :)

어디에 넣으셔도 관계없어요 :)
cmd로 집어넣는 방법두 있슴돠
SHISHAMO 글쓴이 2024.02.11. 09:45
NavyStack
저도 그래서 플러그인 설치 구문만 yml에 넣고,
나머지는 모두 toml에 넣고 있네요.

그나저나..cmd로도 가능하군요 ㄷㄷㄷㄷ
profile image
NavyStack 2024.02.11. 13:49
SHISHAMO
https://doc.traefik.io/traefik/user-guides/docker-compose/basic-example/#setup

요기 보시면
command 있슴돠

도커는 시작시에 command를 재정의 할수 있어서요 :)

방법이 여러가지다 보니까 Traefik은 틀을 이해못하면 정말 헷갈리더라구요 :^(
SHISHAMO 글쓴이 2024.02.11. 21:18
NavyStack
아! 제가 플러그인을 compose 파일에 넣은 방식이 command였네요 ㅋㅋㅋㅋㅋㅋㅋ
이해 하지 않고 했던 것이었으....

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

취소 댓글 등록

cmt alert

신고

"님의 댓글"

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

댓글 삭제

"님의 댓글"

삭제하시겠습니까?


목록

공유

facebooktwitterpinterestbandkakao story
분류 제목 글쓴이 날짜 조회 추천
잡담 Kavita 문제 해결 했습니다 7 초보나스 2일 전02:40 153 +3
잡담 Immich를 사용하면서 느낀 아쉬운 점들 21 hjk9860 6일 전17:50 253 +1
정보 LSI RAID CARD windows firmware 프로그램 2 아흑미쵸 6일 전14:23 85 +1
잡담
image
DHCP 23.12.01.21:05 205 +4
잡담
normal
마이크로서버 23.09.16.02:10 273 +4
잡담
normal
keiminem 23.10.23.23:07 268 +4
잡담
normal
정전리 24.04.05.00:38 369 +3
잡담
image
행복구슬 24.02.03.14:29 525 +3
잡담
image
SHISHAMO 24.02.10.14:54 210 +3
잡담
normal
마이크로서버 23.09.24.19:07 470 +3
잡담
image
초보나스 2일 전02:40 153 +3
잡담
image
한군77 23.04.01.07:24 870 +3
잡담
normal
테스터 23.11.08.17:43 389 +2
잡담
normal
콜라 23.04.01.08:52 516 +2
잡담
normal
마이크로서버 23.09.17.14:28 246 +2
잡담
normal
행복구슬 24.02.28.01:45 405 +2
잡담
image
초보나스 23.12.01.09:56 124 +2
잡담
image
주차장 24.03.22.00:10 325 +2
잡담
normal
마이크로서버 23.09.25.21:35 205 +2
잡담
normal
taesuz 23.10.03.02:18 197 +2
잡담
image
Jasons 23.08.07.18:35 395 +2
잡담
image
달소 22.03.19.18:58 295 +2
잡담
normal
SNFAIUWQ 23.12.22.22:27 166 +1