지나간다트랙백 스팸 iptables로 막기

서버에 트랙백 스팸이 몰려오니까 load가 치솟으면서 서버가 죽어버린다.

 

iptables 로 막으면서 근근히 버티고 있다.

recent 모듈을 이용해서 초당 몇번 이상의 접속을 알아서 막는 건.. 해봤는데 안된다. 아무 반응이 없다.

왜 그런지 모르겠다.

그래서 일일이 ip를 특정해서 막고 있다.

 

xe 트랙백 스팸 들어오는 걸 보니까

 

201.49.209.146 :- - - [21/Jun/2013:14:28:19 +0900] "POST /xe/index.php?mid=labor_board&document_srl=12659&act=trackback&key=24b HTTP/1.1" 200 147 "http://findcarinsurequotes.com/" "PHP/5.2.10"
201.49.209.146 :- - - [21/Jun/2013:14:28:19 +0900] "POST /xe/index.php?mid=......&act=trackback&key=24b HTTP/1.1" 200 147 "http://findcarinsurequotes.com/" "PHP/5.2.10"
 
이런 식으로 들어온다.
그래서 이런 쉘 스크립트를 하나 작성해서, 서버 부하가 올라갈 때마다 한번씩 실행시키고 있다.
 

#!/bin/bash

tail -n 2000 /usr/local/apache/logs/access_log | grep 'act=trackback&key' | awk '{print $1 }' | awk -F. '{print "/sbin/iptables -I INPUT -s "$1"."$2"."$3".0/24 -j DROP"}' | sort | uniq | sh -v

 

나중에 내가 기억 못할테니 적어놓으면,

아파치 로그 최근 2000개 중에, trackback을 요청하는 부분을 걸러내고, 그 중에서 1열(ip)만 걸러내고, 그걸로 iptables 명령어를 만들고, 정렬해서, 겹치는 ip 골라내고, 쉘로 실행하고, 결과는 보여달라.

 

운나쁘게 정상적으로 트랙백을 보낸 경우도 포함될 수 있겠지만, 그렇다면 1번 보내고 굳이 연달아 또 보내진 않을테니, 일단 차단시켜도 될 것 같다. 스팸 IP를 보니 매일매일 계속 바뀐다. 그러니 며칠에 한 번씩 차단 규칙을 삭제하면 될 듯 하다.

 

 

 

 

잘 모르겠는게,

테스트를 해보려고 

iptables -A INPUT -s 내 아이피 -j DROP

이렇게 했는데,

계속 접속이 된다.

iptables -I INPUT -s 내 아이피 -j DROP

이렇게 해야 차단된다.

-A 로 해도 적용되야할 것 같은데.. 왜 그럴까?

 

 

 

그냥 서버를 다시 설치하고 싶다 ㅠㅜㅠㅜ

뭔가 덕지덕지.. 어디에 손을 대야할지도 모르겠고.. ㅠㅜㅠㅜ

여름 지나서 좀 한가해지면, 서버 재설치 도전하겠어.

2013/06/21 14:56 2013/06/21 14:56

지나간다2013/06/05

다시 홈페이지 만들일이 하나 생겨서..

틈틈이 그 작업을 하고 있다.

 

당장 봉착한 큰 일은 데이터 이전.

처음엔 참 막막했는데, 몇번 하다보니 대충 감도 생기고..

못옮기는 데이터란 없다는 자신감도 생긴다 ㅋㅋ

 

하지만 역시 근거없는 자신감일 뿐,

여러번의 시행착오 끝에 얼추 옮겼는데.. 옮기지 못한 항목들이 있다.

 

Rankup 뉴스솔루션 데이터를 XE로 옮기는 작업이었는데,

zb4->xe 마이그레이션 툴을 수정해서 사용했다.

 

XML 제작 문제와 별개로,

XE 최신버전(1.7)에서는 댓글이 아예 옮겨지지 않는다.

그래서 XE를 1.5로 설치하고 데이터를 이전시켜야 한다. (XE 버전에 따라 마이그레이션이 안되는 건 문제 있는 거 아닌가? XE끼리도 마이그레이션을 해야할 경우가 있을텐데, 이럴 때 완전히 옮겨진다고 장담할 수 없는거잖아.)

 

확장변수는 마이그레이션 툴 소스를 수정해야만 옮겨진다.

(이것도 xe 어느 버전에서부터 이전이 안되는거라고 한다. 임시방편으로 '<key>값</key>' 이렇게 xml을 작성하는데, '<key></key>' 사이에 '<value>값</value>' 를 넣어주면 된다.)

수정해도 완전히 의도한대로 옮겨지지는 않았다.

왜 그런지 이해는 안되지만, 아무튼 옮겨졌으니까 패스.

 

혹시 참고할 사람들이 있을까 해서 사용한 소스를 올려놓는다. 나같은 삽질을 좀 덜하면 좋겠단 마음에 ㅠㅜ

 

두고두고 사용할 게 아닌지라 필요한 부분만 대충 수정해서 모양새가 좀 그런데, 사용에는 문제없다.

사용하려면 zb4 형식으로 config.php 파일을 작성해야 하고, db에는 zetyx_admin_table 을 만들어서 게시판 항목을 하나라도 만들어 놓아야 한다.

 

config.php 예제

<?

localhost

db id

db pass

db name

?>

 

zetyx_admin_table 테이블에는 no, name 필드를 만들고 아무 레코드나 입력해놓으면 되리라 생각한다. 해보진 않아서 확신은 없지만..

 

[rankmig.zip (36.72 KB) 다운받기]

2013/06/05 15:36 2013/06/05 15:36