익명 사용자/게스트의 IP 주소를 확인할 수 있는 방법이 있나요?
그리고/또는 각 IP 주소당 연결 횟수를 확인할 수 있나요?
최근 몇 시간 동안 분당 수백 번의 페이지 뷰가 발생하고 있으며, 프로세서 사용률도 100%까지 올라가 있습니다.
익명 사용자/게스트의 IP 주소를 확인할 수 있는 방법이 있나요?
그리고/또는 각 IP 주소당 연결 횟수를 확인할 수 있나요?
최근 몇 시간 동안 분당 수백 번의 페이지 뷰가 발생하고 있으며, 프로세서 사용률도 100%까지 올라가 있습니다.
Nginx(또는 현재 사용 중인 서버) 로그를 확인해 보셨나요? 그것들은 봇과 노커(knocker)입니다. IP로 뭔가 처리하는 것은 하지 마세요. 몇 번 시도하면 IP가 바뀝니다(어차피 IP는 쓸모없고, 항상 바뀌게 마련이니까요). 지오블로킹(geo-blocking)을 시작해야 합니다(정말 전 세계적으로 필요한 사이트는 매우 적습니다) 그리고 서버 레벨에서 사용자 에이전트를 대량으로 차단해야 합니다. 최소한 완전히 불필요하고 탐욕스러운 SEO 스크레이퍼, 자신을 IE5.x 등으로 식별하는 봇 등은 반드시 차단해야 합니다.
표준 설치를 했다면 레이트 리미팅이 적용되어 있어야 합니다(일부는 Rails 내부에 포함되어 있습니다). 어떻게 설치하셨나요?
실제로 rate limiting은 어떻게 작동하나요 (아니요, 저는 답을 검색하지 않았습니다). 특정 시간 프레임 내에서 IP당 요청 횟수가 일정 수를 넘으면 발동되나요?
어쨌든, DDoS와 유사한 상황이 발생하면 어떻게 되나요? 예를 들어 URL이 어떤 멍청한 목록에 언급되어 중국, 파키스탄, 이란, 이라크, 베트남, 러시아의 IP들에서 플러드가 시작되고, 미국, 프랑스, 독일의 대형 VPS 서비스에서도 상당한 양의 공격이 들어오는 경우 말입니다. 그들이 3회 시도를 하고 IP를 변경하면 rate limiting은 큰 도움이 되지 않습니다.
어느 시점에 매우 멍청한 검색들이 많이 들어왔습니다. '많다’는 5달러짜리 DigitalOcean 드롭렛이 크래시하고, 인간으로부터의 요청이 거의 제로였다는 뜻입니다.
이것은 Discourse보다는 웹서버의 문제입니다. 그런 공격자들은 애플리케이션보다 먼저 제거되어야 합니다. 저는 핀란드 출신이고 포럼이 순수하게 핀란드어이기 때문에 전 세계를 차단하는 것이 가능하다는 점을 알고 있습니다 (핀란드 밖에서 사는 핀란드인들은 이에 대해 다른 생각을 가지고 있겠지만
).
하지만 rate limiting이든 아니든, 잘못된 사용자 에이전트는 즉시 차단되어야 합니다.
SSH 공격자들은 어떻습니까? 그것들도 리소스를 많이 소모합니다.
DDoS 문제를 겪고 있다면, 저는 Cloudflare 사용을 추천합니다(거의 추천하지 않는 편인데 말이죠). Cloudflare 템플릿을 사용하고, 최적화 설정을 끄거나(Cloudflare 최적화 설정에 대해 주의 깊게 읽으세요) 확인해 주세요.
이것은 실제 DDoS 공격은 아닙니다. 하지만 동일한 유형의 요청이 대량으로 발생하면 DDoS와 유사한 효과를 내며, 그 결과는 동일합니다. 저는 Varnish과 Fail2ban, 그리고 지리적 차단(Geo-blocking)을 사용하는데, 이 조합이 제게 잘 작동하고 있습니다.
네, 표준 설치로 했습니다.
처음에는 단순히 슬래시닷(Slashdot)으로 인한 트래픽 폭주인 줄 알았지만, 24시간이 지나도 여전히 공격을 받고 있습니다.
급한 임시 조치로 사이트의 대문을 닫고 "로그인 필수"로 설정했습니다. 이 방법이 효과가 있었는지, CPU 사용률이 60초 만에 100%에서 3%로 떨어졌습니다.
대문을 다시 열자마자 /search 페이지가 다음과 같은 의미 없는 요청으로 즉시 폭격을 당하고 있습니다:
/search?q=dogs+order:latest&page=2
/search?q=cats+order:latest&page=2
/search?q=fly+order:latest&page=2
등등
사이트를 다시 여는 즉시 60초 안에 이런 일이 벌어집니다.
우리는 작은 니치 커뮤니티인데, 왜 우리를 대상으로 이런 공격을 하는지 모르겠습니다 ![]()
추정치일 뿐이지만, 구글 애널리틱스에 따르면 평소에는 활성 사용자가 8~10명 수준인데, 사이트를 대중에 다시 개방하면 몇 초 만에 1,000명 이상으로 치솟습니다. 모든 연결은 미국의 여러 지역에서 온 것으로 표시되며, 모두 직접 접속이고 리퍼러가 없습니다.
사이트를 며칠 동안 회원 전용으로 유지해 보거나, /search를 로그인한 사용자만 사용할 수 있도록 제한해 볼 계획입니다. 그게 안 되면 아마 Cloudflare을 사용해야 할 것 같습니다.
모두 감사합니다 ![]()
그래. 기이한 일이지만, 인터넷이니까 그런 거겠죠.
오. 사용자 에이전트(user agent)가 뭔가요? 차단할 크롤러 사용자 에이전트 목록에 추가할 수 있을까요?
좋은 질문입니다!
Google Analytics 보고서 페이지에서 해당 내용을 찾아볼 수 있는지 확인해 보겠습니다 ![]()
/var/discourse/shared/log/var-log/nginx/.... (또는 이와 매우 유사한 경로)를 확인해 볼 수도 있습니다. 설정에서 "agent"를 검색하면 slow down crawler user agents와 같은 다른 설정 항목들도 찾을 수 있습니다.
다음 경로에서 찾았습니다: /var/discourse/shared/standalone/log/var-log/nginx/access.log
(지금 로컬로 다운로드 중)
@pfaffman 감사합니다. 눈에 띄는 부분이 있는지 확인해 보겠습니다.
간단히 살펴본 결과, 다양한 사용자 에이전트가 섞여 있는 것으로 보입니다.
이제 슬래시닷(Slashdot) 효과보다는 공격일 가능성이 더 높아 보입니다 ![]()
[12/Jan/2022:13:26:20 +0000] "greyarro.ws" 184.174.102.229 "GET /search?q=cats+order%3Alatest&page=2 HTTP/2.0" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.57 Safari/537.36" "search/show" 302 1117 "-" 0.012 0.009 "-" "-" "-" "-" "-" "-" "-"
[12/Jan/2022:13:27:22 +0000] "greyarro.ws" 173.211.78.162 "GET /search?q=cats+order%3Alatest&page=2 HTTP/2.0" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.9390.0.4430.212 Safari/537.36" "search/show" 302 1117 "-" 0.012 0.009 "-" "-" "-" "-" "-" "-" "-"
[12/Jan/2022:13:30:46 +0000] "greyarro.ws" 66.78.24.176 "GET /search?q=cats+order%3Alatest&page=2 HTTP/2.0" "Mozilla/5.0 (X11; Linux x86_64; rv:89.0.2) Gecko/20100101 Firefox/89.0.2" "search/show" 302 1117 "-" 0.020 0.019 "-" "-" "-" "-" "-" "-" "-"
[12/Jan/2022:16:10:32 +0000] "greyarro.ws" 38.18.59.158 "GET /search?q=cats+order%3Alatest&page=2 HTTP/2.0" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.86 Safari/537.36" "search/show" 302 1117 "-" 0.008 0.011 "-" "-" "-" "-" "-" "-" "-"
[12/Jan/2022:16:10:57 +0000] "greyarro.ws" 108.62.69.249 "GET /search?q=cats+order%3Alatest&page=2 HTTP/2.0" "Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:88.0.1) Gecko/20100101 Firefox/88.0.1" "search/show" 302 1117 "-" 0.008 0.009 "-" "-" "-" "-" "-" "-" "-"
그리고:
[12/Jan/2022:16:11:07 +0000] "greyarro.ws" 38.18.49.252 "GET /search?q=dogs+order%3Alatest&page=2 HTTP/2.0" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.78 Safari/537.36" "search/show" 302 1117 "-" 0.012 0.011 "-" "-" "-" "-" "-" "-" "-"
[12/Jan/2022:16:28:08 +0000] "greyarro.ws" 206.180.185.39 "GET /search?q=dogs+order%3Alatest&page=2 HTTP/2.0" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:88.0) Gecko/20100101 Firefox/88.0" "search/show" 302 1117 "-" 0.016 0.012 "-" "-" "-" "-" "-" "-" "-"
[12/Jan/2022:16:28:08 +0000] "greyarro.ws" 38.18.55.132 "GET /search?q=dogs+order%3Alatest&page=2 HTTP/2.0" "Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.57 Safari/537.36" "search/show" 302 1117 "-" 0.008 0.009 "-" "-" "-" "-" "-" "-" "-"
[12/Jan/2022:16:28:10 +0000] "greyarro.ws" 184.174.54.113 "GET /search?q=dogs+order%3Alatest&page=2 HTTP/2.0" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.69 Safari/537.36" "search/show" 302 1117 "-" 0.012 0.011 "-" "-" "-" "-" "-" "-" "-"
[12/Jan/2022:16:28:14 +0000] "greyarro.ws" 184.174.72.90 "GET /search?q=dogs+order%3Alatest&page=2 HTTP/2.0" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:89.0.1) Gecko/20100101 Firefox/89.0.1" "search/show" 302 1117 "-" 0.016 0.017 "-" "-" "-" "-" "-" "-" "-"
원래 주제에서 약간 벗어난 것 같아 걱정되지만, 도움 주셔서 감사합니다 ![]()
이 모든 설정은 봇이 제한 사항과 가이드라인을 따를 때만 도움이 됩니다. 심지어 Googlebot조차 항상 그런 것은 아니며, 악성 봇은 절대 따르지 않습니다. 이것이 robots.txt가 그렇게 무용하다는 이유 중 하나입니다.
참고로, Discourse가 감속을 위해 다른 기술을 사용하고 있는지 저는 알지 못합니다.
아니요, 그렇지 않아요. 질문이 원래 주제에서 약간 벗어났거든요
"Discourse가 봇 공격/DDoS를 받을 때 어떻게 해야 하는가"라고 물어야 했는데, 작은 세부 사항 하나만 알고 싶었으니까요.