평상시는 신경 못쓰다 최근 서버를 재정비하면서 에러 체크하는 과정에서 발견했습니다. Samrush Bot이라는 놈들인데, 멀쩡하게 검색 크롤러 같은 회사처럼 보이는데 하는 짓이 라이믹스 게시판과 회원 패스워드 크래킹에 엄청난 물량으로 쏟아내네요. 접근하는 링크가,

 

/index.php?act=dispMemberLoginForm ...

/index.php?act=dispMemberSignUpForm ...

/index.php?act=dispBoardWrite ...

/index.php?act=dispBoardDelete ...

 

이 4가지를 접속 ip를 계속 바꿔가며(185.191.171.1~185.191.171.255) 몇일동안 끊임업이 시도하고 있습니다. 해당 사이트 일부에 비회원이 임시로 패스워드를 넣고 글을 쓸수 있는 기능이 있는데 말이죠... 모듈에 여러가지 추가 보완을 해놓기는 했지만 저런식이면 장담 못할 상황...

 

하필 서버를 재설치하느라 임시 서버로 옮겨놓은 상황이고, 임시 서버가 위치한 해당 데이터센터 하드웨어단 파이어월 기능이 뭣 같아서 포트를 오픈하거나 클로즈는 되는데 특정 아이피 블럭킹 기능이 거시기하고, 임시 서버에 Ubuntu를 설치더니 내장 iptables 가 ip를 못 막아주더군요. 아래 명령어가 안먹힘...

 

% iptables -A INPUT -s 185.191.171.0/24 -j DROP

 

우선 Nginx 서비스에서 ip 접근은 막았지만 access log가 계속 증가하는 것은 못막더군요 ........ 하필 디버깅 중인데 다른 로그들을 볼수도 없게 만듬 ㅎㅎㅎ.

 

deny 185.191.171.0/24;

 

왜 안될까 한참 고민하다 찾은 것이 아래 iptables 명령은 먹힙니다 ㅎ.

 

% iptables -I INPUT -p tcp -s 185.191.171.0/24 -j DROP

 

여기저기 다 찾아봐도 다들 -A 로 하면 막힌다고 나와 있지만 -I로 줘야 합니다.   그 이유가, 웹 서버를 설치하면서 처음부터 당연히 443 포트를 열어 놨겠죠? 그런데, 나중에 공격 당한다고 특정 IP로 부터의 접속을 차단하려고 -A 를 써서  ip를 차단해봐야, 이미 443 포트를 제한없이 연 이후에 막겠다고 하는 것이라 먼저 실행된 "열겠다"라는 명령어에 우선권이 있어 나중에 "차단" 명령어는 효과가 없습니다.

 

따라서,  -I 옵션을 줘서 명령어 앞줄에 끼워 넣어 실행시켜야, 특정 ip를 먼저 막고 그 이후에 443 포트를 제한없이 열겠다는 뜻이 되어 효과가 있구요.

 

검색해봐도 이걸 설명해 주는 데가 없어 한참 고민했습니다.

 

아무트 검색해보니까 저 놈들 유명한것 같은데, 이글 읽는 분들도 아직 안하셨다면 저 ip는 파이어월단에서 차단해버리세요. 봇들이 사이트를 긁어가 트래픽을 높인다고 투덜대는 것은 봤어도 해킹을 시도하는 것은... 참내 분하네요...

 

참고로, CentOS에서는 iptables 대신에 firewall-cmd 명령을 씁니다.

 

(추가) 아래 분들 의견을 보고, 일단 추가 모니터링을 위해 일반 접속 log하고 bot 접속 로그를 분리했습니다. 다음과 같이 하니까 되네요.

 

/etc/nginx/conf.d/bot.conf 을 새로 만들어 다음을 추가하고 (추후 bot 이름에 따라 확장필요)

map $http_user_agent $log_include_ua{

    default 1;

    ~bot 0;

    ~crawler 0;

    ~Yahoo! 0;

    ~proximic 0;

    ~megaindex 0;

}

map $log_include_ua $log_exclude_ua{

    default 0;

    0 1;

}

/etc/nginx/sites-available/mydomain_abcd.conf (각자 사용하는 이름에 따라 달라짐)에 다음을 추가 했습니다. 

    access_log /var/log/nginx/access.log combined if=$log_include_ua;

    access_log /var/log/nginx/bot_access.log combined if=$log_exclude_ua;

 

그런 후 nginx 서비스 다시 시작 (systemctl reload nginx).... 일단 로그가 분리되네요. 

  • profile

    AhrefsBot BLEXBot DotBot SemrushBot Eyeotabot PetalBot MJ12bot brands-bot bbot

    제 서버 기준 여기까지 모조리 기본 차단 대상이고, 점점 늘어나고 있습니다.

     

    아이피는 죄다 찾기도 힘들고 언제든지 바뀔 수 있으니

    nginx에서 user-agent 기준으로 차단하고 해당부분 access_log off;로 해버리면 로그도 남지 않습니다.

  • profile profile

    말씀하신 봇들은 서비스단에서 막아둬야 겠네요.
    그런데 ... 지금은 신경쓰고 있으니까 괜찮은데 바쁠때는 한참을 신경 못쓰는데 걱정이 큽니다.
    3rd party api라도 설치해야 하나 고민도 해보고 있습니다.

  • profile
    제가 현재 막고 있는 봇 리스트 입니다.
    WordPress/
    AhrefsBo
    BLEXBot
    DotBot
    SemrushBot
    MegaIndex
    UCBrowser
    Mb2345Browser
    MicroMessenger
    LieBaoFast
    Headless
    netEstate
    newspaper
    Adsbot/3.1
    PetalBot
    MJ12bot


    https://rxtip.kr/free/2236
  • profile ?
    robot.txt 에 추가하면 되는가요?
  • ? profile
    아니오. 서버에서 차단하셔야 합니다. nginx, apache 차단하는 룰이 다르니 검색해보세요.
  • profile ?
    아 넵 감사합니다.
  • profile
    오호 요결 시스템설정 > 보안설정 > Robot User Agents 에 넣으면 되나요?
  • profile profile
    아마도 그럴수도 있을 것 같은데, 각자 사용환경이 다른것 같습니다. 웹호스팅이나 Plesk panel 같은걸 사용하신다면 매뉴얼을 참고해야 할수도 있겠네요.
  • profile

    대부분의 정상적인 봇들은 robots.txt에만 넣어도 존중해주더군요. Google이나 Bing에서 이미지 인덱싱 하는 것 disallow 해 놓으니까 그 다음부터는 안긁어 갑니다.

     

    만 하루가 지났으니 포기했나 궁금해서 ip 블락 풀어보니까 SemrushBot 이놈들 여전히 포기 안하고 그러고 있네요. 다시 막았습니다.

  • profile
    karma 님의 글도 있네요. 이거는 아파치 기준입니다.
    https://xetown.com/tips/1130812
  • profile profile
    좋은 정보네요. 귀찮은 봇들이야 각각의 웹 운영자님들 판단에 따라 다르겠지만, 악성인 놈들은 진짜 범죄 입니다.