Apache 2.4 - 악성 봇(로봇 SemrushBot) 차단 - Require not env

Share

Last Updated on 9월 5, 2022 by Jade(정현호)

 

웹 크롤러 봇

웹 크롤러는 스파이더 또는 검색 엔진 봇이라고도 하며, 전체 인터넷에서 콘텐츠를 다운로드하고 색인을 생성을 하게 됩니다.

이러한 봇의 목표는 웹 상의 (거의) 모든 웹페이지가 무엇에 대한 것인지 파악하여 필요할 때 정보를 추출할 수 있도록 하는 것입니다. 이를 "웹 크롤러"라고 부르는 것은, 소프트웨어 프로그램을 통해 자동으로 웹사이트에 액세스하여 데이터를 얻는 일을 기술 용어로 "크롤링"이라고 하기 때문입니다.
(Ref. 웹 크롤러 봇이란 무엇입니까? )



[https://www.cloudflare.com/ko-kr/learning/bots/what-is-a-web-crawler]


이러한 봇은 대부분 검색 엔진이 운영합니다. 검색 엔진은 웹 크롤러가 수집한 데이터에 검색 알고리즘을 적용함으로써, 사용자의 검색 질의에 대한 응답으로 관련 링크를 제공합니다. 이를 통해, Google 또는 Bing 등의 검색 엔진에 검색을 입력하고 나면, 웹페이지 목록이 표시되는 것입니다.


이러한 봇 중에서 유명한 봇 외 과도한 네트웍 트래픽을 사용하는 악성 봇 들이 있습니다


이런 악성 봇들을 apache 의 설정 파일(conf 파일)에 설정하여 한번에 차단을 진행하려 합니다(특히 SemrushBot)


그리고 추가적으로 SSH접속 공격한 ip 에 대해서도 같이 차단을 추가 설정 하려고 합니다.



별도의 conf 파일을 생성하여 차단하려는 이유는 지금 서버에 설정된 virtualhost가 다수가 있기 때문 입니다.


많이 사용되는 곳은 수백 이상의 가상호스트(virtualhost)가 존재 할 것이며 각각의 가상 호스트마다 차단 ip 등을 설정하는 것은 매우 어려운 일 입니다


httpd.conf 이나 vhost.conf 파일 내용도 길어지고 중복되는 내용이 계속들어가기 때문에 별도의 conf에 차단 정책이나 ip를 입력하고 virtualhost 내에서는 해당 내역을 불러서 적용하는 방식으로 하려고 합니다.


차단 봇 리스트

먼저 봇에 대한 리스트는 아래 링크의 사이트를 참조 하였습니다.


[참고] Nginx 에 악성 봇을 차단한 포스팅은 아래 링크를 확인 하시면 됩니다.


첨부파일을 참조하여 내용을 모두 복사 합니다.
첨부 파일 : bad_bot.txt


+ 업데이트
사용 하면서 SemrushBot 에 대해서 추가로 수정 및 추가 하였습니다

SetEnvIfNoCase User-Agent "SemrushBot" bad_bot #181203
SetEnvIfNoCase User-Agent "SemrushBot/6~bl" bad_bot #181203
SetEnvIf User-Agent "^SemrushBot" bad_bot
SetEnvIf User-Agent "SemrushBot/6~bl" bad_bot
SetEnvIfNoCase User-Agent "SemrushBot-SA" bad_bot #181203
SetEnvIfNoCase User-Agent "^SemrushBot" bad_bot


Apache 에 차단 설정

원본 참조 글과 달리 별도의 conf 파일을 만들어서 사용할 것임으로 Require all granted 절은 포스팅에서는 사용하지 않았습니다.


conf 파일 생성

원본 글이나 다운로드 받은 첨부파일에서의 내용을 apache의_설치디렉토리/conf/extra 밑에 bad_bot.conf 이름으로 생성 합니다.



[참고1] 디렉토리는 apache의 설치 환경에 맞게 파일을 저장 하시면 됩니다.
yum/rpm 으로 설치한 환경과 source compile 한 환경 그리고 버전에 따른 conf 디렉토리의 이름이나 위치가 다릅니다.

yum/rpm 의 경우   /etc/httpd/conf.d   이 경로에 파일을 저장하면 되고 source compile 한 경우 conf 나 conf.d conf/extra 경로 등에 저장 하시면 됩니다.


[참고2] bot 차단 목록 관련

bot 차단 리스트에 보면 Baidu 와 Yandex Bot이 리스트에 있습니다.

SetEnvIfNoCase User-Agent "Baiduspider" bad_bot
SetEnvIfNoCase User-Agent "Yandex" bad_bot


중국 Search Engine 와 러시아의 Search Engine 입니다.
보통 차단되는 이유는 수집해가는 크롤링 양이 많아 과도한 트래픽을 사용하기 때문 입니다

차단하게 되면 트래픽이 그만큼 줄어들게 됩니다 하지만 반대로 사이트나 블로그의 목적이나 특성상 많이 노출이 되거나 다양한 검색 엔진에서 검색이 되어야 하는 부분이 더 중요하다면 해당 Search Engine 도 허용을 하는것을 고려해 봐야 합니다.

운영하는 사이트의 정책이나 트래픽 소모량 , 운영하시는 분들의 판단에 따라서 2개의 bot 이외에 차단을 허용하거나 혹은 더 막을 필요가 있는 bot 은 추가하여 사용하시면 됩니다.



httpd.conf 파일 수정

위에서 파일을 생성 하였다면 httpd.conf 파일을 수정 하여 virtualhost 마다 include 절 추가를 진행하도록 하겠습니다.

virtualhost 를 사용하는 환경에 따라서 vhost.conf 파일과 같이 별도의 virtualhost 가 설정된 파일을 수정하여도 됩니다.


각 virtualhost 마다 아래와 같이 directory 절에 내용을 추가합니다.

<Directory>
Include conf/extra/bad_bot.conf

<RequireAll>
Require all granted
Require not env bad_bot
</RequireAll>

</Directory>



1) Include

Include 는 <Directory> ~ </Directory> 절 사이에, <RequireAll> 위에 기술하면 됩니다.




2) Require not env bad_bot

<RequireAll> 절 안에서는 Require not env 를 이용하여 bad_bot 설정을 합니다.


Require not env bad_bot 에서 의 bad_bot 은 아래 정책에서 해당 정책을 의미 하게 됩니다.
SetEnvIfNoCase User-Agent "^MJ12bot" bad_bot

bad_bot 가 Require not env 로 되어있기 때문에 bad_bot 으로 정의된 User-Agent(봇)은 접속을 허용하지 않는 다는 의미가 됩니다.



Apache 재시작(reload)

여기 까지 파일 생성 및 conf 파일의 정책 추가가 완료 되었다면 Apache 를 재시작(또는 reload) 를 합니다.

systemctl reload httpd


또는

systemctl restart httpd


이후 차단이 정상적으로 되는 지를 로그에서 확인을 하면 됩니다.
        

Apache log 확인

설정한 내역대로 차단이 되게 되면 access 로그 와 error 로그 2곳에서 같이 로그가 기록 되게 됩니다.
(logging level 에 따라 내용이 조금 씩 다를 수는 있습니다)


#Access log

185.xxx.xxx.xxx - - [18/Sep/2020:00:52:47 +0900] "GET /index.php? HTTP/1.1" 403 - "-" "Mozilla/5.0 (compatible; SemrushBot/6~bl; +http://www.semrush.com/bot.html)" NL


# Error log
[client 185.xxx.xxx.xxx:2062] AH01630: client denied by server configuration


Access log 에 기록되더라도 error 403 으로 차단된 것임으로 설정상 문제가 없으며 정상적으로 이루어 지고 있다고 보시면 됩니다.


conclusion

위와 같이 파일을 별도로 생성 하여 사용하게 되면 장점은 아래와 같습니다.

1) 생성한 별도의 conf 파일에 대한 Include 여부(추가/제거) 를 통해서 각 virtualhost 별로 정책의 적용 및 제외를 손 쉽게 할 수 있습니다.

2) 정책의 변경에 따라서 봇이 추가 되거나 삭제가 되는 경우에도 별도로 생성한 conf 파일만 수정을 하게 되면 모든 virtualhost 가 같이 정책이 적용되기 때문에 많은 virtualhost 가 있는 경우 쉽게 정책의 전체 적용이 가능해 집니다.


첨부나 언급된 봇에 대해서는 운영 정책 등에 따라서 추가나 삭제를 해서 사용하시면 되고 리스트업된 목록이 절대적으로 무조건 차단해야 하는 봇은 아니며, 시기에 따라서 추가 되는 새로운 봇 엔진도 리스트에 추가 해서 갱신이 필요할 수도 있습니다.


연관된 다른 글

 

 

 



0
글에 대한 당신의 생각을 기다립니다. 댓글 의견 주세요!x