가끔 apache의 log를 보면 눈에 띄는 녀석이 있다. MJ12bot과 SemrushBot이다. 대충 웹 검색을 해보니 semrush는 robots.txt도 무시하고 접근한다고 하는데....robots.txt를 이용해서 사이트별로 특정 봇에 대한 설정을 해 본 경험은 없다. 게다가 .htaccess도 거의 사용하지 않는다. 여하튼 내 서버에는 semrush보다는 mj12bot이 계속 거슬린다. 이녀석을 어떻게 막아야할까....
(1) ip차단 (방화벽)
처음에는 mj12bot이 접속한 ip를 방화벽에서 차단했는데 계속 ip를 바꿔가면서 접근한다. (fail2ban이 잠깐 떠올랐다.) 주기적으로 로그를 보면서 ip를 차단하는 것은 분명 한계가 있다. 이 bot의 접속 간격도 1초부터 10초 안팎이다.
(2) apache 설정
인터넷 검색으로 찾아낸 내용을 나의 상황에 맞게 조금 수정했다.
/etc/httpd/conf.d/block-BADbot.conf
<Directory "/home/*">
SetEnvIfNoCase User-Agent “^MJ12bot” bad-bot
SetEnvIfNoCase User-Agent “^mj12bot” bad-bot
SetEnvIfNoCase User-Agent “^MJ12bot/v1.4.5” bad-bot
SetEnvIfNoCase User-Agent “^MJ12bot/v1.4.8” bad-bot
<RequireAny>
<RequireAll>
Require all granted
Require not env bad-bot
Require not host mj12bot.com
</RequireAll>
</RequireAny>
</Directory>
위의 설정은 UA가 mj12bot(MJ12bot)인 경우 접속을 차단하며, require not host 로 mj12bot.com의 도메인까지 차단하지만.......결국엔 뚫렸다. 아래와 같은 접근에는 속수무책인 것이다.
1: "GET /robots.txt HTTP/1.1" 200 24 "-" "Mozilla/5.0 (compatible; MJ12bot/v1.4.8; http://mj12bot.com/)"
2: "GET /%EC%9E%91%EC%97%85%EC%8B%A4%EC%A0%81/?board_page=2&vid=21 HTTP/1.1" 200 75780 "-" "Mozilla/5.0 (compatible; MJ12bot/v1.4.8; http://mj12bot.com/)"
3: "GET /%EC%9E%91%EC%97%85%EC%8B%A4%EC%A0%81/?stag=%20%EB%B2%8C%EC%B4%88 HTTP/1.1" 200 77207 "-" "Mozilla/5.0 (compatible; MJ12bot/v1.4.8; http://mj12bot.com/)"
4: "GET /%EC%9E%91%EC%97%85%EC%8B%A4%EC%A0%81/?search_field=fn_tag&search_text=%EC%84%9C%EC%9A%B8&vid=36 HTTP/1.1" 200 75568 "-" "Mozilla/5.0 (compatible; MJ12bot/v1.4.8; http://mj12bot.com/)"
UA에 mj12bot이 없거나 접속ip에서 호스트 네임이나 도메인을 확인할 수 없는 경우가 훨씬 많기 때문이다.(게시판과 같은 특정 페이지나 검색을 이용해서 집요하게 달라붙는(?)것은 정말 연구대상이다. *나중에 이런 방식을 그대로 따라해 볼만한 상황이 발생할 것도 같긴...한데....)
(3) ModSecurity 설정
위의 아파치 로그를 보면 모두 mj12bot이라는 공통된 문자열을 볼 수 있다. 따라서 header에 mj12bot이 포함되어 있다면 무조건 차단하자. (문자열은 숫자를 제외하고는 모두 소문자이다.)
SecRule REQUEST_HEADERS:User-Agent "@contains mj12bot" "id:1000000,t:none,t:lowercase,deny,msg:'BAD BOT - Detected and Blocked. '"
이후로 mj12bot이 서버에 접속하면 ModSecurity가 차단함과 동시에 아래와 같은 로그를 남긴다.
/var/log/httpd/modsec_audit.log:User-Agent: Mozilla/5.0 (compatible; MJ12bot/v1.4.8; http://mj12bot.com/)
/var/log/httpd/modsec_audit.log:Message: Access denied with code 403 (phase 2). String match "mj12bot" at REQUEST_HEADERS:User-Agent. [file "/etc/httpd/conf.d/mod_security.conf"] [line "55"] [id "1000000"] [msg "BAD BOT - Detected and Blocked. "]
/var/log/httpd/modsec_audit.log:Apache-Error: [file "apache2_util.c"] [line 271] [level 3] [client 216.240.128.214] ModSecurity: Access denied with code 403 (phase 2). String match "mj12bot" at REQUEST_HEADERS:User-Agent. [file "/etc/httpd/conf.d/mod_security.conf"] [line "55"] [id "1000000"] [msg "BAD BOT - Detected and Blocked. "] [hostname "www.rentalpark.kr"] [uri "/robots.txt"] [unique_id "YbLzhsIAFo1g2SwUaWQlEgAAAAM"]
이후 완벽하게 차단이 되는 것을 확인했다면 위의 로그도 필요없을 것이다. nolog 옵션을 사용하여 로그를 남기지 않을 수 있다. [.....lowercase,deny,nolog,msg...]
(4) semrush
semrush의 로그를 살표보니 모두 185.191.171.1~45 의 ip주소로 확인된다. 일단 방화벽에서 185.191.171.0/24를 막아두고 지켜보기로 했다. mj12bot처럼 ip가 바뀐다면 modsecurity를 사용해야 할 것이다...
(대략 일주일정도 지켜보니 semrush는 ip 차단으로 완벽하게 막히는 것 같다.....)
한 달 정도 지켜보니 137.184.37.190 / 167.172.62.208 두 개의 ip로 각각 한 번씩 접근한 기록이 있는데..일회성으로 보이기에 ip차단까지 할 필요는 없을 것 같다.
- 참고 -
Malware Expert (https://malware.expert/tutorial/how-to-block-mj12bot-with-mod_security/)
Mod Security 관련글
2021.12.24 - [Linux/Web Server] - 413 Request Entity Too Large [modsecurity & apache]
2021.12.10 - [Linux/TIP] - 악성bot 차단하기 (feat. mj12bot.com/majestic12)
2021.08.22 - [Linux/Web Server] - 업로드 파일의 용량 제한 변경하기(feat. ModSecurity)
2021.04.21 - [Linux/Web Server] - 웹 서버의 정보 숨기기 (apache)
'Linux > TIP' 카테고리의 다른 글
해외 서버 선택시 참고해야 할 것들.. (0) | 2022.08.03 |
---|---|
AllowZoneDrifting is enabled. This is considered an insecure configuration option. It will be removed in a future release. Please consider disabling it now. (0) | 2022.07.29 |
국가별 IP주소 현황 (0) | 2021.06.25 |
GoDaddy에서 구매한 도메인을 나의 네임서버로 설정 (0) | 2021.06.10 |
최상위 무료 도메인 사용하기 - freenom (0) | 2021.05.27 |
댓글