iptable + ipset 조합으로 중국발 봇을 막았는데 결국 계속 IP대역을 추가하다 보니

전세계에 흩어져 있는 텐센트와 화웨이 클라우드의 IP 대역을 대부분 막은 것 같습니다.

이젠 거의 안보입니다.


그 로그가 안보이니 이젠 wp-login, ssh, 404 스캔로그, 403 에러로그가 보여서

iptable + ipset 조합에 fail2ban 까지 추가해서 막았죠. (지난 번 글에서...)


그랬더니 이젠 방문자 카운터는 증가시키지 않는

스크립트 기반 bot 들의 방문 로그가 거슬리더라구요.


사실 이건 그냥 냅둬도 방문자 카운트도 되지 않고 잘 눈에 띄지 않으니 괜찮은데

access log를 열어보면 또 신경이 쓰입니다.


그래서 방법을 찾다 보니 JS Challenge(JS챌린지)라는 방법으로 막을 수가 있네요.


제가 제일 먼저 차단했던 텐센트와 화웨이의 접근은 Bot 이지만 Headless 브라우저라는

자바스크립트는 물론 화면 렌더링까지도 다 실행해보는(화면은 없지만) 브라우저 엔진을

통해서 들어오는 겁니다.


그래서 방문자 카운팅까지도 돼서 IP를 차단하지 않으면 JS챌린지 + 체크 버튼 클릭까지

구현해야 하는데 이건... 구글 서치콘솔의 웹바이탈 점수를 갉아먹는 거라 하고 싶지는 않아서

그건 그냥 IP 차단으로 막고....


스크립트 기반의 가벼운 Bot과 Crawler만 JS챌린지로 차단했습니다.

방법은 간단하더라구요.


그래서 이런 화면이 일단 0.5초만 뜨게 했습니다. 기술적으로는 0.1초만 설정해놔도 되는데

0.5초로 해봤습니다. (캡처는 4초 정도 해놓고 캡처했습니다.)

이 화면이 뜨기 전에 Java Script에서 작은 연산을 하고 그 연산에 성공하면 ,

즉 Java Script가 실행되면 쿠키에 세션토큰을 저장하고 12시간 동안

다시 JS챌린지가 실행되지 않게 하고 Java Script가 실행되지 않으면, 즉 Bot이면

이 화면이 계속 표시되고 다음으로 넘어가지 않게 됩니다.


방법은 쉽더라구요.