Erzsamatory Weblog


서버 단계에서 스팸 IP를 완벽하게 차단하는 방법


블로그나 홈페이지를 운영하는 사람이라면 누구나 경험하는 것이 있습니다. 그것은 바로 무분별하게 등록되는 스팸 댓글과 트랙백입니다. 특히 텍스트큐브 블로그 툴을 사용하고 있을 때에는 이와 같은 경험을 매우 많이 하게 됩니다. 소프트웨어적으로 막을 수 없는 대부분의 스팸 콘텐츠는 외국에서 등록되기 때문에 영어와 같은 외국어로 등록됩니다. 따라서 일부 운영자는 외국어 댓글이 달리지 않게 막기도 합니다. 그러나 이렇게 하는 경우에는 스팸이 아닌 것들까지 스팸으로 인식될 수 있기 때문에, 이 방법은 되도록이면 사용하지 않는 것이 좋습니다. 가장 효율적인 방법은 자주 스팸 콘텐츠를 등록하는 IP 주소를 서버에서 원천적으로 차단하는 방법입니다.


.htaccess 파일에 대한 소개


이 글에서 소개하는 서버 수준의 IP 차단 방법은 아파치 웹 서버에서만 사용할 수 있습니다. 왜냐하면 이 글에서 소개하는 방법은 .htaccess 파일을 기반으로 하기 때문입니다. 아파치 웹서버는 서버에 직접 설치되어 실행됩니다. 웹 서버 관리자는 아파치 웹 서버의 설정을 직접 수정할 수 있지만, 인터넷에서 웹 호스팅을 받는 고객은 직접 아파치 웹 서버의 설정을 변경할 수 없습니다. 왜냐하면 웹 호스팅 서버의 아파치 웹 서버의 설정을 변경하는 경우에는 해당 서버를 사용하는 고객의 서버 설정이 모두 변경되기 때문입니다. 따라서 한 고객의 서버 설정만 변경할 때에는 .htaccess 파일이 주로 사용됩니다. 이 파일을 사용하면 해당 웹 서버를 사용하는 모든 고객이 아니라 한 고객의 서버 설정만 부분적으로 바꿀 수 있습니다. 이 파일은 웹 호스팅 서비스에서 매우 자주 사용됩니다.

익스프레스엔진, 텍스트큐브, 워드프레스와 같은 대부분의 CMS에는 .htaccess 파일이 포함되어 있습니다. 이 파일을 이용하면 서버에 전달되는 값 자체를 변경시킬 수 있기 때문에 홈페이지의 주소를 간단하게 줄이는 등의 작업을 손쉽게 할 수 있습니다. 이 블로그의 웹주소를 보면 알겠지만 매우 간단하게 구성되어 있다는 것을 확인할 수 있을 것입니다. 이와 같은 기능이 바로 .htaccess 파일을 통해서 이루어집니다. 그리고 이러한 작업뿐만 아니라 아파치 웹서버의 설정을 간단하게 변경할 수도 있습니다. 이 글에서는 스팸 IP로 의심되는 컴퓨터의 접속을 차단하는 방법에 대해서 소개하겠습니다.

.htaccess 파일을 생성할 때에는 몇 가지 주의사항을 꼭 알아두어야 합니다. 이 글에서 설명하는 방법을 사용하기 전에 다음 내용을 꼭 숙지하시기 바랍니다.

.htaccess 파일을 생성할 때의 주의사항

1. 이 파일은 확장자만으로 이루어진 것이기 때문에 메모장과 같은 Windows 전용 텍스트 편집기에서는 일반적으로 생성할 수 없습니다. 따라서 아크로에디트, 울트라에디트와 같은 전문 텍스트 편집기를 이용하여 생성하는 것이 좋습니다.

2. 이 파일은 아파치 웹서버에서 직접 읽히는 것이기 때문에 한글을 사용할 수 없습니다. 따라서 UTF-8 인코딩을 사용할 필요는 없으며 만약 UTF-8 인코딩을 사용했을 경우에는 아파치 웹서버에서 이 파일을 인식하지 못하기 때문에 오류가 발생합니다.

3. 이 파일은 인터넷으로 보여지는 WWW의 최상위 디렉토리에 저장되어야 합니다. 이 파일이 저장된 디렉토리의 모든 하부 디렉토리에 영향을 미치기 때문에 최상위 디렉토리에 저장하는 것입니다. 만약, 하부 디렉토리에 저장하는 경우에는 해당 디렉토리에 속한 곳에만 영향을 미치게 됩니다.


특정 IP를 차단하는 방법


스팸 댓글이나 트랙백이 블로그에 등록되어 삭제를 해도 계속해서 등록되는 경우가 있습니다. 그리고 이와 같은 스팸 콘텐츠를 등록하는 스팸 클라이언트들 때문에 웹 호스팅을 하는 경우에는 자정이 되기도 전에 하루치의 트래픽을 모두 소진하기도 합니다. 그래서 다른 일반적인 사용자들이 본인의 블로그나 사이트에 접속을 못 하게 되는 최악의 상황이 발생하기도 합니다. 이와 같은 문제점을 완전하게 해결하기 위해서는 소프트웨어적인 방법이 아닌 하드웨어적인 방법을 사용해야 합니다. 바로 이 글에서 소개하는 방법이 PHP, ASP, JSP 와 같은 소프트웨어에서 처리하는 방법이 아닌 아파치 웹 서버를 이용하는 서버 차원에서의 방법입니다.

일반적으로 스팸 콘텐츠를 등록하는 클라이언트의 IP 주소는 정해져있습니다. 따라서 너무나 많은 스팸 콘텐츠를 등록하는 클라이언트가 발견되었을 때에는 다음과 같은 구문을 .htaccess 파일에 추가하여 해당 IP 주소를 원천적으로 차단할 수 있습니다. 이 방법을 사용하면 해당 IP는 스팸 클라이언트로 처리되어 서버에 접근하는 것 조차 불가능해집니다. 따라서 불필요한 트래픽 소비를 방지할 수 있습니다. 만약 웹 호스팅을 사용하고 있는데 매일 트래픽이 자주 차단된다면 이 방법을 사용해보는 것도 매우 좋은 방법입니다.

.htaccess 파일이 없으면 최상위 디렉토리에 파일을 새롭게 생성하고, 이미 이 파일이 존재한다면 가장 하단부에 아래의 내용을 추가하면 됩니다.

<Limit GET POST>
order allow,deny
deny from 210.111.3.55
deny from 5.100.65.200
allow from all
</Limit>


deny from 000.000.000.000 에 포함된 IP 주소를 제외한 모든 컴퓨터의 접속을 허용한다는 것을 의미합니다. 즉, 이곳에 입력된 모든 IP 주소를 차단한다는 것을 의미합니다. 이곳에 스팸 클라이언트의 IP 주소를 입력하면 됩니다.

여러 개의 IP 주소를 차단할 때에는 여러 개의 deny from 구문을 추가해주면 됩니다. 이렇게 함으로써 매우 효율적으로 스팸 클라이언트가 서버에 접근하는 것을 막을 수 있습니다. 하지만 이 방법은 티스토리와 같은 가입형 블로그에서는 사용할 수 없습니다. 이 방법은 .htaccess 파일을 이용할 수 있는 웹 호스팅이나 서버 호스팅에서만 사용할 수 있습니다.

광범위하게 스팸 IP를 차단하는 방법


그런데 스팸 콘텐츠를 등록하는 스팸 클라이언트가 일정한 IP 주소를 가지지 않고 있을 수도 있습니다. 왜냐하면 동적 IP를 사용하고 있거나 스팸 클라이언트임을 숨기기 위하여 IP 주소를 변경할 수 있기 때문입니다. 그렇다고 그 IP 주소가 완전히 다른 것은 아닙니다.

IP 주소는 네 개의 영역으로 구분되는데 맨 뒷 자리는 같은 컴퓨터에서 얼마든지 바꿔줄 수 있습니다. 따라서 스팸 IP 주소를 분석할 때 비슷한 IP 주소가 계속해서 나타날 때에는 다음과 같은 방법으로 해당되는 IP 주소 구역을 전부 차단할 수도 있습니다.

<Limit GET POST>
SetEnvIfNoCase REMOTE_ADDR "^(107\.|108\.|110\.|3\.)" filter
order allow,deny
deny from env=filter
allow from all
</Limit>


위의 방법은 filter라는 변수에 정규 표현식을 사용하여 일정한 패턴을 가지고 있는 모든 IP 주소를 차단하는 방법입니다. 정규 표현식은 PHP나 기타 웹프로그래밍 언어에서 사용하는 것과 같은 문법을 가지고 있기 때문에, 정규 표현식을 사용하는 것에 큰 어려움을 느끼지는 않을 것입니다. 이와 같은 방법은 일일이 여러 개의 IP 주소를 입력하지 않아도 되는 매우 큰 장점을 가지고 있습니다.

그러나 스팸 클라이언트가 아닌 IP가 스팸 IP로 분류될 수도 있으므로 이 방법은 되도록이면 사용하지 않거나, 해당되는 IP 주소 구역이 확실하게 스팸 클라이언트로 분류되어야 한다고 판단될 때에만 사용되어야 합니다.

REMOTE_ADDR은 아파치 웹서버에서 인식하는 클라이언트의 IP 주소를 의미하며 SetEnvIfNoCase는 환경변수를 설정하는 명령어입니다. 가장 마지막의 filter는 환경변수의 이름입니다. 위 문장을 .htaccess 파일의 마지막에 추가하면 107, 108, 110, 3 등으로 시작되는 모든 IP 주소를 차단하게 됩니다.
http://www.erzsamatory.net/trackback/15

건전한 댓글 문화를 만들어주시기 바랍니다 ^^
불건전한 댓글이 등록되는 경우 관리자의 임의적 판단으로 삭제될 수 있음을 미리 공지드립니다.

비밀글로 작성하기