댓글을 누구나 작성할 수 있게 했더니 달리는 댓글이라고는 스패머에 의한 광고밖에 달리지가 않는다.

 

방문자가 거의 없는 홈페이지지만 늘 소통을 갈구하고 있기에 spammer 때문에 댓글을 막는것보다는 스팸을 올리는 IP 를 차단하는게 나을 것 같다.

차단을 위해 iptables 을 사용할까 하다가 설정이 쉬운 apache httpd 의 access control 기능을 사용하기로 하고 그 절차를 정리해 둔다.

 

Spammer IP 정보 구하기

  1. apache log 를 확인해서 스팸을 남기는 IP 를 매번 분리해서 block 했으나 IP 가 자주 바뀌어서 효과가 없음
  2. googling 해보니 http://www.stopforumspam.com 이라는 사이트가 spammer IP 를 DB 화 해서 배포하는 것을 확인하고 여기에서 IP DB 를 받아서 사용

IP  DB 가공

  1. IP DB download(http://www.stopforumspam.com/downloads/bannedips.zip)
  2. 압축 해제

    # unzip bannedips.zip 
    Archive:  bannedips.zip
      inflating: bannedips.csv
    CODE
  3. 개행문자가 없이 , 로  IP 가 분리되어 있으므로  , 를  new line 으로 변환

    ## , 를 개행문자로 변환
    perl -p -e 's/,/\n/g' bannedips.csv  > blacklist-ip
    ## IP 앞에 DENY From 추가
    perl -p -e 's/^/Deny from /g' blacklist-ip > /etc/httpd/conf/blacklist
    BASH
  4. /etc/httpd/conf/httpd.conf 에 Location 및 Order Directive 설정 및 위에서 만든 DB 파일 설정

    <Location />
        Order allow,deny
        Allow from all
        # BlackList 는 Deny
        Include conf/blacklist
        # 계속 login 을 시도하는 IP 가 있다면 차단
        #Include conf/login-attacker
    </Location>
    BASH

     

    logon 을 시도하는 IP 가 있다면 Confluence access log 남기기 를 참고하여 log를 남기게 설정후 log에서 login.action 을 시도하는 IP 를 추출하여 conf/login-attacker 파일에 다음과 같이 남기면 된다.

    conf/login-attacker

    Deny from 1.2.3.4
    Deny from 2.1.4.7
    CODE
  5. httpd 재구동
    service httpd restart
    CODE
     

 

 

 

사전 정보

  1. confluence 의 코멘트를 다는 URL 은 doaddcomment.action 이다. httpd 의 log 파일에서 저 URL 만 추출해서 IP 를 추출하면 된다.

댓글 단 IP 가 모두 차단될 수 있으니 정상적인 IP 는 따로 걸러내야 한다.

설정

  1. conf/httpd.conf 에 Location 및 Order Directive 설정 ( 향후 스패머 IP 만 추가할 경우 이 작업은 더는 필요없다)

    <Location />
        Order allow,deny
        Allow from all
        # BlackList 는 Deny
        Include conf/blacklist
    </Location>
    BASH
  2. httpd log 에서 blacklist IP 추출 (중복된 IP 를 단일화하기 위해 sort 후 uniq 명령어 사용)

    access-log 파일명은 apache httpd 설정에 따라 다를수 있다.

    ## log 파일이 rolling 되었어도 기존 스패머 정보 보존을 위해 기존 blacklist 뒤에 append
    grep doaddcomment.action /etc/httpd/logs/kwiki-access_log|awk '{print "Deny from "$1}' | uniq >> /etc/httpd/conf/blacklist
    cp -f /etc/httpd/conf/blacklist /etc/httpd/conf/blacklist.org
    ## 추가된 IP 의 중복 제거
    cat /etc/httpd/conf/blacklist.org | sort | uniq > /etc/httpd/conf/blacklist
    BASH

     

    다음과 같이 blacklist 파일이 생성됨

    Deny from 1.2.3.4
    Deny from 11.33.22.11
    CODE
  3. httpd 재구동

    service httpd restart
    CODE

 

Ref