FSF 시스어드민, fail2ban 한계 넘어 reaction으로 Vo1d/Popa 봇넷 스크레이퍼 차단
- FSF는 GNU Savannah를 노리는 LLM 학습용 스크레이퍼 트래픽을 정규표현식으로 식별해 IP를 대량 차단해왔고, fail2ban과 UFW 조합이 약 6만5000개 규칙에서 성능 저하를 일으켜 ipset으로 전환함
- 보안 조사기관 Qurium이 노드를 직접 운영해 확인한 결과 일부 스크레이핑 트래픽은 스마트TV 앱에 심어진 Vo1d/Popa 봇넷을 경유해 발생함
- fail2ban의 Python/SQLite 구조가 확장성 한계를 보여 BASH, awk, Perl로 임시 스크립트를 만들었으나 관리가 어려워져, Framasoft의 Framagit에서 ppom이 만든 reaction 도구로 이전함
- reaction은 기본 설정이 없어 ipset 연동 설정을 FSF가 직접 새로 구축해야 했고, ipset 기반 규칙은 500만 개까지도 안정적으로 처리됨을 확인함
- 해커뉴스에서는 Popa SDK가 봇넷이 아니라 자발적 수익화 SDK라는 반박, iptables 대신 nftables를 쓰지 않는 이유에 대한 질문, FSF가 JS 없는 접근성 원칙 때문에 Anubis 대신 이 방식을 택했다는 분석이 논쟁으로 이어짐
Hacker News 의견들
스크레이퍼가 정말 공격자냐? 사실 이거 다 FSF 후원하는 AI 자본 세력들이 데이터 긁어가려고 하는 거잖아. 누구도 밥그릇 물어주는 손을 물지 않으려는 것뿐이지
저기서 말하는 AI 자본 세력이 구체적으로 누군지 말해줄 수 있어?
스크레이핑 대신 그냥 FSF한테 돈 주고 사이트 덤프나 API 접근권 사면 되는거 아냐? 왜 서버를 과부하시키면서까지 하는지
내 로그에 쓰레기 채우는 건 다 싫음. 고양이가 키보드 위에서 잤다고 해도 상관없음, 코드가 쓰레기면 막을 거임
firewalld도 최근까지 비슷한 65000 규칙 한계 문제가 있었음, netbsd blocklistd 참고해볼만함
나는 개인적으로 ip route add blackhole 방식을 씀. CPU 부하가 제일 낮고 CIDR 블록 수십만 개 추가해도 티가 안 남. UDP 리스너엔 효과 없다는 단점은 있지만 TCP 데몬엔 최고임. 지금 fib_triestat 보면 blackhole route가 426951개인데 데이터센터, VPS, 봇넷, robots.txt 무시하는 AI 데이터센터, 악용된 CDN까지 다 포함돼있음
그 IP 범위 테이블 어떻게 관리하는지 궁금함, 언제 추가하고 제거하는지, 나는 클라우드플레어에 깃허브에서 찾은 나쁜 ASN 리스트 쓰고 있는데 무고한 유저 차단하는 게 제일 걱정됨
FSF는 무자바스크립트 접근성을 원해서 Anubis 같은 걸 못 쓰는 걸로 이해함, GNU 철학상 자바스크립트는 사실상 비자유 소프트웨어로 취급되니까
Anubis도 무JS HTTP 메타리다이렉트 방식의 작업증명을 지원하는데 아는 사람이 별로 없고 켜는 사람도 적음, 모든 걸 다 막지도 못함
Anubis는 LibreJS도 지원함, 깃허브 빌드 스크립트에서 확인 가능
못 쓰는 게 아니라 안 쓰는 거임, FSF는 Anubis를 악성코드라고 부름
reaction은 흥미로운데 글에 전체 설정을 안 밝힌 게 아쉬움, 아마 공격자가 맞춰서 회피 못 하게 일부러 숨긴 듯. 요즘 스크레이핑은 프록시 여러 IP 거쳐서 패턴이 안 보임. 우리는 압박 심할 때 아시아 특정 지역 IP를 임시로 차단한 적도 있음. FSF는 iptables+ipset을 왜 쓰는지, nftables가 더 성능 좋고 네이티브 셋도 있는데
우리 회사도 화웨이클라우드, 텐센트, 알리바바, 차이나텔레콤 통째로 막는 걸 자주 함. Anubis 쓰는데도 레지덴셀 프록시는 결국 두더지잡기임. Datadome이나 HUMAN은 우리 트래픽 규모에서 연간 수십만 달러라서 포기했고 CrowdSec도 그래서 접었음
iptables는 이미 오래전부터 nftables의 래퍼일 뿐임. reaction에서 iptables+ipset 쓰는 건 설정 차이의 문제고, ipset과 nftables 예제로 백만개 넘는 IP 리스트 재시작 성능 비교해보면 답 나옴
fail2ban 대신 reaction 쓴다고 결과가 다를까? 난 로그에서 피처 뽑아서 Redis에 카운트 저장하고 주기적으로 임계치 넘는 패턴 스캔해서 fail2ban이 규칙 만들게 함, 동심원 구조로 겹겹이 처리함
fail2ban과 reaction의 차이는 성능임, fail2ban 한계에 안 걸리면 reaction 필요 없음, 자동 규칙 생성 관련 블로그 글 있음?
Popa 봇넷이라고 부르는 건 좀 억울한데, ProtonVPN 같은 것과 다를 게 없음. 앱이 광고나 트래킹 없이 수익화하려고 Popa SDK를 자발적으로 넣은 거고 FSF가 이런 대안 수익화 방식을 부정적으로 그리는 건 아쉬움
그 수익화 방식은 봇넷 컨트롤러와 SDK 넣은 개발자만 이득이고, 자기가 exit node 된 걸 모르는 유저는 손해만 봄